扬州大学操作系统实验报告书.doc_第1页
扬州大学操作系统实验报告书.doc_第2页
扬州大学操作系统实验报告书.doc_第3页
扬州大学操作系统实验报告书.doc_第4页
扬州大学操作系统实验报告书.doc_第5页
已阅读5页,还剩61页未读 继续免费阅读

下载本文档

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

文档简介

1、扬州大学操作系统实验报告书操作系统原理实验报告书班级:软件 1102学号:姓名:2指导教师:徐向英2012-2013学年 第 二 学期实验名称:LINUX用户界面实验时间:2013年4月9日第6周星期二一、实验目的1,熟悉 Linux 字符操作界面,熟练掌握常用 Shell 命令。2,熟悉 Linux 文本编辑方法,学会编辑软件 VI 的使用。3,了解 Linux编译器 gcc 的功能,掌握基于Linux平台的 C 程序的开发二、 实验预习(预备知识的问题及回答)1为什么在 Linux 系统中,诸如光盘、 U 盘等要先挂载而后才能使用?如何获得 U 盘的设备名?装载点在文件系统中的位置是什么?

2、由于文件系统的差异, Linux 在默认情况下并不支持软盘,光盘, U 盘,所以需要通过装在相应盘片才可以访问其中的数据3装载点是挂载文件系统的目录位置2从虚拟机界面退出进入Windows OS 界面的操作是 Ctrl+Alt ,从 Windows OS 界面进入虚拟机界面的方法是 鼠标点击虚拟机界面。3权限的含义是什么?如何使用数字法设定文件的权限?Linux 系统中的每个文件和目录都有相应的访问许可权限,访问权限分为只读( r ),可写 (w) 和可执行三种,有三种不同类型的用户可以对文件或者目录进行访问,分别是文件所有者( u),同组用户 (g)和其它用户(o)。所有的文件和目录都被创建

3、他们的人所拥有。 只要你是这个文件的所有者或者你登陆为用户, 你就拥有了改变所有者,群组和其他人权限的权利。使用数字法改变权限:命令格式 chmod 权限数值文件名说明给指定文件赋予数值所规定的权限在数字设定法中,每种权限设置均可以用数值来代表,其中 0 表示没有权限, 1 表示可执4行权限, 2 表示可写权限, 4 表示可读权限,这些值之和便可以用来设定特定权限。4什么过滤操作?在 Linux 中如何实现?过滤操作:将一个命令的输出作为一个命令的输入 Linux 实现的命令格式:命令 |命令5在 Linux 中挂载 u 盘并能显示其文档的中文信息,所使用的挂载命令是:Mount/dev/sd

4、al/mnt/usb。6什么是 vi? 其三种操作模式的含义是什么?给出三种工作模式间的转换图。命令模式: vi 启动后的默认模式,控制光标的移动,复制删除文字, 进入输入模式和末行模式输入模式:进行文字输入末行模式:保存文件,退出VI5三、 实验内容(包含实验所用命令或相关程序源代码)1shell 操作命令(给出每题所用的Shell 命令或命令结果)( 1)创建名为 stu1、stu2 的 2 个用户 ,设置密码分别为 student1 和 student2 ,并将它们设为组 group1 中的成员。#groupadd group1#useradd stu1 g group1#su stu1

5、Spasswd stu1 回车后敲入密码 student1 $exit#useradd stud2 g group1#su stu2$passwd stu2$exit6( 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$cd7$ls-1Dir1

6、目录权限为: drwxr-xr-x, 即目录的用户可读,写,执行(4)调试 pwd 和 cd 命令,回答下列关于 Linux 文件系统中目录的有关问题。 用户主目录的绝对路径如何表示? /home/stu1/home/stu2根目录如何表示?/root和分别表示什么目录?子目录,父目录表示什么目录?用户主目录当前目录如何表示?Cd( 5)新建用户 stu3,设置其密码为 student3,并将其设置为 group2 中成员。尔后,以 stu3 登录,在其主目录下建立名为 text 的目录,在 text 目录下再建立名为 dir1 的子目录,并使其成为当前目录。8#groupadd group2

