《磁盘存储空间的管理十大题型]算法全实现》由会员分享,可在线阅读,更多相关《磁盘存储空间的管理十大题型]算法全实现(42页珍藏版)》请在金锄头文库上搜索。
1、0悄悄话第訂信息搜索那箱 左引用 谕回复2楼2004-12-3 16:53:18等级:新手上路,请多 关照文章:11积分:227注册:2004-12-1原创5.磁盘存储空间的管理十大题型算法全实现/*五磁盘存储空间的管理主要有:位示图和内存的位示差不多空闲块表 和可变内存管理差不多空闲块链 主要是UNIX成组链接法的设计与实现UNIX系统文件管理成组连接算法说明UNIX系统文件管理成组连接算法:把空闲块分成若干组,把指向一组中各空闲块的指针 集中一起。这样既可方便查找,又可减少为修改指针 而启动磁盘的次数。UNIX系统:采用空闲块成组连接的方法。UNIX系统把每100个空闲块作为一组,每一组的
2、第一 个空闲块中登记下一组空闲块的块号和空闲块数, 余下不足100块的那部分空闲块的块号及块数登记在 一个专用块中,登记最后一组块号的那个空闲块其中 第2个单元填“0”,表示该块中指出的块号是最后一组的块号,空闲块链 到此结束。系统初始化时先把专用块内容读到内存,当需分配空 闲块时,就直接在内存中可找到哪些块强障械模 糠 峙湟豢楹蟀芽障锌槭。但要把一组中的第一个空闲块分配出去之前应把登记 在该块中的下一组的块号及块数保存到专用块中。当一组空闲块被分配完后,则再把专用块的内容读到 内存,指出另一组可供分配的空闲块。当归还一块时, 只要把归还块的块号登记到当前组中且空闲块数加 1。如果当前组已满1
3、00块,则把内存中的内容写到归 还的那块中,该归还块作为新组的第一块。假设初始化时系统已把 专用块读入内存L单元开始的区域中,分配和回收的 算法如下:分配一个空闲块查L单元内容(空闲块数): 当空闲块数1 i =L+空闲块数; 从i单元得到一空闲块号; 把该块分配给申请者; 空闲块数减1。当空闲块数=1取出L+1单元内容(一组的第一块块 号或0);其值=0无空闲块,申请者等待 不等于零把该块内容复制到专用块; 该块分配给申请者;把专用块内容读到主存L开始的区域。 归还一块查L单元的空闲块数; 当空闲块数100空闲块数加1; j =L+空闲块数; 归还块号填入j单元。当空闲块数=100把主存中登
4、记的信息写入归还块 中;把归还块号填入L+1单元;将L单元置成1。采用成组连接后,分配回收磁盘块时均在内存中查找 和修改,只是在一组空闲块分配完或空闲的磁盘块构 成一组时才启动磁盘读写。比单块连接方式效率高。6月5日下午题是模拟UNIX的成组链接法的设计与实 现主要考的是利用文件输入一堆空闲块的号码,然后利 用UNIX的成组链接法的管理方法,按照10块成一组, 并且可以实现输入一个数字N,然后把N个空闲块占 用,输出专用块的大小,空闲号。如果专用块的空间 不够,把下一个成组的内容考入专用块。输出不要求写文件,但是要显示在屏幕上。本程序包括:UNIX的成组链接法的设计与实现VC+调试通过(C)c
5、opyright by Neo欢迎大家测试 请问题请Email: */#include#include#includecons t int MAXGR0UP=10;/定义组的大小cons t int MAXJ0B=100;/定义一个作业最大能申请 的块数/结构体定义typedef struct nodeint quantity;int cellMAXGROUP;struct node *next; group;typedef struct nodelchar name20; int quantity;int cellMAXJOB; struct nodel *next;job;group *h
6、ead; int total;job *jhead;/初始化组函数 group *initi al()int i;group *p;p=new group;p-quantity=O; p-next二NULL;for(i=0;icelli=-l;return p;/初始化作业函数 job *initi al_job()int i; job *p;p=new job;st rcpy(p-name,); p-quantity=0; p-next二NULL;for(i=0;icelli=-l;return p;/读入空闲块流文件 void readDa ta()FILE *fp;char fname2
7、0; int temp; group *p;coutfname;if(fp=fopen(5unix .txt,r)二二NULL)cout错误,文件打不开,请检查文件名:)endl;elsecout二二二二二二二二二二二二二二二二二二二二二二二二二二二二二二二二二二二二二 二=endl;cou t quantitycellhead-quantity二temp; head-quantity+;elsep=i niti al(); pnext二head; head二p;pcellpquantity二temp; pquantity+;total+;/输出初始数据 couttemp ;cou tendl
8、 总空闲块数: tot alendl;/查看专用块函数 void view()int i;cou t endl专用块数据如下:endl;coutendl;cout 所存储的空闲块号:; for(i=0;iquantity;i+) coutcelli ;coutendl专用块空闲块数为:quantit y;cou tendl 总空闲块数: tot alendl;/新申请函数void bid()char jobname20;int number;int i;job *p;coutendl;coutjobname;cou tnumber;if(number tot al)cou t 所需内存块数大于
9、当前空闲块数,请稍候再 试:)name,jobname);p-next二jhead-next; jhead-next二p;p-quantity二number;cou t所申请到的空闲块号流:; for(i=O;iqua ntity 1)coutcellhead-quantity-lquantity-;p-celli=head-cellhead-quantity-1; elsecoutcellOcelli=head-cellhead-quantity-1; head-quantity-;if(head-next!=NULL) head二headnext;total;coutendl;/撤消作业v
10、oid finish。char jobname20;int i;job *p,*q;group *r;coutjobname;q=jhead;p=jhead-next;while(p!二NULL) &(st rcmp(p-name,jobname)q=q-next;p=p-next;if(p=NULL)coutSorry,没有该作业endl;elsefor(i=0;iquantity;i+) if(head-quantitycellhead-quantity二p-celli; head-quantity+;elser=i niti al();rnext二head;head二r;rcellrqu
11、antity二p-celli;rquantity+;total+=pquantity;qnext二pnext;delete p;/显示版权信息函数 void version。coutendlendl;cout |1 endl;cout |模拟UNIX的成组链接法| endl;cout |1 endl;cout |(c)All Right Reserved Neo| endl;cout || endl;cout |version 2004 build 1122| endl;cout 11 endl;coutendlendl;void main()int f=1;int chioce;versio
12、n(); head二i niti al();total=0; jhead=i niti al_job();readDa ta();while(f=1)cout二二二二二二二二二二二二二二二二二二二二二二二二二二二二二二二二二二二二二 =endl;cout模拟UNIX的成组链接法endl;cout二二二二二二二二二二二二二二二二二二二二二二二二二二二二二二二二二二二二二 =endl;cout1.申请空闲块2.撤消作业3.查看专用 块 0.退出 endl;weishenme等级:新手上路,请多 关照文章:ii积分:227注册:2004-12-1楼第Q悄悄话 粒好友03信息.搜索邮箱 Q引用 谕回复3原创4.虚拟存储管理器的页面调度/十大题型算法全实现/*三、虚拟存储管理器的页面调度页面调度