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

下载本文档

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

文档简介

《操作系统原理》实验报告书班级:学号:姓名:指导教师:-年第一学期试验名称:LINUX顾客界面试验时间:年10月16日第7周星期三一、试验目的1.熟悉Linux字符操作界面,纯熟掌握常用Shell命令。2.熟悉Linux中文本编辑措施,学会编辑软件vi的使用。3.理解Linux编绎器gcc的功能,掌握基于Linux平台的C程序开发。试验预习(预备知识的问题及回答)1.为何在Linux系统中,诸如光盘、U盘等要先挂载而后才能使用?怎样获得U盘的设备名?装载点在文献系统中的位置是什么?由于文献系统的差异,Linux在默认状况下并不支持软盘、光盘和U盘,因此需要通过装载对应盘片才可以访问其中的数据。装载点是挂载文献系统的目录位置。2.从虚拟机界面退出进入WindowsOS界面的操作是Ctrl+Alt,从WindowsOS界面进入虚拟机界面的措施是鼠标点击虚拟界面。3.权限的含义是什么?怎样使用数字法设定文献的权限?(1)权限的含义Linux系统中的每个文献和目录均有对应的访问许可权限,访问权限分为只读(r),可写(w)和可执行三种。有三种不一样类型的顾客可对文献或目录进行访问,分别是文献所有者(u),同组顾客(g)和其他顾客(o)。所有的文献和目录都被创立它们的人所“拥有”,只要你是这个文献的所有者或你登录为根顾客,你就拥有了变化所有者、组群和其他人权限的权利。(2)使用数字法变化权限命令格式chmod权限数值文献名阐明:给指定文献赋予数值所规定的权限。在数字设定法中,每种权限设置均可用数值来代表,其中0表达没有权限,1表达可执行权限,2表达可写权限,4表达可读权限,这些值之和便可用来设置特定权限。因此数字属性的格式应为3个0~7的八进制数,3个数表达的次序为u、g和o。4.什么过滤操作?在Linux中怎样实现?过滤操作:将一种命令(或程序)的输出作为另一种命令(或程序)的输入Linux实现的命令格式:命令|命令5.在Linux中挂载u盘并能显示其文档的中文信息,所使用的挂载命令是:命令格式mount/dev/sda1/mnt/usb。6.什么是vi?其三种操作模式的含义是什么?给出三种工作模式间的转换图。vi有3种基本工作模式:命令模式(CommandMode):vi启动后的默认模式,控制光标的移动、复制删除文字、进入输入模式和末行模式输入模式(InsertMode):进行文字输入末行模式(LastLineMode):保留文献、退出vi命令模式命令模式输入模式末行模式vi文献名Esc键Esc键按i、o、e等键按冒号“:”退出三种模式之间转换试验内容(包括试验所用命令或有关程序源代码)1.shell操作命令(给出每题所用的Shell命令或命令成果)(1)创立名为stu1、stu2的2个顾客,设置密码分别为student1和student2,并将它们设为组group1中的组员。#groupaddgroup1#useraddstu1–ggroup1#sustu1$passwdstu1回车后敲入密码student1$exit#useraddstu2–ggroup1#sustu2$passwdstu2回车后敲入密码student1$exit(2)在每个顾客的主目录下建立2个目录,分别命名为dir1和dir2。 #sustu1$cd~$mkdirdir1$exit#sustu2$cd~$mkdirdir2$exit(3)查找stu1顾客主目录、下属各子目录的默认存取权限,并给出结论。#sustu1$cd..$ls–l顾客主目录权限为:drwx,即目录的顾客可读、写、执行,同组和其他顾客无任何权限。#sustu1$cd~$ls–ldir1目录权限为:drwxr-xr-x,即目录的顾客可读、写、执行,同组顾客可读、执行,其他顾客可读、执行。(4)调试pwd和cd命令,回答下列有关Linux文献系统中目录的有关问题。=1\*GB3①顾客主目录的绝对途径怎样表达?/home/stu1,/home/stu2=2\*GB3②根目录怎样表达?/root=3\*GB3③.和..分别表达什么目录?子目录,父目录=4\*GB3④~表达什么目录?顾客主目录⑤目前目录怎样表达?cd~(5)新建顾客stu3,设置其密码为student3,并将其设置为group2中组员。尔后,以stu3登录,在其主目录下建立名为text的目录,在text目录下再建立名为dir1的子目录,并使其成为目前目录。#groupaddgroup2#useraddstu3–ggroup2#sustu3$passwd回车后敲入密码student3$cd~$mkdirtext$mkdirdir1$cdtext/dir1(6)使用cat>sneakers.txt命令,分析命令行catsneakers.txt的显示成果。$cat>sneakers.txtbuysomesneakersthengotothecoffeeshopthenbuysomecoff^D$catsneakers.txt从键盘中创立一种名为sneakers.txt文献,文献内容为:buysomesneakersthengotothecoffeeshopthenbuysomecoff(7)使用上题的措施,在dir1目录中建立home.txt文献,其内容为:bringthecoffeehometakeoffshoesputonsneakersmakesomecoffeerelax!如下:$cd/home/stu1/dir1$cat>home.txtbringthecoffeehome takeoffshoes putonsneakers makesomecoffee relax! [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【修改目录权限措施】#cp/home/stu3/text/home/stu2(9)试画出上述命令后,顾客stu1、stu2和stu3主目录中的目录树(3棵子树)。stu1stu1dir1dir2Saturday.txtstu2dir1dir2textdir1home.txtSaturday.txtSneakers.txtstu3dir1dir2textdir1home.txtSaturday.txtSneakers.txt2.LinuxC程序开发(1)编写LinuxC程序,把一种文献的内容复制到另一种文献中,即实现简朴的copy功能。规定:程序输入的第一种参数是源文献,第二个参数是目的文献。【源程序】#include<stdio.h>#include<stdlib.h>intmain(intargc,char*argv[]){ FILE*in,*out; charch; if(argc!=3){ printf(“Youforgottoenterafilename\n”); exit(0);}if((in=fopen(argv[1],“r”))==NULL){ printf(“cannotopeninfile\n”); exit(0);}if((out=fopen(argv[2],“w”))==NULL){ printf(“cannotopenoutfile\n”); exit(0);}while(!feof(in))fputc(fgetc(in),out);fclose(in);fclose(out);【运行命令】#gcc–otestcopy.c#./testfile1.cfile2.c(2)编写LinuxC程序,列出stu2主目录中的文献信息,并将其中saturday.txt文献的权限设置为文献所有者可读可写、同组顾客只读、其他顾客无权限。【源程序】#include<sys/types.h>#include<dirent.h>#include<stdio.h>#include<errno.h>intmain(intargc,char*argv[]){ DIR*dp;structdirent*dirp;intn=0;if(argc!=2){ printf(“asingleargmentisrequired”); exit(0);}if((dp=opendir(argv[1]))==NULL){ printf(“cannotopen%s”,argv[1]);exit(0);}while(((dirp=readdir(dp))!=NULL)&&(n<=50)){ if(n%1==0)printf(“”); n++; printf(“%10s\n”,dirp->d_name);}system(“chmod640/home/stu2/text/dir1/saturday.txt”);}【运行命令】#gcc–otestlist.c#./test/home/stu2

