操作系统笔记-连续内存分配和非连续内存分配
假设现在你有一本固定页数的笔记本,你需要用它做课堂笔记。
连续与非连续内存分配概念
你可以选择将语文课的所有笔记按照顺序写在一起,将数学课的所有笔记按照顺序写在一起,这就是连续内存分配方式。
你也可以将语文课的笔记按照章节拆成几部分,数学同理,那么你可以先做语文课的某个章节笔记,接着做数学课某个章节的笔记,下一步继续做语文课其他章节的笔记,以此类推。这就是非连续内存分配方式。
分段的方式
你使用非连续方式进行记笔记,那么你需要预留出一页记录,记录哪些行记了数学章节的笔记,哪些行记了语文章节的笔记,其中语文或数学每个章节的笔记所占的行数有可能各不相同。
当你需要复习语文某个章节的笔记时,只需要查看预留页中该章节对应的具体行数范围即可找到相关的笔记。
这种方式就是内存分段,其中预留的一页记录就称为段表,查找方式借助硬件映射完成。
分页的方式
你觉得分段方式记笔记太复杂了,所以你将所有语文笔记分为占固定行数的条目,同时将笔记本也分为固定行数的块,其中语文和笔记本的固定块行数相等。和分段相同,你也预留了一页记录笔记的条目到笔记本条目的映射。
复习的时候你根据语文笔记的条目查找实际对应的笔记本条目。
这种方式称为内存分页,其中预留的一页称为页表,映射通过mmu硬件支持。
TLB-解决页表访问时间问题
你觉得每次去整个页中查找记录太麻烦,因此你将一些重点的条目对应关系重新写到了另一个页上,下次当你复习的时候如果是重点则可以直接在新页中找到。因为是重点,所以它的条目关系不多,而且会被经常访问。
这种方式称为TLB,简单的说就是通过空间换取遍历页表的时间,可以简单的将它理解为map结构。
多级页表-解决页表空间问题
随着时间的推移,在页表中写入的对应关系越来越多,整个空间都快不够用了。此时你通过观察发现,有些映射关系被重复记录了,这些重复的关系没必要每次都存储,记录之间存在着对应关系。通过思考你想到了使用书籍目录的方式存储这些关系,就像字典一样,A目录下包含了所有A开头的单词,如果你要查找的单词不是以A开头的,那么你可以直接过滤掉所有A的单词。
你将笔记本条目按照分页的方式又进行了多次分页,此时整个空间就如同书籍目录的方式存储数据了,可以大大减少所占的空间。
这种类似书籍目录的存储方式称为多级页表,通过这种方式可以将本需要m*n的空间容量缩小到m+n,进一步提升了空间利用率。
反向页表
每个进程都有一张相关的页表,当进程过多时这些页表占用的空间也会很大,反向页表提出了一种新思路,可以通过物理内存反向获取虚拟内存地址,那么操作系统中就只需要保存一份页表了,但是同时查询页表的时间也会相应增加。

浙公网安备 33010602011771号