您的当前位置:首页正文

操作系统实践报告

2024-10-18 来源:威能网
武汉理工大学《计算机软件综合开发实训》实践报告

学 号:

实践课设计报告

课程名称 题 目 学 院 专 业 班 级 姓 名 指导教师

计算机操作系统

模拟设计存储管理的分配与回收

计算机科学与技术学院 计算机科学与技术

年 月

1

武汉理工大学《计算机软件综合开发实训》实践报告

模拟设计存储管理的分配与回收

一、需求分析

本次实验主要是要求实现动态的页式存储管理。根据本次实验的要求,可以分析出本次实验需要实现以下功能:

(1)实现页式存储管理中逻辑地址到物理地址的转换。

(2)根据输出逻辑地址算出对应的页号,并且根据页号用先进先出算法经行页面置换。

(3)输出页面置换顺序和缺页次数以及缺页率。

二、功能设计(数据结构及模块说明)

1.页表

在页表中记录了逻辑地址空间的页号与物理地址空间的块对应信息。 页表结构:

本次实验采取一个一维数组来实现页表结构。

int pagetable[20]={5,8,6,11,13,16,2,10,9,17,4,19,3,18,12,1,7,14,0,15}; //页表对应物理块号

注意:页面对应的物理块号可以根据需要设定

2.基本地址变换

地址变换就是将用户程序中的逻辑地址转变成内存中的物理地址。

页式存储管理的逻辑地址结构由页号和偏移量组成。设逻辑地址为A,系统的页面大小为L,则公式为:

P=int(A/L) d=A MOD L

页号等于逻辑地址除页面大小并取整,偏移量等于逻辑地址除页面大小取整。 实现函数如下:

logaddr是用户输入的四位十六进制的逻辑地址转成十进制数 void LogicTransSys(int logaddr){

int physaddrDec=0; //保存最终的物理地址

physaddrDec=pagetable[logaddr/1024]*1024+logaddr%1024;

2

武汉理工大学《计算机软件综合开发实训》实践报告

cout<<\"页号\"<cout<<\"物理首地址为:\"<其中:DectoHex函数将十进制数转16进制数输出的函数

3.页面置换算法的数据结构

本实验采用一维数组作为存放需要调入的页面状态和进程分配的物理块的状态。具体如下:

int phb[bsize]={0}; //物理块标号 int pro[psize]={0}; //进程页面号

int page[psize] = {0}; //存放置换页面

int flag[bsize] = {0}; //页面在物理块中放置的时间

其中bsize表示分配给进程的物理块数,psize表示进程调入的页面数。

4.先进先出的置换算法

选择在内存中驻留时间最长的页将其淘汰。即简单来说先进入内存的页,先退出内存。

主要的函数代码:

void FIFO() {

for(i = 0; im=searchpb(); n=searchpro();

//找flag值最大的

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

if(flag[j]>maxflag) {

maxflag = flag[j]; Max = j; } }

if(n == -1) //不存在相同进程 {

if(m != -1) //存在空闲物理块 {

page[cont] = pro[i];//将需要填入的页号记录 phb[m] = pro[i]; //页号填入该空闲物理块 cont++;

flag[m] = 0;

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

3

武汉理工大学《计算机软件综合开发实训》实践报告

flag[j]++; }

m = -1; }

else //不存在空闲物理块 {

page[cont] = phb[Max]; phb[Max] = pro[i]; flag[Max] = 0;

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

flag[j]++; }

Max = -1; maxflag = 0; cont++; } }

else //存在相同的进程 {

phb[n] = pro[i];

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

flag[j]++; }

n = -1; }

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

cout<<\" \"<cout<cout<<\"缺页次数为:\"<for (int ex = 0; ex < cont; ex++) {

cout<<\" \"<cout<cout<<\"缺页率为:\"<其中:searchpb();是查找是否空闲物理块的函数 searchpro();是查找物理块中是否有

4

武汉理工大学《计算机软件综合开发实训》实践报告

相同的页面。

模块说明:首先,查找是否有空闲物理块以及该页面是否已经被调入某个物理块。然后遍历分配的物理块,查找在内存中驻留时间最长的物理块号。之后,判断是否该页面被调入某个物理块,有则不置换,没有判断是否有空闲物理块,有则调入,没有则置换已经停留时间最长的页。

三、开发平台

PC机、Microsoft Visual Studio2012

四、运行结果与运行情况分析

程序运行前显示内存页面长度以及物理块号存放的逻辑页号。

输入逻辑地址,输出对应的页号和物理页号。输入结束后显示进程调入的页面号。

5

武汉理工大学《计算机软件综合开发实训》实践报告

如果输入的逻辑地址越界,则显示输入错误。

显示先进先出算法的运行运行结果(包括:缺页次数、页面置换顺序、缺页率)

五、自我评价与总结

6

武汉理工大学《计算机软件综合开发实训》实践报告

1.出色之处:

(1)实现了逻辑地址到物理地址的转换,对于越界的逻辑地址有错误提示的越界中断。

(2)实现了页式存储管理,使用先进先出的方法实现了页面置换,并将相关信息进行输出。

2.改正之处:

(1)只实现了一个进程的页式管理,并且该进程分配的物理块是固定的,调用的页面数也是固定的。

(2)页面对应的物理块号应该是动态的,不应该有程序员控死。

(3)程序只实现了先进先出算法,其实就实际而言,先入先出是一种最差的算法,Belay现象很严重。相较于最近最久未使用和理想置换算法来说差很多。 (4)数据结构太过简单,没有将函数进行封装等处理,程序的封装不好。

3.收获:

本次实验让我对于页式存储管理有了更深的认识,以前学习只是在想,它的算法是这样算,至于为什么这么算,怎么实现完全没有半点概念。还有就是逻辑地址转物理地址,以前总是会绕晕,到底谁除谁,谁求膜,经过这次实验,让我更清晰了,原来是这么转换的。虽然我的程序还有很多不足,但是这次实验对我对于操作系统的启发很多,让我对于学习操作系统有了更深厚的兴趣。

7

武汉理工大学《计算机软件综合开发实训》实践报告

成绩评定表

序号 1 2 3 设计结果正确性 4 5

评分项目 学习态度认真、出勤情况 设计分析合理性 设计方案正确性、可行性、创造性、满分 10 10 30 实得分 系统测试、运行情况 设计报告的规范性 40 10 总得分

8

因篇幅问题不能全部显示,请点此查看更多更全内容