首页 园地图库文章列表留言下载
现在位置:首页 -> 网络科技 -> 上网指南
Linux操作系统功能概述8
作者:佚名 来源:mmkey.com搜集 更新日期:2004-10-1 阅读次数
文字 〖 自动滚屏(右键暂停)

5.4 创建和维护页表 文摘园地
请仔细弄清楚参与者的角色:是软件,也就是OS创建和维护页表,但是实际上是硬件使用页表来产生地址、检查页的位置情况、检查安全情况的。
OS产生一个新的进程时,它必须从内存中找到正确的页来分配给新进程的部分程序使用。它会为该进程创建页表,并在该表中记录页的位置(当然也会把那些没有装入内存中的程序在硬盘的位置记录下来)。
相应的硬件拥有一个名为页表寄存器(PTR)的特殊寄存器,用来指向当前进程的页表。当OS将该进程置于新的运行轮中,该进程会重新装载上一轮保存的PTR的值,使该进程的页表有效。 文摘园地
5.5
关于页表的使用细节 文摘园地
5.5.1
虚拟-物理 地址翻译,页表查询 文摘园地
每当运行的程序产生于一个地址时-—-无论该地址是指令地址还是数据地址-—-该地址都是虚拟的。它必须被转换成存储实际内容的物理地址。CPU中的轮循就被设计来完成该翻译,通过查询页表实现。
地址空间被分成页。为了方便起见,假设页大小为4096字节。对每个虚拟地址而言,虚拟页号等于该地址除以页大小,也就是4096,该页的偏移量等于该地址除以4096的余数。因为4096等于212次方,这意味着一个32位的虚拟地址,它的高20位构成页地址,低12位是偏移量。
参看下面的Intel指令: 文摘园地
movl $3
0x735bca62 文摘园地
该指令会将实数3拷贝至0x735bca62地址单元中(10进制就是1935395426)。也即说明了虚拟页号为0x735bc,偏移量为0xca62。也就是说,我们将把第一个字节写入0x735bc这一页的0xca62这个虚拟地址字空间中。
假设我们页表中的入口为32位,也即是每入口占据一个字单元。让我们来标明入口的031位,其中Bit 31处在最左边,Bit 0处在最右。假设入口的格式如下: 文摘园地
a. Bit 31 — Bit 12:
代表物理页地址如果Resident置位,如果Not置位,代表硬盘地址;
b. Bit 11 :
如果该位为1代表Resident置位,0代表Not置位;
c. Bit 10 :
如果为1,代表拥有读权限,0则相反;
d. Bit 9 :
如果为1,代表拥有写权限,0则相反;
e. Bit 8 :
如果为1,代表拥有执行权限,0则相反;
f. Bit 7 — Bit 0 :
一些其他信息,这里不会涉及。 文摘园地
那么,CPU处理上面哪条MOV指令会发生什么呢? 文摘园地
a.
首先,CPU发现该虚拟页地址为0x735bc后,会从页表中获得相应的入口,假设PTR的内容为0x256a1000,那么实际的位置将是0x735bc * 4 + 0x256a1000 = 0x2586e6f0。然后,CPU从该位置获取入口数据,假设是0xc2248eac
b.
然后CPU查看Bit 11-8位,获得0xe,知道该页Resident置位,并且该程序拥有读写权限但是没有可执行权限。该MOV指令的需要是获得写权限,由此看来没有问题。
c.
接着CPU查看Bit 31-12位,获得0xc2248,虚拟偏移量为之前确定的0xca62,因此,CPU会获知虚拟位置0x735bca62的物理地址为0xc2248a62CPU将该地址存入MAR(内存地址寄存器),将3放入MDR(内存数据寄存器),并且从总线中找出写入线,并将3写入0x2248a62这个地址单元中。至此我们就完成了相应任务。 文摘园地
顺便说一下,所有这都是为了完成该MOV指令的c步骤。步骤a也会去做相同的事情。PC指针会被分成两部分:虚拟页号和偏移量,虚拟页号作为页表的索引,然后将查看页表元素的10位和8位,以确定是否拥有读和执行该指令的权限;假设这些权限都是够的,那么物理页号会通过页表元素的3112位的值来确定;该物理号会和偏移量一起组成物理地址,该物理地址会被放入MAR,通过它获取相应的指令
上篇文章: Linux操作系统概述9
下篇文章:七夕礼物
相关文章:
没相关文章

版权所有:文摘园地;本站资料均由站长收集,如果有侵权,请立即来信留言告诉我们,以免损害您的权益,谢谢!
Copyright © 2004 文摘园地 http://wwww.mmkey.com All Rights Reserved Power by:HeadWind
粤ICP备05098767号