操作系统报告Word文件下载.docx

上传人:b****3 文档编号:7960737 上传时间:2023-05-09 格式:DOCX 页数:23 大小:1.08MB
下载 相关 举报
操作系统报告Word文件下载.docx_第1页
第1页 / 共23页
操作系统报告Word文件下载.docx_第2页
第2页 / 共23页
操作系统报告Word文件下载.docx_第3页
第3页 / 共23页
操作系统报告Word文件下载.docx_第4页
第4页 / 共23页
操作系统报告Word文件下载.docx_第5页
第5页 / 共23页
操作系统报告Word文件下载.docx_第6页
第6页 / 共23页
操作系统报告Word文件下载.docx_第7页
第7页 / 共23页
操作系统报告Word文件下载.docx_第8页
第8页 / 共23页
操作系统报告Word文件下载.docx_第9页
第9页 / 共23页
操作系统报告Word文件下载.docx_第10页
第10页 / 共23页
操作系统报告Word文件下载.docx_第11页
第11页 / 共23页
操作系统报告Word文件下载.docx_第12页
第12页 / 共23页
操作系统报告Word文件下载.docx_第13页
第13页 / 共23页
操作系统报告Word文件下载.docx_第14页
第14页 / 共23页
操作系统报告Word文件下载.docx_第15页
第15页 / 共23页
操作系统报告Word文件下载.docx_第16页
第16页 / 共23页
操作系统报告Word文件下载.docx_第17页
第17页 / 共23页
操作系统报告Word文件下载.docx_第18页
第18页 / 共23页
操作系统报告Word文件下载.docx_第19页
第19页 / 共23页
操作系统报告Word文件下载.docx_第20页
第20页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

操作系统报告Word文件下载.docx

《操作系统报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《操作系统报告Word文件下载.docx(23页珍藏版)》请在冰点文库上搜索。

操作系统报告Word文件下载.docx

在所有320指令执行完毕后,请计算并显示作业运行过程中发生的缺页率。

3.置换算法:

请分别考虑最佳置换算法(OPT)、先进先出(FIFO)算法和最近最久未使用(LRU)算法。

4.作业中指令的访问次序按下述原则生成;

50%的指令是顺序执行的;

25%的指令是均匀分布在前地址部分;

25%的指令均匀分布在后地址部分。

具体的实现办法是:

(1)在[0,319]之间随机选取一条起始执行指令,其序号为m;

(2)顺序执行下一条指令,其序号为m+1条指令;

(3)通过随机数,跳转到前地址部分[0,m-1]中的某条指令处,其序号为m1;

(4)顺序执行下一条指令,即序号为m1+1的指令;

(5)通过随机数,跳转到后地址部分[m1+2,319]中的某条指令处,其序号为m2;

(6)顺序执行下一条指令,则序号为m2+1的指令;

(7)重复跳转到前地址部分,顺序执行,跳转到后地址部分;

顺序执行的过程,直至执行320条指令。

1设计思路

在进程运行过程中,若其所要访问的页面不在内存时,需把它们调入内存,但内存已无空闲空间时,为了保证该进程能正常运行,系统必须从内存中调出一页程序或数据,送磁盘的对换区中。

但应将哪个页面调出,所以需要根据一定的算法来确定。

在这一过程中,选择换出页面的算法称为页面置换算法。

一个好的页面置换算法,应具有较低的页面更换频率。

页面置换算法的好坏,将直接影响到系统的性能。

以下分别是实验要求的两个页面置换算法的介绍及其设计思想。

(1)先进先出法

该算法总是淘汰最先进入内存的页面,既选择在内存中驻留时间最久的页面予以淘汰。

在该算法的模拟过程中,每当页面被置换进入内存时,将置换页面所在的物理块中访问标记设为-1;

并且每执行一次指令,便将物理块的访问标记自动加1,需要置换时将访问标记最大的物理块中的页面置换出去,这样能防止当物理块访问标记出现两个以上相同的值的错误执行,更好地模拟了先进先出法;

(2)最近最久未使用

该算法以最近的过去作为不久将来的近似,将过去最长一段时间里不曾被使用的页面置换掉。

在该算法的模拟过程中,每当物理块中的页面被访问时(包括原先存在的和后来置换进入的页面),便将其物理块访问标记置为-1。

以后每执行一条指令,便将物理块中各页面的访问标记加1,需置换时访问标记最大的便是将要被置换的。

2文件系统结构的说明

3数据结构的说明

4各模块的算法流程图

(1)整体流程图

