一、课程设计题目
UNIX 成组链接策略的模拟实现
二、课程设计目的
通过模拟 UNIX 成组链接策略的实现,理解 UNIX 管理磁盘空闲空间的方
法
三、课程设计内容
实现 UNIX 管理磁盘空闲空间的方法——成组链接。
系统初始化时先把专用块内容读到内存,当需要分配空闲块时,就直接在内
存中可找到哪些块。但要把一组中的第一个空闲块分配出去之前应把登记在该
块中的下一组的块号及块数保存到专用块中。当一组空闲块被分配完后,则再
把专用块的内容读到内存,指出另一组可供分配的空闲块。当归还一块时,只
要把归还块的块号登记到当前组中且空闲块数加 1。如果当组已经满 100 块,则
把内存中的内容写到归还的那块中,该归还块作为新组的第一块。
本题目的简化假设是:
1、设磁盘空闲块现有 100 块,块号就是[0,99]。每组有 10 块,因此盘块号栈
容量也为 10。
2、申请和释放块的请求由自己随机产生(块数及假想的文件名),让你的程
序循环,发生 200 次请求,在前半期以申请块请求居多,在后半期以释放块请
求居多。
3、如果万一发生 100 块都用完的情况,就报告,且保存新产生的申请请求,
直到有新的释放请求发出。
4、每次请求完成后,列出本次请求的简要情况。全部请求完成后,列出现
在的磁盘空间状况(空闲或已分配给哪个“文件”)。
四、设计思路
1. 原理:将若干个(如 100)个空闲盘块规划在一个组,最后一组的空闲盘块
号存入系统文件资源表的空闲盘块号栈中,某一组的第一个空闲盘块中存放
上一组的所有空闲盘块号。按后进先出原则分配盘块。
2.
3.数据结构及各子程序:
(1)struct block //成组链接的数据结构 用链表来模拟组。
{
int a[10];
int num;
struct block *next;
} ;
(2)struct stack //堆栈的数据结构
{
int *base;
int *top;
int stacksize;
};
(3) struct block *creat(void) //创建 100 个编号 0~99 的块,10 块为一组
(4) void print(struct block * head)//打印块号
评论1