操作系统(UNIX内核代码笔记之malloc.c 一)

本文通过分析UNIX版本6内核代码中的malloc.c,探讨了内存管理的首先适配算法。介绍了malloc函数的实现细节,包括如何找到足够大的空闲区并进行分配。文章鼓励读者尝试理解和修改这段代码,以实现最佳适配算法。
摘要由CSDN通过智能技术生成

 

暑期在校,每天看些数学和外语,得不到时间正经的写程序。恰好有莱昂氏的UNIX版本6的内核代码分析,考虑到学校从没有训练我们“阅读理解代码”的课程,就决定读下去。这一下子,发现这代码竟如诗句一般,简练而优美。不忍独享,也不知大家可有时间来细分辨这一行一行的“诗”,就想着间或拿出来一点,关系到算法而又不难懂的,与大家共同学习。

 

这次,我们看一看操作系统存储管理的部分内容。

内存的空间在分配给进程的时候,有几个算法可以为新创建或换进的进程分配空间。当然,我们假设存储管理程序知道要分配的内存大大小。

最简单的算法是首先适配算法(first fit)。存储管理程序沿着内存段链表搜索,直到找到第一个足够大的空闲区,除非空闲区大小和要分配的空间大小正好一样,否则将该区分为两个部分,把一部分分配给进程使用,另一部分仍是未分配区。

下次适配算法(next fit)是对首先适配算法的一个小小改动而来。它的工作方式与首先适配算法相同,不同的是,每次找到合适的空闲区时都记录当时的位置,下次寻找空闲区时就从上次结束的地方开始搜索,而不从头开始。

还有几个算法是常用的。一个是最佳适配算法(best fit),它找出恰好够用的最小的空闲区来分配。当然,如果每次找出够用的最大的空闲区,那就是另外一种算法了。还有一种,就是快速适配算法(quick fit),它给那些常用到的长度的空闲区设立单独的链表。

 

记得在学操作系统的时候,眼睛都是盯着后面的算法。想实际的操作系统中,使用的应该是它们吧?现在明白了,算法在于实用,简单高效才是最好。

我们看UNIX的内核代码,呵呵,看一看实际的操作系统之算法实现程序。

如下:

 

/*percy说明:

 *此文件乃 malloc.c ,主要过程为 malloc 和 mfree ,

 *以对存储资源进行管理。

 *编排方式遵照 莱昂氏UNIX版本6内核源代码 编排方式,

 *为原 2500行 至 2599行。

 *此次编辑器是VS.NET内置编辑器。

 *                               2003/8/15

 */

 

#

/*

 */

 

/*

 *Structrue of the coremap and swapmap

 *arrays.Consists of non-zero count

 *and base address of that many

 *contiguous units.

 *(The coremap unit is 64 bytes,

 *the swapmap unit is 512 bytes)

 *The addresses are increasing and

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值