试验名称:SHELL程序设计试验时间:年10月23日第8周星期三一、试验目的1.熟悉Shell脚本编程的环节,掌握基于Bash的Shell脚本开发。2.掌握Shell脚本中变量、条件测试的使用。3.掌握Shell脚本中的控制流构造和函数的使用。试验预习(预备知识的问题及回答)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\?’expr2+3expr2+3expr2\*3expr5+`expr2+3`exprlength“operatingsystem”exprsubstrlinux23答:(1)2 (2)4 (3)3 (4)1 (5)2+3 (6)5 (7)6(8)non-numericargument (9)16(10)inu试验内容1.编写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【运行】chmoda+xjisuan./jisuan2+32.编写一种以文献列表作为输入的过滤器程序,规定文献名具有以句点“.”分隔的后缀,过滤器输出每个文献的不带句点和后缀的文献名。【源程序】readflagwhiletest“$flag”!=“#”#输入的文献列表以井号结束dolocation=`expr“$flag”:“.*\.”`location=`expr$location–1`basename=`exprsubstr“$flag”1$location`echo$basenamereadflagdone【运行】chmoda+xletter./letter3.将下面的shell脚本命名为myscript,分析其功能:count=$#cmd=echowhile[$count–gt0]docmd="$cmd\$$count"count=`expr$count-1`doneeval$cmd【命令行输入】chmoda+xmyscript./myscriptfirstsecondthird【运行成果】thirdsecondfirst【脚本功能分析】将命令行输入的参数倒序显示4.设计一种程序cuts,它从原则输入读入数据,获取由第一种参数n和第二个参数m所限定范围的数据(包括这两个字符),n和m都是整数。例如:$cuts1114Thisisatestofcutsprogram(输入)test(显示成果)【源程序】#!/bin/bashreadalineecho$aline|cut–c$1-$2试验名称:进程控制与通信试验时间:年10月23日第8周星期三一、试验目的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()ifpid为负printfork调用失败elseifpid为0print目前进程是子进程elsepid为正print目前进程是父进程3.图示pipe系统调用生成无名管道时所波及的数据构造。file-wfile-w---------u-ofilefiledes[0]filedes[1]f-flag:READ|PIPEf-count:1f-inode:f-offset[0]:0f-offset[1]:0f-flagWRTTE|PIPEf-count:1f-inode:f-offset[0]:0f-offset[1]:0i-count:2file-r4.在UNIX系统中运行下面程序,最多可以产生多少个进程?画出进程家族树。main(){fork();fork();fork();}答:最多可产生8个进程进程家族树如图所示:AABCDEFGH5.下列程序运行后,a的值是多少?main(){inta,pid;a=55;pid=fork();if

