存储器管理课程的设计.docx
《存储器管理课程的设计.docx》由会员分享,可在线阅读,更多相关《存储器管理课程的设计.docx(18页珍藏版)》请在冰豆网上搜索。
![存储器管理课程的设计.docx](https://file1.bdocx.com/fileroot1/2022-10/28/c2db709b-72ae-4ccb-8bf3-330fc9c822d2/c2db709b-72ae-4ccb-8bf3-330fc9c822d21.gif)
存储器管理课程的设计
课程设计
(计算机操作系统)
课程设计任务书
课题名称存储器管理设计
Ⅰ、题目的目的和要求:
本课程设计的目的是使学生熟悉存储器管理系统的设计方法。
加深对所学各种存储器管理方案的了解;要求采用一些常用的存储器分配算法,设计一个存储器管理模拟系统并调试运行。
模拟环境应尽量接近真实。
Ⅱ、设计技术要求与数据:
巩固和加深对操作系统原理的理解,提高系统设计的能力;通过应用,提高程序设计能力,本课程设计对应用方面只作一般要求,选做不同的功能模块,重点放在数据结构设计、文档规化和程序设计风格,写出易读、易懂的程序。
技术要求:
(一)源程序文件
(1)符号名的命名:
这包括变量名、文件名、程序名、模块名、过程文件名等。
命名不主用A、B、A1、A2等为文件名,而从易于识别和理解的要求出发,使用一些有实际意义的标识符,如:
fork();exit();sleep();wakeup()等。
(2)程序中的注释行:
夹在源程序中的注释行能帮助读者理解程序,绝不是可有可无的,注释是源程序文件必不可少的一部分。
要求在程序开头有序言性注释,有关的项目如下:
程序的标题(文件名等)
目的、功能
调用形式,参数含义
输入数据
输出数据
调用的过程或过程文件
其它类型的文件名称(数据文件、索引文件、格式文件等)
作者
审查调试
日期
(3)空行和缩格
自然的程序段用空行隔开,分支嵌套和循环嵌套要层次分明。
如C语言程序:
if(条件)
(语句组);
else
if(条件)
(语句组);
else
(语句组);
(二)数据说明
适当用说明方式:
<命令语句>/*<注释>*/
如对变量所赋数据的类型加以说明,以便核对和查找。
(三)语句结构
程序的清晰性是最重要的目标,语句应写的简明,直接了当,不要在语句中使用“技巧”。
因为这会给调试过程带来不必要的麻烦,复杂的表达式用括号表示运算的优先次序,以免造成误解。
没有程序的简明性和清晰性,就不能保证程序的可靠性和正确性。
另外,尽可能利用现成函数,减少临时变量,避免用浮点数(如1.2E4)比较。
(四)输入和输出
输入和输出是与用户的使用直接相关的。
输入、输出的方式和格式应尽可能方便用户,一个程序的输入格式尽可能统一;但提示要明确和具备捕获错误及处理的能力。
数据结构:
constintpagesize=1024;
constintblocknum=3;
intblock[blocknum];
intpg[blocknum];
Ⅲ、设计工作起始日期:
自二○〇五年六月二十日起,至二○〇五年六月二十四日止
Ⅳ、进度计划与应完成的工作:
日期
容
6.20周一
选取参考书,查阅有关文献资料,完成课程设计说明书容1部分。
完成课程设计说明书容2-4部分
6.21周二
上机创建相关数据结构,录入源程序
6.22周三
上机调试程序并记录调试中的问题,完成课程设计说明书第5部分。
6.23周四
上机系统测试,演示设计成果。
6.24周五
整理课程设计说明书,上午11时,由学习委员交课程设计说明书(计算机科学系9#213或直接交给指导教师)
Ⅴ、主要参考文献、资料:
1.汤子赢等,计算机操作系统(第二版),电子科技大学,1996
2.汤子赢等,计算机操作系统(新第一版),电子科技大学1996
3.耀霖等,操作系统,电子科技大学,1992
4.汤子瀛主编.计算机操作系统.:
电子科技大学,2002.9
5.尧学,史美林.计算机操作系统教程.:
清华大学,1995,2
6.乃琦等.操作系统原理及应用.:
经济科学,1996.5
指导教师:
学科部主任
二○年月日
课程设计评语及成绩评定
Ⅰ、课程设计篇幅:
图纸数量
设计说明书页
Ⅱ、指导教师的评语:
指导教师年月日
Ⅲ、成绩评定:
设计成绩
教学院长(主任):
(签字)
二○年月日
第一章概述……………………………………………………………
第二章系统分析………………………………………………………
第三章系统设计………………………………………………………
第四章程序设计流程图或N-S图……………………………………
第五章源程序清单……………………………………………………
第六章调试过程中的问题及系统测试情况…………………………
第七章结束语…………………………………………………………
第一章概述
操作系统课程设计是计算机科学与技术专业的主要实践性教学环节。
在进行了专业基础课和《操作系统》课程的基础上,设计或分析一个实际的操作系统旨在加深对计算机硬件结构和系统软件的认识,初步掌握操作系统组成模块和应用接口的使用方法,提高进行工程设计和系统分析的能力,为毕业设计和以后的工程实践打下良好的基础。
存储器管理的主要任务是为多道程序的运行提供良好的环境,方便用户使用存储器,提高存储器的利用率以及能从逻辑上扩充存。
存储器管理的主要对象是存,本设计主要针对进程读入存中的过程模拟存储器管理系统。
涉及到程序的装入、存空间的分配方式以及进程的换出与换入和页面置换算法(本设计的页面置换算法为先进先出FIFO算法)。
第二章系统分析
在多道程序环境下,要使程序运行,必须先为之创建进程。
而创建进程的第一步是将程序和数据装入存。
存储器实现的功能主要是存分配等功能,本模拟系统所要实现的就是将进程的程序和数据装入存(物理块)。
具体需要实现的功能如下:
1、读入进程大小,进行分页,确定每一页的指令地址围;
2、读入一个指令,确定其所在页面,读入存物理块中。
物理块空闲直接读入,物理块已满,指向下步操作。
3、物理块已满,将要淘汰原来首先进入到存中的页面,即换出;然后将现在的指令地址页面读入物理块中,即换入。
4、能够显示分配的页面的状态信息,包括地址围和读入的存物理块号(未读入与读入的区别显示),页面是否在主存中。
5、显示存分区即物理块号的使用状况。
第三章系统设计
本系统实现的功能比较简单,主要包括以下几个数据结构方面:
1、输入进程大小划分页面。
求页面数利用进程与每一页面的大小计算和求余函数add(),基本信息输出print()函数。
页面的初始信息包括页号、页面的指令地址围、读入物理块号(初始均设定为-1)、读入存状态。
intadd(intm,intn)//判断是否在物理块的最后一位,要不要加1
{
if(m%n)//不能整除,有余数,则需加1
return1;
else//刚好能整除
return0;
}
2、指令页面读入物理块。
该部分要包括空闲物理块的查询freebno()函数,装入物理块号load()函数,物理块指针自加inc()函数。
指令读入,查询存中是否有空闲的物理块,有则直接读入,同时物理块号指针自动指向下一个模块,以便下一个指令读入时装入存。
voidload(intb)//装入主存b号物理块
{
bno=b;
status=1;
block[b]=0;
}
intfreebno()//查出空闲的物理块号
{
inti;
for(i=0;iif(block[i])
returni;//返回空闲的物理块
returni;//没有空闲的物理块,返回的块号溢出
}
3.指令读入时物理块全部占满,需要调用换出out()函数,淘汰原来进入存的页面,利用FIFO算法,然后装入此事的指令到相应物理块。
voidout()//调出主存
{status=0;
bno=-1;
}
4.输出页面详细信息。
利用程序初始创建的page类函数定位到每个页面,查询其状态输出其详细信息即print()函数的具体容。
voidprint()
{
cout<<"页号:
"<"<"<";
if(status)
cout<<"在主存"<else
cout<<"在辅存"<}
3、存物理块的占用信息。
intblock[blocknum];
//存放物理块状态的数组,1为空闲,0为不空闲
if(block[i])
cout<<"空闲"<else
{
cout<<"占用";
inta=pg[i];
第四章程序设计流程图或N-S图
第五章源程序清单
//存储器管理系统设计
#include
constintpagesize=1024;
//页面大小
constintblocknum=4;
//系统分配的物理块数
intblock[blocknum];
//存放物理块状态的数组,空闲时为1,不空闲时为0
intpg[blocknum];
//存放物理块中的页号
classpage
{
intpno;//页号
intbno;//物理块号
intstatus;
//页的状态,1为在主存,0为在辅存
staticintn;//表态成员,为实现页的编号
public:
page()//构造函数
{
pno=n++;//编号
bno=-1;//不在任何物理块中
status=0;//初始值
}
intgetstatus()
{returnstatus;}
intgetbno()
{returnbno;}
intgetpno()
{returnpno;}
voidprint()
{
cout<<"页号:
"<"<"<";
if(status)
cout<<"在主存"<else
cout<<"在辅存"<}
voidload(intb)//装入主存b号物理块
{
bno=b;
status=1;//装入主存页号为1
block[b]=0;//数组状态不空闲
}
//调出主存,用于页面置换
voidout()
{status=0;
bno=-1;//相应页对应物理块号变为初始值
}
};
intpage:
:
n=0;//初始化页号
intfreebno()//查出空闲的物理块号
{
inti;
for(i=0;iif(block[i])
returni;//返回空闲的物理块
returni;//没有空闲的物理块,返回的块号溢出
}
voidinc(int&t)//以物理块数为模自加
{
if(t>=0&&tt++;
elseif(t==blocknum-1)
t=0;
else
cout<<"出错!
!
"<