11 内存分区与分页

在第10节已经说到,程序是分段载入内存的,那么不同的段就要在内存中找不同的空闲地址,即将程序的各个段载入到相应的内存分区。直接的想法是有固定分区和可变分区两种。固定分区就是将内存等分成K个分区,然后将段插入到空闲的等分分区中去,但每个段的大小不一样,固定分区显然会造成空间浪费,因此采用可变分区比较合适,即段大小是多少就去分多大的空间。固定分区与可变分区如下图所示


一、可变分区的管理过程——核心数据结构
通过已分配分区表和空闲分区表两张表来记录分区使用情况。当有段请求时,空闲分区表将改变

如上图所示,原本内存中已分配了seg1和seg2,空闲分区从地址250k开始,大小为250K,现有一个100k大小的段请求,于是250k-350k被分配给了新请求段seg3,空闲分区还剩下150k.

同时由于进程可能被换入换出,所以内存中已分配的空间有可能被释放,因此空闲分区可能存在多段,如下图所示

那么当存在多个空间分区时,再来一个段提出内存请求,该选哪个呢


首先适配快,但其他分区就浪费类,最佳分配需要遍历内存
因此需要引入分页:解决内存分区导致的内存效率问题

可变分区多次分配以后就会形成内存碎片,当再来一个段请求大于每个单个空间空间时,就需要将内存合并:内存紧缩,内存紧缩需要花费大量时间

因此考虑再将每个段分成多页,内存也分成很多页,页是最小分配单位,这样每次分配段空间,最多浪费不超过一页,没有内存碎片

针对每个段请求,系统一页一页的分配给这个段
那么问题来了,像第10节一样,每个段在计算物理地址时需要查找段的基址,那么将段分成页后,计算物理地址需要查找页的基址,物理地址=页基址+逻辑地址。PCB中存在页表保存每个段的页分配信息。为了取分段的页,我们将内存的页叫作页框

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章