操作系统的存储管理
一、内存分配的过程
1.【单一连续分配】单用户、单进程
2.【固定分区分配】内存空间被划分位若干分区,每个分区只供一个程序使用
3.【动态分区分配】根据进程需要动态分配分区
①动态分区数据结构
①空闲表:给每一个分区标记状态
②空闲链:动态使链表的节点合并,并给每一个节点标记容量
②动态分区分配算法
①首次适应算法(FF):从开始顺序查找合适的分区,但此算法会导致头部地址空间不断的被划分
②最佳适应算法(BF):将空闲链表按容量大小进行排序,再从小到大进行顺序查找
③快速适应算法(QF):创建多个空闲链表,每一个空闲链表只存储一种容量的空闲区
二、内存回收的过程
1.【空闲区位于回收区前】将空闲区的容量增大至包含回收区
2.【回收区位于空闲区前】将回收区与空闲区合并,新的节点使用回收区的地址
3.【回收区位于空闲区A与空闲区B之间】将空闲区A、空闲区B和回收区合并,新的节点使用空闲区1的地址
4.【回收区周围没有空闲节点】创建空闲节点并插入链表
三、段页式存储管理
1.页式存储管理
将进程的逻辑空间分成若干大小的页面,再以页面为单位把进程空间装进物理内存块,以提高内存利用率。
页面大小一般为512B ~ 8K,页面大小若过大会导致无法分配,若过小会产生内存碎片(碎片指一个链表节点没有被利用的那一部分)
缺陷:如果有一段连续的逻辑分布在多个页面中,将大大降低执行效率
2.段式存储管理
将进程的逻辑空间划分为若干非等分的段,段的长度由连续逻辑的长度决定,可动态的满足实际需求。
3.段页式存储管理
先分段,再分页(先将进程的逻辑空间分成若干段,再将段内空间分成若干页)
四、虚拟内存
将暂时不使用的内存资源放置到磁盘,当程序访问的页面不存在的时候,发起页面置换。
1.置换算法
①先进先出算法(FIFO)
②最不经常使用算法(LFU)
③最近最少使用算法(LRU)
2.主存页面的替换时机
当主存缺页的时候发生替换