7、#useradd stu3 g group2#su stu3$passwd 回车后敲入密码 student3 $cd$mkdir text$mkdir dir1$cd text/dir1( 6)使用 catsneakers.txt 命令,分析命令行 cat sneakers.txt 的显示结果。9$ catsneakers.txtbuy some sneakersthen go to the coffee shopthen buy some coffD$cat sneakers.txt从键盘中创建一个名为 sncakers.txt 文件,文件内容为 :buy some sncakersThen

8、 go to the coffee shopThen buy some coff( 7)使用上题的方法,在dir1目录中建立home.txt 文件,其内容为:bring the coffee hometake off shoesput on sneakersmake some coffee10relax!$cd /home/stu1/dir1$cathome.txtBring the coffee homeTake off shoesPut on sneakersMake some coffeeRelax!ctrl+d(8)试写出实现下列功能的shell 命令: 将 home.txt 文件移至

9、其上级目录中(即 text 目录下)。$mv/home.txt 将 home.txt 添加到 sneakers.txt 尾部形成新的文件 saturday.txt 。$cat cneakers.txtasturday.txt11$cat home.txtSaturday.txt 将 text 目录树从 stu3 用户主目录下移至 stu2 主目录下。【使用特权用户方法】sumv/home/stu3/text/home/stu2【修改目录权限方法】#cp/home/stu3/text/home/stu2(9) 试画出上述命令后,用户 stu1、stu2 和 stu3 主目录中的目录树( 3 棵子

10、树)。122 Linux C 程序开发(1)编写 Linux C 程序,把一个文件的内容复制到另一个文件中, 即实现简单的 copy 功能。要求:程序输入的第一个参数是源文件,第二个参数是目标文件。【源程序】#include13#include#include#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 op

11、en outfilen ”); Exit(0);If(out=fopen(argv2, ”w”)=NULLPrntf( “can not open outfile ”);Exit(0);14While(!feof(in)fputc(in),out);Fclose(in);Fclose(out);15【运行命令】#gcc o test copy.c#./test file1.c file2.c( 2)编写 Linux C 程序,列出 stu2 主目录中的文件信息,并将其中 saturday.txt 文件的权限设置为文件所有者可读可写、同组用户只读、其他用户无权限。【源程序】#include#in

12、clude#include#includeInt main(int argc,char *argv)16DIR *dp;Struct dirent *dirp;Int n=0;If(arge!=2)Printf( “a signle argement is required ”);Exit(0);If(dp=opendir(argv1)=NULL)Printf( “can not open%s ”,args1); Exit(0);While(dirp=readdir(dp)!=NULL)&(nd_name);17System(“chmod640/home/stu2/text/dir1/Satu

13、rday.txt”)18【运行命令】#gcc o test list.c#./test.home/stu219实验名称:SHELL 程序设计实验时间:2013年4月11日第6周星期 4一、实验目的熟悉 SHELL 脚本编程的步骤,掌握基于 Bash 的 Shell 脚本开发。二、 实验预习(预备知识的问题及回答)1. Linux 系统默认的 shell 语言是什么?欲查看该 shell 的版本,应使用什么命令?Bash shell$echo $BASH_VERSION2. 预习 shell 有关变量和参数的相关知识,回答下列问题。( 1)假设用户进行了如下的赋值操作:$ person=jenn

14、y试给出下面命令的输出结果。1) echo personperson2) echo $personjenny203) echo $person$person4) echo “$person”jenny( 2)填充下列与环境变量、 位置变量和预定义变量相关的表格。Shell 变量定义HOME保存用户注册目录的绝对路径PATH保存用冒号分割的目录路径PWD当前工作目录的据对路径名PS1主提示符,特权用户为#,普通用户为 $0当前 shell 程序的文件名$#位置参数的个数$?前一个命令执行后返回的状态$当前进程的 PID3写出下列 expr 命令的输出:( 1) expr index “value

15、” a( 2) expr “value”: v.*u 21( 3) expr “aaa”: a+( 4) expr “aaa”: a?( 5) expr 2+3( 6) expr 2 + 3(7) expr2*3(8) expr5+expr 2 + 3(9) exprlength “operating system ”(10) exprsubstr linux 2 324312+356mon-numeric argument16inu三、 实验内容1编写 Shell 脚本,从命令行中接收一个二元算术表达式并计算其结果。【源程序】#!/bin/bashIftest $#=3ThenCase s2

