Chinaunix

标题: 关于固定映射的线性地址的疑问 [打印本页]

作者: vestige    时间: 2008-04-04 11:10
标题: 关于固定映射的线性地址的疑问
看ULK第二章 固定映射的线性地址时,发现这句话:

a fix-mapped linear address is a constant linear address like 0xffffc000 whose corresponding
physical address does not have to be the linear address minus 0xc000000.

难道内核线性地址到物理地址就只是减去0xc000000??
作者: qps104    时间: 2008-04-04 11:37
的确如此:em11: :em11:
作者: vestige    时间: 2008-04-04 11:56
这是只在内核启动阶段才有的情况还是任何时候都是这样?
要是这样我感觉分页就只有页表入口的标志位有用了……
作者: zx_wing    时间: 2008-04-04 16:46
原帖由 vestige 于 2008-4-4 11:56 发表
这是只在内核启动阶段才有的情况还是任何时候都是这样?
要是这样我感觉分页就只有页表入口的标志位有用了……

在你需要将内核虚拟地址转换成物理地址时都可以用。
这就叫identify mapping或者叫1:1 mapping,也就是虚拟地址到物理地址相差为一个固定的偏移。
作者: dengcainiao    时间: 2008-04-04 21:13
物理地址前896m即ZONE_DMA和ZONE_NORMAL区在内核地址空间可以有这种线性的一一映射。
作者: vestige    时间: 2008-04-05 21:07
标题: 回复 #5 dengcainiao 的帖子
也就是说ZONE_HIGHMEM 不能这样映射了?
作者: cleverd    时间: 2008-12-24 16:36
原帖由 vestige 于 2008-4-5 21:07 发表
也就是说ZONE_HIGHMEM 不能这样映射了?


好像是的,见http://www.mail-archive.com/kern ... x.org/msg03459.html
ZONE_HIGHMEM的要用fixe-mapped ……
作者: cleverd    时间: 2008-12-24 16:42
原帖由 vestige 于 2008-4-4 11:56 发表
这是只在内核启动阶段才有的情况还是任何时候都是这样?
要是这样我感觉分页就只有页表入口的标志位有用了……


ULK上有说明
  1. The identity mapping of the first megabytes of physical memory (8 MB in our example) built by the startup_32( ) function is required to complete the initialization phase of the kernel. When this mapping is no longer necessary, [color=Red]the kernel clears the corresponding page table entries [/color]by invoking the zap_low_mappings( ) function.
复制代码

作者: wqhl.mark    时间: 2008-12-25 12:07
标题: 回复 #1 vestige 的帖子
与CPU体系结构有关,没有一个固定说法滴
作者: embeddedlwp    时间: 2011-08-17 17:54
5楼正解
作者: anribras    时间: 2014-01-04 12:14
我觉得跟使用多大的内存有关。 当内存<896M时, 显然内核线性地址-0XC0000000就是物理地址了,当然内存>896时,也会可能是一样的,但要看内核把896M的物理内存的window选到哪了。如果是从0开始的,没问题,如果是从其他物理地址开始的,减去0xc0000000当然不对了,但是不管怎样,偏移值总是个常量。
作者: gacad    时间: 2014-01-05 13:09
0xc000000 保护模式系统逻辑地址
需要编程接口转换成物理地址

1100:0000:0000:0000:0000:0000:0000 转换 16机制地址
0C00:0000




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2