一、存储管理的基本概念概念

1.逻辑地址与物理地址

  • 逻辑地址:相对于程序起始位置的偏移量,与实际内存没有联系
  • 物理地址(绝对地址):CPU执行指令或者访问数据时面向主存地址
  • 地址映射(重定位):逻辑地址修订为物理地址的过程(PA=VA+BA)

2.地址转换

地址转换又叫重定位,把逻辑地址转换为物理地址,有下面两种方式:

  • 静态重定位 (装入时转换,不能移动)
  • 动态重定位 (运行时转换)

二、连续分配管理方式

连续内存分配:一次性将程序装入连续的内存空间,分为以下三种:
在这里插入图片描述

1.单一连续分配

内存被分为系统区和用户区,内存中只能有一道用户程序,无外部碎片。
缺点:有内部碎片(分给进程的内存区域,有部分没用上),只能用在单任务操作系统。
在这里插入图片描述

2.固定分区分配

分区大小可以相等、也可以不相等。需要一个分区说明表,说明分区的占用情况以及大小。
在这里插入图片描述
在这里插入图片描述

3.可变分区分配

在这里插入图片描述

两种方法记录内存的使用情况:

在这里插入图片描述

动态分区分配算法(四种):

在这里插入图片描述

首次适应算法

分区按地址递增排列,比较好
在这里插入图片描述

最佳适应算法

分区按分区大小递增排列,每分配一个,要调整队列
在这里插入图片描述
在这里插入图片描述

最坏适应算法

分区按分区大小递减排序排列,每分配一个,要调整队列
在这里插入图片描述
在这里插入图片描述

邻近适应算法

分区按地址递增排列,比起首次适应算法,多加了从上次的索引位置开始往下查找
在这里插入图片描述
在这里插入图片描述

分区分配算法总结

在这里插入图片描述

例题

在这里插入图片描述
了解上述算法的思想以及分配方式即可解决此题。

在这里插入图片描述

分区的回收

把相邻的分区块合并在一块,可以多个合并在一起。

总结

在这里插入图片描述

三、非连续分配管理方式

在这里插入图片描述

1.基本分页存储管理

基本原理:程序(进程)分成大小相等的页(页面),内存分成和页相等的物理块(内存块、页框),以页为单位进行内存分配。
存储页面的数据结构:页表。

在这里插入图片描述
题目一般会省略内存块大小等于页面大小,所以要记好。
在这里插入图片描述
页号是可以隐藏的
在这里插入图片描述

实现地址的转换

在这里插入图片描述
在这里插入图片描述

小结论

逻辑地址为:页号+页内偏移量(页面大小为2的k次幂的话,后k位是页内偏移量)
物理地址为:内存块号+页内偏移量(根据页号查页表,将查出来的内容转化为二进制拼接即可)

在这里插入图片描述

逻辑地址结构
  • 页面大小<–>页内偏移量位数–>逻辑地址的结构
  • 给出页面大小就要知道内存块大小和其相等。
    在这里插入图片描述
总结

在这里插入图片描述

例题

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

快表

地址变换中,内存访问时间T=2内存访问时间(没有使用快表)
快表:经常访问页表项的集合,存放在Cache,命中率p
则:平均内存访问时间T = P
(访问快表的时间+访问内存的时间)+
(1-P)(访问快表的时间+2内存访问时间)


在这里插入图片描述

在这里插入图片描述

2.基本分段存储管理方式

分段相当于分页,段表相当于页表。

分段

在这里插入图片描述在这里插入图片描述

段表

在这里插入图片描述

地址变换

在这里插入图片描述

对比

在这里插入图片描述
在这里插入图片描述

总结

在这里插入图片描述

四、内存空间的扩充—虚拟内存

最大值由地址总线的宽度决定,实际值受内存和外存大小的限制

1.传统存储管理的缺点

在这里插入图片描述

2.局部性原理

在这里插入图片描述

3.虚拟内存的定义和特征

在这里插入图片描述
在这里插入图片描述

4.虚拟内存的实现

在这里插入图片描述

5.总结

在这里插入图片描述

五、请求分页存储管理

在这里插入图片描述

1.实现机制

在这里插入图片描述

2.缺页中断机构

在请求分页系统中,每当要访问的页面不存在时,便产生一个缺页中断。
在这里插入图片描述
在这里插入图片描述

3.地址变换

在这里插入图片描述

4.总结

在这里插入图片描述

六、页面置换算法

页面的换入、换出需要磁盘I/O,会有较大的开销,因此好的页面置换算法应该追求更少的缺页率。

1.最佳置换算法(OPT)

OPTimal replacement
每次选择淘汰的页面将是以后永不使用,或者在最长时间内不再被访问的页面,这样可以保证最低的缺页率。最佳置换算法可以保证最低的缺页率,但实际上,只有在进程执行的过程中才能知道接下来会访问到的是哪个页面。操作系统无法提前预判页面访问序列。因此,最佳置换算法是无法实现的。
在这里插入图片描述

2.先进先出置换算法(FIFO)

First In First Out
每次选择淘汰的页面是最早进入内存的页面,置换时,去除一个尾部的结点,在头处加上新添加的结点。
在这里插入图片描述
会产生Belady异常,算法性能比较差
在这里插入图片描述

3.最近最久未使用置换算法(LRU)

Least Recently Used,每次淘汰的页面是最近最久未使用的页面
在这里插入图片描述

4.时钟置换算法(CLOCK || NRU)

最近未用算法:Not Recently Used
页面构成一个循环队列,每个页面设置一个访问位,访问位为1,表示最近访问过,如果为0表示最近未被访问,可以替换该页面,最坏的一种情况,第一轮全是1,然后逐个变0,然后第二轮一定能替换掉某个页面。
在这里插入图片描述

5.改进型时钟置换算法(CLOCK)

在这里插入图片描述

6.总结

在这里插入图片描述

7.例题

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