16、 in+)let z=$1+$3;-)let z=$1-$3;/)let z=$1/$3;22x|x)let z=$1*$3;*)echo”warning-$2invalidoperator! ”exit;EsacEcho”answer is sz”ElseEcho”usage - $0 value1 operator value2”fi【运行】Chmod a+x jisuan./jisuan 2+32编写一个以文件列表作为输入的过滤器程序,要求文件名含有以句点“ .”分隔的后缀,过滤器输出每个文件的不带句点和后缀的文件名。【源程序】23Read flagWhile test “$flag”D

17、oLocation= expr $location=1 Basename=exprsubstr= ”$flag”1$location Echo $basecnameRead flagdone24【运行】Chmod a+x letter./letter3将下面的 shell 脚本命名为 myscript ,分析其功能:count=$#cmd=echowhile $countgt0 docmd=$cmd$countcount=expr $count-1done25eval $cmd【命令行输入】chmoda+xmyscript./myscriptfirstsecondthird【运行结果】Thir

18、d second first【脚本功能分析】将命令行输入的参数倒叙显示4设计一个程序 cuts,它从标准输入读入数据,获取由第一个参数 n 和第二个参数 m 所限定范围的数据(包括这两个字符),n 和 m 都是整数。例如:$ cuts1114This is a test ofcuts program ( 输入 )test (显示结果)【源程序】26#!/bin/bashRead blineEcho $aline |cut-c $1-$2实验名称:进程控制与通信实验时间:2013年5月7日第10周星期2一、实验目的1 加深进程的概念理解,体会进程创建过程,经一部认识进程的异步并发特征2,了解 L

19、inux 进程通信原理3,掌握 Linux 进程控制和进程通信相关的系统调用27二、实验预习(预备知识的问题及回答)1写出下列系统调用功能:(1)fork ()用于创建进程(2)getpid ()用于获取当前的进程ID号(3)wait ()用于等待子进程结束(4)exit ()用于进程自我终止(5)pipe()用于常见无名管道(6)signal()用于在信号和信号处理函数之间建对应关系(7)kill ()用于发送信号给指定进程2阅读 fork 系统调用,用伪码写出其实现流程。Pid=fork()If pid为负Print当前进程是子进程Else if pid为 028Print当前进程是父进程

20、3图示 pipe 系统调用生成无名管道时所涉及的数据结构。294. 在 UNIX 系统中运行下面程序,最多可以产生多少个进程?画出进程家族树。main( ) fork( );fork( );fork( );8 个5.下列程序运行后, a 的值是多少?main( ) int a,pid; a=55; pid=fork( );if (pid 0)printf(error in fork!);exit(0); 30elseif(pid=0) sleep(5); a=99; printf(n”“,a);sleep(5);a=%d exit(0);else sleep(7);printf(“ a=%dn

21、”,a);wait(0);a=99a=55;最终 a=55三、实验内容1调试下面的程序,观察可能的并发结果,给出简要分析,并画出进程家族树。#include #include #includemain () int status;int pid1=-1,pid2=-1,pid3=-1;pid1=fork();if (pid1 = 0)printf(pid1=0,my process id is %dn,getpid();else if (pid1 0) printf(pid10,my process id is %dn, getpid();pid2=fork( );31if (pid2 = 0

