x86分页是如何工作的?

x86分页是如何工作的?

这个问题是为了填补关于这个问题的免费信息的空白。

我相信一个好的答案将适合于一个大的,所以答案,或至少在几个答案。

主要目标是给完整的初学者提供足够的信息,这样他们就可以自己掌握手册,并且能够理解与分页相关的基本OS概念。

建议的准则:

  • 答案应该是初学者友好的:
    • 具体的,但可能是简化的例子是非常重要的。
    • 欢迎应用上述概念。
  • 引用有用的资源是好的
  • 欢迎介绍OSS如何使用分页功能。
  • 欢迎Pae和PSE解释。
  • 欢迎进入x86_64的小版本

相关的问题,以及为什么我认为它们不是欺骗:


慕桂英4014372
浏览 654回答 2
2回答

猛跑小猪

以下是一个非常简短、高层次的答案:x86处理器以几种可能的模式之一工作(大致是:真实的、受保护的、64位的)。每种模式都可以使用几种可能的内存寻址模型中的一种(但不是每一种模式都可以使用每个模型),即:实模式寻址、分段寻址和平行线寻址。在现代世界中,只有保护模式或64位模式下的平坦线性寻址是相关的,这两种模式本质上是相同的,主要的区别是机器字的大小,因此内存的可寻址量。现在,内存寻址模式赋予机器指令的内存操作数(如mov DWORD PTR [eax], 25,存储32位(又名dword)将值25的整数放入内存中,该内存的地址存储在eax32位寄存器)。在平坦线性寻址中,这个数字在eax允许在一个连续的范围内运行,从零到最大值(在我们的例子中是2)。32−1)。然而,平坦的寻址可以是传呼或未传呼..在不分页的情况下,地址直接引用物理内存。带着分页,处理器的内存管理单元(或MMU)透明地为所需地址(现在称为虚拟地址)进入查找机制,即所谓的页表,并获得一个新值,该值被解释为物理地址。最初的操作现在运行在物理内存中的这个新的转换地址上,即使用户只看到虚拟地址。分页的主要好处是页表由操作系统管理。因此,操作系统可以任意修改和替换页面表,例如“切换任务”时。它可以保存一个完整的页表集合,每个“进程”一个,每当它决定某个特定进程要在给定的CPU上运行时,它就会将进程的页表加载到该CPU的MMU中(每个CPU都有自己的一组页表)。结果是每个进程都看到了自己的虚拟当操作系统不得不为其分配内存时,无论哪个物理页面是空闲的,地址空间看起来都是一样的。它永远不知道任何其他进程的内存,因为它不能直接访问物理内存。页表是嵌套的树状数据结构,存储在普通内存中,由操作系统编写,但由硬件直接读取,因此格式是固定的。通过设置一个特殊的CPU控制寄存器指向顶层表,它们将被“加载”到MMU中。CPU使用一个称为TLB的缓存来记住查找,因此对相同几个页面的重复访问比分散的访问要快得多,这是因为TLB丢失的原因以及通常的数据缓存原因。经常会看到术语“TLB条目”用于指页表条目,即使它们没有缓存在TLB中。如果您担心某个进程可能只是禁用分页或尝试修改页表:这是不允许的,因为x86实现了特权级别(称为“循环”),用户代码执行的权限级别太低,无法修改CPU的页表。
打开App,查看更多内容
随时随地看视频慕课网APP