操作系统内存储器空间的管理的实验报告

时间:2024.4.2

安徽师范大学

           学院实验报告

专业名称   软件工程

实 验 室   2#201

实验课程  操作系统实验

实验名称 内存储器空间的管理

姓    名 

学    号  

同组人员 

实验日期  2013/6/7


第二篇:操作系统 磁盘空间管理的实验报告


实验五  磁盘存储空间的管理

一、实验目的

磁盘格式化时,系统把磁盘存储空间分成许多磁道。每个磁道又分成若干个扇区(又叫做磁盘块)。之后用fdisk命令对硬盘进行分区,即使只有一个分区,也必须用fdisk命令进行分区。分区的目的,就是制作文件卷,形成文件系统。一个文件卷一般都被划分成引导扇区、文件系统管理区和文件数据区。其中,文件数据区用来存放系统文件和用户文件。用户可以通过文件系统提供的API,创建、打开、关闭和对文件进行读写。当用户的文件不再需要时,就应该删除。把一个文件放到磁盘上时,可以组织成连续文件、链接文件或索引文件等。因此,磁盘空间的分配方法也有两种,一种是连续空间的分配,一种是不连续空间的分配(又叫动态分配)。如何充分有效地利用磁盘空间,是操作系统应解决的重要课题之一。

  本实验模拟实现磁盘空间的分配与回收,使学生对磁盘空间的管理有一个较深入的理解。

二、实验要求

       书写实验报告,应该包括以下几项内容:

(1)实验题目;

(2)程序中使用的数据结构及主要符号说明;

(3)程序流程图和带有详细注释的源程序;

(4)执行程序名,并打印程序运行时的初值和运行结果;

(5)通过实验后的收获与体验及对实验的改进意见和见解

三、实验内容

(1)假定现有一个磁盘组,共有40个柱面。每个柱面4个磁道,每个磁道又划分成4个物理记录。磁盘的空间使用情况用位示图表示。位示图用若干个字构成,每一位对应一个磁盘道。“1”表示占用,“0”表示空闲。为了简单,假定字长为16位,一个字可用来模拟磁盘的一个柱面,其位示图如图5—1所示。系统设置一个变量S记录当前的空闲磁盘块个数。位示图的初始状态由户自己设定。

 

图5-1 位示图

(2)申请一个磁盘块时,由磁盘块分配程序查位示图,找出一个为0的位,并计算磁盘的物理地址(即求出它的柱面号、磁道号和扇区号)。

①由位示图计算磁盘的相对块号的公式如下:

     相对块号=字号*16+位号

②再将相对块号转换成磁盘的物理地址:

  柱面号=(相对块号/16)的商,也即柱面号=字号

  磁道号=((相对块号/16的余数)/4)的商,也即(位号/4)的商

  物理块号=(((相对块号/16)的余数)/4)的余数,也即(位号/4)的余数

(3)当释放一个相对物理块时,运行回收程序,计算该块在位示图中的位置,再把相应由“1”改为“0”。计算公式如下:

     先由磁盘的三维地址柱面号、磁道号和扇区号计算相对块号:

             相对块号=柱面号*16+磁道号*4+物理块号

     再计算字号和位号:

             字号=相对块号/16的商,也即字号=柱面号

             位号=磁道号*(物理块数/每磁道)+物理块号

(4)分配算法和回收算法流程分别如图5—2和5—3所示。

图5-2 磁盘空间分配的流程

图5-3 磁盘空间回收的流程

四、源程序

#include <stdio.h>   

#include <process.h>      

void Initbitmap(int map[8][8])  

       int cylinder,track,sector;

       char choice='Y';

       printf("初始化位视图...\n");

       while(choice=='y'||choice=='Y')

       {

              printf("柱面号:");

              scanf("%d",&cylinder);

              printf("磁道号:");

              scanf("%d",&track);

              printf("物理记录号:");

              scanf("%d",&sector);

              map[cylinder][4*track+sector]=1;

              printf("contiune?");

              getchar();

              scanf("%c",&choice);

       }  

}     

void allocate(int map[8][8])  

{  

       int i,j;  

 

       int flag=0;

       int cylinder,track,sector;

       for(i=0;i<8;i++)

       {

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

        if(map[i][j]==0) {map[i][j]=1;flag=1;break;}   

        if(flag==1) break;  

       }

       if(flag==1)

       {    

              cylinder=i;  

              track=j/4;  

              sector=j%4; 

              printf("分配到的柱面号、磁道号、物理记录数");  

              printf("%d\t%d\t%d",cylinder,track,sector);  

              printf("\n");

       }

       else printf("空间不足,分配失败!");  

}  

  

