文章目录
- 前言
- 内存分区与分页
前言
一个本硕双非的小菜鸡,备战24年秋招,计划学习操作系统并完成6.0S81,加油!
本文总结自B站【哈工大】操作系统 李治军(全32讲)
老师课程讲的非常好,感谢
【哈工大】操作系统 李治军(全32讲)
内存分区与分页
内存怎么割?以便把程序的各个段载入到相应的内存分区
内存分区指的是划分的一段用于存储程序段(或代码段cs,或数据段ds)的内存空间
可变分区:段请求来了后查看空闲区域,看请求要多少就在空闲分区割一段
如何管理
- 空闲分区表:存储空闲的内存分区数据(或段释放后的内存空间列表);
- 已分配分区表:已使用的内存分区的记录信息;
- 注意:分区信息只需要记录 分区基址 和 长度 这两种信息
算法:
首先适配:(350, 150),挑选空闲分区表中第一条且分区空间足够大的分区来分配;空闲分区表查询 足够快;
最佳适配:(200, 50),内存空间浪费少,但空闲分区大小会越来越小,分割后产生的内存碎片比较多;
最差适配:(350, 150),挑选最大的分区进行分配,内存空间浪费多,但空闲分区大小比较均匀,内存碎片少;
操作系统为了让内存能够使用起来,将程序打成多个段。每个段要放在内存的不同空闲地方,所以就需要在内存中找到哪些地方是空闲的。为了找到空闲地方,需要:要维护空闲分区表和已分配分区表数据结构;给一个分配算法。
内存分区效率不高,实际采用内存分页操作来进行分配
内存分区在为了让段放入内存中需要割一个东西,物理内存采用分页割取(补充:虚拟内存是采用分区来分割或分配的)
内存分区导致存在大量内存碎片(可用的总内存大小大于申请的内存大小,但内存分区不连续,且每个分区小于申请大小,导致内存申请失败)
内存分页优点:
优点1:不存在内存碎片,因为中间的空闲页可以分配给其他进程;
优点2:内存浪费少:一个段最多浪费1页,即一个段最多浪费4K(一个段由多个页组成);
【小结】
物理内存采用分页进行分割和分配,减少了内存浪费,避免了内存碎片;
用户希望把程序分为多个段;
综上,操作系统需要既支持分段也支持分页对内存进行分割和分配;
需要建立页表存储页号与页框号映射关系,而找到页框号就可以计算出内存页基址;
一个段需要打散成很多页,这些页就放在内存中的空闲页框里,建立页表与PCB关联