• 大小: 1.16MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2022-05-10
  • 语言: C/C++
  • 标签: 位示图  

资源简介

操作系统用位示图管理磁盘的空间的分配与回收,c++

资源截图

代码片段和文件信息

#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**********************************************\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()//显示位示图
{
int ij;
for(i=0;i {

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2012-12-07 09:51  操作系统用位示图管理磁盘的空间的分配与回收\
     目录           0  2012-12-07 09:48  操作系统用位示图管理磁盘的空间的分配与回收\Debug\
     文件       74752  2012-12-07 09:49  操作系统用位示图管理磁盘的空间的分配与回收\Debug\vc60.idb
     文件      110592  2012-12-07 09:48  操作系统用位示图管理磁盘的空间的分配与回收\Debug\vc60.pdb
     文件      569425  2012-12-07 09:48  操作系统用位示图管理磁盘的空间的分配与回收\Debug\综合实验(修订终结版).exe
     文件      821260  2012-12-07 09:48  操作系统用位示图管理磁盘的空间的分配与回收\Debug\综合实验(修订终结版).ilk
     文件      263106  2012-12-07 09:48  操作系统用位示图管理磁盘的空间的分配与回收\Debug\综合实验(修订终结版).obj
     文件     2005620  2012-12-07 09:44  操作系统用位示图管理磁盘的空间的分配与回收\Debug\综合实验(修订终结版).pch
     文件     1147904  2012-12-07 09:48  操作系统用位示图管理磁盘的空间的分配与回收\Debug\综合实验(修订终结版).pdb
     文件      160768  2012-12-07 09:46  操作系统用位示图管理磁盘的空间的分配与回收\操作系统综合实验(终结版版).doc
     文件        4727  2012-12-07 09:48  操作系统用位示图管理磁盘的空间的分配与回收\综合实验(修订终结版).cpp
     文件        3595  2012-12-07 09:44  操作系统用位示图管理磁盘的空间的分配与回收\综合实验(修订终结版).dsp
     文件         552  2012-12-07 09:51  操作系统用位示图管理磁盘的空间的分配与回收\综合实验(修订终结版).dsw
     文件       33792  2012-12-07 09:51  操作系统用位示图管理磁盘的空间的分配与回收\综合实验(修订终结版).ncb
     文件       48640  2012-12-07 09:51  操作系统用位示图管理磁盘的空间的分配与回收\综合实验(修订终结版).opt
     文件        1257  2012-12-07 09:48  操作系统用位示图管理磁盘的空间的分配与回收\综合实验(修订终结版).plg

评论

共有 条评论