在进行动态分配内存时,操作系统一般使用两种方式进行管理,位图和空闲链表。
image.png位图:
内存被划分为小到几个字或大到几千字节的分配单元。每个分配单位对应位图中的一位,0表空闲,1表占用。它有一个设计因素:分配单元越小,位图越大。
因为内存的大小和分配单元的大小决定了位图的大次奥,所以它提供了一种简单的内存区就能对内存使用情况进行记录的方法。 在决定把一个占k个分配单元的进程调入内存时,存储管理器必须搜索位图,在位图中找出有k个连续0的串。不过这个查找连续串是很耗时间的,这就是位图的缺点所在。
空闲链表。
维护一个记录已分配内存段和空闲内存段的链表。每个节点包含空闲区(H)或进程(P)标志、起始地址、长度和下一个节点的指针。
为这链表分配内存的有以下几种算法:
1、首次分配算法。
存储管理器沿着短链表进行搜索,直到找到一个足够大的空闲区,除非空闲区大小和分配的空间大小正好一样。否则将空闲区分为两部分,一部分给进程使用,另一部分形成新的空闲区。
2、下次适配算法
工作方式与首次分配算法类似,不同的地方是每次找到合适的空闲区都记录当时的位置。以便在下一次寻找空闲区时从上次结束的地方开始搜索,
3、最佳适配算法
搜索整个链表,找出能够容纳进程的最小的空闲区。
4、最差适配算法
总是分配最大的可用空闲区,使新的空闲区比较大从而可以继续使用。
5、快速适配算法
为那些常用大小的空闲区维护单独的链表。比如一个n项的表,第一项执行大小为4kb的空闲区链表表头指针,第二项指向8kb的空闲区链表表头指针。
网友评论