操作系统实验报告样本_第1页
操作系统实验报告样本_第2页
操作系统实验报告样本_第3页
操作系统实验报告样本_第4页
操作系统实验报告样本_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

《操作系统原理》班级:软件81001学号:100047123姓名:王必阳指导教师:朱新山2011-2012学年第二学期实验名称:LINUX用户界面实验时间:2012年4月27日第11周星期5成绩实验目的1.基于Windows系统使用经验,熟悉XWindow图形操作环境。2.熟悉Linux字符操作界面,熟练掌握常用Shell命令。3.熟悉Linux中文本编辑方法,学会编辑软件vi的使用。4.了解Linux编绎器gcc的功能,掌握基于Linux平台的C程序开发。实验预习(预备知识的问题及回答)1.解释文件系统装载和装载点。由于文件系统的差异,Linux在默认情况下并不支持软盘、光盘和U盘,所以需要通过装载相应盘片才可以访问其中的数据。装载点是挂载文件系统的目录位置。2.给出Linux系统中各设备的名称(虚拟机环境中):软盘fdo光盘hdc硬盘sdaUsb接口的优盘sdb1。3.权限的含义是什么?如何使用数字法设定文件的权限?权限的含义Linux系统中的每个文件和目录都有相应的访问许可权限,访问权限分为只读(r),可写(w)和可执行三种。有三种不同类型的用户可对文件或目录进行访问,分别是文件所有者(u),同组用户(g)和其他用户(o)。所有的文件和目录都被创建它们的人所“拥有”,只要你是这个文件的所有者或你登录为根用户,你就拥有了改变所有者、组群和其他人权限的权利。使用数字法改变权限命令格式chmod权限数值文件名说明给指定文件赋予数值所规定的权限。在数字设定法中,每种权限设置均可用数值来代表,其中0表示没有权限,1表示可执行权限,2表示可写权限,4表示可读权限,这些值之和便可用来设立特定权限。所以数字属性的格式应为3个0~7的八进制数,3个数表示的次序为u、g和o。例:将文件file6设置为rwxr-x—x权限,命令为:Chmod751file64.什么是I/O重定向?(1)输入重定向<命令格式命令<文件名说明将命令(或可执行程序)的标准输入重定向到指定的文件中。例:cat</etc.txt1表示将/etc.txt1的文件内容作为cat命令的输入,显示到屏幕。(2)输出重定向<命令格式命令>文件名说明将命令(或可执行程序)的标准输出或标准错误输出重定向到指定文件中。例:ls/etc>/test1/etc.txt表示将/etc目录下的文件列表输出到文件/text1/etc.txt中。5.在Linux中挂载u盘并能显示其文档的中文信息,所使用的挂载命令是:挂载U盘命令格式mount/dev/sda1/mnt/usb。6.什么是vi的三种操作模式?vi有3种基本工作模式:命令模式(CommandMode)、输入模式(InsertMode)和末行模式(LastLineMode)。7.图示三种工作模式转换图。启动vi启动vi命令模式输入模式末行模式i,a,oeso:,?,/实验内容(包含实验所用命令或相关程序源代码)1.shell操作命令(1)创建名为stu1、stu2的2个用户,设置密码分别为student1和student2,并将它们设为组group1中的成员。#useraddstu1#passwdstu1回车后敲入密码student1#groupaddgroup1#usremod–ggroup1stu1#useraddstu2–ggroup1#sustu2$passwd回车后敲入密码student2(2)在每个用户的主目录下建立2个目录,分别命名为dir1和dir2。[stu1@localhostroot]$cd~[stu1@localhoststu1]mkdirdir1[stu1@localhoststu1]sustu2[stu2@localhoststu2]mkdirdir2(3)查找stu1用户主目录、下属各子目录的默认存取权限,并给出结论。$cd~$ls–ldir1目录权限为:drwxr-xr-x,即目录的用户可读、写、执行,同组用户可读、执行,其他用户可读、执行。$cd..$ls–l用户主目录权限为:drwx,即目录的用户可读、写、执行,同组和其他用户无任何权限。(4)调试pwd和cd命令,回答下列关于Linux文件系统中目录的有关问题。=1\*GB3①用户主目录的绝对路径如何表示?/home/stu1,/home/stu2=2\*GB3②根目录如何表示?/=3\*GB3③.和..分别表示什么目录?本级目录,父目录=4\*GB3④~表示什么目录?用户主目录(5)新建用户stu3,设置其密码为student3,并将其设置为group2中成员。尔后,以stu3登录,在其主目录下建立名为text的目录,在text目录下再建立名为dir1的子目录,并使其成为当前目录。#groupaddgroup2#useraddstu3–ggroup2#sustu3$passwd回车后敲入密码student3$cd~$mkdirtext$mkdirdir1$cdtext/dir1(6)使用以下命令,分析下列命令行的显示结果。$cat>sneakers.txtbuysomesneakersthengotothecoffeeshopthenbuysomecoff^D$catsneakers.txt命令将输入重定向至文件sneakers.txt中,cat命令可以显示文本文件的内容。(7)使用上题的方法,在dir1目录中建立home.txt文件,其内容为:bringthecoffeehometakeoffshoesputonsneakersmakesomecoffeerelax!$cd/home/stu1/dir1$cat>home.txtbringthecoffeehometakeoffshoesputonsneakersmakesomecoffeerelax![ctrl+D](8)试写出实现下列功能的shell命令:=1\*GB3①将home.txt文件移至其上级目录中(即text目录下)。$mv./home.txt..=2\*GB3②将home.txt添加到sneakers.txt尾部形成新的文件saturday.txt。$catsneakers.txt>saturday.txt$cathome.txt>>Saturday.txt=3\*GB3③将text目录树从stu3用户主目录下移至stu2主目录下。$su#mv/home/stu3/text/home/stu2=4\*GB3④将Saturday.txt文件从stu1目录中复制到stu2目录中。#cp/home/stu1/saturday.txt/home/stu2(9)试画出上述命令后,用户主目录中的目录树。2.LinuxC程序开发(1)使用cat>source命令,建立一个包含若干空行的source文本文件,编写C程序将source中的空行过滤后显示出来。【源程序】//程序compact.c如下:#include<stdio.h>main(){intlen=0,i=0,j;charc,line[100];while((c=getchar())!=EOF){If(c!=’\n’){line[i]=c;i++;if(c!=’’&&c!=’\t’)len++;//若该行有非空字符,则len长度增加}elseif(len>0){line[i]=c;for(j=0;j<=I;j++)printf(“%c”,line[j]);len=0;i=0;}}}gcc–ocompactcompact.ccat>sourcethisisline1thisisline2thisisline4<ctrl+d>【运行与测试】:./compact<source(2)使用C语言编写一个反向打印程序,使之能够将输入文件中文本行按逆序打印出来(即后出现的文本行先打印)。【源程序】#include<stdio.h>#include<string.h>main(){FILE*fp;charc,buf[100];inti=0,len=0,j=0,k;fp=fopen(“myfile”,”w+”);//新建一个文件并输入while((c=getchar())!=EOF){fputc(c,fp);len++;}len=len-1;while((fseek(fp,-2L,1)==0)&&(j<len)){c=fgetc(fp);i++;j++;//i为每行的字符个数,j是总的字符个数if(c==’\n’){fread(buf,i,1,fp);for(k=0;k<i;k++)printf(“%c”,buf[k]);fseek(fp,-i,1);i=0;}if(j==len){fseek(fp,-1,1);//fgetc读取字符后指针后移一个字符,所以要向前移fread(buf,i,1,fp); for(k=0;k<i;k++)printf(“%c”,buf[k]);}}}【运行与测试】3.附加题使用C语言编写一个词频统计程序,使之能够搜索指定单词在输入文件中的出现次数。【源程序】#include<stdio.h>#include<string.h>intmain(argc,argv)intargc;char*argv[];{inti,flag=0;match=0;charc,*str;argv++;str=*argv;i=0;while((c=getchar()!=EOF){if((i<strlen(*argv))&&(c==*str)&&(flag==0)){str++;i++;}else{if((i==strlen(*argv))&&(c==’‘||c==’,’||c==’\t’))//如果匹配的字符个数和输入字符数相等{match++;i=0;str=*argv;}else{if(c==’‘||c==’,’||c==’\t’)flag=0;//flag标志表示每次从单词首部开始比较elseflag=1;//flag=1表示单词的第一个字母不匹配,无须再比较}}}Printf(“string:%sappears%dtimes\n”,*argv,match);}【运行与测试】调试体会

