《《操作系统原理》实验报告(共29页).doc》由会员分享,可在线阅读,更多相关《《操作系统原理》实验报告(共29页).doc(29页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上 操作系统原理实 验 报 告 书 班级: 学号: 姓名: 指导教师: 2013-2014 学年 第 二 学期实验名称: LINUX 用户界面 实验时间: 2014 年 4 月 2 日 第 7 周 星期三 一、实验目的1,熟悉Linux字符操作界面,熟练掌握常用Shell命令。2,熟悉Linux文本编辑方法,学会编辑软件VI的使用。3,了解Linux编译器gcc的功能,掌握基于Linux平台的C程序的开发二、 实验预习(预备知识的问题及回答)1为什么在Linux系统中,诸如光盘、U盘等要先挂载而后才能使用?如何获得U盘的设备名?装载点在文件系统中的位置是什么?由于文件系
2、统的差异,Linux在默认情况下并不支持软盘,光盘,U盘,所以需要通过装在相应盘片才可以访问其中的数据装载点是挂载文件系统的目录位置2从虚拟机界面退出进入Windows OS界面的操作是 Ctrl+Alt ,从Windows OS界面进入虚拟机界面的方法是 鼠标点击虚拟机界面 。3权限的含义是什么?如何使用数字法设定文件的权限?Linux系统中的每个文件和目录都有相应的访问许可权限,访问权限分为只读(r),可写(w)和可执行三种,有三种不同类型的用户可以对文件或者目录进行访问,分别是文件所有者(u),同组用户(g)和其它用户(o)。所有的文件和目录都被创建他们的人所拥有。只要你是这个文件的所有
3、者或者你登陆为用户,你就拥有了改变所有者,群组和其他人权限的权利。使用数字法改变权限:命令格式chmod权限数值 文件名说明 给指定文件赋予数值所规定的权限在数字设定法中,每种权限设置均可以用数值来代表,其中0表示没有权限,1表示可执行权限,2表示可写权限,4表示可读权限,这些值之和便可以用来设定特定权限。4什么过滤操作?在Linux中如何实现?过滤操作:将一个命令的输出作为一个命令的输入Linux实现的命令格式:命令|命令5在Linux中挂载u盘并能显示其文档的中文信息,所使用的挂载命令是: Mount/dev/sdal/mnt/usb 。6什么是vi? 其三种操作模式的含义是什么?给出三种
4、工作模式间的转换图。命令模式:vi启动后的默认模式,控制光标的移动,复制删除文字,进入输入模式和末行模式输入模式:进行文字输入末行模式:保存文件,退出VI三、 实验内容(包含实验所用命令或相关程序源代码)1shell操作命令(给出每题所用的Shell命令或命令结果)(1)创建名为stu1、stu2的2个用户,设置密码分别为student1和student2 ,并将它们设为组group1中的成员。#groupadd group1#useradd stu1 g group1#su stu1Spasswd stu1 回车后敲入密码student1$exit#useradd stud2 g group
5、1#su stu2$passwd stu2$exit(2)在每个用户的主目录下建立2个目录,分别命名为dir1和dir2。#su stu1$cd$mkdir dir1$exit#su stu2$ cd$mkdir dir2$exit(3)查找stu1用户主目录、下属各子目录的默认存取权限,并给出结论。#su stu1$cd.$ls-1用户主目录权限为:drwx-,即目录的用户可读,写,执行,同组和其它的用户无任何权限#su stu$cd$ls-1Dir1目录权限为:drwxr-xr-x,即目录的用户可读,写,执行(4)调试pwd和cd命令,回答下列关于Linux文件系统中目录的有关问题。 用户
6、主目录的绝对路径如何表示? /home/stu1/home/stu2 根目录如何表示? /root 和分别表示什么目录? 子目录,父目录 表示什么目录? 用户主目录 当前目录如何表示? Cd (5)新建用户stu3,设置其密码为student3,并将其设置为group2中成员。尔后,以stu3登录,在其主目录下建立名为text的目录,在text目录下再建立名为dir1的子目录,并使其成为当前目录。#groupadd group2#useradd stu3 g group2#su stu3$passwd 回车后敲入密码 student3$cd$mkdir text$mkdir dir1$cd t
7、ext/dir1(6)使用catsneakers.txt命令,分析命令行cat sneakers.txt的显示结果。$ catsneakers.txt buy some sneakersthen go to the coffee shop then buy some coffD$cat sneakers.txt从键盘中创建一个名为sncakers.txt文件,文件内容为:buy some sncakersThen go to the coffee shopThen buy some coff(7)使用上题的方法,在dir1目录中建立home.txt文件,其内容为: bring the coff
8、ee home take off shoes put on sneakers make some coffee relax!$cd /home/stu1/dir1$cathome.txtBring the coffee homeTake off shoesPut on sneakersMake some coffeeRelax!ctrl+d(8)试写出实现下列功能的shell命令: 将home.txt文件移至其上级目录中(即text目录下)。$mv/home.txt 将home.txt添加到sneakers.txt尾部形成新的文件saturday.txt。$cat cneakers.txtas
9、turday.txt$cat home.txtSaturday.txt 将text目录树从stu3用户主目录下移至stu2主目录下。【使用特权用户方法】sumv/home/stu3/text/home/stu2【修改目录权限方法】#cp/home/stu3/text/home/stu2(9) 试画出上述命令后,用户stu1、stu2和stu3主目录中的目录树(3棵子树)。2 Linux C程序开发(1)编写Linux C程序,把一个文件的内容复制到另一个文件中,即实现简单的copy功能。要求:程序输入的第一个参数是源文件,第二个参数是目标文件。【源程序】#include#include#inc
10、lude#includeInt main(int argc,char *argv)FILE *in,*out;Char ch;If(argc!=3)Printf(“you forgot to enter a filenamen”);Exit(0);If(in=fopen(argv1,”r”)=NULLPrintf(“can nit open outfilen”);Exit(0);If(out=fopen(argv2,”w”)=NULLPrntf(“can not open outfile”);Exit(0);While(!feof(in)fputc(in),out);Fclose(in);Fc
11、lose(out);【运行命令】#gcc o test copy.c#./test file1.c file2.c(2)编写Linux C程序,列出stu2主目录中的文件信息,并将其中saturday.txt文件的权限设置为文件所有者可读可写、同组用户只读、其他用户无权限。【源程序】#include#include#include#includeInt main(int argc,char *argv)DIR *dp;Struct dirent *dirp;Int n=0;If(arge!=2)Printf(“a signle argement is required”);Exit(0);If
12、(dp=opendir(argv1)=NULL)Printf(“can not open%s”,args1);Exit(0);While(dirp=readdir(dp)!=NULL)&(nd_name);System(“chmod 640/home/stu2/text/dir1/Saturday.txt”)【运行命令】#gcc o test list.c#./test.home/stu2实验名称: SHELL程序设计 实验时间: 2014 年 4 月 16 日 第 9 周 星期三一、实验目的熟悉SHELL脚本编程的步骤,掌握基于Bash的Shell脚本开发。二、 实验预习(预备知识的问题及回
13、答)1. Linux系统默认的shell语言是什么?欲查看该shell的版本,应使用什么命令?Bash shell$echo $BASH_VERSION2. 预习shell有关变量和参数的相关知识,回答下列问题。(1)假设用户进行了如下的赋值操作:$ person=jenny试给出下面命令的输出结果。1) echo person person 2) echo $person jenny 3) echo $person $person 4) echo “$person” jenny (2)填充下列与环境变量、位置变量和预定义变量相关的表格。Shell变量定义HOME保存用户注册目录的绝对路径PA
14、TH保存用冒号分割的目录路径PWD当前工作目录的据对路径名PS1主提示符,特权用户为#,普通用户为$0当前shell程序的文件名$#位置参数的个数$?前一个命令执行后返回的状态$当前进程的PID3写出下列expr命令的输出: (1) expr index “value” a(2) expr “value” : v.*u(3) expr “aaa” : a+(4) expr “aaa” : a?(5) expr 2+3 (6) expr 2 + 3 (7) expr 2 * 3(8) expr 5 + expr 2 + 3(9) expr length “operating system”(10
15、) expr substr linux 2 32 4 3 1 2+3 5 6 mon-numeric argument 16 inu三、 实验内容1编写Shell脚本,从命令行中接收一个二元算术表达式并计算其结果。【源程序】#!/bin/bashIftest $#=3Then Case s2 in +)let z=$1+$3;-)let z=$1-$3;/)let z=$1/$3;x|x)let z=$1*$3;*)echo”warning -$2 invalid operator!” exit;EsacEcho”answer is sz”ElseEcho”usage - $0 value1
16、operator value2”fi【运行】Chmod a+x jisuan./jisuan 2+32编写一个以文件列表作为输入的过滤器程序,要求文件名含有以句点“.”分隔的后缀,过滤器输出每个文件的不带句点和后缀的文件名。【源程序】Read flagWhile test “$flag” Do Location=expr $location=1Basename=expr substr=”$flag” 1 $locationEcho $basecnameRead flagdone 【运行】Chmod a+x letter./letter3将下面的shell脚本命名为myscript,分析其功能:
17、count=$#cmd=echowhile $count gt 0 do cmd=$cmd $count count=expr $count - 1doneeval $cmd【命令行输入】 chmod a+x myscript ./myscript first second third【运行结果】Third second first【脚本功能分析】将命令行输入的参数倒叙显示4设计一个程序cuts,它从标准输入读入数据,获取由第一个参数n 和第二个参数m所限定范围的数据(包括这两个字符),n和m都是整数。例如:$ cuts 11 14This is a test of cuts program
18、(输入)test (显示结果)【源程序】#!/bin/bashRead blineEcho $aline |cut-c $1-$2实验名称: 进程控制与通信 实验时间: 2014 年 4 月 30 日 第 11周 星期三 一、实验目的1加深进程的概念理解,体会进程创建过程,经一部认识进程的异步并发特征2,了解Linux进程通信原理3,掌握Linux进程控制和进程通信相关的系统调用二、实验预习(预备知识的问题及回答)1写出下列系统调用功能: (1)fork()用于 创建进程 (2)getpid()用于 获取当前的进程ID号 (3)wait()用于 等待子进程结束 (4)exit()用于 进程自我
19、终止 (5)pipe()用于 常见无名管道 (6)signal()用于 在信号和信号处理函数之间建对应关系 (7)kill()用于 发送信号给指定进程 2阅读fork系统调用,用伪码写出其实现流程。Pid=fork()If pid 为负Print 当前进程是子进程Else if pid 为0Print 当前进程是父进程3图示pipe系统调用生成无名管道时所涉及的数据结构。4. 在UNIX系统中运行下面程序,最多可以产生多少个进程?画出进程家族树。main( ) fork( ); fork( ); fork( );8个5.下列程序运行后,a的值是多少?main( ) int a,pid; a=5
20、5; pid=fork( );if(pid0) printf(errorinfork !); exit(0); else if(pid=0) sleep(5); a=99; printf(“a=%dn”,a);sleep(5); exit(0); else sleep(7); printf(“a=%dn”,a); wait(0); a=99 a=55;最终a=55三、实验内容1调试下面的程序,观察可能的并发结果,给出简要分析,并画出进程家族树。#include #include #includemain() int status;intpid1=-1,pid2=-1,pid3=-1; pid1
21、=fork();if(pid1=0)printf(pid1=0,myprocessidis%dn,getpid(); else if(pid10) printf(pid10,myprocessidis%dn,getpid(); pid2=fork( );if(pid2=0)printf(pid2=0, myprocessidis%dn,getpid(); else if(pid20) printf(pid20, myprocessidis%dn,getpid(); pid3=fork();if(pid3=0)printf(pid3=0,pid1=%d,pid2=%d,myprocessidis
22、%dn,pid1,pid2,getpid(); else if(pid30) printf(pid30, pid1=%d,pid2=%d, myprocessidis %dn,pid1,pid2,getpid();wait(&status);exit(0); 2编程实现进程间管道通信。 要求:父子进程共享一无名管道,两个子进程作为发送方分别向管道发送一行信息,父进程先读出子进程P1发来的信息行,将其转换为大写字母输出;再读出子进程P2发来的信息行,将其转换为小写字母输出。【源程序】 Int filedes2;Char buffer80;Main()Pipe(filedes);Char str1
23、80;Char str280;Int pid1,pid2,I;While(pid=fork()=-1);If(pid1=0)Lockf(filedes1,1,0);Printf(“child1 input String1n”);Scanf(“%s”,str1);Write(filedes1,str,sizeof(str1);Lockf(filedes1,0,0);Exit(0);ElseWhile(pid=fork()=-1)If(pid2=0)Lockf(filedes1,1,0)Printf(“child2 input string2n”);Scanf(“%s”,str2);Write(f
24、iledes1,str2,sizeof(stru2);Lockf(fildes1,0,0);Exit(0);ElseIf(waitpid(pid1,null,0)=pid1)Read(filedes0,buffer,80);For(i=0;isizeof(str1);i+)bufferi=toupper(bufferi);Printf(“parent=child1:%sn”,buffer);ElsePrintf(“waitpid1 error!”);If(waitpid(pid2,NULL,0)=pid2)Read(filees0,bufferm80);For(i=0;isizeof(str2
25、);i+)Bufferi=tolower(bufferi);Printf(“parent=child2:%sn”,buffer);ElsePrintf(“waitpid2 error!”);【运行与测试】附加题3学习下面共享存储区的内容,并用共享存储区的方式实现“观察者报告者”问题(共享的count变量存于共享存储区),并验证“与时间有关的错误”。共享存储操作使得两个或两个以上的进程可以共用一段物理内存(一般情况下,两个进程的数据区是完全独立的,父进程用fork创建子进程后,子进程会复制父进程数据到自己的数据区)。(1)创建共享内存#includeint shmget(key_t key,si
26、ze_t size, int permflags);参数key是共享内存的标识,size是共享内存段的最小字节数,permflags是访问权限,值的设置同semget一样。(2)共享内存的控制#includeint shmctl(int shmid, int command, struct shmid_ds *shm_stat);command可设为IPC_STAT,IPC_SET,IPC_RMID。参数shm_stat指向存放属性的结构体,具体内容请参考手册。(3)共享内存的附接和断开includevoid *shmat(int shmid, const void *addr, int sh
27、mflags);int shmdt(const void *addr); 由于两个函数需指出进程地址空间中的地址,因此比较复杂。简化的方法是将shmat中的地址设为NULL。【源程序】【运行与测试】实验名称: 虚拟存储 实验时间: 2014 年 4 月 30 日 第 11 周 星期 三 一、实验目的1,掌握虚拟存储器的概念,理解实现虚拟存储器的基本方法2,体会分页存储器管理中,页面置换的过程3,进一步认识多种页面置换算法的实现机制二、实验预习(预备知识的问题及回答)1描述请求分页的地址转换过程。2解释FIFO页面置换算法所产生的Belady现象。Belady现象是指当进程分配的内存块数增加时,
28、进程缺页率反而上升的现象。FIFO算法在页面置换时,总是淘汰先进入主存的页面,而先进入主存的页面并不一定是以后用不到的页面,如果这些页面以后需要访问,则将产生缺页,因此即使分配的内存块数增加,缺页率依然有可能上升,这是由于使用的页面置换算法不合理导致的三、实验内容1计算并输出下列页面置换算法在不同内存容量(4页至32 页)下的命中率.(1)最佳置换算法(OPT)(2)先进先出算法(FIFO)(3)最近最久未用页面置换算法(LRU)具体要求如下:(1)通过随机函数产生一个指令序列,共320条指令.指令地址的生成原则如下:1)50%的指令是顺序执行的;2)25%的指令是均匀分布在前地址部分;3)2
29、5%的指令是均匀分布在后地址部分;程序中的具体实施方法是: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
30、页;第310条第319条指令在第31页.按以上方式用户指令共组成32页.据此可得出指令地址m和页面号page以及页内位移量offset之间的计算公式为:page=m/10,offset=m%10. 页地址流长度为320。【源程序】Int page_stream320;Int b32;Void ran()Int instruct320;Int I,j,m,m1,m2;Srand(getpid();I=0;While(i320)M=rand()%320;Instructi=m;I+;If(m+1)320Instructi=m+1;I+;M1=read()%(m+1);Instructi=m1;I+
31、;If(m1+1)320)Instructi=m1+1;I+;M1=read()%(m+1);Instructi=m1;I+;If(m1+1)320)Instructi=m1+1;I+;If(m2+2)320)M2=m1+2+rand()%(320-m1-2);Instructi=m2;I+;Page_streami=instructi/10;Int in_block(int page,int block_count)Int flag,k;Flag=0;For(k=0;kblock_count;k+)If(page=bk)Flag=1;Break;Return flag;Void opt()I
32、nt I,j,max,t,s,d32,page_interrupt;For(i=4;i32;i+)For(k=0;k32;k+) bk=-1;J=0;For(k=0;kI;i+)While(in_block(page_streamj,i)=1) j+;Bk=page_streamj;J+;Page_interrupt=0;For(j=1;j320;j+)If(in_block(page_streamj,i)=1) continue;Else For(k=0;kI,k+)Dk=0;For(t=i+1;t320;t+)If(dk=0) dk=320;Max=0;For(k=0;kmax)max=d
33、k;s=k;Bs=page_streamj;Page_interrupt+;Printf(“it has %d blocks,n OPT is %f”,I,page_interrupt/320.0);Void fifo()Int I,j,k,t,page_interrupt;For(i=4;i32;i+)For(k=0;k32;k+)Bk=-1J=0;For(k=0;kI;k+)While(in_block(page_streamj,i)=1)J+;Bk=page_streamj;J+;Page_interrupt=0;T=0;For(j=I;j320;j+)If(in_block(page_streamj,i)=1)Continue;ElseIf(in_block(page_streamj,i)=1)Continue;ElseBt=page_streamj;T=(t+1)%i;Page_interrupt+;Printf(“it has %d blocks,the page_interrupt rate in fifo is %f”,I,page_interrupt/320.0);【运行与测试】专心-专注-专业
限制150内