学习日期:2024.6.24
内容摘要:简述段页式管理的原理
我们已经分别学习过了基本分段存储管理和基本分页存储管理,但它们各有优缺,本章我们介绍将二者综合应用的方法——段页式存储管理。
分段和分页的优缺点分析
分页:
空间利用率高,不会产生外部碎片,只会有少量的内部碎片(定义见《连续分配管理方式》)
但不方便按逻辑模块实现信息的共享和保护
分段:
方便按照逻辑模块实现信息的共享和保护,但如果段长过大,就需要为其分配很大的连续空间,违背了非连续存储管理的“初心”,且会产生外部碎片。
分段+分页=段页式存储管理
将进程按逻辑模块分段,再将各段分页,再将内存空间分为大小相同的页框(比如图中是4KB),将各页面装入页框中。
“按逻辑分段,按大小分页”
段页式管理的逻辑地址结构
基本结构
类似分段式,但由段号、页号、页内地址(页内偏移量)组成。
段号的位数决定了每个进程最多可以分多少个段,页号位数决定了每个段最大有多少页,页内偏移量决定了页框大小是多少。
和段式存储管理一样,分段对用户是可见的,程序员编程时需要显式的给出段号和段内地址,而分页是不可见的,系统会根据段内地址自动分页号和页内偏移量,因此段页式管理的地址结构是二维的。
段表和页表
每个段对应一个段表项,每个段表项由段号,页表长度、页表存放块号(页表起始地址)组成,每个段表项长度相等,段号是隐含的。(红字为与分段式存储管理的区别)
每个页面对应一个页表项,每个页表项由页号、页面存放的页框号组成,每个页表项长度相等,页号也是隐含的。(同分页存储管理的页表)
一个进程对应一个段表,但一个段表可能对应多个页表,因此一个进程可能对应多个页表。
段页式管理中的地址转换
①根据逻辑地址得到段号、页号、页内偏移量。
②判断段号是否越界,若段号S≥段表长度M,则产生越界中断,否则继续执行。
③查段表,找到对应的段表项,段表项的地址为:段表始址+S*段表项长度。
④检查页号是否越界,若页号≥页表长度,则产生越界中断,否则继续。
⑤根据页表存放块号和页号查页表,找到对应项。
⑥根据内存块号和页内偏移量得到最终物理地址。
⑦成功访问目标内存单元。
一共有三次访存,分别是查段表,查页表和访问最终内存单元。
同样可以引入快表,以段号和页号为关键字,引入后若快表命中只需要一次访存。
内容总结自王道计算机考研《操作系统》 和 人民邮电出版社《操作系统导论》