(pid<

0)

{

printf("error

in

fork!");exit(0);}elseif(pid==0){sleep(5);a=99;printf(“a=%d\n”,a);sleep(5);exit(0);}else{sleep(7);printf(“a=%d\n”,a);wait(0);}}答:程序的运行成果为a=99,a=55;最终a=55三、试验内容1.调试下面的程序,观测也许的并发成果,给出简要分析,并画出进程家族树。#include

<unistd.h>#include

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

(){intstatus;

int

pid1=-1,pid2=-1,pid3=-1;

pid1=fork();

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());pid2=fork();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("pid3=0,pid1=%d,pid2=%d,

my

process

id

is

%d\n",pid1,pid2,getpid());

else

if

(pid3

>

0)

printf("pid3>0,pid1=%d,pid2=%d,my

process

id

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

}解:也许状况1:pid1=0,myprocessIDis3937pid1>0,myprocessIDis3936pid2=0,myprocessIDis3939pid2>0,myprocessIDis3936pid3=0,pid1=3937,pid2=3939,myprocessIDis3941pid3>0,pid1=3937,pid2=3939,myprocessIDis3936pid3=0,pid1=0,pid2=-1,myprocessIDis3938pid3>0,pid1=0,pid2=-1,myprocessIDis3937pid3=0,pid1=3937,pid2=0,myprocessIDis3940pid3>0,pid1=3937,pid2=0,myprocessIDis3939也许状况2:pid1=0,myprocessIDis3937pid3=0,pid1=0,pid2=-1,myprocessIDis3938pid3>0,pid1=0,pid2=-1,myprocessIDis3937pid1>0,myprocessIDis3936pid2=0,myprocessIDis3939pid2>0,myprocessIDis3936pid3=0,pid1=3937,pid2=3939,myprocessIDis3941pid3>0,pid1=3937,pid2=3939,myprocessIDis3936pid3=0,pid1=3937,pid2=0,myprocessIDis3940pid3>0,pid1=3937,pid2=0,myprocessIDis3939进程家族树为:39363936393739393938394139402.编程实现进程间管道通信。规定:父子进程共享一无名管道,两个子进程作为发送方分别向管道发送一行信息,父进程先读出子进程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);}}}【运行与测试】

