当前位置首页 > 信息公告

linux内核页表映射机制:线性地址怎么转为化学地址?

更新时间:2023-11-03 文章作者:佚名 信息来源:网络整理 阅读次数:

关注“技术简说”(头条同名),带你由浅入深学习linux内核源码。linux内核开发100讲免费教程,每晚下午9点准时更新,敬请收看。进我主页点”视频“栏目即可观看。dIK物理好资源网(原物理ok网)

在后面《逻辑地址、虚拟地址、线性地址和化学地址大扫盲》一节我们谈到了:dIK物理好资源网(原物理ok网)

cpu在访问某个逻辑地址的数据的时侯须要先把这种逻辑地址转换为线性地址,之后再把线性地址转换为化学地址,这样能够真正的访问到相应的数据。而我们也提到了在linux系统中,逻辑地址跟线性地址是一致的(也可以理解成是相同的)。所以逻辑地址转换成化学地址,虽然就差一个环节了,那就是线性地址到化学地址的转换,那我们明天就来看这部份内容。dIK物理好资源网(原物理ok网)

Linux内核里把线性地址转换成化学地址是通过页表映射来实现的。页表映射具体还可以分为二级页表、三级页表等,而且原理是相同的逻辑地址和物理地址的转换,五级页表只是比二级页表多了一个中间转换环节而已。本文以二级页表的映射机制来做说明。原理图如下:dIK物理好资源网(原物理ok网)

二级页表映射机制dIK物理好资源网(原物理ok网)

名词解释:dIK物理好资源网(原物理ok网)

Page:页目录表,本文称作一级页表,表里的内容叫页目录表项。dIK物理好资源网(原物理ok网)

PageTable:页表,本文称作二级页表,表里的内容叫页表项。dIK物理好资源网(原物理ok网)

本文的讲解以32位系统为例,在32位系统中,线性地址宽度为32bits,总大小4G。dIK物理好资源网(原物理ok网)

线性地址的界定dIK物理好资源网(原物理ok网)

从上图可以看出,linux把32的线性地址界定成了3段:dIK物理好资源网(原物理ok网)

逻辑地址转换物理地址公式_逻辑地址和物理地址的转换_逻辑地址转化物理地址dIK物理好资源网(原物理ok网)

想想看:从线性地址经过2次查询加上1次汇总,是不是就得到相应的数学地址?dIK物理好资源网(原物理ok网)

线性地址到化学地址转换dIK物理好资源网(原物理ok网)

然而,这个时侯,你们对细节还是不太了解的,由于我们还不太清楚这个页目录表(Page)和页表(PageTable)里存的一条一条的都是哪些?dIK物理好资源网(原物理ok网)

页目录里表和页表dIK物理好资源网(原物理ok网)

我们刚才讲过页目录表(一级页表)里保存的是1024个页目录表项,二级页表里保存的是1024个页表项,但是每位页目录表项和页表项的大小都是4个字节。那这种页目录表项和页表项的格式如何的呢?dIK物理好资源网(原物理ok网)

P--位0,是存在()标志,用于指明表项对地址转换是否有效。P=1表示有效;P=0表示无效。在页转换过程中,假如说涉及的页目录或页表的表项无效,则会造成一个异常。dIK物理好资源网(原物理ok网)

R/W--位1,是读/写(Read/Write)标志。假如等于1,表示页面可以被读、写或执行。假如为0,表示页面只读或可执行。当处理器运行在超级用户特权级(级别0、1或2)时,则R/W位不起作用。页目录项中的R/W位对其所映射的所有页面起作用。dIK物理好资源网(原物理ok网)

U/S--位2是用户/超级用户(User/)标志。假如为1,这么运行在任何特权级上的程序都可以访问该页面。假如为0,这么页面只能被运行在超级用户特权级(0、1或2)上的程序访问。页目录项中的U/S位对其所映射的所有页面起作用。dIK物理好资源网(原物理ok网)

A--位5是已访问()标志。当处理器访问页表项映射的页面时,页表表项的这个标志都会被置为1。当处理器访问页目录表项映射的任何页面时,页目录表项的这个标志都会被置为1。处理器只负责设置该标志,操作系统可通过定期地复位该标志来统计页面的使用情况。dIK物理好资源网(原物理ok网)

D--位6是页面已被更改(Dirty)标志。当处理器对一个页面执行写操作时,才会设置对应页表表项的D标志。处理器并不会更改页目录项中的D标志。dIK物理好资源网(原物理ok网)

逻辑地址转换物理地址公式_逻辑地址和物理地址的转换_逻辑地址转化物理地址dIK物理好资源网(原物理ok网)

AVL--该数组保留特供程序使用。处理器不会更改这几位,之后的升级处理器也不会。dIK物理好资源网(原物理ok网)

高20位是化学地址页面的基地址。dIK物理好资源网(原物理ok网)

转换过程dIK物理好资源网(原物理ok网)

cpu先将32位线性地址分为三段,高10位,中间10位,低12位。dIK物理好资源网(原物理ok网)

用高10位的值作为索引在页目录表里找到相应的页目录表项,页目录表项里记录了二级页表的化学地址dIK物理好资源网(原物理ok网)

用中间10位的值作为索引在二级页表(步骤1得到了二级页表的化学地址)里找到相应的化学显存基地址。dIK物理好资源网(原物理ok网)

化学显存的基地址左移12位加上线性地址的低12位,就得到了最终的化学地址。dIK物理好资源网(原物理ok网)

缺页dIK物理好资源网(原物理ok网)

在须要访问某一个页表或页面时,首先要检测P位,若P为1,表明该页表或页面存在于化学储存器中,则可以直接访问它们。若P为0,表明该页表或页面不在化学储存器中,这时分页机制将发出缺页中断讯号,导致操作系统步入中断处理解释器,把所需的页面从外存(例如c盘)调入显存。dIK物理好资源网(原物理ok网)

须要强调,80x86处理器在P位为0时,对页表和页目录表的表项其它位不做任何解释,此时那些位可以由软件自行使用和解释,Linux就借助此特点,在其它位中储存该页面在交换空间的地址。dIK物理好资源网(原物理ok网)

当新页面调入化学显存时,若没有空闲的数学页面可用,须要从该进程占用的化学页面中选择某一页淘汰,选中某一页面淘汰时,须要检测D位,当D为1时,表明该页面已被更改过逻辑地址和物理地址的转换,须要把它写回外存。D=0时,表明该页面从未更改,可以直接淘汰而不需写回外存,访问位A可以用于实现页面淘汰的有关算法。dIK物理好资源网(原物理ok网)

关注“技术简说”(头条同名),带你由浅入深学习linux内核源码。linux内核开发100讲免费教程,每晚下午9点准时更新,敬请收看。进我主页点”视频“栏目即可观看。dIK物理好资源网(原物理ok网)

发表评论

统计代码放这里