好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

磁盘存储空间的管理十大题型]算法全实现.docx

42页
  • 卖家[上传人]:M****1
  • 文档编号:508586080
  • 上传时间:2023-12-15
  • 文档格式:DOCX
  • 文档大小:192.24KB
  • / 42 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 0悄悄话第訂信息 搜索 那箱 左引用 谕回复2楼2004-12-3 16:53:18☆☆☆☆☆等级:新手上路,请多 关照文章:11积分:227注册:2004-12-1[原创][5.磁盘存储空间的管理十大题型]算法全实现/*五磁盘存储空间的管理主要有:位示图和内存的位示差不多空闲块表 和可变内存管理差不多空闲块链 主要是UNIX成组链接法的设计与实现UNIX系统文件管理成组连接算法说明UNIX系统文件管理成组连接算法:把空闲块分成若干组,把指向一组中各空闲块的指针 集中一起这样既可方便查找,又可减少为修改指针 而启动磁盘的次数UNIX系统:采用空闲块成组连接的方法UNIX系统把每100个空闲块作为一组,每一组的第一 个空闲块中登记下一组空闲块的块号和空闲块数, 余下不足100块的那部分空闲块的块号及块数登记在 一个专用块中,登记最后一组块号的那个空闲块其中 第2个单元填“0”,表示该块中指出的块号是最后一组的块号,空闲块链 到此结束系统初始化时先把专用块内容读到内存,当需分配空 闲块时,就直接在内存中可找到哪些块强障械模 糠 峙湟豢楹蟀芽障锌槭但要把一组中的第一个空闲块分配出去之前应把登记 在该块中的下一组的块号及块数保存到专用块中。

      当一组空闲块被分配完后,则再把专用块的内容读到 内存,指出另一组可供分配的空闲块当归还一块时, 只要把归还块的块号登记到当前组中且空闲块数加 1如果当前组已满100块,则把内存中的内容写到归 还的那块中,该归还块作为新组的第一块假设初始化时系统已把 专用块读入内存L单元开始的区域中,分配和回收的 算法如下:分配一个空闲块查L单元内容(空闲块数): 当空闲块数1 i =L+空闲块数; 从i单元得到一空闲块号; 把该块分配给申请者; 空闲块数减1当空闲块数=1取出L+1单元内容(一组的第一块块 号或0);其值=0无空闲块,申请者等待 不等于零把该块内容复制到专用块; 该块分配给申请者;把专用块内容读到主存L开始的区域 归还一块查L单元的空闲块数; 当空闲块数100空闲块数加1; j =L+空闲块数; 归还块号填入j单元当空闲块数=100把主存中登记的信息写入归还块 中;把归还块号填入L+1单元;将L单元置成1采用成组连接后,分配回收磁盘块时均在内存中查找 和修改,只是在一组空闲块分配完或空闲的磁盘块构 成一组时才启动磁盘读写比单块连接方式效率高6月5日下午题是模拟UNIX的成组链接法的设计与实 现主要考的是利用文件输入一堆空闲块的号码,然后利 用UNIX的成组链接法的管理方法,按照10块成一组, 并且可以实现输入一个数字N,然后把N个空闲块占 用,输出专用块的大小,空闲号。

      如果专用块的空间 不够,把下一个成组的内容考入专用块输出不要求写文件,但是要显示在屏幕上本程序包括:UNIX的成组链接法的设计与实现VC++调试通过(C)copyright by Neo欢迎大家测试 请问题请Email:sony006@ */#include#include#includecons t int MAXGR0UP=10;//定义组的大小cons t int MAXJ0B=100;//定义一个作业最大能申请 的块数//结构体定义typedef struct node{int quantity;int cell[MAXGROUP];struct node *next; }group;typedef struct nodel{char name[20]; int quantity;int cell[MAXJOB]; struct nodel *next;}job;group *head; int total;job *jhead;//初始化组函数 group *initi al(){int i;group *p;p=new group;p->quantity=O; p->next二NULL;for(i=0;icell[i]=-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;icell[i]=-l;}return p;}//读入空闲块流文件 void readDa ta(){FILE *fp;char fname[20]; int temp; group *p;cout<〈〃请输入初始空闲块数据文件名:";cin>>fname;if((fp=fopen("5unix .txt〃,〃r〃))二二NULL){cout<<〃错误,文件打不开,请检查文件名:)〃<quantitycell[head->quantity]二temp; head->quantity++;}else{p=i niti al(); p—>next二head; head二p;p—>cell[p—>quantity]二temp; p—>quantity++;}total++;//输出初始数据 cout<quantity;i++){ cout<cell[i]<<〃 ";}cout<quantit y;cou t<>jobname;cou t<〈〃所需内存块数:〃; cin>>number;if(number> tot al){cou t< <"所需内存块数大于当前空闲块数,请稍候再 试:)"<name,jobname);p->next二jhead->next; jhead->next二p;p->quantity二number;cou t<〈〃所申请到的空闲块号流:〃; for(i=O;iqua ntity> 1){cout<cell[head->quantity-l]<<〃 〃; head->quantity--;p->cell[i]=head->cell[head->quantity-1]; } else{cout<cell[O]<<〃 "; p->cell[i]=head->cell[head->quantity-1]; head->quantity--;if(head->next!=NULL){ head二head—>next;}}total—;}}cout<

      {char jobname[20];int i;job *p,*q;group *r;cout<<"请输入要撤消的作业名:";cin>>jobname;q=jhead;p=jhead->next;while((p!二NULL) &&(st rcmp(p->name,jobname))){q=q->next;p=p->next;}if(p==NULL){cout<<"Sorry,没有该作业"<quantity;i++){ if(head->quantitycell[head->quantity]二p->cell[i]; head->quantity++;}else{r=i niti al();r—>next二head;head二r;r—>cell[r—>quantity]二p->cell[i];r—>quantity++;}}total+=p—>quantity;q—>next二p—>next;delete p;}}//显示版权信息函数 void version{cout<

      点击阅读更多内容
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.