附加题3.学习下面共享存储区的内容,并用共享存储区的方式实现“观测者——汇报者”问题(共享的count变量存于共享存储区),并验证“与时间有关的错误”。共享存储操作使得两个或两个以上的进程可以共用一段物理内存(一般状况下,两个进程的数据区是完全独立的,父进程用fork创立子进程后,子进程会复制父进程数据到自己的数据区)。(1)创立共享内存#include<sys/shm.h>intshmget(key_tkey,size_tsize,intpermflags);参数key是共享内存的标识,size是共享内存段的最小字节数,permflags是访问权限,值的设置同semget同样。(2)共享内存的控制#include<sys/shm.h>intshmctl(intshmid,intcommand,structshmid_ds*shm_stat);command可设为IPC_STAT,IPC_SET,IPC_RMID。参数shm_stat指向寄存属性的构造体,详细内容请参照手册。(3)共享内存的附接和断开#include<sys/shm.h>void*shmat(intshmid,constvoid*addr,intshmflags);intshmdt(constvoid*addr);由于两个函数需指出进程地址空间中的地址,因此比较复杂。简化的措施是将shmat中的地址设为NULL。【源程序】【运行与测试】

试验名称:虚拟存储试验时间:年10月30日第9周星期三一、试验目的1.掌握虚拟存储器的概念,理解实现虚拟存储器的基本措施。2.体会祈求分页存储管理中,页面置换的过程,深入掌握祈求分页的基本原理。3.深入认识多种页面置换算法的实现机制,通过试验对各算法进行评价。二、试验预习(预备知识的问题及回答)1.描述祈求分页的地址转换过程。开始程序祈求访问第一页开始缺页中断处理页号>页表长度?保留CPU现场页号>页表长度?保留CPU现场越界中断是越界中断从外存中找到缺页否从外存中找到缺页CPU检索快表CPU检索快表内存满否否内存满否页表在快表中?页表在快表中?是选择一页换出是选择一页换出访问该表否访问该表该页被修改否该页被修改否页在内存?否页在内存? 产生缺页中断是 祈求调页将该页写回外存是将该页写回外存修改快表修改快表OS命令CPU从外存读缺页OS命令CPU从外存读缺页修改访问位和修改位修改访问位和修改位启动I/O硬件启动I/O硬件形成物理地址形成物理地址将第一页从外存转入内存将第一页从外存转入内存地址变换结束修改页表地址变换结束修改页表2.解释FIFO页面置换算法所产生的Belady现象。答:Belady现象是指当进程分派的内存块数增长时,进程缺页率反而上升的现象。FIFO算法在页面置换时,总是淘汰先进入主存的页面,而先进入主存的页面并不一定是后来用不到的页面,假如这些页面后来需要访问,则将产生缺页,因此虽然分派的内存块数增长,缺页率仍然有也许上升,这是由于使用的页面置换算法不合理导致的。三、试验内容1.计算并输出下列页面置换算法在不一样内存容量(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++){while(in_block(page_stream[j],i)==1)j++;b[k]=page_stream[j];j++;}page_interrupt=0;for(j=i;j<320;j++){if(in_block(page_stream[j],i)==1)continue;else{for(k=0;k<i;k++){d[k]=0;for(t=i+1;t<320;t++)if(page_stream[t]==b[k]){d[k]=t;break;}if(d[k]==0)d[k]=320;}max=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

提交评论