操作系统中页表和多层页表的理解

首先如何理解程序访问的空间,存在CPU访问的地址空间-逻辑地址空间和真实的地址空间-物理地址空间,两者通过MMU进行映射和管理。逻辑地址是提供给用户程序的,对用户来说程序在逻辑地址上是连续的,能够更直观更方便的进行分配的观察,而在物理地址上的存储可能是相对分散的。

在龙书上讲了三种内存分配的方法,连续内存分配,分段和分页。分页又有常规页表、多层页表、哈希页表和倒置列表。这里我们主要关注页表和多层页表。

那页表是怎么工作的:首先看下面这个图,我们知道物理内存被固定大小的块,每块被称为帧(Frame)。在逻辑内存中,则划分为等大的块,每块被称为页(Page)。分配内存时,每块是分配时的最小单位,最少也要给一帧块。那在逻辑地址中连续的块在物理地址上就可能并不是连续存储的,这个时候就需要查找页表,那么就可以知道逻辑地址空间对应的物理地址空间。可以查看页表,由于页表天然是顺序存放的,那我们其实也可以把第一列省略,当我们需要知道逻辑地址空间第p块的对应的物理内存时候,我们就查找页表第p项的值就行了。<页号+页偏移>去寻找,这个应该是很好理解的。

操作系统中页表和多层页表的理解_第1张图片

 那分层页表的含义:我们知道页表其实也是存储在物理内存中的,如果页表的大小超过一个块的大小,那我们就不能一次访问,我们需要页表的页表,通过外层页表对内层页表查询。知道这段话,但是还是不理解,就请看下面这个例子。就简单易懂了。

操作系统中页表和多层页表的理解_第2张图片 

还有一个问题,每一个进程都有一个页表,但是从上面的来看,其实页表就是逻辑内存和物理内存的对应,那显然计算机整个逻辑内存只需要一个页表就够了,针对每个程序只需要知道自己对应的逻辑内存不久好了,为什么要每个进程都有一个页表呢?知乎上查的: “系统为每个进程建立一个页表,在进程逻辑地址空间中每一页,依次在页表中有一个表项,记录该页对应的物理块号.通过直找页表就可以很容易地找到该页在内存中的位置。页表具有逻辑地址到物理地址映射作用。”所以我的理解是我们上面说的页表,其实是一个进程的逻辑空间,而不是全局的逻辑地址空间;或者可以认为是一个逻辑地址空间,进程怎么工作,是一个理论概念,但是实际工作的时候,还是进程管理自己的逻辑空间这种。

最后,不会吧,不会吧,怎么过了一个学期有人连页表都不会了,一个简单的问题思考一上午也真的是没谁了.......

你可能感兴趣的:(课程学习,windows,linux)