OS-李治军-L21-内存分区与分页
内存分区与分页
如何在内存中找出一段空闲的区域?如何分割内存?
简单点,固定分区,内存等分成K个分区。但是有问题,每个程序需要的段大小都不一样,这样造成浪费。
所以,一般采用可变分区,其核心结构是表,记录空闲的内存与已经分配的内存。

如果某次申请的时候,有两个分区都满足要求,那么应该pick谁?下面是三种策略

评价:
首先适配:运行快,O(1)的算法,产生现象随机。
最佳适配:O(n)的算法,容易产生很多小碎片,保留大碎片。
最差适配:不容易保留大碎片,每个碎片的大小趋于一致。
这些是对虚拟内存做的,而在实际物理内存当中分割,是采用分页来进行的。物理希望分页,用户希望分段。
可变分区会造成产生大量内存碎片的问题,明明大家挤一挤就容得下~,但挤一挤所花费的时间又很大,得找个法子。

切面包且得到的最后,有谁都不想要的碎末,明明可以喂得饱一个人。可以将面包切片,由连续变为离散,这样就不会产生碎片了。
如果一个页放到了页框(物理帧)中,也需要对页中地址做重定位,和段管理类似的是,页管理也采用基地址+偏移地址的形式,偏移地址由页表管理。
逻辑地址=Page(页号,用于在页表中找页框号) << 12 + Offset(12位,4k大小),mmu硬件完成这个转换,每个帧的物理大小是4K。
PCB中应该保持有页表的指针。


浙公网安备 33010602011771号