文件系统存储空间管理模拟实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程名称计算机操作系统实验名称文件系统存储空间管理模拟

姓名____________________ 学号_______________________________ 专业班级_________________ 实验日期____________________________ 成绩______________________ 指导老师_________________________

一、实验目的

根据提出的文件分配和释放请求,动态显示磁盘空闲空间的态以及文件目录的变化,以位示图和索引分配为例:每次执行请求后要求显示或打印位示图的修改位置、分配和回收磁盘的物理块地址、更新的位示图、目录。

二、实验原理

用数组表示位示图,其中的每一位对应磁盘一个物理块的状态,0表示、

空闲,1表示分配;当请求分配一个磁盘块时,寻找到数组中为0的位,计算相

对磁盘块号,并计算其在磁盘中的物理地址(柱面号、磁道号、物理块号),并将其状态由0变到1。当释放某一物理块时,已知其在磁盘中的物理地址,计算其相对磁盘块号,再找到位示图数组中的相应位,将其状态由1变为0。

三、主要仪器设备

PC机(含有VC)

四、实验内容与步骤

实验内容:1.模拟文件空间分配、释放过程,可选择连续分配、链式分配、索引分配方法;2.文件空闲空间管理,可采用空白块链、空白目录、位示图方法;

步骤如下:

1.输入磁盘基本信息参数,计算位示图大小,并随机初始化位示图;

(1)磁盘基本信息:磁盘柱面数m,每柱面磁道数p,每磁道物理块数q;

(2)假设采用整数数组存放位示图,则数组大小为:

Size= ceil ((柱面数*每柱面磁道数*每磁道物理块数)/ (sizeof(int)

*8 ))

(3)申请大小为size的整数数组map,并对其进行随机初始化。

例如:假设m=2, p=4, q=8, 共有64个磁盘块,若sizeof(int)=2, 则位示图大小为4,map[4]如下:

位示图中每一位对应的相对磁盘块号如下图,磁盘块号由小到大对应于数组的低地址到高地址位上。即map[0]的第0位到第15位分别对应0号磁盘块到15号磁盘块的状态,map[1]的第0位到第15位对应16号磁盘块到31号磁盘块的状态,以此类

如上表所示,29号磁盘的状态存在map[1]中,对应于第13位; 2. 输出初始位示图信息; 3. 输入文件分配或释放请求,

(1)格式:+ 文件名 申请块数” 或 “-文件名”

+ ”表示申请文件分配,-”表示删除文件 如:+ F1 5

4.根据请求完成相应操作。

(1)若为分配申请x 个盘块,则在位示图中找到x 个为0的位,将其修改为 1”,计算相应具体物理设备的柱面号C 、磁道号H 和物理块号R ,并将CHR 地 址或相对磁盘块号记录在文件目录中。

输出位示图修改位置、分配的磁盘块CHR 地址、修改后的目录和位示图信息。否则,空间不够,退出执行下一条请求;

计算公式如下:

a. 已知位示图中的下标i , j,计算相对块号

Block= i*sizeof ( int )*8+j b. 已知相对块号计算柱面、磁道、物理块号如下:

柱面号C=相对块号/(每柱面磁道数*每磁道物理块数)

磁道号H=相对块号% (每柱面磁道数*每磁道物理块数)/每磁道物 理块数 物理块号R=相对块号%每磁道物理块数

文件目录如下(以索引表分配为例):

(2)若为删除申请,则从目录中找到要删除的文件所在的目录项,读取索引 表,依次读

取文件相应的盘块CHR 地址,计算该盘块的相对磁盘块号,再计算其相应信息 在位示图中的位置(i,j ),将位示图中的相应位有“1”改为0”,并从目录中删除该 目录项。输出删除的磁盘块 CHR 地址、相应位示图修改位置、修改过的位示图

和目录。

计算过程如下:

相对磁盘块号=柱面号*每柱面磁道数*每磁道物理块数+ 磁道号*每磁道物理块

数+物理块号

i =相对磁盘块号/ (sizeof(int)*8)

j =相对磁盘块号% (sizeof(int)*8)

五、实验流程图

f=f+l

文flS-File存入系统'S-File 为

支件名* M为申请块数

1T

置空白区号f=l

N

诫后一个空口坯次无法分配

N

区号

1

Y

T

保存空白区.首块号

空白匿f

<

的块数PM*修改空闲目录表前首块号和块数

图一文件空闲区分配算法

空白文件中增加一豪H 0T 块号寸 丿栏中首決号不变

/拦中寺白块曾+ 7+1)拦中 空向块ITT

丽陳/+[栏杀目

图二文件空闲区回收算法

円+1

请求剧除一牛文件释放空剧

齊卒白文件冃录表

丿崔屮块塹 丿栏

申當块吕=F

*r*

u

N

N

u+i )rd-ny?'

仅有H 邻

Fg 中首块号+ j 栏空白块牡

十】

¥ 有上郛

有上邻也有下郭

yE 空口块數+日

六、实验代码

#i nclude "stdio.h"

#i nclude

#in elude

#in elude

int physic[100]; //文件地址缓冲区

int style=1; //文件的类型

char cur_dir[10]="root"; // 当前目录struct comma nd

{char com[10];

}cmd[13];

struct block

{ int n; //空闲的盘快的个数

int free[50]; //存放空闲盘快的地址

int a; //模拟盘快是否被占用

}memory[20449];

struct block_super

{int n; //空闲的盘快的个数

int free[50]; //存放进入栈中的空闲块

int stack[50]; //存放下一组空闲盘快的地址

}super_block;

struct node //i 结点信息

{int file_style; //i结点文件类型

int file_length; //i结点文件长度

int file_address[100]; //i结点文件的物理地址

} i_n ode[640];

struct dir //目录项信息

{char file_name[10]; // 文件名

int i_num; //文件的结点号

char dir_name[10]; //文件所在的目录

} root[640];

void format。// 格式化

{int i,j,k;

super_block .n=50;

for(i=6i<50;i++) //超级块初始化

{ super_block.free[i]=i; //存放进入栈中的空闲块

super_block.stack[i]=50+i; // 存放下一组的盘块

}-

for(i=0;i<640;i++) //i结点信息初始化

{for(j=0;j<100;j++)

{i_no de[i].file_address[j]=-1;// 文件地址

}- -

i_node[i].file_le ngth=-1; // 文件长度i_node[i].file_style=-1; // 文件类型}- -

for(i=0;i<640;i++) //根目录区信息初始化

{strcpy(root[i].file_ name,"");

root[i].i_ num=-1;

strcpy(root[i].dir_ name,"");

} -

for(i=0;i<20449;i++) // 存储空间初始化

{memory"]. n=0; // 必须有这个

memory[i].a=0;

for(j=0;j<50;j++)

{memory[i].free[j]=-1;

}

相关文档
最新文档