配套教材:
Operating Systems: Three Easy Pieces Remzi H. Arpaci-Dusseau Andrea C. Arpaci-Dusseau Peter Reiher
参考书目:
1、计算机操作系统(第4版) 汤小丹 梁红兵 哲凤屏 汤子瀛 编著 西安电子科技大学出版社
在线阅读:
http://pages.cs.wisc.edu/~remzi/OSTEP/
University of Wisconsin Madison 教授 Remzi Arpaci-Dusseau 认为课本应该是免费的。
————————————————————————————————————————
这是专业必修课《操作系统原理》的复习指引。
需要掌握的概念在文档中以蓝色标识,并用可读性更好的字体显示 Linux 命令和代码。代码部分语法高亮。
文档下载地址:
链接:https://pan.baidu.com/s/1VrNaWopghd-81_qAawY2mQ
提取码:0000
五 分页
有时我们说,操作系统在内存空间管理上有两种方法:第一种是把空间切成变长的小片,例如分为不同大小的段。但这种方法容易因为段长不同而引起碎片。第二种方法则是分为固定大小的小片,称为分页(paging)。一页对应物理内存中的同样大小的一块空间,称为页帧(page frame),有时简称帧(frame)。
分页机制是虚拟地址机制的实现基础,使得为进程划分地址空间更高效,也使得管理空闲内存的流程更简化。
正确实现分页需要硬件和软件的配合。操作系统维护一张记录了所有的空闲内存页的空闲列表。此外,物理内存中还有页表(page table),存放逻辑页与物理页帧的对应关系。每个进程都有自己的页表,进程控制块(PCB)中存有指向页表的指针。
页表只能由操作系统修改,不能由用户修改。页表也可以放在属于操作系统的地址空间中。
在Linux的终端下输入命令:
getconf PAGE_SIZE
显示值:4096。Linux的页大小一般是4 KB。
在内存管理相关的信息中,不可能将每一个字节都精确记录下来,否则这些信息本身占用的空间就会远远超过内存的总空间,内存管理也就完全失去了实际意义。所以,必须将内存分成“一块一块”的结构进行整体管理。只按页及页之间的关系记录,记录量就少了非常多。
常见的页大小有4 KB、16 KB、32 KB和64 KB,有的嵌入式系统使用1 KB的页大小。
进行地址翻译时,虚拟地址被拆成两段:虚拟页号(virtual page number,VPN)和偏移(offset)。页大小是4 KB时,偏移就有12位(212 = 4096)。虚拟页号会被转换成物理页号(physical page number,PPN),又称物理帧号(physical frame number,PFN)或物理块号,偏移则不翻译。
分段的一个主要缺点是:将连续的地址空间分成了若干个块。在学习汇编语言和C / C++的过程中,相信大家深有体会:汇编语言中,对不同段的操作是比较麻烦的;而分页机制能够令编译器和程序员不用顾忌页号和页偏移。
页表可以很大。如果计算机中正在运行某个应用,其进程一共占用了1 GB的内存(事实上,使用较新的浏览器多开几个十多个网页,总的内存使用就可以轻松达到这个数),那么就有218页。页表项(page table entry)要记录哪些信息呢?
·首先是物理帧号。以Intel Core-i5 8400为例,物理地址开启了39位,就有27位来标识页帧。
·此外,需要1位有效位(valid bit)来刻画这个页是否有效(是否在内存中)。如果地址空间中的这个页未被使用(分配),它会被记无效。当尝试访问被标记为无效的页面时,就会触发陷阱指令,OS可能结束这个进程。用有效位来标记内存页还有另一个好处,就是无需将无效页与页帧建立关联,节省了内存并改善了性能。
·还有3位表示读、写、执行权限。它们称为保护位(p