科技速递|linux内核页表映射机制:线性地址如何转为物理地址?( 二 )
我们刚刚讲过页目录表(一级页表)里保存的是1024个页目录表项 , 二级页表里保存的是1024个页表项 , 而且每个页目录表项和页表项的大小都是4个字节 。 那这些页目录表项和页表项的格式怎样的呢?
P-- 位0 , 是存在(Present)标志 , 用于指明表项对地址转换是否有效 。 P=1表示有效;P=0表示无效 。 在页转换过程中 , 如果说涉及的页目录或页表的表项无效 , 则会导致一个异常 。
R/W--位1 , 是读/写(Read/Write)标志 。 如果等于1 , 表示页面可以被读、写或执行 。 如果为0 , 表示页面只读或可执行 。 当处理器运行在超级用户特权级(级别0、1或2)时 , 则R/W位不起作用 。 页目录项中的R/W位对其所映射的所有页面起作用 。
U/S--位2是用户/超级用户(User/Supervisor)标志 。 如果为1 , 那么运行在任何特权级上的程序都可以访问该页面 。 如果为0 , 那么页面只能被运行在超级用户特权级(0、1或2)上的程序访问 。 页目录项中的U/S位对其所映射的所有页面起作用 。
A--位5是已访问(Accessed)标志 。 当处理器访问页表项映射的页面时 , 页表表项的这个标志就会被置为1 。 当处理器访问页目录表项映射的任何页面时 , 页目录表项的这个标志就会被置为1 。 处理器只负责设置该标志 , 操作系统可通过定期地复位该标志来统计页面的使用情况 。
D--位6是页面已被修改(Dirty)标志 。 当处理器对一个页面执行写操作时 , 就会设置对应页表表项的D标志 。 处理器并不会修改页目录项中的D标志 。
AVL--该字段保留专供程序使用 。 处理器不会修改这几位 , 以后的升级处理器也不会 。
高20位是物理地址页面的基地址 。
转换过程
cpu先将32位线性地址分为三段 , 高10位 , 中间10位 , 低12位 。
- 用高10位的值作为索引在页目录表里找到相应的页目录表项 , 页目录表项里记录了二级页表的物理地址
- 用中间10位的值作为索引在二级页表(步骤1得到了二级页表的物理地址)里找到相应的物理内存基地址 。
- 物理内存的基地址左移12位加上线性地址的低12位 , 就得到了最终的物理地址 。
在需要访问某一个页表或页面时 , 首先要检查P位 , 若P为1,表明该页表或页面存在于物理存储器中 , 则可以直接访问它们 。 若P为0,表明该页表或页面不在物理存储器中 , 这时分页机制将发出缺页中断信号 , 引起操作系统进入中断处理例程 , 把所需的页面从外存(比如磁盘)调入内存 。
需要指出 , 80x86处理器在P位为0时 , 对页表和页目录表的表项其它位不做任何解释 , 此时这些位可以由软件自行使用和解释 ,Linux就利用此特性 , 在其它位中存放该页面在交换空间的地址 。
当新页面调入物理内存时 , 若没有空闲的物理页面可用 , 需要从该进程占用的物理页面中选择某一页淘汰 , 选中某一页面淘汰时 , 需要检查D位 , 当D为1时 , 表明该页面已被修改过 , 需要把它写回外存 。 D=0时 , 表明该页面未曾修改 , 可以直接淘汰而不需写回外存 , 访问位A可以用于实现页面淘汰的有关算法 。
关注”技术简说“(13站同名) , 带你由浅入深学习linux内核源码 。 linux内核开发100讲免费教程 , 每天晚上9点准时更新 , 敬请收看 。 进我主页点”视频“栏目即可观看 。
推荐阅读
- 所持股份|万兴科技:公司控股股东、实际控制人吴太兵质押150万股
- 发布公告|数量过半!博创科技:天通股份累计减持约150万股
- 英雄科技聊数码|蔡崇信有实力买下篮网,那身价3200亿的马云,能买下几支NBA球队
- 科技前沿阵地|涨疯了!海思安防芯片遭哄抬“围剿”
- 月影浓|吴亦凡机械造型走秀 垫肩披风搭银框眼镜科技感足
- 中国历史发展过程|中国历史发展过程.中国的科技史界过去半个多世纪
- 天津|桂发祥:不再持有昆汀科技股份
- 消费|减持!天通股份:减持博创科技约32万股
- 处罚|老周侃股:吉鑫科技大股东应补偿踩雷投资者
- 华中科技大学|杯具!超本科线95分,本科有路不走,却梦幻般碰瓷,撞开专科的门
