内存管理方式

一.对内存的分配与回收
二.从逻辑上对内存空间进行扩充
三.用户进程中的逻辑地址和物理内存中的物理地址进行高速转换

一.
1.连续分配管理方式
(1)单一连续分配(整个用户区都给用户进程使用)
优点是实现简单;无外部碎片(分配前用户进程以外的无法使用的内存空间);不一定需要内存保护
缺点是只能用于单用户、单任务OS;有内部碎片(分配的内存内部未使用完的空间);存储器利用率低
(2)固定分区分配(用户区分配固定大小的分区)
(分区说明表:记录各分区的分配与回收状态)
优点:无外部碎片,因为可以覆盖
缺点1:大程序可能要用到覆盖,覆盖技术降低性能
缺点2:内存利用率低,有内部碎片
(3)动态内存分配
(空闲分区表/链:记录各分区的分配与回收状态)
选择哪个分区给新进场?
首次适用算法(低地址开始找合适的,形成很多碎片空间)
最佳适应算法(分区容量递增排序:最小空闲空间,形成无法使用的极小空间,即外部碎片)
最坏适应算法(分区容量递减排序:最大连续空间,导致缺少大容量空间)
临近适应算法(从上次查找处向后找)

回收:回收后更新空闲分区表/链,注意相邻空间要合并

2.非连续分配管理方式(进程拆分成不同部分)
(1)基本分页存储管理方式
内存分成大小相等的分区:页框,OS以页框为基本单位分配内存
页表在PCB里,用页表记录每个块号和页号对应


低12位是偏移量,取高20位是页号
检查页号(有些模块还没加载到内存),避免越界中断

快表的工作机制是优先查快表(快表命中率要求不低于90%),快表查不到再查慢表
局部性原理:时间局部性-->多次访问同一个对象,将其同步到快表;空间局部性-->被访问过的相邻的对象有可能被访问

上面连续存放的页表占用大量连续空间,又因为进程特定时间内只访问部分页面,因此可以将页表分组/分页,又要建立页目录表管理离散页表,则此时得到物理地址的步骤:
从PCB中读取一级页表的起始地址,再查一级页表(页目录表),页号对应的块号存储这二级页表的地址,根据二级页号查内存块号,加偏移量计算物理地址

注:分成两个页表是为了离散存储,提高内存利用率。用户进程并没有把所有信息加载到内存,所以无论哪个页表都存在
这样一个问题:读取页表拿到的逻辑地址可能读不到对应的页表项,因为还没加载到内存,这时应该将外存的程序模块加入进来,这时会产生一个缺页中断,把外存的页加载进来

(2)基本分段存储管理方式(段内地址有可能越界,页内地址就不会越界)
按自己的逻辑将用户程序分段,得到段表

分页和分段方式对比:
1.分页强调的是物理上的单位,要进行内存的管理,为了提高内存利用率,分段是逻辑单位,是为了管理业务模块
2.根据页表计算出页号和偏移量,而分段的段号是程序员要自己给出的
3.分段更容易信息共享和保护

(3)段页存储管理方式

posted @ 2022-05-02 16:43  随笔小点  阅读(681)  评论(0)    收藏  举报