上一篇文章学习了:保护模式九:段页式内存管理机制概述

本篇文章接着学习以下内容:

  • 页目录概念
  • 页表概念
  • 页目录、页表与页之间的关系
  • 虚拟地址(线性地址)到物理地址的具体变换过程。

1、页目录、页表和页的对应关系

第一个支持分页式内存管理的是Intel80386处理器。

我们知道,在上一篇文章学习的页映射表,是一个具有1048576个页表项的一维表格。又因为每个表项占4字节,所以,映射表的大小是4MB。是的,它很大!!!

为了解决这个占用内存过大的页映射表,分页机制采用了层次化的分页结构。具体实际上就是不采用单一的页映射表,而是将一个巨大的页映射表分成两个层次。如下图:

如上图,我们可以让一个页目录指向1024个页表。然后让这1024个页表中的页表项再指向所对应的物理内存空间的具体页。

  • 每个页表可以指向1024个页,因为每个页表项是4字节的,所以每个页表的大小是4KB,刚好是一个页面的大小。
  • 页目录可以指向1024个页表,同样也是4KB,刚好是一个页面的大小。
  • 因为页目录和页表都刚好是一个页面的大小,所以页目录和页表都可以被当成普通的页存放于物理内存的页中。
  • 注意,页在页表内的分布是随机的。老任务不停的关闭,新任务不停的开始,页面的回收和再分配没有什么规律可言。

以上的层次化结构是每个任务都有的。或者说,每个任务都有自己的页目录,页表。

如下图,在处理器内部有一个控制寄存器CR3,存放着当前任务页目录的物理地址。故又叫做页目录基址寄存器(PDBR)。

每个任务都有自己的任务状态段TSS。它是任务的标志性结构,存放了和任务相关的各种数据,其中就包括CR3寄存器域,存放了任务自己的页目录物理地址。

当任务切换时,处理器切换到新任务执行,而CR3寄存器的内容也要被更新,以指向新任务的页目录地址。相应的页目录又指向一个个页表,这就使得每个任务都只在自己的地址空间内运行。

从上图中可以看出,页目录和页表也是普通的物理页,混迹于全部的物理页中。它们和普通的页的唯一不同就是功能不同。当任务撤销后,它们和任务所占用的普通物理页一样会被回收,并分配给其他任务。

下面我们看一下在多任务环境下,页目录表和页表映射示意图:

需要注意的就是全局地址空间,所有的任务的页目录对应的全局地址空间的那些页目录项,都是一样的,因为所有任务共享全局地址空间。

2、虚拟地址(线性地址)到物理地址的具体变换过程

现在有了分页,最简单和最基本的机制就是:CR3寄存器给出了页目录的物理基地址;页目录给出了所有页表的物理地址;而每个页表给出了它所包含的页的物理地址。

上面该清楚的都清楚了,唯一不明白的是,应该如何使用这种层次化结构来把线性地址转换成物理地址。

如下图:

  • 假设现在段部件给出的线性地址是0x00801050
  • 处理器将段部件送过来的线性地址分成三段,高10位:中间10位:低12位。高10位用于索引页目录;中间10位用于索引页表;低12位则是页内偏移地址
  • 最终我们得到真实的物理地址0x0000C050。这就是处理器要访问的真实的物理地址

上述图示很清晰,我们这里不再赘述详细的转换过程。

我们唯一需要注意的是:这种变换不是无缘无故的。而是事先安排好的。这其实还是一个反过程:

  • 首先当任务加载时,操作系统先创建虚拟的内存段,并根据段地址的高20位决定它要用到哪些页目录项和页表项。
  • 然后寻找空闲的页,将原本应该写入段(因为是虚拟段,所以这里说原本)的数据,写到一个或者多个物理页中,并将页的物理地址填写到相应的页表中。
  • 只有这样提前将页表填好,在程序真正执行的时候,才能以相反的顺序,从页表中再取出之前填好的页的物理地址,去相应的物理内存中取指令执行或者找到相应的数据。
  • 这就是一个反过程。在上一篇文章中也有类似的过程。

3、总结

本文学习了:

  • 页目录、页表和页之间的关系
  • 虚拟地址(线性地址)到物理地址的转换过程

详细的内容还是要参考原书籍,这里只是做一个简单的总结。

学习探讨加个人:
qq:1126137994
微信:liu1126137994

