分区
固定分区(Fixed Partition)
最简单的内存分配方法之一就是将内存分为多个固定大小的分区,每个分区只能容纳一个进程。当一个分区空闲时,可以从输入队列中选择一个小于等于分区尺寸的进程调入到空闲分区。当进程终止时,其分区可以被其它进程所使用。
固定分区的好处在于实现简单、系统开销小,但是由于分区尺寸和数目固定,系统无法运行超过最大分区尺寸的大程序,使活动进程的数目受限。同时固定分区会产生内部碎片(internal fragmentation),存储利用率不高。
内部碎片的产生是由于无论进程的尺寸有多大,都会占用一个分区的空间,这样就会产生内部碎片。这部分内存在分区内,但又不能被其它进程所使用。
可变分区(Dynamic Partition)
当有新进程需要内存时,为该进程查找足够大的块,如果找到,则为其分配所需的内存。
这种方法属于动态存储分配问题,有三种最为常用的解决方法:
- 首次适应(first-fit):分配第一个足够大的块,每次查找从列表开头开始,一旦找到足够大的空间,就分配给进程。
- 最佳适应(best-fit):查找整个列表,分配最小的足够大的块。这使本次剩余块最小,但不保证长期外部碎片最少。
- 最差适应(worst-fit):查找整个列表,分配最大的块,使本次剩余块最大。
可变分区为进程分配了大小合适的分区,在理想的精确分配模型中消除了内部碎片,但是却产生了外部碎片(external fragmentation)。随着进程装入和移出内存,空闲内存空间被分为小片段。当所有总的可用内存之和可以满足请求,但没有足够大的连续空间时,就会产生外部碎片问题。
为了使外部碎片得到充分利用,利用紧凑技术(compaction)可以将内存中的所有空闲分区拼接成一个较大的空闲分区。即系统可以把内存中的所有可重定位进程移到内存的某一段,那么所有空闲分区将会移到内存的另一端。
互动实验
放置、释放与紧缩
访问权限PRO
PRO EXCLUSIVE探索不止于此
尊享 Pro 权益解锁完整互动实验、进阶解析与精选参考答案。
知识测验
题目
分散孔洞共空闲1700单位,最大孔洞600,连续700单位请求为什么失败?
动手练习
比较放置与搬动
五个空闲孔洞被已占用区隔开。每种策略都从这个布局重新开始。
H1
100
H2
500
H3
200
H4
300
H5
600
依次申请212417112426
- 分别使用首次、最佳、最坏适应。每次记录孔洞编号、分配前大小和剩余大小;放不下时注明失败。
- 原布局能放下700单位吗?比较总空闲和最大孔洞,再画出紧缩后的布局。
- 区分合并、紧缩和交换。128单位的固定分区装入100单位,内部浪费多少?
| 申请 | 孔洞编号 | 分配前 − 申请 | 剩余 |
|---|---|---|---|
| 212 | ? | ? | ? |
| 417 | ? | ? | ? |
| 112 | ? | ? | ? |
| 426 | ? | ? | ? |