10508123陈小妹操作系统实验报告4.docx
- 文档编号:6164527
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:13
- 大小:98.51KB
10508123陈小妹操作系统实验报告4.docx
《10508123陈小妹操作系统实验报告4.docx》由会员分享,可在线阅读,更多相关《10508123陈小妹操作系统实验报告4.docx(13页珍藏版)》请在冰豆网上搜索。
10508123陈小妹操作系统实验报告4
实验报告四
课程操作系统实验名称进程调度第1页
专业____计本__班级___09学号_************_姓名陈小妹
实验日期:
2011年12月2日报告退发(订正、重做)
一、实验目的
通过编写分页式存储管理的模拟程序,加深对页式存储管理方式的理解,熟悉逻辑地址到物理地址的转换过程,掌握虚拟存储管理中的页面调度算法,认识分页式虚拟存储系统中缺页中断的处理过程。
二、实验内容
1、设计一个分页式虚拟存储系统,用程序模拟实现,假设页面大小为1K,每个作业分配三个页面。
2、页面调度分别采用FIFO调度算法和最佳置换算法。
(淘汰页面时直接将该页面从内存中直接淘汰,不考虑该页面是否被修改,是否需要保存到外存。
)
3、假设当前作业的页表如下:
4、假设逻辑指令格式为:
操作符页号1页内地址1页号2页内地址2
例如:
表示将页面1内地址为011单元的内容和页面2中地址为051的单元的内容相加。
现有指令序列如下:
5、编写模拟程序,执行上述指令,若当前页面不在内存,则使用页面调度算法,淘汰相应页。
6、要求每执行上述指令流中的一条逻辑指令,输出相应的物理指令,若页表有修改,则显示修改后的页表。
三、实验步骤
#include
#include
#include
#defineFIFO1
#defineBEST0
#defineYES1
#defineNO0
typedefintpnum_t;
typedefintbnum_t;
typedefintdispos_t;
typedefcharopcode_t;
typedefintpadder_t;
typedefstructpagetab_t//页表
{
pnum_tpnum;
intisin;
bnum_tblocknum;
intisedit;
dispos_tdiskpos;
structpagetab_t*next;
}pagetab_t,*pagetabp;
typedefstructoperate//操作指令
{
opcode_topcode;
pnum_tpnum1;
padder_tpadder1;
pnum_tpnum2;
padder_tpadder2;
structoperate*next;
}operate_t,*operatep;
voidinitpage(pagetabp&head)//初始化页表
{
pagetabpq;
for(inti=0;i<6;i++)
{
pagetabpp=(pagetabp)malloc(sizeof(pagetab_t));
if(i==0)
{
head=q=p;
q->next=NULL;
}
else
{
p->next=q->next;
q->next=p;
q=p;
}
q->pnum=i;
q->isedit=NO;
if(i<3)
{
q->isin=YES;
cout<<"请输入第"<
cin>>q->blocknum;
}
else
{
q->isin=NO;
cout<<"请输入第"<
cin>>q->diskpos;
}
}
}
voidinitoperat(operatep&head)//初始化操作指令表
{
operatepq;
for(inti=0;i<5;i++)
{
operatepp=(operatep)malloc(sizeof(operate_t));
if(i==0)
{
head=q=p;
q->next=NULL;
}
else
{
p->next=q->next;
q->next=p;
q=p;
}
cout<<"请输入第"<
";
cin>>q->opcode>>q->pnum1>>q->padder1>>q->pnum2>>q->padder2;
}
}
boolisinmem(pnum_tnum,pagetabphead,pagetabp&p)//判断是否在内存
{
pagetabpq=head;
while(q)
{
if(num==q->pnum)
{
p=q;
if(q->isin)
returntrue;
else
returnfalse;
}
q=q->next;
}
returnfalse;
}
voidprintable(pagetabphead)//输出操作完的页表
{
pagetabpp=head;
printf("页号标记主存块号修改标记磁盘位置\n");
while(p)
{
if(p->isin)
printf("%d%d%d%d\n",p->pnum,p->isin,p->blocknum,p->isedit);
else
printf("%d%d%d%d\n",p->pnum,p->isin,p->isedit,p->diskpos);
p=p->next;
}
}
voidfifosched(pagetabpp,pagetabp&head)//fifo调度算法
{
pagetabpq=head;
pagetabpj=head;
pagetabpr,t;
while(j)//找到p的前一个节点
{
if(j->next==p)
break;
elsej=j->next;
}
while(q)
{
if(q->next->isin)//找到最后一个到达内存的节点把节点p插在其后
{
q=q->next;
continue;
}
if(q->next!
=p)//若已经在其后顺序不变
{
r=q->next;
q->next=p;
t=p->next;
p->next=r;
j->next=t;
}
p->isedit=YES;//修改要替换的头节点和新节点p的信息
head->isedit=YES;
p->blocknum=head->blocknum;
head->diskpos=p->diskpos;
head->isin=NO;
p->isin=YES;
r=head;//替换头结点
head=head->next;
t=p->next;
p->next=r;
r->next=t;
break;
}
}
voidbestsched(pagetabpp,pagetabp&head,boolisin)//最佳置换算法
{
pagetabpr,t,q=head;
pagetabpj=head;
if(isin)//若已经在内存则更新放在内存节点最后面
{
while(q)//找到最后一个内存的节点把节点p插在其后
{
if(q->next->isin)
{
q=q->next;
continue;
}
elsebreak;
}
if(p!
=q)//若已经在最后则不用更新否则更新
{
if(head==p)
{
head=head->next;
r=q->next;
q->next=p;
p->next=r;
}
else
{
while(j)//找到p的前一个节点
{
if(j->next==p)
break;
elsej=j->next;
}
r=q->next;
q->next=p;
t=p->next;
p->next=r;
j->next=t;
}
}
}
else//若不在内存则置换并修改相应信息
{
while(j)//找到p的前一个节点
{
if(j->next==p)
break;
elsej=j->next;
}
while(q)
{
if(q->next->isin)//找到最后一个到达内存的节点把节点p插在其后
{
q=q->next;
continue;
}
if(q->next!
=p)//若已经在其后不用改变顺序
{
r=q->next;
q->next=p;
t=p->next;
p->next=r;
j->next=t;
}
p->isedit=YES;//修改要替换的头节点和新节点p的信息
head->isedit=YES;
p->blocknum=head->blocknum;
head->diskpos=p->diskpos;
head->isin=NO;
p->isin=YES;
r=head;//替换头结点
head=head->next;
t=p->next;
p->next=r;
r->next=t;
break;
}
}
}
voidopera(operatephead,pagetabp&page,intchoise)//进行操作
{
operatepq=head;
pagetabpp1=NULL,p2=NULL;
while(q!
=NULL)
{
boolisin1=isinmem(q->pnum1,page,p1);//p1为只向页表的指针
if(choise==FIFO)
{
if(!
isin1)//若不在内存进行置换
{
fifosched(p1,page);
}
}
else//在内存进行更新不在内存进行置换更新
{
bestsched(p1,page,isin1);
}
boolisin2=isinmem(q->pnum2,page,p2);
if(choise==FIFO)
{
if(!
isin2)//若不在内存进行置换
{
fifosched(p2,page);
}
}
else//在内存进行更新不在内存进行置换更新
{
bestsched(p2,page,isin2);
}
printf("逻辑指令为:
%c%d%d%d%d\n",q->opcode,q->pnum1,q->padder1,q->pnum2,q->padder2);
printf("物理指令为:
%c%d%d%d%d\n",q->opcode,p1->blocknum,p1->blocknum*1024+q->padder1,p2->blocknum,p2->blocknum*1024+q->padder2);
q=q->next;
}
}
voidmain()
{
intchoise;
pagetabppt;
operatepopt;
initpage(pt);
initoperat(opt);
cout<<"请选择你需要的页面调度算法FIFO请输入1,best请输入0:
";
cin>>choise;
opera(opt,pt,choise);
printable(pt);
}
四、实验结果
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 10508123 小妹 操作系统 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)