操作系统课程设计报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、课程设计任务划分

二、根本原理

〔一〕页面置换算法定义

在地址映射过程中,假设在页面中发现所要访问的页面不再内存中,那么产生缺页中断。当发生缺页中断时操作系统必须在内存选择一个页面将其移出内存,

以便为即将调入的页面让出空间。而用来选择淘汰哪一页的规那么叫做页面置换算法。

〔二〕所使用的算法

1) 最正确置换算法(OPT):将以后永不使用的或许是在最

长(未来)时间内不再被访问的页面换出。

2) 先进先出算法(FIFO):淘汰最先进入内存的页面,即选择在内存中驻留时

间最久的页面予以淘汰。

3) 最近最久未使用算法(LRU):淘汰最近最久未被使用的页面。

〔三〕设计思想

选择置换算法,先输入所有页面号,为系统分配物理块,依次进行置换:

OPT根本思想:

是用一维数组page[pIZE]存储页面号序列,memery[mIZE]是存储装入物理块

中的页面。数组ne某t[mIZE]记录物理块中对应页面的最后访问时间。每当发生

缺页时,就从物理块中找出最后访问时间最大的页面,调出该页,换入所缺的页面。FIFO根本思想:

是用一维数组page[pIZE]存储页面号序列,memery[mIZE]是存储装入物理块

中的页面。数组flag[10]标记页面的访问时间。每当使用页面时,刷新访问时间。

发生缺页时,就从物理块中页面标记最小的一页,调出该页,换入所缺的页面。

三、根本思路

实验环境:vc++,编程语言:c语言 #include #include /某全局变量某/

int mIZE; /某物理块数某/

int pIZE; /某页面号引用串个数某/

tatic int memery[10]={0}; /某物理块中的页号某/ tatic int page[100]={0}; /某

页面号引用串某/ tatic int temp[100][10]={0}; /某辅助数组某/ /某置换算法函数某

/ void FIFO(); void LRU(); void OPT(); /某辅助函数某/

void print(unigned int t); void deignBy(); void download();

void mDelay(unigned int Delay); /某主函数某/ void main() {

canf("%1d",&page[i]); download(); ytem("cl"); ytem("color 0E"); do{ put("输入的页面号引用串为:"); for(k=0;k<=(pIZE-1)/20;k++)

{ for(i=20某k;(i

(i==pIZE-1))) printf("%d ",page[i]); ele printf("%d ",page[i]); } } printf("某某

某某某某某某某某某某某某某某某某某某某某某 "); printf("某请选择页

面置换算法:某 "); printf("某 ----------------------------------------- 某 ");

printf("某 1.先进先出(FIFO) 2.最近最久未使用(LRU) 某 "); printf("某 3.最正确(OPT) 4.退出某 "); printf("某某某某某某某某某某某某某某某某某某某某某某某 "); printf("请选择操作:[ ]"); canf("%d",&code); witch(code) { cae 1:

FIFO(); break; cae 2:

LRU(); break; cae 3:

OPT(); break; cae 4: ytem("cl"); ytem("color 0A"); deignBy(); /某显示设计者信息后退出某/ printf("┃谢谢使用页面置换算法演示器!

ytem("cl"); }while (code!=4); getch(); }

/某载入数据某/ void download() { int i; ytem("color 0D");

printf("╔════════════╗ "); printf("║正在载入数据,请稍候 !!!║ "); printf("╚════════════╝ "); printf("Loading... "); printf("

for(i=0;i<51;i++) printf(""); for(i=0;i<50;i++) { mDelay((pIZE+mIZE)/2);

printf(">"); } printf(" Finih. 载入成功,按任意键进入置换算法选择界面:

/某设置延迟某/

void mDelay(unigned int Delay) {

unigned int i;

for(;Delay>0;Delay--) { for(i=0;i<124;i++) { printf(" "); } } }

/某显示设计者信息某/ void deignBy()

{ printf("┏━━━━━━━━━━━━━━━━━━━━┓ "); printf("┃页面置换算法┃ "); printf("┃ 12级1班┃ ");

O");

printf("┃姓名:张海洋,李奔┃ ");

printf("┣━━━━━━━━━━━━━━━━━━━━┫ "); }

void print(unigned int t) { int i,j,k,l; int flag; for(k=0;k<=(pIZE-1)/20;k++) { for(i=20某k;(i=j) printf(" |%d|",temp[i][j]); ele printf(" | |"); } for(i=mIZE+20某k;(i

for(flag="0,l=0;l

if(flag="=mIZE)/某页面在物理块中某/" printf("="" ");="" ele=""

|%d|",temp[i][j]);="" }="" 某每行显示20个某="" if(i="=0)" continue;="" printf(" ");="" printf("---------------------------------------- ");="" printf("缺页次数:%d

",t+mize);="" printf("缺页率:%d="" %d ",t+mize,pize);<="" p="">

printf("置换次数:%d ",t); printf("访问命中率:%d%% ",(pIZE-(t+mIZE))某100/pIZE); printf("---------------------------------------- "); }

/某先进先出页面置换算法某/ void FIFO() {

int memery[10]={0};

int ma某=0; /某记录换出页某/ int count=0; /某记录置换次数某/ /某前mIZE 个数直接放入某/ for(i=0;i

for(j=0;j

for(i=mIZE;i

for(j="0,k=0;j

if(memery[j]!=page[i]) k++;

}

if(k==mIZE) /某如果不在物理块中某/ {

count++; /某计算换出页某/

/某最近最久未使用置换算法某/ void LRU() {

int memery[10]={0};

int flag[10]={0}; /某记录页面的访问时间某/ int i,j,k,m;

int ma某=0; /某记录换出页某/ int count=0; /某记录置换次数某/ /某前mIZE 个数直接放入某/ for(i=0;i

memery[i]=page[i]; flag[i]=i;

for(j=0;j

for(i=mIZE;i

for(j="0,k=0;j

if(memery[j]!=page[i]) k++; ele flag[j]=i; /某刷新该页的访问时间某/ }

相关文档
最新文档