(2)LRU算法流程图

(3)LRU算法流程图

5程序清单

#include<

iostream.h>

stdlib.h>

conio.h>

stdio.h>

#defineBsize4

typedefstructBLOCK//声明一种新类型——物理块类型

{

intpagenum;

//页号

intaccessed;

//访问标识符,其值表示多久未被访问

}BLOCK;

intpc;

//程序计数器,用来记录指令的序号

intn;

//缺页计数器,用来记录缺页的次数

staticinttemp[320];

//用来存储320条随机数

BLOCKblock[Bsize];

//定义一大小为4的物理块数组

//*************************************************************

voidinit();

//程序初始化函数

intfindExist(intcurpage);

//查找物理块中是否有该页面

intfindSpace();

//查找是否有空闲物理块

intfindReplace();

//查找应予置换的页面

voiddisplay();

//显示

voidsuijishu();

//产生320条随机数,显示并存储到temp[320]

voidpagestring();

//显示调用的页面队列

voidLRU();

//LRU算法

voidFIFO();

//FIFO算法

voidinit()//初始化物理块

for(inti=0;

i<

Bsize;

i++)

{

block[i].pagenum=-1;

//空闲物理块

block[i].accessed=0;

pc=n=0;

}

}

//-------------------------------------------------------------

intfindExist(intcurpage)//查找物理块中是否有该页面

{

i<

i++)

if(block[i].pagenum==curpage)

returni;

//检测到内存中有该页面,返回block中的位置

return-1;

//没有则返回-1

intfindSpace()//查找是否有空闲物理块

if(block[i].pagenum==-1)

//找到空闲的block,返回block中的位置

}

//找不到则返回-1

intfindReplace()//查找应予置换的页面

intpos=0;

if(block[i].accessed>

block[pos].accessed)

pos=i;

//找到应予置换页面,返回BLOCK中位置

returnpos;

voiddisplay(intspace)//显示

if(block[i].pagenum!

=-1)//物理块不空

