1.存储管理
1.确保足够内存
2.回收其他程序可以用
3.确保剩余的内存可以取出一段内存使用
2.单一连续分配(单用户,单进程使用)
1.系统区(系统使用)
2.用户区(用户使用)
3.固定分区分配
每个分区只给一个进程使用
4.动态分区分配
1.空闲表数据结构
0没有使用1已经使用
2.空闲链数据结构 双向链表
连续的空间就当成一个节点
3.动态分区分配算法
1.首次适应算法ff(循环适应算法是他的升级,由上次的尾部开始搜索)
从首部开始,找到空闲大小大于的的空间(但首部堆积)
2.最佳适应算法bf(找到最合适的内存大小)
会避免大材小用,对表从小到大排序
3.快速适应算法qf
要几个空闲表保存不同容量的区域
5.内存回收的过程
1.空闲区位于回收区上面 -->扩大空闲区
2.空闲区位于回收区在下面-->合并两个区作为一个节点
3.空闲区1 回收区 空闲区2-->合并3个节点 ,第一个区地址为这个节点地址
4. .... 空闲区 ... (已经满了) -->插入空闲区链表节点
6.段页式存储管理(管理进程的存储空间)
1.页式存储管理(字块[物理上]==页面[逻辑上] 相同大小)
1.页面过大难以分配,过小会产生碎片(等比例划分)
2.页面大小 512B-8K
3.页表是物理位置与逻辑的位置的表 ,页面 字块
4.多级页表 分子表
2.段式存储管理(非等分来分)
1.段号+基址(开始地址)+段长
3.区分
页表是一维的,段是二维的
页是物理单位.段是逻辑单位
页是由硬件决定的,段可动态变化
分页提高内存利用率,分段是根据用户需求的(可视化,可管理)
4.段页式存储管理(综合以上优点)(多个页面对应一个段)
段号+段内页号+页内地址 + 段表 +页表
7.虚拟内存(游戏内存大而实际内存小,却可以运行)(暂时放到磁盘里,需要放在内存中)
速度接近内存 成本接近辅存
8.程序的局部性原理(只能在局部访问和存取数据)
9.虚拟内存的置换算法
1.先进先出
2.最不经常使用算法
3.最近最少使用算法
4.主存(内存)替换的时机(缺页的时候)
10.buddy(伙伴)内存管理算法
1.基于2进制 效率高
2.处理内存(页)外碎片(没有分配出去,大小无法分配给进程的内存)
页内碎片(分配出去了,相当于没有被充分利用的东西)
3.内存分配原则 向上取整为2的幂的大小(申请更大的内存,就减少页外碎片)
70k-->128k
129k-->256k
4.伙伴 两个相邻就是
5.管理流程
分配: 100k
1.100取二幂 128k 如没有128k的内存
2.找到适合大小的内存块
3.大小适合,如 (其他的他的幂2不满足大小)1m的满足 则拆分这个内存块,到足够大 如128k
回收: 如上的逆过程
1.判断内存伙伴在空闲链表
2. 伙伴在链表上 合并 256-->512k-->1M
3.插入空闲链表
6.缺点内存外碎片变为内存内碎片
优点 提升了内存空间管理
11.swap交换空间(磁盘的一个分区)(内存满用这个)
1.作用
冷启动内存依赖(不使用的内存放在这)
系统睡眠依赖
大进程空间依赖
2.swap空间与虚拟内存区别
物理内存方面 进程内存方面