实验名称:SHELL程序设计实验时间:年月日第周星期成绩一、实验目的1.熟悉Shell脚本编程的步骤,掌握基于Bash的Shell脚本开发。2.掌握Shell脚本中变量、条件测试的使用。3.掌握Shell脚本中的控制流结构和函数的使用。实验预习(预备知识的问题及回答)1.Linux系统默认的shell语言是什么?欲查看该shell的版本,应使用什么命令?Linux系统默认的shell语言是Bashshell。欲查看该shell的版本,应使用的命令是:$echo$BASH_VERSION2.预习shell有关变量和参数的相关知识,回答下列问题。(1)假设用户进行了如下的赋值操作:$person=jenny试给出下面命令的输出结果。1)echopersonperson2)echo$personjenny3)echo‘$person’$person4)echo“$person”jenny(2)填充下列与环境变量、位置变量和预定义变量相关的表格。Shell变量定义HOME用于保存用户注册目录的绝对路径PATH保存用冒号分隔的目录路径,shell将按PATH变量中给出的顺序搜索这些目录,找到第一个与命令名一致的可执行文件将被执行。PWD当前工作目录的绝对路径名,该变量取值随cd命令的使用而变化。PS1主提示符,默认特权用户为#,普通用户为$。$0表示当前shell程序的文件名。$#表示位置参数的个数。$?前一命令执行后返回的状态。$$当前进程的pid。3.写出下列expr命令的输出:exprindex“value”‘a’expr“value”:‘v.*u’expr“aaa”:‘a\+’expr“aaa”:‘a\?’答:2431实验内容1.编写Shell脚本,当用户输入要检索的字符串后,该程序能检索指定串在文件哪些行中出现及出现总次数。【源程序】若输出指定字符串出现的行数,脚本如下:readstrgrep-c$str“myfile”#将myfile文件中匹配的行数输出按题意,输出指定串在文中出现的位置和次数的脚本程序如下:i=1#记录字符串出现的位置num=0#记录字符串出现次数readstr#读取一行strlen=`exprlength“$str”`whiletest$strlen–ne0dowhiletest$strlen–ne0dolocation=`exprindex“$str”“.*.*”`#查找空格在字符串中出现的第一个位置location1=`expr$location–1`ss=`exprsubstr$str1$location1`#取空格前的字符串len=`exprlength“$ss”`iftest“$ss”=“$1”#如果该字符串和输入的指定串(指定串作为第一个参数输入)相等thennum=`expr$num+1`echo“thelocationis$i”fii=`expr$i+$len`i=`expr$i+1`strlen=`expr$strlen-$len`strlen=`expr$strlen–1`location2=`expr$location+1`str=`exprsubstr“$str”$location2$strlen`donereadstrstrlen=`exprlength“$str”`doneecho“theword:$1appears$numtimes”2.编写Shell脚本,从命令行中接收一个二元算术表达式并计算其结果。#!/bin/bashiftest$#=3thencase$2in+)letz=$1+$3;;-)letz=$1-$3;;/)letz=$1/$3;;x|X)letz=$1*$3;;*)echo“Warning-$2invalidoperator!”exit;;esacecho“Answeris$z”elseecho“Usage-$0Value1operatorvalue2”fi【运行与测试】2.编写Shell脚本,从命令行中接收一个二元算术表达式并计算其结果。【源程序】#!/bin/bashiftest$#=3thencase$2in+)letz=$1+$3;;-)letz=$1-$3;;/)letz=$1/$3;;x|X)letz=$1*$3;;*)echo“Warning-$2invalidoperator!”exit;;esacecho“Answeris$z”elseecho“Usage-$0Value1operatorvalue2”fi【运行与测试】3.编写一个以文件列表作为输入的过滤器程序,要求文件名含有以句点“.”分隔的后缀,过滤器输出每个文件的不带句点和后缀的文件名。【源程序】过滤器程序filter脚本程序如下:readflagwhiletest“$flag”!=“#”#输入的文件列表以井号结束dolocation=`expr“$flag”:“.*\.”`location=`expr$location–1`basename=`exprsubstr“$flag”1$location`echo$basenamereadflagdone可以采用文件重定向输入,将含有后缀的文件列表存于filelist中,并以井号结束,之后修改filter文件的可执行属性,再执行./filter<filelist【运行与测试】4.编写shell脚本,统计/my目录下C语言文件的个数。【源程序】通过Bah本可以有多种方式实现这个功能而使用函数是其中的一个选择在使用函数之前,必须先定义函数。首先进入自己的工作目录/home/stu1,用vi编写名为count的文件。cd/hoe/student #在hoe/stu1目录下编程vicount下面是脚本程序:#!/bin/bashfunction count{echo –n “Nuberofatchesfor$1:” #接受程序的第一个参数ls $1|wc–l #对子程序的第一个参数所在的目录进行操作}执行:将count文件复制到当前目录下,然后在当前目录下建立文件夹kdirycdyvi1.c #在y目录下建立几个c文件,以便用来程序测试……cd..chmod+xcountcount“./my/*.c”【运行与测试】四、调试体会实验名称:进程控制与通信实验时间:年月日第周星期成绩一、实验目的1.加深进程概念的理解,体会进程创建过程,进一步认识进程的异步并发特征。2.了解Linux系统中,进程通信的基本原理,重点掌握进程的信号通信和管道通信机制。3.掌握Linux系统中,与进程控制和进程通信相关的系统调用。二、实验预习(预备知识的问题及回答)1.写出下列系统调用功能:(1)fork()用于创建进程(2)getpid()用于获取当前进程id号(3)wait()用于等待子进程结束(4)exit()用于进程自我终止(5)pipe()用于创建无名管道(6)signal()用于在信号和信号处理函数之间建立对应关系(7)kill()用于发送信号给指定进程2.画出fork系统调用的执行的逻辑框图。pid=fork()pid=fork()Pid<0Pid=0Pid>0当前进程是子程序当前进程是父进程Fork调用失败3.图示pipe系统调用生成无名管道时所涉及的数据结构。三、实验内容1.调试下面的程序,观察可能的并发结果,给出简要分析,并画出进程家族树。#include

