江小南
2023/05/04阅读:35主题:萌绿
【操作系统】内存管理——两级页表、基本分段存储管理方式、段页式管理方式
1. 两级页表

1. 单级页表存在的问题
2. 如何解决单级页表的问题
问题一:页表必须连续存放,因此当页表很大时,需要占用很多个连续的页框。
方案:把页表再分页并离散存储,然后再建立一张页表记录页表各个部分的存放位置,称为页目录表,或称外层页表,或称顶层页表。
问题二:没必要让整个页表常驻内存,因为进程在一段时间内可能只需要访问某几个特定的页面。
方案:可以在需要访问页面时才把页面调入内存(虚拟内存技术)。可以在页表中增加一个标志,用于表示该页面是否已经调入内存。

3. 两级页表的原理、地址结构
32为逻辑地址空间,页表项大小为4B,页面大小为4KB,则页内地址占12位。
说明:这种方法其实就是将原来一个页表拆分成了多个页表,存放在不同的页框中,由于页面大小为4KB,即页框大小也不能超过4KB,所以页内地址占12位,两级页表每级最大占用10位。
4. 如何实现地址转换
-
按照地址结构将逻辑地址拆分成三部分。 -
从PCB中读出页目录表地址,再根据一级页号查页目录表,找到下一级页表在内存中的存放位置。 -
根据二级页号查二级页表,找到最终要访问的内存块号。 -
结合页内偏移量得到物理地址。
最终要访问的内存块号为4,该内存块的起始地址为4*4096=16384,页内偏移量为4095,最终的物理地址为16384+4095=20479。
说明:每个页面大小为4KB,即编号为0~4095之间。对上述例子中的二级页表项存放位置为3*4096+1*4=12292。
5. 几个细节
-
若分为两级页表后,页表依然很长,则可以采用更多级页表,一般来说各级页表的大小不能超过一个页面。

-
两级页表的访存次数分析(假设没有快表机构)
第一次访存:访问内存中的页目录表。
第二次访存:访问内存中的二级页表。
第三次访存:访问目标内存单元。
2. 基本分段式存储结构

1. 分段
进程的地址空间:按照程序自身的逻辑关系划分为若干个段,每个段都有一个短命(在低级语言中看,程序员使用段名来编程),每段从0开始编址。
内存分配规则:以段为单位进行分配,每个段在内存中占据连续空间,但各段时间可以不相邻。
由于是按逻辑功能模块划分,用户编程更方便,程序的可读性更高。
分段系统的逻辑地址结构由段号(段名)和段内地址(段内偏移量)所组成。如: 段号的位数决定了每个进程最多可以分几个段。段内地址位数决定了每个段的最大长度是多少。
2. 段表
程序分为多个段,各段离散地装入内存,为了保证程序能正常运行,就必须能从物理内存中找到各个逻辑段的存放位置。为此,需为每个进程建立一张段映射表,简称“段表”。
-
每个段对应一个段表项,其中记录了该段在内存中的起始位置(又称“基址”)和段的长度。 -
各个段表项的长度是相同的。 -
段号可以是隐含的,不占存储空间。
3. 地址变换
4. 分页、分段管理对比
页是信息的物理单位。分页的主要目的是为了实现离散分配,提高内存利用率。分页仅仅是系统管理上的需要,完全是系统行为,对用户是不可见的。
段是信息的逻辑单位。分段的主要目的是更好地满足用户需求。一个段通常包含着一组属于一个逻辑模块的信息。分段对用户是可见的,用户编程时需要显示地给出段名。
页的大小固定且由系统决定。段的长度却不固定,决定于用户编程的程序。
分页的用户进程地址空间是一维的,程序员只需给出一个记忆符即可表示一个地址。
分段的用户进程地址空间是二维的,程序员在标识一个地址时,既要给出段名,也要给出段内地址。

分段比分页更容易实现信息的共享与保护。不能被修改的代码称为纯代码或可重入代码(不属于临界资源),这样的代码是可以共享的。可修改的代码是不能共享的。例如生产者和消费者和消费者模型中的临界资源,做成分段的形式。 访问一个逻辑地址需要几次访存?
-
分页(单级页表):第一次访存——查内存中的页表,第二次访存——访问目标内存单元。总共两次访存。 -
分段:第一次访存——查内存中的段表,第二次访存——访问目标内存单元。总共需要两次访存。与分页系统类似,分段系统中也可以引入快表机制,将近期访问过的段表项放到快表中,这样可以少一次访存,加快地址变换速度。
3. 段页式管理方式

1. 分段、分页优缺点分析

2. 分段+分页=段页式管理

将进程按逻辑模块分段,在将各段分页(如每个页面4KB)。
再将内存空间分为大小相同的内存块/页框/页帧/物理块。
将各页面分别装入各内存块中。
3. 段页式管理的逻辑地址结构
段号的位数决定了每个进程最多可以分几个段。页号位数决定了每个段最大由多少页。页内偏移量决定了页面大小、内存块大小是多少。
4. 段表、页表

每个段对应一个段表项,每个段表项由段号、页表长度、页表存放块号(页表起始地址)组成。每个段表项长度相等,段号是隐含的。
每个页面对应一个页表项,每个页表项由页号、页面存放的内存块号组成。每个页表项长度相等,页号是隐含的。
4. 小结
作者介绍