jamesxuruo 发表于 2003-10-9 22:43:00

哈哈,这里面有提到到的,你自己找一找吧.

daemonx 发表于 2003-10-9 22:45:19

呵呵,对mm就是memory management
你的理解是对的

daemonx 发表于 2003-10-9 22:46:38

论坛里面提到的书我大部分都down了,没有这本

daemonx 发表于 2003-10-9 22:51:30

哦,知道了
understanding the linux kernel 2
有的有的,不知道中文这样翻译:)

jamesxuruo 发表于 2003-10-9 22:52:56

大家口口声声的说utlk就是了,这个应该看过吧,understanding the linux kernel,我看到很多遍了,到网上肯定能找到的

daemonx 发表于 2003-10-10 10:15:36

谢谢

wxlwxl 发表于 2004-1-5 23:55:21

我的理解:虚拟地址-》线性地址是由分段单元来管理的,线性地址-》物理地址是由分页单元管理的。

在linux中没有分段,虚拟地址也就是线性地址。

davidfox 发表于 2004-1-6 16:21:35

我在这里给大家说一下物理地址、虚拟地址、线性地址之间的联系:
物理地址是从cpu上引出的可以访问到实际设备那些地址线的大小范围,我还要补充的是有些设备本身就象内存片子一样占用物理地址空间,例如nvram设备等。
虚拟地址是操作系统提供的地址总线的宽度,是与操作系统相关的。
线性地址是cpu能访问的地址空间。
在linux中,物理地址和虚拟地址=线性地址是分开管理的,关于各自的管理方式我就不说了,我只说一个例子:
   假设某个进程中一段代码的虚拟地址是(2G---2.08G),现在执行2G+0.021处的一条指令,这样,虚拟地址就是2G+0.021,系统首先找到进程的页目录页和页表(不用我说怎么找到了吧)中对应处的项,具体方法如下:
   首先,从页目录页中找到相应的页表项,再判断此页表是不是在物理内存中,不在,调用缺页中断,调入,配置好此页表,在的时候转下面的步骤。
   此时,页表将在物理内存中了,而由虚拟地址对应的页表项中的相应位再判断此虚拟地址是不是在物理内存中了,不在,调用缺页中断,调入一个物理页,配置好。
   实际上,linux系统在调入进程时,根据进程的代码范围已经配好了页表的物理页,所以第一步是不需要的,我加上是为了大家清楚。比如某个进程只在1G和1.2G之间有代码,那么,系统将只把1G和1.2G之间的虚拟地址配置好它的页表项(把这些页表调入物理内存),同时,大家也就知道了为什么linux有vm_area_struct结构的含义了。
    大家再想,每个进程一个页目录表(每个页表项4个字节),1024个页表,每个页表4K,这样是不是是4G的虚拟地址。至于每个虚拟页在物理内存的何处,虚拟地址管理处是不关心的,就象贪官不关心老百姓的死活一样,那是物理地址管理处的事。

davidfox 发表于 2004-1-6 16:48:19

我的表达能力不好,大家不明白的请多多交流。上面所说的配置好是指从交换空间调入进程的代码到物理内存中等。

bierdaci 发表于 2004-2-10 00:11:45

我也插两句,经过编译的程序编译指定的是虚拟地址,从哪里开始我记不清了,反正不是从0开始,开头的一段是LINUX要插入的一段头信息。剩下的我就不用我说了你们都计论的差不多了
页: 1 [2]
查看完整版本: 物理地址、虚拟地址、线性地址之间的联系是什么?