用分页管理,使用位示图实现主存的分配与回收一、实验目的:采用分页管理,使用位示图实现主存的分配与回收二、实验内容:主存是中央处理机能直接存取指令和数据的存储器。能否合理而有效地使用主存,在很大程度上将影响到整个计算机系统的性能。实现主存空间的分配与回收。三、试验环境: VC++四、实验原理及试验步骤:(1)主存的分页管理是把主存分成大小相等的若干块,作业的信息按块的大小分成若干页。作业装入主存时,可把作业的信息按页分散在主存的若干块中。为了标识主存中哪些块空闲,哪些块占用,可用一张位示图指示。位示图是由若干主存单元构成。其中每一位与一个主存块对应。分别用0和1表示对应块是空闲还是占用。(2)假定某系统的主存被分成大小相等的64块,则位示图可用8个字节构成。再用一个变量记录当前可用的空闲块总数。如果已有第0、1、2、3、4、5、9、11、13、24、31共11块被占用,其位示图描述如图3-3所示。(3)当要装入一个作业时,根据作业对主存的需求量,先查记录当前空闲块数变量的值是否满足作业的需求量。若不满足,则给出分配不成功的信息,且作业等待;若满足,则查位示图,按作业需求量找出为零的一些位,且置上占用标志1,并从当前空闲块变量中减去本次分配的块数。按找到的位计算对应的块号。计算公式:块号=J*8+I。其中,J表示找到的字节号,I表示找到的位号。根据分配给作业的块号,为作业建立一张页表,格式如图3-4所示。 位号字节号 0 1 2 3 4 5 6 70 1 1 1 1 1 1 0 0页号 块号1 2 3 1 0 1 0 1 0 1 0 02 0 0 0 0 0 0 0 03 1 0 0 0 0 0 0 14 0 0 0 0 0 0 0 05 0 0 0 0 0 0 0 06 0 0 0 0 0 0 0 07 0 0 0 0 0 0 0 0 当前空闲块总数:53图3-3 主存某时刻的位示图(4)当一个作业执行结束时,释放主存。根据页表可知要释放的块号和块数。由块号计算其在位示图中的位置,将对应位的标志置0,以此表示该块已空闲。之后,再将释放的块数累加到当前空闲块变量中。由块号计算字节号和位号的公式如下:字节号=int(块号/8) 位号=mod(块号/8)(5)设计和实现主存分配和回收的程序五、实验代码: #include#include#includeusing namespace std;#define N 8 //将主存分为大小相等的NxN块#define LENGTH 8 //主存每块大小
int MAP[N][N];//位示图int FREE=0; //当前空闲的块数int NUMBER; //分割后文件的块数www.lwfree.cnstruct FileTest{ string FileName; //装入的文件名 int FileSize; //装入的文件大小 int FilePageNumber; //页号 int FileKuaiNumber[40]; //块号};struct FileTest file;void Filecin()//文件输入{ cout<<"请输入要装入文件的文件名:"; cin>>file.FileName; cout<<"请输入要装入文件的大小:"; cin>>file.FileSize; cout<<"文件名:"<}void map_state()//输出位示图状态{ cout<<"当前主存位示图状态如下(1表示占用,0表示空闲):"<
采用分页管理,使用位示图实现主存的分配与回收 } cout<
0||(file.FileSize/LENGTH)<8){NUMBER=NUMBER+1;}//计算输入的文件分割后的块数FNUMBER=NUMBER; for(int i=0;i0) { MAP[i][j]=1; FNUMBER--; file.FileKuaiNumber[k]=i*8+j; k++; } } } map_state(); PageTable(); } else { cout<<"申请空间大于系统所剩空间!"<}void PageTable()//页表{ cout<<"页表状态如下表:"<>backfilename; cout<<"需要回收的作业的作业名:"<>a; if(a=='s') { Filecin(); map_work(); } if(a=='h') { back(); } goto L;
} 六、实验总结 在输入位示图状态时,两个循环即将结束的时候要初始化位示图,防止重复显示。按找到的位计算对应的块号。计算公式:块号=J*8+I。其中,J表示找到的字节号,I表示找到的位号。由块号计算字节号和位号的公式如下:字节号=int(块号/8) 位号=mod(块号/8),所以,判断主存是否能够分配即为:if(file.FileSize<=FREE*8) 否则将显示申请空间大于系统所剩空间!420