操作系统磁盘空间管理实验报告(共8页).docx
精选优质文档-倾情为你奉上操作系统 磁盘管理一、实验目的怎样有效地管理磁盘存储空间是操作系统应解决的一个重要问题,通过本实习使学生掌握磁盘存储空间的分配和回收算法。 二、实验内容模拟磁盘空闲空间的表示方法,以及模拟实现磁盘空间的分配和回收。本实习模拟用位示图管理磁盘存储空间的管理方法。设计申请一块磁盘空间和归还一块磁盘空间的程序。要求能显示或打印程序运行前和运行后的位示图;分配时把分配到的磁盘空间的物理地址显示或打印出来,归还时把归还块对应于位示图的字节号和位数显示或打印出来。假定已有如表1的磁盘空间被占用了,现在要申请五块磁盘空间,运行分配程序,显示或打印运行的结果。然后再归还如表2的空间,运行回收程序,显示或打印运行结果。表1柱面号磁道号物理记录号001002010013100112 表2柱面号磁道号物理记录号002010101三、实验步骤本实验在Visual C+ 6.0编程平台下进行编程实现,详见实验内容。1 算法设计流程,及源代码;算法思想,及算法流程:磁盘存储空间的分配有两种方式,一种是分配连续的存储空间,另一种是可以分配不连续的存储空间。为了表示哪些磁盘空间已被占用,哪些磁盘空间是空闲的,可用位示图来指出。位示图由若干字节构成,每一位与磁盘上的一块对应,“1”状态表示相应块已占用,“0”状态表示该块为空闲。当申请一块磁盘空间时,由分配程序查位示图,找出一个为“0”的位,计算出这一位对应块的磁盘物理地址,且把该位置成占用状态“1”。假设现在有一个盘组共80个柱面,每个柱面有两个磁道,每个磁道分成4个物理记录。那么,当在位示图中找到某一字节的某一位为“0”时,这个空闲块对应的磁盘物理地址为:柱面号=字节号 磁道号=位数/4 物理记录号=位数/4当归还一块磁盘空间时,由回收程序根据归还的磁盘物理地址计算出归还块在位示图中的对应位,把该位置成“0”。归还块在位示图中的位置计算如下: 字节号=柱面号位数=磁道号´4+物理记录号源程序:#include<iostream.h>#include<stdlib.h>#include<iomanip.h>#define A 10#define B 2#define C 4int kokoABC;int M,N;int i,j,k;char ch;void i_koko()for(i=0;i<A;i+)for(j=0;j<B;j+)for(k=0;k<C;k+)kokoijk=1;void Dispense()docout<<"请输入字节号:"<<'t'cin>>M;cout<<"请输入位数:"<<'t'cin>>N;i=M;j=N/4;k=N%4;kokoijk=0; cout<<"是否继续输入(Y/N):"<<'t' cin>>ch;while(ch='Y'|ch='y');void Recycle()docout<<"请输入柱面号"<<'t'cin>>i;cout<<"请输入磁盘号"<<'t'cin>>j;cout<<"请输入逻辑记录号"<<'t'cin>>k;kokoijk=1;cout<<"是否继续输入(Y/N):"<<'t' cin>>ch;while(ch='Y'|ch='y');void Display()int i,j,k;int flag=0;cout<<"*位示图*"<<endl;cout<<"字位"<<setw(3);for(i=0;i<B*C;i+)cout<<i<<setw(3);cout<<endl;for(i=0;i<A;i+)cout<<setw(3)<<i<<setw(6);for(j=0;j<B;j+)for(k=0;k<C;k+)cout<<kokoijk<<setw(3);flag+;if(flag%8=0)cout<<endl;cout<<endl;cout<<"*磁盘分配图*"<<endl;cout<<"柱面号"<<'t'<<"磁道号"<<'t'<<"物理记录号"<<endl;for(i=0;i<A;i+)for(j=0;j<B;j+)for(k=0;k<C;k+)if(kokoijk=0)cout<<i<<'t'<<j<<'t'<<k<<endl; cout<<endl<<endl;void KOKO()cout<<"*"<<endl;cout<<"* 1.分配 "<<"2.回收 "<<"3.显示 "<<"4.退出 *"<<endl;cout<<"*"<<endl;cout<<"选择所要执行的功能:"<<'t'int x;cin>>x;cout<<endl;switch(x)case 1:Dispense(); break;case 2:Recycle();break;case 3:Display();break;case 4:exit(1);break;default:cout<<"Error! 该功能不存在请重新输入"<<endl<<endl;void main()i_koko();while(1)KOKO();2.编译、调试程序;3.运行程序,记录结果。假定已有如表6-1的磁盘空间被占用了,现在要申请五块磁盘空间,运行分配程序。然后再归还如表6-2的空间,运行回收程序,。(1)输出初始位图:字/位01234567011111111111111111输出申请表柱面号磁道号物理记录号001002010013100112输出申请分配位示图字/位01234567010010110101111101(2)输出回收表柱面号磁道号物理记录号002010101输出回收后位示图字/位01234567010111110101111101四、思考题1. 此磁盘调度有哪些算法?答:磁盘调度算法有:FCFS算法、最短寻道时间优先SSTF算法、扫描算法(如:扫描SCAN算法、循环扫描CSCAN算法)。 专心-专注-专业