操作系统课程设计老化算法模拟分页系统Word文档下载推荐.docx
《操作系统课程设计老化算法模拟分页系统Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计老化算法模拟分页系统Word文档下载推荐.docx(17页珍藏版)》请在冰豆网上搜索。
教师评语………………………………………………………12
附录……………………………………………………………13
1总体设计
1.1概要设计
1.编写一个程序,它使用老化算法模拟一个分页系统。
页帧的数量是参数。
页面的访问序列从文件中读取。
对于一个给定的输入文件。
列出每1000个内存访问中发生缺页中断的数目,它是可用页帧数的函数。
(教材P141,41题);
2.一个简单的典型测试数据:
分配的内存帧数:
3
进程页访问序列:
0、1、2、3、4、1、2、0、1、2、3、4、0、1、2、3;
3.程序中相对地址空间为10个页。
程序设计作为参数输入,假设页帧为3块,初始均为空;
程序设计时作为参数输入,时钟周期为10个数;
4.按要求设计测试比较更大数据量的页面访问。
2详细设计
2.1模块设计
整个程序运用老化算法并使用VisualStudio2008开发平台。
整个程序中分为读取文件,修改R位,读取R位,判断缺页中断和主函数。
2.1.1主函数模块
main()程序流程控制和控制时钟周期以及最终的结果打印。
voidmain(){
charch[Size];
read(ch);
inti=0;
while('
0'
<
=ch[i]&
&
ch[i]<
='
9'
){
printf("
%c"
ch[i]);
//写入帧并判断缺页中断
dauflt(ch[i]);
//修改R位
change(ch[i]);
i++;
//时钟周期为10个数
if(i%10==0){
printf("
灬灬灬灬灬灬灬灬灬灬灬灬灬灬\n"
);
\n"
//写入计数器
readch();
//清空R位
for(inti=0;
i<
10;
i++)
R[i]=0;
}
}
printf("
\n计数器最终情况:
for(intj=0;
j<
row;
j++)
{
\t\t"
for(intk=0;
k<
5;
k++)
%d"
count[k][j]);
缺页中断数:
\t%d\n"
fault_num);
}
2.1.2修改R位模块
change(charc)将读入的字符逐一进行判断并修改其对应的R位上的值,当R位上为0则改为1,1则无需做任何修改。
//读取R位
voidreadch(){
charch;
for(inti=0;
i++){
ch=frame[i];
//获取帧对应的R位,并写入计数器
count[i][row]=R[ch-48];
row++;
2.1.3读取文件模块
read(charch[])判断文件是否存在,并将data.txt的内容读取到字符数组ch[]中。
//读取文件内容
voidread(charch[])
{
file=fopen("
date.txt"
"
rb"
if(file==NULL)
cannotopenthedate.txtfile"
while(!
(feof(file)))
{ch[i]=getc(file);
fclose(file);
2.1.4判定缺页中断模块
dauflt(charc)每当读入一个文件首先在frame[4]判断是否有空位,有则直接补到空位处并引发缺页中断;
无则查看计数器,选择最小计数器对应的帧来存放,并同样引发缺页中断;
另外,当此数在帧内存在时,无需做任何操作。
//判断缺页中断
voiddauflt(charc){
inth=0;
intmin=0;
intcounts[3]={0};
//判断是否有空位
for(h=0;
h<
3;
h++){
if(frame[h]==c)
break;
if(0>
frame[h]||frame[h]<
9){
frame[h]=c;
fault_num++;
丨"
}
//无空位的情况
if(h==3){
//判断帧内是否有这个数
for(intp=0;
p<
p++){
if(frame[p]==c)
break;
//帧内无这个数
if(p==3){
//发生缺页中断
//统计计数器
for(intk=0;
k++){
for(intj=0;
j++){
counts[k]+=count[k][j];
}
}
//比较计数器,选择最小器
intminlin=counts[0];
for(intj=1;
if(minlin>
counts[j]){
min=j;
minlin=counts[j];
frame[min]=c;
//输出当前帧内情况
\t帧内情况:
"
for(intz=0;
z<
z++){
%c\t"
frame[z]);
2.1.5读取R位模块
readch()每当时钟周期到时,调用此函数将帧frame[4]内的值写入计数器count[4][row]中,row表示当前处于第几个时钟周期。
2.2流程图
不成功
成
功
3调试与测试
3.1调试过程中的问题
读取文件时候访问不了数据,页面访问序列存放到文件data.txt中,该文件放入工程目录下,然后将文件中的序列读入一个数组中。
修改R位,每个页设置一个R位(访问位),取值为0(表示未访问),取值为1,当在一个时钟滴答内访问该页时,置为1。
每个时钟滴答开始时置所有页的R位为0。
3.2测试结果
data.txt中的数据:
结果:
参考文献
[1]塔嫰鲍姆:
《现代操作系统》[M],机械工业出版社2009.7,第99页。
心得体会
每一次课程设计度让我学到了在平时课堂不可能学到的东西。
所以我对每一次课程设计的机会都非常珍惜。
不一定我的课程设计能够完成得有多么完美,但是我总是很投入的去研究去学习。
一个多月的实验就这样到了尾声,我想我还学到了一些东西。
学习这门课之前不知道上这门课的真正用途在哪里,现在才知道操作系统是那么有用,电脑中一重之重的基础软件,当然非常复杂,这次的实验我是做第三个题目,而这个程序题目要求也并非真正的分页系统,而是模拟老化算法的分页系统,所以做起来难度并非很高。
教师评语
#include<
stdio.h>
stdlib.h>
string.h>
FILE*file;
#defineSize1000
#defineNum10//缺页中断数
staticintfault_num=0;
//帧
staticcharframe[3];
//访问位
staticintR[10]={0};
//计数器
staticintcount[3][1000]={0};
//计数器的列数
staticintrow=0;
//修改R位
voidchange(charc){
i+=48;
if(c==i)
R[i-48]=1;
i-=48;
灬灬灬灬灬灬灬灬灬灬灬灬灬灬灬灬灬\n"