资源简介
磁盘初始化时把磁盘存储空间分成许多块(扇区),这些空间可以被多个用户共享。用户作业在执行期间常常要在磁盘上建立文件或把已经建立在磁盘上的文件删去,这就涉及到磁盘存储空间的分配和回收。一个文件存放到磁盘上,可以组织成顺序文件(连续文件)、链接文件(串联文件)、索引文件等,因此,磁盘存储空间的分配有两种方式,一种是分配连续的存储空间,另一种是可以分配不连续的存储空间。怎样有效地管理磁盘存储空间是操作系统应解决的一个重要问题,通过本实验使学生掌握磁盘存储空间的分配和回收算法。

代码片段和文件信息
#include
#include
#include
#include
using namespace std;
const int cylinder=8track=2sector=4;
#define SIZE 100
const int M=cylinderN=track*sector;
void delay();/*延时效果*/
void ReadMe();/*本程序的一些说明信息*/
int bitmapisok();/*计算程序中的可分配物理块数*/
void Initbitmap();/*初始化位示图*/
void allocate(char name[10]int n);/*分配*/
void reclaim(char name[10]);/*回收*/
void displaymap();/*显示位示图*/
struct fbc/*描述FBC的数据结构*/
{
char name[10];
int c[SIZE]t[SIZE]s[SIZE];
int n;
};
fbc fbctable[SIZE];/*FBC表*/
int bitmap[M][N];/*全局变量,位示图矩阵*/
int tablep=-1;/*全局变量,FBC扫描伪指针*/
void delay()//延时2秒
{
time_t tm1tm2;
time(&tm1);
while (time(&tm2))
{
if (tm2-tm1==2)
break;
}
}
void ReadMe()/*程序相关说明信息*/
{
system(“color 0b“);
cout<<“\t\t**********************************************\n“;
cout<<“\t\t*\t\t操作系统综合实验\t *\n“;
cout<<“\t\t*\t位示图法管理文件存储空间的分配与回收 *\n“;
cout<<“\t\t* 实验组成员\t\t\t *\n“;
cout<<“\t\t* 组长:葛加文\t\t\t *\n“;
cout<<“\t\t* 成员:周颜安 翟秋明 崔建奎\t *\n“;
cout<<“\t\t**********************************************\n“;
getch();
system(“cls“);
system(“color 0c“);
cout<<“\n说明:\n假设现在有一个盘组共8个柱面,每个柱面有2个磁道,每个磁道分成4个物理记录\n“;
getch();
system(“cls“);
system(“color 0f“);
}
int bitmapisok()/*统计空闲的物理块*/
{
int count=0;
for(int i=0;i {
for(int j=0;j if(bitmap[i][j]==0)
count++;
}
return count;
}
void Initbitmap()
{
int ij;
cout<<“==============================================\n“;
cout<<“ 位示图初始化\n“;
cout<<“==============================================\n“;
for(i=0;i for(j=0;j bitmap[i][j]=0;
cout<<“\n\t初始化中……\n“;
getchar();
displaymap();
getchar();
system(“cls“);
}
void allocate(char name[10]int n)//分配
{
int ij;
int count=0;/*计数器*/
if(bitmapisok() {
cout<<“空间不足,找不到“< return;
}
tablep++;
strcpy(fbctable[tablep].namename);
fbctable[tablep].n=n;
for(i=0;i {
for(j=0;j if(bitmap[i][j]==0)
{
fbctable[tablep].c[count]=i;/*柱面号*/
fbctable[tablep].t[count]=j/4;/*磁道号*/
fbctable[tablep].s[count]=j%4;/*物理记录号*/
bitmap[i][j]=1;
count++;
if(count==n)
return;
}
}
}
void reclaim(char name[10])//回收
{
int ijflag=0;
for(i=0;i<=tablep;i++)
{
if(!strcmp(fbctable[i].namename))
{
for(j=0;j bitmap[fbctable[i].c[j]][4*fbctable[i].t[j]+fbctable[i].s[j]]=0;
for(int k=i;k<=tablep-i;k++)//FBC表项移动
{
strcpy(fbctable[k].namefbctable[k+1].name);
fbctable[k].n=fbctable[k+1].n;
for(int l=0;l {
fbctable[k].c[l]=fbctable[k+1].c[l];
fbctable[k].t[l]=fbctable[k+1].t[l];
fbctable[k].s[l]=fbctable[k+1].s[l];
}
}
tablep--;
flag=1;
delay();
cout<<“\n找到文件,回收完毕。\n“;
}
}
if(flag==0)
cout<<“\n未找到文件名为“< }
void displaymap()//
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 4784 2009-11-24 23:18 综合实验(修订终结版).cpp
文件 154624 2009-11-25 00:19 操作系统综合实验(终结版版).doc
----------- --------- ---------- ----- ----
159408 2
相关资源
- 实验三 消息中间件应用开发:Active
- 基于stm32f103ve的程序——跑马灯实验
- 升腾Win终端系统升级方法新版.doc
- 周立功开发板ProASIC3实验-syn_FIFO代码
- Uninstall_Cortana_WINCLIENT.CN.rar
- 编译原理实验工具及参考源码(lex&
- dotnet 写字板 实验 源代码 不好请要不
- 类pascal语言编译器(编译原理实验)
- 数学建模实验报告(八个全)
- 数值分析所有实验代码
- STM32基于rt_thread操作系统的SDHC卡文件
- 数字逻辑与数字系统实验报告
- 多媒体综合设计报告(附作品)
- ubuntu9.10 可加载内核模块和字符设备驱
- 操作系统 LRU算法 实验报告 及 程序代
- [免费]车载CE6.0操作系统
- 分页系统模拟实验 操作系统 课程设
- 数据结构实验魔王语言
- 模拟段页式虚拟存储管理中地址转换
- 迈克尔逊干涉仪的调整与使用实验报
- 8259A中断控制实验
- 操作系统实验——虚存管理实验
- 广工操作系统实验
- 广东工业大学操作系统实验四文件系
- 广东工业大学汇编实验二用表格形式
- 数值计算实验源代码
- Bochs入门教程[操作系统第一步]
- 操作系统课程设计完整版
- 磁盘调度算法的模拟实现及对比
- 数据结构实验 基于栈的表达式求值
评论
共有 条评论