void reclaim(int map[8][8])  

{

       int cylinder,track,sector;  

       printf("柱面号:");  

       scanf("%d",&cylinder);  

       printf("磁道号:");  

       scanf("%d",&track);  

       printf("物理记录号:");  

       scanf("%d",&sector);  

       if(map[cylinder][4*track+sector]==0)  

       {  

              printf("此块为未分配块!回收出错!");  

              getchar();  

       } 

       else  

       { 

              map[cylinder][4*track+sector]=0;  

              printf("回收块对应的字节号:%4d\t位数:%4d\n",cylinder,4*track+sector);  

       }  

}     

void main()  

{  

       int bitmap[8][8];  

       int i,j;  

       int choice;  

       for(i=0;i<8;i++)  

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

                     bitmap[i][j]=0;  

    Initbitmap(bitmap);  

       while(1)  

       {  

              printf("\n请输入选择:");  

              printf("1--分配,2---回收,3--显示位示图,0--退出\n");  

              scanf("%d",&choice);    

              switch(choice)  

              {  

              case 1:allocate(bitmap);break;  

              case 2:reclaim(bitmap);break;  

              case 3:for(i=0;i<8;i++)  

                 {

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

                   printf("%8d",bitmap[i][j]);  

                   printf("\n");  

                 }  

                     break;  

              case 0:exit(0);  

              default:printf("错误选择!");

                     break;

              }  

       }  

}五、结果图

由结果图可以看出函数可实现磁盘空间的分配与回收。

六、实验心得

这个实验模拟实现磁盘空间的分配与回收,使我对磁盘空间的管理有一个较深入的理解,使我学会了磁盘空间的分配与回收。

更多相关推荐:
《操作系统》存储管理实验报告

大学学院实验报告

操作系统存储管理实验报告

北京邮电大学操作系统实验实验报告实验日期20xx1220实验名称存储管理一实验目的2二实验内容2三实验分析2对于伙伴算法2对于虚拟存储区和内存工作区的不同算法3四编程实现3伙伴算法3原理3伙伴的概念3内存的释放...

操作系统 内存管理实验报告

同组同学学号同组同学姓名注实验内容及步骤项目的内容如果较多可以加附页

北邮大三上-操作系统-存储管理实验报告

操作系统实验三存储管理实验班级20xx211311学号姓名schnee目录1实验目的22实验内容21通过随机数产生一个指令序列共320条指令22将指令序列变换成为页地址流23计算并输出下述各种算法在不同内存容量...

实验四 操作系统存储管理实验报告

实验四操作系统存储管理实验报告一实验目的存储管理的主要功能之一是合理地分配空间请求页式管理是一种常用的虚拟存储管理技术本实验的目的是通过请求页式管理中页面置换算法模拟设计了解虚拟存储技术的特点掌握请求页式存储管...

操作系统内存管理实验报告

实验报告12345678910111213

东华大学操作系统存储管理实验报告

东华大学计算机学院操作系统实验报告实验名称存储管理问题姓名姜元杰学号111310228班级计算机1102指导老师李继云报告日期20xx112操作系统实验报告一实验概述1实验目标存储管理的主要功能之一是合理地分配...

存储管理实验报告(操作系统)

实验报告课程名称操作系统实验项目名称存储管理实验时间20xx0504班级姓名学号实验目的理解可变分区管理方式下采用最佳适应分配算法实现主存分配和回收对理论课中学习的内存管理中的概念作进一步的理解实验环境winT...

操作系统-请求页式存储管理实验报告

操作系统实验三存储管理实验班级学号姓名目录1实验目的22实验内容21通过随机数产生一个指令序列共320条指令22将指令序列变换成为页地址流23计算并输出下述各种算法在不同内存容量下的命中率23随机数产生办法3环...

操作系统存储器管理实验报告.doc

操作系统原理实验报告1一目的与要求1请求页式虚存管理是常用的虚拟存储管理方案之一2通过请求页式虚存管理中对页面置换算法的模拟加深理解虚拟存储技术的特点3模拟页式虚拟存储管理中硬件的地址转换和缺页中断并用先进先出...

存储管理--可变分区管理 操作系统 实验报告

实验三存储管理一实验目的通过编写和调试存储管理的模拟程序以加深对存储管理方案的理解通过编写和调试模拟程序以加强对虚拟存储管理的了解二实验题目设计一个可变式分区分配的存储管理方案并模拟实现分区的分配和回收过程对分...

《操作系统》实验报告三_页式虚拟存储管理中地址转换和缺页中断55

注可根据实际情况加页

操作系统存储管理实验报告(30篇)