操作系统河海大学文天学院Word格式.docx
- 文档编号:1092392
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:29
- 大小:105.77KB
操作系统河海大学文天学院Word格式.docx
《操作系统河海大学文天学院Word格式.docx》由会员分享,可在线阅读,更多相关《操作系统河海大学文天学院Word格式.docx(29页珍藏版)》请在冰点文库上搜索。
(7)在所设计的程序中应有显示或打印语句,能显示或打印每次被选中进程的进程名以及运行一次后进程队列的变化。
(8)为五个进程任意确定一组“优先数”和“要求运行时间”,启动所设计的处理器调度程序,显示或打印逐次被选中进程的进程名以及进程控制块的动态变化过程。
三.进程调度处理过程
否是
是
否
四.源程序分析
/*08计算机学号:
08031421*/
//操作系统,进程调度用链表实现
#include<
iostream.h>
malloc.h>
stdlib.h>
time.h>
typedefstructpcb//进程的PCB块
{
charid;
//进程名
charstate;
//进程的状态
intprior;
//进程的优先级
inttime;
//进程的时间
pcb*next;
//指向结构体的指针
}pcb,*plist;
voidinsert(plist&
head,pcb*p)
//动态的根据条件,将链表插入到合适的位置中去
pcb*s,*r;
if(head->
next==NULL)//如果head指针为空,则应该插入到对头
head->
next=p;
p->
next=NULL;
}
else
s=head;
r=s->
next;
while(r!
=NULL&
&
r->
prior>
=p->
prior)
//根据s,r的位置去确定p的插入的位置
{
s=r;
r=r->
//找到新节点q的插入位置,循环后,q节点应该处于结点s,r之间,
//如果r为空,则未尾结点
next=r;
s->
}
{
pcb*m;
//cout<
<
"
***************************************"
endl;
cout<
plistp;
p=head;
cout<
进程id"
进程优先级"
进程所需的运行时间"
进程的状态"
while(p->
next)
p=p->
"
p->
id<
prior<
time<
state;
}
m=head->
if(m->
time==0)
m->
进程已经运行完毕,要从链表中删除<
next=head->
next->
//将该结点从链表中删除
next=m->
//对头结点进行重新插入
insert(head,m);
endl<
voidcreate(plist&
head,intn)//表示链表的长度是可变的
inti;
pcb*p;
for(i=0;
i<
n;
i++)
p=(plist)malloc(sizeof(pcb));
请输入第"
i+1<
个进程名:
(字符型)"
优先级:
(整型)
运行时间:
(整型)"
cin>
>
id>
time;
state='
r'
;
//初始的转台全部为r
insert(head,p);
//将结点插入到合理的位置
voidyunxing(plist&
head)//对头结点进行的操作
开始进程调度"
while(head->
next!
=NULL)
进程"
被调度,时间数和优先级都减1。
m->
prior=m->
prior-1;
time=m->
time-1;
if(m->
time==0)//如果头结点已经运行完,将状态改为e
head->
e'
showjincheng(head);
voidmain()
clock_tstart,finish;
doubleshijian;
inta;
//进程数
intb;
//是否确认
do//确认用户的选择,如果输入错误,可以重新输入
do//控制进程的数目在合理的范围内
system("
cls"
);
******************************"
姓名:
胡德伟"
学号:
08031421"
班级:
08计算机四班"
指导老师:
邓老师"
实验一:
进程调度"
请输入您所创建的进程的数目(不要超过10个)"
cin>
a;
if(a>
=10||a<
0)
if(a>
=10)
您所创建的进程数不能大于10,请重新输入"
else
您所创建的进程数不能为负数,请重新输入"
}while(a>
0);
您所创建的进程数为"
a<
确认请按1,重新输入进程数请按0"
b;
if(b==0)
请重新输入您所创建的进程的数目"
}while(b==0);
尊敬的用户,您所创建的进程数为"
plisthead;
head=(plist)malloc(sizeof(pcb));
//为头结点分配空间
create(head,a);
//通过插入的方法构造链表
初始化创建的进程为:
start=clock();
//显示链表的内容
yunxing(head);
//对进程进行操作的过程
所有的进程都已经运行结束了!
finish=clock();
shijian=double(finish-start)/CLOCKS_PER_SEC;
程序的执行时间为"
shijian<
ms"
实验二存储管理
存储管理的主要功能之一是合理地分配空间。
请求页式管理是一种常用的虚拟存储管理技术。
本实验的目的是通过请求页式存储管理中页面置换算法模拟设计,了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换算法。
通过随机数产生一个指令序列,共320条指令。
指令的地址按下述原则生成:
①50%的指令是顺序执行的;
②25%的指令是均匀分布在前地址部分;
③25%的指令是均匀分布在后地址部分。
具体的实施方法是:
①在[0,319]的指令地址之间随机选取一起点m;
②顺序执行一条指令;
③在前地址[0,m+1]中随机选取一条指令并执行,该指令的地址为m′;
④顺序执行一条指令,其地址为m′+1;
⑤在后地址[m′+2,319]中随机选取一条指令并执行;
⑥重复上述步骤②~⑤,直到执行320次指令。
(1)将指令序列变换成为页地址流
设:
①页面大小为1K;
②用户内存容量为4页到32页;
③用户虚存容量为32K。
在用户虚存中,按每K存放10条指令排列虚存地址,即320条指令在虚存中的存放方式为:
第0条~第9条指令为第0页(对应虚存地址为[0,9]);
第10条~第19条指令为第1页(对应虚存地址为[10,19]);
┇
第310条~第319条指令为第31页(对应虚存地址为[310,319])。
按以上方式,用户指令可组成32页。
(2)计算并输出下述各种算法在不同内存容量下的命中率。
1先进先出的算法(FIFO);
2最近最久未使用算法(LRU);
命中率=1-页面失效次数∕页地址流长度
在本实验中,页地址流长度为320,页面失效次数为每次访问相应指令时,该指令所对应的页不在内存的次数。
三、虚拟内存实现原理图
4.源程序分析
/*08计算机4班*/
iostream>
deque>
//队列
ctime>
//获取系统的时间
usingnamespacestd;
typedefstruct//页面的结构体信息
intid;
//页面的id号
intstaytime;
//在内存中的停留的时间
intunusualtime;
//多久未被使用的时间
}Cpage;
deque<
int>
queue;
//可以直接的使用队列的方法
Cpage>
interPage;
//内存中的页面
exterPage;
//外存中页面
intxianzaiweizhi;
intlacknum[2]={0,0};
//缺失的页面数
intgetRandNum(intrange)//返回[0,range)范围内的整数
returnint(rand()%range);
//根据srand函数得到随机数
voidInitDevice()//初始化运行队列按照25%50%25%的标准生成
srand(int(time(NULL)));
//通过调用系统时间,产生随机数,并强制的转化成整型
intyehao=getRandNum(320);
//随机选择第一条指令
queue.push_back(yehao);
//将其插入队列
if(yehao<
319)
queue.push_back(yehao+1);
//顺序执行下一条指令
while(queue.size()<
320)//一直运行到队列中的个数等于320
yehao=getRandNum(yehao);
//跳转到m1属于[0,m-1]
//将m1插入队列
319)
//将m1+1插入队列
inttemp=320-(yehao+2);
yehao=yehao+2+getRandNum(temp);
//跳转到m2属于[m+2,319]
//插入队列
319)
//将m2+1插入队列
while(queue.size()>
320)
//如果队列中的个数大于320,则把多余的队列进行出栈的操作
queue.pop_back();
voidInitMemoryQueue()//初始化页面
xianzaiweizhi=0;
exterPage.clear();
//对外存的页面进行清除
interPage.clear();
//对内存的页面进行清除
for(inti=0;
32;
Cpagetemp;
temp.id=i;
temp.staytime=0;
//停留时间和未使用的时间都初始化未0
temp.unusualtime=0;
exterPage.push_back(temp);
//将产生的页面进行入队的操作
intshuyunageyemian(intcmdId)
//通过强制转换成整数的形式判断指令属于哪个页面
returnint(cmdId/10);
intyemianzhuantai(intPageId,boolsign)
//分别在内外存中查找页面存在返回位置不存在返回-1
if(sign)//在内存中进行查找
interPage.size();
if(PageId==interPage[i].id)
returni;
}
else//在外存中进行查找
for(intj=0;
j<
exterPage.size();
j++)
if(PageId==exterPage[j].id)
returnj;
return-1;
//如果内外存中都不在的话,返回-1
voiddirectFlod(intPageId)//当内存空间还有剩余时直接调入
intstatus=yemianzhuantai(PageId,false);
if(status==-1)return;
interPage.push_back(exterPage[status]);
//向内存插入
exterPage.erase(exterPage.begin()+status);
//从外存删除队列开始的位置加上偏移量
intfifo()//FIFO算法中查找在内存中呆了最久的页面
intmax=0;
for(unsignedi=1;
if(interPage[i].staytime>
interPage[max].staytime)
//找到在内存中停留时间时间最长
max=i;
returnmax;
//返回停留时间最长的最大值
intlru()//LRU算法中查找最久未使用的页面
if(interPage[j].unusualtime>
interPage[max].unusualtime)
//找到最久未被使用的算法
max=j;
returnmax;
//返回未被使用的最大值
boolManage(intcount,intPageId)//当内存已经满了需要按照算法调度
//获取执行页面在外存中的索引地址
if(status==-1)
returnfalse;
inttargetStatus=0;
if(count==0)
targetStatus=fifo();
//根据fifo算法内存中需要交换的位置
elseif(count==1)
targetStatus=lru();
//根据lru算法内存中需要交换的位置
interPage[targetStatus].staytime=0;
//将要交换的内存//页面的停留时间和最近多久未被使用的时间进行初始化为0
interPage[targetStatus].unusualtime=0;
swap(exterPage[status],interPage[targetStatus]);
//内外层中的页面进行交换
returntrue;
voidrun(intcount)
while(xianzaiweizhi<
320)//如果现在的位置在合理的范围内
for(inti=0;
i++)//对内存中的页面进行操作
interPage[i].staytime++;
//内存页面的停留时间++
interPage[i].unusualtime++;
//内存页面未使用的时间++
}
intPageId=shuyunageyemian(queue[xianzaiweizhi++]);
intstatus=-1;
//找到当前将要执行的指令的页面号,初始化为-1
if((status=yemianzhuantai(PageId,true))!
=-1)//如果查找的页面//在内存中,将最近最久时间标记为0,并结束本次的操作
interPage[status].unusualtime=0;
continue;
}//如果不在内存中,所执行的操作
lacknum[count]++;
//缺失的页面数+1
if(interPage.size()<
4)
//内存的队列未满,将该页面从外存中调入到内存中去
directFlod(PageId);
//调入的操作
else
Manage(count,PageId);
//内存的队列已满,则根据算法进行调换
实验二:
存储管理"
InitDevice();
inti;
//循环的控制
//换行的控制
intflag;
//进行何种操作的控制
b=0;
产生的随机数为:
for(i=0;
=319;
queue[i]<
b++;
if(b%12==0)
intcount=0;
while(count<
2)
InitMemoryQueue();
run(count);
count++;
do//由用户选择输出的结果
*****请输入您要进行的操作*******"
*****1.先进先出的算法调度*******"
*****2.最近最久未使用的算法调度*"
flag;
if(flag==1)//先进先出的算法调度
先进先出的算法调度的缺页率为:
(double)lacknum[0]/320*100<
%"
elseif(flag==2)//最近最久的算法调度
最近最久未使用的算法调度的缺页率为:
(double)lacknum[1]/320*100<
是否继续(1.继续0.退出)"
}while(flag==1);
//满足此条件,重新做里面的内容
system("
PAUSE"
实验三文件系统设计
通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能及内部实现。
为
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 大学 学院