欢迎来到天天文库
浏览记录
ID:43985024
大小:129.74 KB
页数:10页
时间:2019-10-17
《Unix成组链接策略的模拟实现》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、一、课程设计题目UNIX成组链接策略的模拟实现二、课程设计目的通过模拟UNIX成组链接策略的实现,理解UNIX管理磁盘空闲空间的方法三、课程设计内容实现UNIX管理磁盘空闲空间的方法——成组链接。系统初始化时先把专用块内容读到内存,当需要分配空闲块时,就直接在内存屮可找到哪些块。但要把一组中的第-•个空闲块分配出去Z前应把登记在该块中的下一组的块号及块数保存到专用块中。当一组空闲块被分配完后,则再把专用块的内容读到内存,指出另一组可供分配的空闲块。当归还一块时,只要把归还块的块号登记到当前组中且空闲块数加1。如果当组已经满100块,则把内存屮的内容写到归还的那块屮,该归还
2、块作为新纟fl的第一块。木题£1的简化假设是:1、设磁盘空闲块现有100块,块号就是[0,99]o每组有10块,因此盘块号栈容量也为10o2、申请和释放块的请求由自己随机产生(块数及假想的文件名),让你的程序循环,发生200次请求,在前半期以申请块请求居多,在后半期以释放块请求居多。3、如果万一发生100块都用完的情况,就报告,且保存新产生的巾请请求,直到有新的释放请求发出。4、每次请求完成后,列出本次请求的简要情况。全部请求完成后,列出现在的磁盘空间状况(空闲或已分配给哪个“文件”)。四、设计思路1.原理:将若干个(如100)个空闲盘块规划在一个组,最后一组的空闲盘块号
3、存入系统文件资源表的空闲盘块号栈中,某一组的第一个空闲盘块中存放上一组的所有空闲盘块号。按后进先出原则分配盘块。2.3.数据结构及各子程序:(1)structblock〃成组链接的数据结构用链表来模拟组。{inta[10];intnum;structblock*next;};(2)structstack〃堆栈的数据结构{int*base;int*top;intstacksize;};(3)structblock*creat(void)〃创建100个编号0〜99的块,10块为一组(4)voidprint(structblock*head)//打印块号(5)structblo
4、ck*assign(structblock*head,structstack*s,intrecord]100],intfile[100][10],intn)分配块record[100]记录分配的文件Vfile[100][10]用來记录申请的文件号和申请到的块号n为分配块数(1)structblock*callback(structblock*head,structstack*s,intrecord[100],intfile[100][10J)回收函数(2)堆栈的儿个相关函数:voidinitstack(structstack*s)//栈的初始化voidpush(struc
5、tstack*s,inte)〃入栈intgettop(structstack*s)//获得栈顶元索intpop(structstack*s)〃出栈intjudge(structstack*s)〃判断栈是否为空voidtravelstack(structstack*s)//遍历栈五、课程设计总结与感想UNIX成组链接策略的模拟实现,为的就是能让我们理解UNIX管理磁盘空闲空间的方法——成组链接。所以这就要求我们一定要对这个课程有所一定的了解,然后通过编程模拟实现这个方法。分配:从栈瓦分配。栈中剰最后一块xBL从舷盘JBx的内容读入栈之后,再Ifix分配出去。IIIIIII压
6、容栈栈入把空闲盘块号可用!=>盘块数95100106109106103100tik636533120t507104301.f彳4197仃435#include#include#include#include#definestack_init_size100〃栈的初始化人小为100个单位#definestackincrement10structstack〃堆栈的数据结构{int*base;int*top;intstacksize;};structblock〃成组链接的数据结构{inta[10];int
7、num;structblock*next;};structblock*creat(void)〃创建100个编号0~99的块,10块为一组{structblock*head;structblock*pl,*p2;intn=100,i;intm=0;//记录块号0〜99pl=p2=(structblock*)malloc(sizeof(structblock));pl->num=m+4-;for(i=0;i<10;i++)pl->a[i]=0;head=NULL;while(n!=0){if(n==100)head=p1;else
此文档下载收益归作者所有