<unistd.h>#include

<sys/types.h>#include<sys/wait.h>main

(){intstatus;

int

pid1,pid2,pid3;

pid1=fork();if

(pid1<

0)

{

printf("error

in

forkpid1!");exit(0);}

else

if

(pid1

==

0)

printf("pid1=0,

my

process

id

is

%d\n",getpid());

else

if

(pid1

>

0){pid2=fork();if

(pid2<

0)

{

printf("error

in

forkpid2!");exit(0);}else

if

(pid2

==

0)printf("pid2=0,my

process

id

is

%d\n",getpid());

else

if

(pid2

>

0)printf("

pid2>0,my

process

id

is

%d\n",getpid());}pid3=fork();if

(pid3<

0)

{

printf("error

in

forkpid3!");exit(0);}

else

if

(pid3

==

0)

printf("pid3=0,

my

process

id

is

%d\n",getpid());

else

if

(pid3

>

0)

printf("pid3>0,my

process

id

is%d\n",getpid());wait(&status);exit(0);

}答:可能的第一种结果:pid1=0,my

process

id

is1050pid2=0,my

process

id

is1050pid1=0,my

process

id

is1049pid2>0,my

process

id

is1049pid1>0,my

process

id

is1051pid2=0,my

process

id

is1051pid1>0,my

process

id

is1048pid2>0,my

process

id

is1048可能的第二种结果:pid1>0,my

process

id

is1051pid2=0,my

process

id

is1051pid1>0,my

process

id

is1048pid2>0,my

process

id

is1048pid1=0,my

process

id

is1050//此句前会出现命令行提示符pid2=0,my

process

id

is1050pid1=0,my

process

id

is1049//此时父进程id为1,即其父进程已退出pid2>0,my

process

id

is1049进程家族树为:104810481049105010512.编成实现如下功能:用fork函数创建子进程,并在子进程中创建一个新目录文件,该文件位于用户主目录下,名称为“my_directory”.【源程序】#include

<unistd.h>#include

<sys/types.h>#include<sys/wait.h>main

(){intstatus;

int

pid1,pid2;

pid1=fork();pid2=fork();

if

(pid1<

0)

{

printf("error

in

forkpid1!");exit(0);}

else

if

(pid1

==

0)

printf("pid1=0,

my

process

id

is

%d\n",getpid());

else

if

(pid1

>

0)

printf("pid1>0,my

process

id

is%d\n",getpid());

if

(pid2<

0)

{

printf("error

in

forkpid2!");exit(0);}

else

if

(pid2

==

0)

printf("pid2=0,my

process

id

is

%d\n",getpid());

else

if

(pid2

>

0)

printf("

pid2>0,my

process

id

is

%d\n",getpid());wait(&status);//有一个孩子进程发来结束信息,父进程就可结束exit(0);

}【运行与测试】3.编程实现进程间的软中断通信。要求:父子进程通过信号完成终止过程,具体为,父进程创建两个子进程后,通过捕捉键盘发来的Ctrl+c中断信号而向两个子进程发出杀死信号,父进程在子进程终止后,输出下列信息后自我终止:ChildProcess1isKilledbyParent!ChildProcess2isKilledbyParent!ParentProcessisExitnow!【源程序】答:#include<stdio.h>#include<unistd.h>#include<sys/types.h>#include<sys/wait.h> #include<stdlib.h>#include<signal.h>pid_tpid1,pid2;voidsig_kill(){if(kill(pid1,SIGTERM)==0)//voidsig_kill(){if(kill(pid1,SIGTERM)==-1)//用SIGKILL信号也可以printf(“killchild1error!”);if((kill(pid2,SIGTERM)==-1)printf(“killchild2error!”);}main(){intstatus;if((pid1=fork())<0){printf(“forkerror!\n”);exit(0);}elseif(pid1==0)printf(“Thisischild1process,mypid=%d\n”,getpid());else{if((pid2=fork())<0){printf(“forkerror!\n”);exit(0);}elseif(pid2==0)printf(“Thisischild2process,mypid=%d\n”,getpid());else{printf(“Thisisparentprocess,mypid=%d\n”,getpid());if(signal(SIGINT,sig_kill)==SIG_ERR)printf(“parentprocesssignalerror!”);sleep(10);if(wait(&status)==pid1)printf(“ChildProcess1isKilledbyParent!\n”);if(wait(&status)==pid2)printf(“ChildProcess2isKilledbyParent!\n”);printf(“parentprocessisexited!\n”);exit(0);}}}thisischild1process,myidis30982Thisischild2process,myidis30982Thisispatentprocess,myidis30981Childprocess1iskilledbyparent!Childprocess2iskilledbyparent!【运行与测试】4.编程实现进程间管道通信。要求:父子进程共享一无名管道,两个子进程作为发送方分别向管道发送一行信息,父进程先读出子进程P1发来的信息行,将其转换为大写字母输出;再读出子进程P2发来的信息行,将其转换为小写字母输出。【源程序】答:#include<stdio.h>#include<unistd.h>#include<sys/types.h>#include<sys/wait.h>#include<ctype.h>intfiledes[2];charbuffer[80];main(){pipe(filedes);charstr1[80];charstr2[80];intpid1,pid2,i;while((pid1=fork())==-1);if(pid1==0){lockf(filedes[1],1,0);printf("child1inputstring1\n");scanf("%s",str1);write(filedes[1],str1,sizeof(str1));lockf(filedes[1],0,0);exit(0);}else{while((pid2=fork())==-1);if(pid2==0){lockf(filedes[1],1,0);printf("child2inputstring2\n");scanf("%s",str2);write(filedes[1],str2,sizeof(str2));lockf(filedes[1],0,0);exit(0);}else{if(waitpid(pid1,NULL,0)==pid1){//变大写,也可用wait(&status)函数read(filedes[0],buffer,80);for(i=0;i<sizeof(str1);i++)buffer[i]=toupper(buffer[i]);printf("parent--child1:%s\n",buffer);}elseprintf("waitpid1error!");if(waitpid(pid2,NULL,0)==pid2){//变小写read(filedes[0],buffer,80);for(i=0;i<sizeof(str2);i++)buffer[i]=tolower(buffer[i]);printf("parent--child2:%s\n",buffer);}elseprintf("waitpid2error!");exit(0);}}}child1inputstring1IlovewangshuangParent—child1:IChild2inputstring2WangshuanglovesmetooParent—child2wangshuang另:child1inputstring1loveParent—child1:LOVEChild2inputstring2FEELParent—child2feel【运行与测试】四、调试体会

实验名称:虚拟存储实验时间:年月日第周星期成绩一、实验目的1.掌握虚拟存储器的概念,理解实现虚拟存储器的基本方法。2.体会请求分页存储管理中,页面置换的过程,进一步掌握请求分页的基本原理。3.进一步认识多种页面置换算法的实现机制,通过实验对各算法进行评价。二、实验预习(预备知识的问题及回答)1.描述请求分页的地址转换过程。程序请求访问一页程序请求访问一页保留CPU现场从外存中找到缺页内存满否?选择一页换出该页被修改否?将该页写回外存OS命令CPU从外存读缺页启动I/O硬件将一页从外存换入内存修改页表页号>页表长度?CPU检索快表页表项在快表中?访问页表页在内存?修改快表修改访问位和修改位形成物理地址地址变换结束缺页中断处理开始越界结束产生缺页中断请求调页否是是是是是否否否2.分析采用FIFO页面置换算法产生Belady现象的原因。答:Belady现象是指当进程分配的内存块数增加时,进程缺页率反而上升的现象。FIFO算法在页面置换时,总是淘汰先进入主存的页面,而先进入主存的页面并不一定是以后用不到的页面,如果这些页面以后需要访问,则将产生缺页,因此即使分配的内存块数增加,缺页率仍然有可能上升,这是由于使用的页面置换算法不合理导致的。三、实验内容设计一个“地址转换”程序来模拟硬件的地址转换工作。当访问的页在主存时,则形成绝对地址,但不去模拟指令的执行,而用输出转换后的地址来代替一条指令的执行。当访问的页不在主存时,则输出“*该页页号”,表示产生了一次缺页中断。假定主存的每块长度为128个字节;现有一个共七页的作业,其中第0页至第3页已经装入主存,其余三页尚未装入主存;该作业的页表为:页号标志主存块号在磁盘上的位置015011118012219013311021400225002360121如果作业依次执行的指令序列为:操作页号单元号+070+150×215存321取056-640移位4053+5023存1037取2078+4001存6084运行设计的地址转换程序,显示或打印运行结果。因仅模拟地址转换,并不模拟指令的执行,故可不考虑上述指令序列中的操作。【源程序】答:main(){structinstruct{charop[10];intpage_num;intw;};structpage{intpage_num;intflag;intblock_num;intaddr_in_ss;};inti,addr;structinstructins[12]={‘+’,0,70,’+’,1,50,’*’,2,15,”存”,3,21,”取”,0,56,’-‘,6,40,”移位”,4,053,’+’,5,023,”存”,1,037,”取”,2,78,’+’,4,001,”存”,6,84};//地址084报错structpagept[7]={0,1,5,011,1,1,8,012,2,1,9,013,3,1,1,021,4,0,,022,5,0,,023,6,0,,021}for(i=0;i<12;i++){printf(“theinstruct%dis%s%d%d“,i,ins[i].op,ins[i].page_num,ins[i].w);if(pt[ins[i].page_num].flag==1){addr=pt[ins[i].page_num].block_num*128+ins[i].w;printf(”theabsoluteaddressis:%d\n”,addr);}elseprintf(”*%notinmainmemory\n”,ins[i].page_num);}}【运行与测试】2.计算并输出下列页面置换算法在不同内存容量(4页至32页)下的命中率.(1)最佳置换算法(OPT)(2)先进先出算法(FIFO)(3)最近最久未用页面置换算法(LRU)具体要求如下:(1)通过随机函数产生一个指令序列,共320条指令.指令地址的生成原则如下:1)50%的指令是顺序执行的;2)25%的指令是均匀分布在前地址部分;3)25%的指令是均匀分布在后地址部分;程序中的具体实施方法是:1)在[0,319]的指令地址之间随机选取一起点地址m;2)顺序执行一条指令,即执行地址为m+1的指令;3)在前地址[0,m+1]中随机执行一条指令,该指令的地址为m’;4)顺序执行一条指令,即执行地址为m’+1的指令;5)在后地址[m’+2,319]中随机执行一条指令;重复上述步骤(1)(5),直到执行320条指令为止.将指令序列变换成为页地址流:设:页面大小为1k,用户内存容量为4页逐步增加到32页,用户虚存容量为32k.假定在用户虚存中,每页存放10条指令,即320条指令在虚存中的存放方法为:第0条第9条指令在第0页;第10条第19条指令在第1页;……第310条第319条指令在第31页.按以上方式用户指令共组成32页.据此可得出指令地址m和页面号page以及页内位移量offset之间的计算公式为:page=m/10,offset=m%10.页地址流长度为320。【源程序】答:#include<stdlib.h>#include<stdio.h>#include<unistd.h>#include<sys/types.h>intpage_stream[320];intb[32];Voidran()//生成页地址流{intinstruct[320];inti,j,m,m1.m2;srand(getpid());//生成随机数种子i=0;while(i<320){m=rand()%320;instruct[i]=m;i++;if((m+1)<320){instruct[i]=m+1;i++;}m1=rand()%(m+1);instruct[i]=m1;i++;if((m1+1)<320){instruct[i]=m1+1;i++;}if((m1+2)<320){m2=m1+2+rand()%(320-m1-2);instruct[i]=m2;i++;}}page_stream[i]=instruct[i]/10;}intin_block(intpage,intblock_count)//页面在内存块中,返回1{intflag,k;flag=0;for(k=0;k<block_count;k++)if(page==b[k]){flag=1;break;}returnflag;}voidopt()//最优的{inti,j,k,max,t,s,d[32],page_interrupt;for(i=4;i<32;i++){for(k=0;k<32;k++)b[k]=-1;j=0;for(k=0;k<i;k++){

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论