最近在学习操作系统,看到页表时有点晕,不过看了如下资料后就比较清楚了:

一、页表结构

分页转换功能由驻留在内存中的表来描述,该表称为页表(page table),存放在物理地址空间中。页表可看做简单的220个物理地址数组。线性到物理地址的映射功能可以简单地看做进行数组查找。线性地址的高20位构成这个数组的索引值,用于选择对应页面的物理(基)地址。线性地址的低12位给出了页面中的偏移量,加上页面的基地址最终形成对应的物理地址。由于页面基地址对齐在4K边界上,因此页面基地址的低12位肯定是0。这意味着高20位的页面基地址和12位偏移量连接组合在一起就能得到对应的物理地址。

页表中每个页表项的大小为32位。由于只需要其中的20位来存放页面的物理基地址,因此剩下的12位可用于存放诸如页面是否存在等的属性信息。如果线性地址索引的页表项被标注为存在的,则表示该项有效,我们可以从中取得页面的物理地址。如果页表项中信息表明(说明、指明)页不存在,那么当访问对应物理页面时就会产生一个异常。

1.两级页表结构

页表含有220(1M)个表项,而每项占用4Byte。如果作为一个表来存放的话,它们最多将占用4MB的内存。因此为了减少内存占用量,80x86使用了两级表。由此,高20位线性地址到物理地址的转换也被分成两步来进行,每步使用(转换)其中的10bit。

第一级表称为页目录(page directory)。它被存放在1页4K页面中,具有210(1K)个4Byte长度的表项。这些表项指向对应的二级表。线性地址的最高10位(位31~22)用作一级表(页目录)中的索引值来选择210个二级表之一。

第二级表称为页表(page table),它的长度也是1个页面,最多含有1K个4B的表项。每个4B表项含有相关页面的20位物理基地址。二级页表使用线性地址中间10位(位 21~12)作为表项索引值,以获取含有页面20位物理基地址的表项。该20位页面物理基地址和线性地址中的低12位(页内偏移)组合在一起就得到了分页转换过程的输出值,即对应的最终物理地址。

图4-17给出了二级表的查找过程。其中CR3寄存器指定页目录表的基地址。线性地址的高10位用于索引这个页目录表,以获得指向相关第二级页表的指针。线性地址中间10位用于索引二级页表,以获得物理地址的高20位。线性地址的低12位直接作为物理地址低12位,从而组成一个完整的32位物理地址。

操作系统中的页表的结构相关推荐

  1. arm linux 页表寻址,操作系统中的页表寻址

    页式内存管理,内存分成固定长度的一个个页片.操作系统为每一个进程维护了一个从虚拟地址到物理地址的映射关系的数据结构,叫页表,页表的内容就是该进程的虚拟地址到物理地址的一个映射.页表中的每一项都记录了这 ...

  2. 操作系统中的名词解释

    1.说明现在操作系统的功能主要有哪些? 计算机系统的资源可分为设备资源和信息资源两大类.操作系统位于底层硬件与用户之间. 进程管理,其工作主要是进程调度,在单用户单任务的情况下,处理器仅为一个用户的一 ...

  3. 一步步编写操作系统 39 二级页表1

    前面讲述了页表的原理,并以一级页表做为原型讲述了地址转换过程.既然有了一级页表,为什么还要搞个二级页表呢?理由如下: 一级页表中最多可容纳1M(1048576)个页表项,每个页表项是4字节,如果页表项 ...

  4. 一步步编写操作系统 38 一级页表与虚拟地址3

    接上,页是地址空间的计量单位,并不是专属物理地址或线性地址,只要是4KB的地址空间都可以称为一页,所以线性地址的一页也要对应物理地址的一页.一页大小为4KB,这样一来,4GB地址空间被划分成4GB/4 ...

  5. 计算机科学的本质与操作系统中十条哲学原理

    这篇博文源于我在公司的一次技术分享 .没有涉及到具体的操作和原理的讲解,而是从更高一层哲学的抽象探讨的. 到了哲学层面的东西,看似很虚,但我认为它比具体的细节更加重要,所谓为学日益为道日损. 哲学是对 ...

  6. 操作系统中常见的调度算法

    文章目录 1. 进程调度算法 1. 先来先服务算法(FIFO) 2. 最短作业优先算法(SJF) 3. 最短完成时间优先算法(STCF) 4. 高响应比优先算法(Highest Response Ra ...

  7. 如何避免操作系统中多线程资源竞争的互斥与同步?

    作者 | 小林coding 来源 | 小林coding(ID:CodingLin) 前言 先来看看虚构的小故事 已经晚上 11 点了,程序员小明的双手还在键盘上飞舞着,眼神依然注视着的电脑屏幕. 没办 ...

  8. 一步步编写操作系统 36 一级页表与虚拟地址1

    为了给大家说清楚分页机制,我们先在宏观上说下cpu地址变换过程,先让大家有个直观的印象,如果有不明白的地方也不要着急,适时地不求甚解,有助于从全局上将知识融会贯通(这句话是我即兴说的,说得多好啊^^, ...

  9. 关于细分到字段的权限系统_操作系统中的细分

    关于细分到字段的权限系统 为什么需要细分? (Why Segmentation is required?) In the Operating System, an important drawback ...

最新文章

  1. python3 分割字符串(多分割符)
  2. SQL性能--left join和inner join的运行速度与效率
  3. 喜报!中华万年历签约神策数据
  4. 微博预计要火一阵的SleepSort之Shell及C实现
  5. 框架详解_详解:python Web框架flask表单实现(建议收藏)
  6. vue垂直布局_vue实现长图垂直居上 vue实现短图垂直居中
  7. RxJS + React hooks
  8. 队列的基本操作_算法设计:数据结构-队列
  9. 自学c语言中相关知识,设计出医院住院管理系统.要求如下所述:,C语言课程设计题Z目.doc...
  10. iOS 中的视图函数 init initwithnib viewDidLoad viewWillAppear的总结
  11. Linux中文件查找方法大全
  12. Atitit springboot mybatis spring 集成 Springboot1.4 mybatis3.4.6 /springbootMybatis 目录 1.1. 设置map
  13. 苏大计算机考研专业课,我的考研经历全纪录(苏大计算机)
  14. 个人第一次作业:阅读与准备作业
  15. 将C语言的字符串转为OC的字符串
  16. oa系统用什么云服务器,oa系统怎么选云服务器
  17. perforce p4v linux,Perforce p4v下载
  18. python做面板数据_用Python做数据分析的基本步骤(持续修改更新)
  19. DAP-seq技术在bHLH-zip转录因子SREBP调控灵芝中三萜类化合物和脂质代谢研究中的应用;2023年发表Communications Biology文章
  20. SpringBoot2.x系列教程03--新纪元之SpringBoot初相见

热门文章

  1. python实现去重_Python列表去重的4种实现方法
  2. mysql导出导入一张表
  3. Java实现 LeetCode 457 环形数组循环
  4. Qt实战项目:高精度表达式计算器Qt
  5. 前端上传文件,multipart-formdata,boundary的使用
  6. Non-Reflecting Boundary Conditions in OpenFOAM
  7. Python环境迁移
  8. Nmap扫描软件分析
  9. 上大学时做的linux上视频传输的程序
  10. 选择语句switch和循环语句while