{printf("

%02d"

block[i].pagenum);

cout<

<

"

调入的页面是:

block[space].pagenum<

其物理块的地址是:

&

block[space];

endl;

voidsuijishu(intpc)//产生随机数

{intflag=0;

******按照要求产生的320个随机数:

*******"

320;

i++)

{

temp[i]=pc;

if(flag%2==0)pc=++pc%320;

//产生50%的顺序执行指令(flag=0或2时顺序执行)

if(flag==1)pc=rand()%(pc-1);

//产生25%的均匀分布在前地址部分指令

if(flag==3)pc=pc+1+(rand()%(320-(pc+1)));

//产生25%的均匀分布在后地址部分指令

flag=++flag%4;

printf("

%03d"

temp[i]);

if((i+1)%10==0)cout<

voidpagestring()//显示调用的页面队列

printf("

%02d"

temp[i]/10);

//-------------------------------------------------------------

voidLRU()//LRU算法(最近最少使用算法)

intexist,space,position;

intcurpage;

if(i%100==0)getch();

//getch直接从键盘获取键值

pc=temp[i];

//指令在数组中的位置

curpage=pc/10;

//指令所在页面

exist=findExist(curpage);

//查找物理块中是否有该页面,若有返回物理块号

if(exist==-1)//物理块中不存在该页

{

space=findSpace();

if(space!

=-1)//有空闲物理块

{

block[space].pagenum=curpage;

display(space);

n=n+1;

}

else//无空闲物理块,则寻找置换页面

position=findReplace();

//查找应予置换的页面

block[position].pagenum=curpage;

block[position].accessed=-1;

//恢复刚调入的BLOCK中页面accessed为-1

display(position);

n++;

}

else

{

block[exist].accessed=-1;

//恢复存在的并刚访问过的BLOCK中页面accessed为-1

for(inti=0;

i++)

{if(block[i].pagenum!

printf("

cout<

指令已经存在!

其物理块地址为:

block[exist]<

for(intj=0;

j<

4;

j++)//物理块中各页面的访问标记加1

{block[j].accessed++;

缺页次数:

n<

缺页率:

(n/320.0)*100<

%"

voidFIFO()//FIFO算法(先进先出算法)

if(exist==-1)//物理块中不存在该页

block[position].accessed=-1;

//置换页面所在的物理块中访问标记设为-1

else//若存在该页

for(intj=0;

j++)//物理块中各页面访问标记自动加1

block[j].accessed++;

voidmain()

intselect;

请输入第一条指令号(1~319):

;

cin>

>

pc;

//随机选取一条起始执行指令

if(pc>

=1&

pc<

=319)

suijishu(pc);

//产生随机数

*****对应的调用页面队列*******"

pagestring();

do

****************************************"

------1:

LRU2:

FIFO3:

退出-----"

请选择一种页面置换算法:

select;

init();

switch(select)

case1:

cout<

最近最久未使用置换算法LRU:

**************************"

LRU();

break;

case2:

先进先出置换算法FIFO:

cout<

*********************"

FIFO();

default:

;

}while(select!

=3);

elsecout<

输入非法数据!

6使用说明书

本程序能通过输入第一条指令号(用3位整数代表指令号),产生320个随机数,并以每行10个显示出来。

再把这320个随机数转换成对应的页面号,并以每行10个显示出来。

然后,通过输入选择键,分别执行两个置换算法。

各个置换算法能显示页面置换的情况,如果所访问的指令已在内存,则显示“该指令已经存在”并显示其物理地址;

如果所访问的指令还未装入内存,则显示“调入的页面是。

”,并显示其调入后的物理地址。

所有指令执行完毕后显示缺页次数,和缺页率。

基本实现了对请求调页存储器管理方式的模拟。

本程序的另一个亮点是使用getch()使程序的执行过程能够暂停。

本程序基本实现了实验要求,自我感觉程序不够精练,可读性不高,还要进一步改进。

6.运行结果及分析

7体会,建议

通过本次操作系统实验,使我们对操作系统这门课程有了更进一步的认识和了解,通过模拟实现请求页式存储管理的几种基本页面置换算法,了解虚拟储技术的特点。

本实验的难点之一在于如何用c语言按要求模拟生成随机指令,即50%的指令是顺序执行的,25%的指令是均匀分布在前地址部分,25%的指令是均匀分布在后地址部分,小组花了大量时间讨论和研究该算法,并参考了相关的资料、运用了随机函数,最终通过一个函数suiji(intpc)予以实现。

第二,如何较好地模拟出先进先出算法(FIFO)、最近最少使用算法(LRU)也花费了较多时间。

在本次设计过程中,用到了许多C++的基本知识和操作系统的基本原理,是对平时所学知识的一次考验,尽管这些知识都学过,但运用到实际时,却不知从何下手,而且错误不断,往往为了找一个错误而花了大量的时间,这是专业知识掌握不够,缺乏实践动手能力的表现。

在设计的过程中我们发现了许多自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,以后还要多加努力。

总之,通过该实验,我们了解到编写程序不是首要任务,而是一种实现手段。

我们最重要的是如何做好需求分析和理清思路,做出正确、简洁的流程设计,这样可以达到事半功倍的效果。

DNS协议为应用层协议,可实现IP地址和主机名之间的转换。

参考程序如下:

1程序源代码:

winsock.h>

string.h>

#pragmacomment(lib,"

ws2_32.lib"

//主文件//

intmain()

WORDwVersionRequested=MAKEWORD(1,1);

WSADATAwsaData;

//初始化windowssocketsAPI//

if(WSAStartup(wVersionRequested,&

wsaData)){

WSAStartupfailed%s\n"

WSAGetLastError());

charhostname[256];

//获得本主机名//

intres=gethostname(hostname,sizeof(hostname));

if(res!

=0){//错误处理//

Error:

%u\n"

本主机名为:

%s\n"

hostname);

//打印本主机名字//

请输入一个主机域名:

);

//输入一个主机的域名//

scanf("

%s"

//利用主机名获得主机的地址//

hostent*pHostent=gethostbyname(hostname);

if(pHostent==NULL){//错误处理//

Error:

//解析返回的主机地址信息:

别名、地址类型、地址长度,并打印//

hostent&

he=*pHostent;

name=%s\naliase=%s\naddrtype=%d\nlength=%d\n"

he.h_name,he.h_aliases,he.h_addrtype,he.h_length);

sockaddr_insa;

//打印主机每一个网卡的IP地址//

for(intnAdapter=0;

he.h_addr_list[nAdapter];

nAdapter++){

memcpy(&

sa.sin_addr.s_addr,he.h_addr_list[nAdapter],he.h_length);

Address:

inet_ntoa(sa.sin_addr));

}//显示lP地址//

\n"

unsignedlongaddr;

charhostaddr[50];

请输人服务器IP地址:

//输入一个服务器的IP地址//

hostaddr);

addr=inet_addr(hostaddr);

//将lP地址转化为网络字节序//

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2