【OS学习笔记】三十一 保护模式九:页目录、页表和页三者的关系详解相关推荐

  1. 【OS学习笔记】十七 保护模式五:保护模式下如何进行内存保护 与 别名段的意义与作用

    上一篇文章学习了如何进入保护模式,以及如何在保护模式下进行内存访问.点击链接查看上一篇文章:进入保护模式与在保护模式下访问内存 首先说明本片文章有对应的汇编代码,点击链接查看:点击查看 本篇文章接着学 ...

  2. 【OS学习笔记】十三 保护模式一:全局描述符表(GDT)

    上一篇文章,我们大致领略了现代处理器的结构和特点.点解链接查看上一篇文章:现代处理器的结构和特点 本篇文章开始,学习保护模式下的的各种机制.什么是保护模式呢? 一般来说,操作系统负责整个计算机软硬件的 ...

  3. 【OS学习笔记】十一 实模式:中断-软中断和硬中断基本原理

    上一篇文章我们模拟操作系统的加载器程序,使用汇编语言实现了一个程序加载器:点击链接查看上一篇文章:程序加载器的实现原理 本篇文章,是实模式学习的结尾.在经过了那么多坎坷,终于学完了8086的实模式!! ...

  4. 【OS学习笔记】三十三 保护模式九:分页机制对应的汇编代码之---用户程序代码

    本片文章是以下两篇文章: [OS学习笔记]三十 保护模式九:段页式内存管理机制概述 [OS学习笔记]三十一 保护模式九:页目录.页表和页三者的关系详解 对应的用户程序汇编代码. ;代码清单16-2;文 ...

  5. 【OS学习笔记】三十 保护模式九:段页式内存管理机制概述

    上几篇文章学习了任务切换相关知识,如下: [OS学习笔记]二十六 保护模式八:任务门-任务切换 [OS学习笔记]二十七 保护模式八:任务切换的方法之----jmp与call的区别以及任务的中断嵌套 今 ...

  6. 【OS学习笔记】六 实模式:编写主引导扇区代码

    上一篇文章学习了:计算机的启动过程(点击链接查看上一篇文章) 这篇文章学习记录为:编写主引导扇区代码. 参考:<X86汇编语言-从实模式到保护模式>-李忠.纯学习笔记,更详细内容请阅读正版 ...

  7. 学习笔记之-Kubernetes(K8S)介绍,集群环境搭建,Pod详解,Pod控制器详解,Service详解,数据存储,安全认证,DashBoard

    笔记来源于观看黑马程序员Kubernetes(K8S)教程 第一章 kubernetes介绍 应用部署方式演变 在部署应用程序的方式上,主要经历了三个时代: 传统部署:互联网早期,会直接将应用程序部署 ...

  8. 二、MySQL连接查询学习笔记(多表连接查询:内连接,外连接,交叉连接详解)

    MySQL连接查询(多表连接查询:内连接,外连接,交叉连接详解) 6:多表连接查询 笛卡尔乘积:如果连接条件省略或无效则会出现 解决办法:添加上连接条件 连接查询的分类: 1.按年代分类:1)sql ...

  9. TensorFlow学习笔记(二十四)自制TFRecord数据集 读取、显示及代码详解

    在跑通了官网的mnist和cifar10数据之后,笔者尝试着制作自己的数据集,并保存,读入,显示. TensorFlow可以支持cifar10的数据格式, 也提供了标准的TFRecord 格式,而关于 ...

最新文章

  1. 二叉树初始化_Java实现二叉树
  2. python在for循环中不能删除正在循环的列表(问题已解决)
  3. matlab打开界面模糊,如何在人机界面GUI的M文件中嵌入模糊FIS模块
  4. C++函数概念解析(1)
  5. 如何使用设计模式来构造系统--(7)
  6. IRCTC的完整形式是什么?
  7. 发帖回帖功能 java_百度贴吧发贴回贴POST接口
  8. 树堆(Treap)图文详解与实现
  9. tkinter 弹出窗口 传值回到 主窗口
  10. 此时不应有 \Common
  11. 什么是Meta分析?Meta分析是什么意思?以6篇高质量文献为例,吃透Meta分析基本概念
  12. linux mac 字体,Mac 和 Windows 的中文字体显示效果
  13. Ended a touch event which was not counted in trackedTouchCount (ReactNative RN开发时多点触摸滑动报错)
  14. 人脸表情识别和情绪分类 | Python+TensorFlow(框架)+Keras+PyQt5
  15. 虚幻引擎5.1现已发布!
  16. 计算机经典书籍- -
  17. 仿“真心祝福你”微信小程序源码
  18. 东莞蒙德服务器维修,蒙德驱动器变频器维修常见报警:OC1 OC2 OC3 OC4
  19. 计算机应用基础模块三项目二,计算机应用基础 高职计算机大类专业 刁爱军模块三 项目二 海报的制作.pptx...
  20. 【微信小程序】别踩白块源码免费分享

热门文章

  1. Qt C++ 命名空间namespaces讲解
  2. Python requests介绍之接口介绍
  3. C# WebApi POST 提交
  4. ZeroC ICE的远程调用框架 ASM与defaultServant,ServantLocator
  5. 送花(洛谷 2073)
  6. install kinect driver for ARM---38
  7. Java学习笔记2、环境变量配置与初学者常见错误
  8. 微软应提前发布专用于ARM处理器的Windows 8平板电脑系统
  9. ASP.NET MVC3 系列教程 - 部署你的WEB应用到IIS 6.0
  10. .NET C# I/O 操作