模拟文件资料存储空间管理系统.docx
- 文档编号:11379000
- 上传时间:2023-02-28
- 格式:DOCX
- 页数:12
- 大小:171.14KB
模拟文件资料存储空间管理系统.docx
《模拟文件资料存储空间管理系统.docx》由会员分享,可在线阅读,更多相关《模拟文件资料存储空间管理系统.docx(12页珍藏版)》请在冰豆网上搜索。
模拟文件资料存储空间管理系统
实验三模拟文件存储空间管理
1.内容:
模拟文件存储空间的管理,采用空白文件目录法和空白块链法实施空间分配。
2.思想:
文件存储空间管理是文件系统的重要内容。
常用的管理思想有空白文件目录法、空白块链法和位示图法。
本实验采用前两种方法进行空间分配。
(1)空白文件目录法进行空间分配时,需要建立相关的数据结构,记录目前空白区域和已使用区域,假设开始时全部区域空闲。
当有文件需要存储时,先检查空白文件目录,找到适合区域立即分配,并修改空白文件目录表和已使用区域分配表。
为此需建立两张表格,分别记录相关数据。
空白文件目录表(初始)
序号
首空白块号
空白快个数
物理块号
备注
1
0
100
0,1,2,……,98,99
空白文件目录(中间)
序号
首空白块号
空白块个数
物理块号
标志
1
2
4
2,3,4,5
未分配
2
9
3
9,10,11
未分配
3
25
5
25,26,27,28,29
未分配
4
39
2
39,40
未分配
5
……
……
……
未分配
文件标识
首块号
文件块个数
状态
备注
beta
0
2
占用
Alpha
6
3
占用
Toyota
12
13
占用
Sony
30
9
占用
Ford
50
4
占用
……
……
……
……
已使用区域表(中间)
上述两张表的数据在系统运行中是发生变化的。
文件空闲区分配和释放算法如下图所示:
图一文件空闲区分配算法
图二文件空闲区回收算法
(2)空白块链法进行空间分配时,需要建立链表数据结构,将空闲块按顺序加以组织,分配和回收时在链首完成,同时建立文件目录,记录文件占用空间情况。
文件标识
首块号
备注
beta
0
Alpha
6
Toyota
12
Sony
30
Ford
50
……
……
3.要求:
(1)自拟模拟数据演示运行结果(假定系统可用空闲块数为100)。
为便于检查,建立和删除文件顺序如下:
分配文件:
F1,3
分配文件:
F2,5
分配文件:
F3,3
分配文件:
F4,8
分配文件:
F5,4
分配文件:
F6,2
删除文件:
F1
删除文件:
F2
分配文件:
F7,6
删除文件:
F3
分配文件:
F8,4
删除文件:
F5
分配文件:
F9,4
……
每完成一个文件的分配和删除后,显示空白文件目录当前内容。
(2)空白文件目录法必须完成,空白块链法选做。
4.书写实验报告:
①实验题目;
②程序中所用的数据结构及说明;
③源程序并附上必要的说明;
④按照文件的创建和删除顺序,打印输出结果。
一、实验步骤
#include
#include
usingnamespacestd;
structAllocatedSpace//已分配内存空间结构体
{
intstart_address;
intlength;
charjob;
structAllocatedSpace*next;
};
structFreeSpace//未分配内存空间结构体
{
intstart_address;
intlength;
structFreeSpace*next;
};
structAllocatedSpace*allocated_header;
structFreeSpace*free_header;
structFreeSpace*freenext;
voidallocatememory()//分配内存函数
{
charjobname;
intjoblength;
intmin,l=0;
cout<<"请输入作业名(一个字母):
\n";
cin>>jobname;
cout<<"请输入作业长度(整数):
\n";
cin>>joblength;
structFreeSpace*w=free_header;
structFreeSpace*p=free_header;//指向第一个可以分配的空闲结点
p=p->next;
structFreeSpace*s=free_header;//指向p的前一个结点
structAllocatedSpace*t=allocated_header;
while(p->length { p=p->next; if(p==NULL) break; } if(p==NULL) cout<<"无法分配! \n"; else { w=p; min=p->length-joblength; while(p! =NULL)//现在p指向当前要被切割的结点 { if(p->length>joblength) l=p->length-joblength; if(l { w=p; min=l; } p=p->next; } structAllocatedSpace*q=newAllocatedSpace; q->job=jobname; q->length=joblength; q->start_address=w->start_address; while(t->next! =NULL) t=t->next; q->next=t->next; t->next=q; while(s->next! =w) s=s->next; if(w->length==q->length) { s->next=w->next; deletew; } else { w->start_address=w->start_address+q->length; w->length=w->length-q->length; } } } voidreclaimmemory() { charjobname; cout<<"请输入要回收的作业名: \n"; cin>>jobname; structFreeSpace*p=newstructFreeSpace;//指向当前被创建的空闲结点 structFreeSpace*s=free_header;//指p的前一个结点 structFreeSpace*m=free_header;//指向s的前一个结点 structAllocatedSpace*q=allocated_header;//指向被回收的结点 structAllocatedSpace*t=allocated_header;//指向被回收的结点的前一个结点 while(q->job! =jobname)//找到被回收的结点 q=q->next; if(q==NULL) cout<<"回收错误,要回收的结点不存在! \n"; else { p->length=q->length; p->start_address=q->start_address; while(s->start_address s=s->next; while(m->next! =s) m=m->next; p->next=s; m->next=p; cout<<"回收成功! \n"; } while(t->next! =q) t=t->next; t->next=q->next; deleteq; s=free_header; m=free_header; s=s->next; m=m->next; while(m! =NULL) { m=m->next; if(m==NULL) break; if(s->start_address+s->length==m->start_address) { s->length=s->length+m->length; s->next=m->next; continue; } s=s->next; } } voidshowmemory() { structFreeSpace*s=free_header;//指向FreeSpace的头结点,开始往后遍历 s=s->next; structAllocatedSpace*q=allocated_header;//指向AllocatedSpace的头结点,开始往后遍历 q=q->next; cout<<"已分配区的情况如下: \n"; while(q! =NULL) { cout<<"作业名: "< "< "< q=q->next; } cout<<"空闲结点的情况如下: \n"; while(s! =NULL) { cout<<"开始地址: "< "< s=s->next; } } intmain() { intn; allocated_header=newstructAllocatedSpace; free_header=newstructFreeSpace; freenext=newstructFreeSpace; freenext->length=100000; freenext->start_address=0; freenext->next=NULL; free_header->next=freenext; allocated_header->next=NULL; while (1) { cout<<"请输入您要进行的操作: 0退出1分配内存2回收内存3显示内存状态\n"; cin>>n; switch(n) { case0: exit(0); case1: allocatememory();break; case2: reclaimmemory();break; case3: showmemory();break; } } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 模拟 文件 资料 存储空间 管理 系统
![提示](https://static.bdocx.com/images/bang_tan.gif)