Bootstrap

操作系统面试:内存管理

目录

1 内存的连续分配

1.1 单一连续分配方式

1.2 固定分区分配

1.3 动态分区分配

2 内存的非连续分配

2.1 页式存储

2.1.1 基本概念

2.1.2 地址变换

2.1.3 分页管理方式存在的问题

2.1.4 具有快表的地址变换机构

2.1.5 二级页表

2.2 段式存储

2.2.1 基本概念

2.2.2 地址变换

2.2.3 段的共享

2.3 分页与分段的区别

2.4 段页式存储

2.4.1 基本概念

2.4.2 地址变换

3 虚拟内存

3.1 请求分页存储管理

3.1.1 地址变换

3.2 页面置换算法

3.3 页面抖动( 颠簸)

3.4 驻留集大小

3.5 调入页面的时机

3.6 从何处调入页面


1 内存的连续分配

1.1 单一连续分配方式

内存在此方式下分为系统区用户区

系统区仅提供给操作系统使用,通常在低地址部分

用户区是为用户提供的、除系统区之外的内存空间

优点:简单、无外部碎片,可以釆用覆盖技术,不需要额外的技术支持

缺点:只能用于单用户、单任务的操作系统中,有内部碎片,存储器的利用率极低

1.2 固定分区分配

固定分区分配是最简单的一种多道程序存储管理方式。

将用户内存空间划分为若干个固定大小的区域,每个分区只装入一道作业。

当有空闲分区时,便可以再从外存的后备作业队列中,选择适当大小的作业装入该分区,如此循环。

划分分区方法

  1. 分区大小相等
  2. 分区大小不等

存在的问题

  • 程序可能太大而放不进任何一个分区中,这时用户不得不使用覆盖技术来使用内存空间
  • 主存利用率低,当程序小于固定分区大小时,也占用了一个完整的内存分区空间,产生内部碎片

1.3 动态分区分配

又称为可变分区分配,这种分区方法不预先将内存划分,而是在进程装入内存时,根据进程的大小动态地建立分区,并使分区的大小正好适合进程的需要。因此系统中分区的大小和数目是可变的。

动态分区分配算法

首次适应(First Fit)算法:空闲分区以地址递增的次序链接。分配内存时顺序查找,找到大小能满足要求的第一个空闲分区

最佳适应(Best Fit)算法:空闲分区按容量递增形成分区链,找到第一个能满足要求的空闲分区。

最坏适应(Worst Fit)算法:又称最大适应(Largest Fit)算法,空闲分区以容量递减的次序链接。找到第一个能满足要求的空闲分区,也就是挑选出最大的分区。

临近适应算法(Next fit)算法:从当前位置开始,搜索第一个能满足进程要求的内存空间

 

动态分区的缺点

随着时间的推移,内存中会产生越来越多的外部碎片内存的利用率随之下降。

2 内存的非连续分配

2.1 页式存储

2.1.1 基本概念

基本思想:用户程序的地址空间被划分成若干固定大小的区域,称为“”,相应地,内存空间分成若干个物理块或页帧(Page Frame,页和块的大小相等。可将用户程序的任一页放在内存的任一块中,实现了离散分配:物理块不一定连续。每个页对应一个物理块。

逻辑地址结构:地址结构包含两部分:前一部分为页号P,后一部分为页内偏移量W。如果是32位地址,则0~11位为页内地址,即每页大小为4KB;12~31位为页号,地址空间最多允许有2^{20}

页表:因为程序数据存储在不同的页面中,而页面又离散的分布在内存中,因此需要一个页表来记录逻辑地址和实际存储地址之间的映射关系,以实现从页号到物理块号的映射

每个进程也以块为单位进行划分。每一个进程都拥有一个自己的页表,PCB表中有指针指向页表。

分页存储管理方式中,又根据运行作业时是否要把作业的所有页面都装入内存才能运行分为基本分页存储管理方式和请求分页存储管理方式。

2.1.2 地址变换

地址变换的任务是将逻辑地址转换为内存中物理地址,地址变换是借助于页表实现的

基本地址变换机构

当进程执行时,将页表始址和长度存入页表寄存器

设页大小为L(一般为4K),逻辑地址A物理地址E的变换过程如下:

  1. 计算页号P(P=A/L)和页内偏移量W (W=A%L),这里的P取整
  2. 比较页号P和页表长度M,若P >= M,则产生越界中断,否则继续执行
  3. 页表中页号P对应的页表项地址 = 页表起始地址F + 页号P * 页表项长度(一般为4B),取出该页表项内容b,即为物理块号
  4. 计算E=b*L+W,用得到的物理地址E去访问内存

以上整个地址变换过程均是由硬件自动完成的

2.1.3 分页管理方式存在的问题

  • 每次访存操作都需要进行逻辑地址到物理地址的转换,地址转换过程必须足够快,否则访存速度会降低
  • 每个进程引入了页表,用于存储映射机制,页表不能太大,否则
;