22、)printf(pid2=0,my process id is %dn,getpid(); else if (pid2 0)printf( pid20,my process id is %dn,getpid();pid3=fork();if (pid3 = 0)printf(pid3=0,pid1=%d,pid2= %d, my process id is %dn,pid1,pid2,ge tpid();else if (pid3 0)printf(pid30,pid1=%d,pid2=%d,my process id is %dn,pid1,pid2,getpid();wait(&statu

23、s);exit(0);322编程实现进程间管道通信。要求:父子进程共享一无名管道,两个子进程作为发送方分别向管道发送一行信息,父进程先读出子进程P1 发来的信息行,将其33转换为大写字母输出;再读出子进程 P2 发来的信息行,将其转换为小写字母输出。【源程序】Int filedes2;Char buffer80;Main()Pipe(filedes);Char str180;Char str280;Int pid1,pid2,I;While(pid=fork()=-1);If(pid1=0)Lockf(filedes1,1,0);Printf( “child1 input String1n ”

24、);Scanf(“%s”,str1);Write(filedes1,str,sizeof(str1);Lockf(filedes1,0,0);Exit(0);34ElseWhile(pid=fork()=-1)If(pid2=0)Lockf(filedes1,1,0)Printf( “child2 input string2n ”);Scanf(“%s”,str2);Write(filedes1,str2,sizeof(stru2);Lockf(fildes1,0,0);Exit(0);ElseIf(waitpid(pid1,null,0)=pid1)Read(filedes0,buffer,

25、80);For(i=0;isizeof(str1);i+)bufferi=toupper(bufferi);Printf( “parent=child1:%sn ”,buffer);ElsePrintf( “waitpid1 error! ”);35If(waitpid(pid2,NULL,0)=pid2)Read(filees0,bufferm80);For(i=0;isizeof(str2);i+)Bufferi=tolower(bufferi);Printf( “parent=child2:%sn ”,buffer);ElsePrintf( “waitpid2 error! ”);36【

26、运行与测试】37附加题3学习下面共享存储区的内容,并用共享存储区的方式实现“观察者报告者”问题(共享的 count 变量存于共享存储区),并验证“与时间有关的错误” 。共享存储操作使得两个或两个以上的进程可以共用一段物理内存 (一般情况下, 两个进程的数据区是完全独立的,父进程用 fork 创建子进程后,子进程会复制父进程数据到自己的数据区) 。(1)创建共享内存#includeint shmget(key_t key,size_t size, int permflags);参数 key 是共享内存的标识, size 是共享内存段的最小字节数, permflags 是访问权限,值的设置同 se

27、mget 一样。(2)共享内存的控制#includeintshmctl(intshmid,intcommand,structshmid_ds*shm_stat);command 可 设 为 IPC_STAT,IPC_SET,IPC_RMID 。参数 shm_stat指向存放属性的结构体,具体内容请参考手册。38( 3)共享内存的附接和断开includevoid *shmat(int shmid, const void *addr, int shmflags);int shmdt(const void *addr);由于两个函数需指出进程地址空间中的地址, 因此比较复杂。简化的方法是将 shma

28、t 中的地址设为 NULL 。【源程序】39【运行与测试】40实验名称:虚拟存储实验时间:2013年5月21日第12周星期 2一、实验目的1,掌握虚拟存储器的概念,理解实现虚拟存储器的基本方法2,体会分页存储器管理中,页面置换的过程3,进一步认识多种页面置换算法的实现机制二、实验预习(预备知识的问题及回答)1描述请求分页的地址转换过程。41422解释 FIFO 页面置换算法所产生的 Belady 现象。Belady 现象是指当进程分配的内存块数增加时,进程缺页率反而上升的现象。 FIFO 算法在页面置换时,总是淘汰先进入主存的页面, 而先进入主存的页面并不一定是以后用不到的页面, 如果这些页面

29、以后需要访问, 则将产生缺页, 因此即使分配的内存块数增加,缺页率依然有可能上升,这是由于使用的页面置换算法不合理导致的三、实验内容1计算并输出下列页面置换算法在不同内存容量( 4 页至 32 页)下的命中率 .43(1) 最佳置换算法 (OPT)(2) 先进先出算法 (FIFO)(3) 最近最久未用页面置换算法 (LRU)具体要求如下:( 1)通过随机函数产生一个指令序列 , 共 320 条指令 . 指令地址的生成原则如下 :1)50%的指令是顺序执行的 ;2)25%的指令是均匀分布在前地址部分;3)25%的指令是均匀分布在后地址部分;程序中的具体实施方法是:1) 在0,319 的指令地址之

30、间随机选取一起点地址 m;2) 顺序执行一条指令 , 即执行地址为 m+1的指令;3) 在前地址 0,m+1 中随机执行一条指令 , 该指令的地址为 m;4) 顺序执行一条指令 , 即执行地址为 m+1 的指令 ;5) 在后地址 m+2,319 中随机执行一条指令;重复上述步骤 (1)(5), 直到执行320 条指令为止.44将指令序列变换成为页地址流:设: 页面大小为1k, 用户内存容量为4 页逐步增加到 32 页, 用户虚存容量为32k.假定在用户虚存中 , 每页存放 10 条指令 , 即 320 条指令在虚存中的存放方法为 :第0条第9条指令在第 0页;第10条 第 19条指令在第 1页

31、;第 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;45Srand(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+;If(m1+1)320)Instructi=m1+1;I+;M1=read()%(m+1);Instructi=m1;46I+;If(m1+1)320

温馨提示

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

评论

0/150

提交评论