2023年操作系统实验报告完整版.pdf
《2023年操作系统实验报告完整版.pdf》由会员分享,可在线阅读,更多相关《2023年操作系统实验报告完整版.pdf(37页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、翼J球)卷 匕 孝h BEIJING UNIVERSITY OF TECHNOLOGY操作系统实验报告学 号:_ _ _ _ _ _ _ _ _ _ _ _ _ _ _姓 名:_ _ _ _ _ _ _ _ _ _ _ _ _ _ _指导老师:_ _ _ _ _ _ _ _ _ _ _ _ _ _完毕日期:目录实验一 1实验二。2实 验 三7实 验 四10实验五。15实 验 六18实 验 七22实验一 UNIX/LINUX入门一、实验目的了 解 UNIX/LINUX运营环境,熟悉U N IX/L IN U X 的常用基本命令,熟悉和掌握U N IX/L IN U X 下c 语言程序的编写、编译
2、、调试和运营方法。二、实验内容。熟 悉 UNIX/L I N U X 的常用基本命令如l s、who、pwd、p s 等。练 习 UN IX/LIN U X 的文本行编辑器v i 的使用方法熟 悉 UNIX/LINUX 下c 语言编译器c c/g c c 的使用方法。用v i编写一个简朴的显示“Hello,World!”c语言程序,用g c c 编译并观测编译后的结果,然后运营它。三、实验规定按照规定编写程序,放在相应的目录中,编译成功后执行,并按照规定分析执行结果,并写出实验报告。四、实验程序#inclu d e#in c 1 u de int main()(print f(H He 1 1
3、 o World!n );retur n 0;五、实验感想通过第一次室验,我了解UNIX/LINUX运营环境,熟悉了UNIX/L IN U X 的常用基本命令,熟悉和掌握了 UNIX/L I N U X 下c语言程序的编写、编译、调试和运营方法。实验二进程管理一、实验目的加深对进程概念的理解,明确进程与程序的区别;进一步结识并发执行的实质。二、实验内容(1)进程创建编写一段程序,使用系统调用fork()创建两个子进程。当此程序运营时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示“a”;子进程分别显示字符 b 和字符“c”。试观测记录屏幕上的显示结果,并分析
4、因素。(2)进程控制修改已编写的程序,将每一个进程输出一个字符改为每一个进程输出一句话,再观测程序执行时屏幕上出现的现象,并分析因素。(3)进程的管道通信编写程序实现进程的管道通信。使用系统调用p ip e。建立一个管道,二个子进程P 1 和P2 分别向管道各写一句话:C h i Id 1 is s e n d i n g a message!Child 2 i s s e n d i n g a m e s s a g e!父进程从管道中读出二个来自子进程的信息并显示(规定先接受P l,再接受P 2).三、实验规定按照规定编写程序,放在相应的目录中,编译成功后执行,并按照规定分析执行结果,并
5、写出实验报告。四、实验设计1、功能设计(1)进程创建使用f o r k ()创建两个子进程,父进程等待两个子进程执行完再运营。(2)进程控制使用f o r k ()创建两个子进程,父进程等待两个子进程分别输出一句话再运营。(3)进程的管道通信先创建子进程1 ,向管道写入一句话,子进程1 结束后创建子进程2,向管道写入一句话,最后父进程从管道中读出。2、数据结构子进程和管道。3、程序框图创建子进程2“五、实验程序(1)进程创建#i n c l u d e#i n c 1 u d e i n t m a i n()I i n t p i d l,p i d 2;p i d l=f o r k();
6、i f (p i d 1 0)w a i t (N U L L);。p i d 2 =f o r k();i f (p i d 2 0)w a i t(N U L L);p ri n t f (,za n ,*);e x i t (0);)(2)进程控制#i n c l u d e#i n c l u d e i n t m a i n ()i n t p i d 1,p i d 2;叩i d l=f o r k ();i f (p i d 1 0)w a i t(N U L L);i d 2 =f o r k ();i f (p i d 2 0)w a i t(N U L L);p r i
7、n t f (Z/T h i s i s f a t h e r a n u);e x i t(0 );)(3)进程的管道通信#i n c l u d e#i n c l u d e#i n c 1 u d e#i n c l u d e i n t m a i n ()Io i n t p i d 1,p i d 2;i n t p f d 2;0c h a r *m s g 1=C h i I d 1 i s s e n d i n g a m e s s a g e!;c h a r *m s g 2=C h i I d 2 i s s e n d i n g a m e s s a g
8、 e 1 ;c h a r b u f 256;i n t r,w;i f (p i p e (p f d)0)p r i n t f (z,p i p e c r e a t e e r r o r!n,z);e x i t (1);)p i d 1=f o r k ();o i f (p i d l 0)p r i n t f(F o r k 1 f a i l e d !H);i f (p i d l =O)c l o s e(p f d 0 );/w r i t es l e e p(3);i f (w=w r i t e (p f d 1 ,m s g 1,s t r l e n (
9、m s g 1)0)Iw a i t (N U L L);p i d 2=f o r k();i f (p i d 2 0)c l o s e (p f d l );/r e a ds l e e p (3);i f (r=r e a d (p f d 0 ,b u f,256)0)p r i n t f (r e a d e r r o r!nz/);e x i t(1);)e l s e p r i n t f (p a r e n t r e a d from p i p e:%s n ,b u f);w a i t (N U L L);c l o s e(p f d l );/r e
10、a ds 1 e e p(3);i f (r =r e a d (p f d 0 ,b u f,25 6)0)p r i n t f (/z r e a d e r r o r!n);e x i t(1);e 1 s e p r i n t f (p a r e n t read f r o m pipe:%s n ,b u f);)i f(p i d 2=0)c l o s e (p f d 0);/w r i t es l e e p(6);i f (w =w r i t e(p f d l ,m s g 2,s t r 1 e n(m s g 2)0)p r i n t f (w r i
11、 t e e r r o r!n );e x i t(l);e l s e p r i n t f (c h i l d 2 s e n d m s g t o p i p e !n );e x i t (0);)六、实验结果文 件(F)编 辑(E)查 看(V)终 端(T)帮 助(H)wj5swj5swj5swj5s-$gcc shiyan2.c./shiyan2El画囱,-o shiyan20awj5swj5s$gcc shiyan2.c-o shiyan2wj5swj5s-$./shiyan2bcawj5swj5s$nwj5swj5s:文件(F)编辑(E)查看(V)终端(T)帮助(H)wj
12、5swj5s$gcc shiyan2.c-o shiyan2wj5swj5s./shiyan2This is child bjThis is child c(This is father awj5swj5s$口。从图中可以看出,分别输出了,三个字母,三句话,实现了子进程向管道写数据,父进程从管道中读出。七、实验感想通过本次实验,我们对进程的概念加深了理解,熟悉了进程的创建方法与作用机制,明确了进程与程序的异同。同时,我们掌握了使用管道通信的机制,进一步结识了并发执行的实质。实验三一个进程启动另一个程序的执行一、实验目的编 写Linux环境下,fork。与exec()的结合使用实现一个进程启动另
13、一个程序的执行的基本方法,掌握ex e c()的几种调用方法。二、实验内容父进程从终端读取要执行的命令,并交给子进程执行 父进程等待子进程结束,并打印子进程的返回值。三、实验规定按照规定编写程序,放在相应的目录中,编译成功后执行,并按照规定分析执行结果,并写出实验报告。四、实验设计1、功能设计根据实验规定,父进程和子进程将被分派不同的任务:父进程从终端读取要执行的命令交给子进程,然后等待子进程技术打印子进程的返回值;子进程执行父进程读取的命令并返回给父进程。由于子进程执行命令需要打开其他文献,所以需要使用e xe c()类的函数实现在一个进程来启动另一个程序,在这里应使用ex eel p()函
14、数从P A TH环境变量中查找文献并执行。对于父进程,可以调用f get()从终端读取要执行的命令,以字符串形式存储然后交给子进程执行,待子进程执行完毕后接受子进程返回值并打印。由于规定带参数的命令也可以执行,那么需要在父进程中fet s 两次,第一次gets得到命令给串command,然后get s 参数给串c 0 m m an d l,并且将这两个参数分别传到子进程的ex e c()函数,其中前两个都是command,第三个是 commandl。2、数据结构用 ch a r*型全局变量command存放指令用 char*型全局变量comman d 1 存放参数3、程序框图五、实验程序#i
15、n e l u d e#i n c l u de#i n cl u de#i n cl u dech a r co m m a n d 2 5 6;c h a r co m m a n d 1 25 6;i n t m a i n()Ii n t r t n;/子进程的返回数值。i n t er r o r n o;o w h i l e(1)P r i n t f (z,z,);8/从终端读取要执行的命令o f g e t s(co m m a n d,2 5 6,s t d in);p r i n t ls m s gc t rl()编制长度为 IK的消息的发送和接受程序。2 .共享存储取
16、得创建、附接和断接使用系统调用 s h m g e t()、s h mat()s hmctl()、s hmc t 1 (),编制一个与上述功能相同的程序。三、实验规定按照规定编写程序,放在相应的目录中,编译成功后执行,并按照规定分析执行结果,并写出实验报告。四、实验设计1、消息的创建、发送和接受(1)功能设计为了实现进程之间消息的创建、发送和接受,一方面应定义两个子进程,S erv er进程负责发送,C I ie n t进程负责接受,父进程负责创建。另一方面需要用到msgget()、msgsn d()、msggrevO、ms g ctr 1 ()等函数进行对消息的控制。题目规定消息长度为1 K
17、,那么ms g sn d(id,msgp,s i ze,f 1 ag)和msgrc v(i d,ms g p,s i ze,typ e,flag)函数中参数 s i ze应设为1024,msgget(key,f 1 a g)中的key应 为 75。父进程获得创建消息后,子进程S er v e r 先后发送编号为1 10的 1 0 条消息,子进程C 1 ie n t先后接受这1 0 条消息,方能达成实验目的。(2)数据结构消息(mymsg):结构体实现,包含的成员变量有消息类型和消息内容,具体实现如下:s tr u c t mymsg a /消息的结构体声明lo n g i n t m y m
18、s g ty p e;。消息类型i nt t ext;。;。消息内容(3)程序框图002、共享存储区的创建、附接和断接(1)功能设计为了实现进程通过共享存储区进行通信,需要创建两个进程并且调用s h m g e t()、sh m a t()、shm ctl()函数实现共享存储区的创建、附接和断接。由于共享存储区的写入和读取由两个子进程完毕,而共享存储区在本程序中为所有进程共用的,因此共享存储区的创建、附接和断接均需要在父进程中完毕。具体的实现方式是现在父进程中创建一块共享存储区,然后用i n t 类型指针lis t 指向该存储区的地址;接着创建两个子进程,第一个子进程通过1 i s t 指针实
19、现向共享存储区写入i n t 类型的数据,第二个子进程通过li s t 指针实现从共享存储区读出i n t 类型的数据。由于两个子进程同时使用了 1 i s t 指针,所以需要控制两个进程互斥,在读进程序中添加了 s le e p(l)语句。(2)数据结构通 过 shmid=shm g et(key,s i ze,f 1 ag)函数建立(获得)共享存储区,返回该共享存储区的描述符shmido(3)程序框图五、实验程序1、消息的创建、发送和接受#i n c l u d e#i n c 1 u d e#i n c l u d e#i n c l u d e#i n c l u d e#i n c
20、1 u d e#d e f i n e M A X 1 0 2 4#d e f i n e K E Y 7 5s t r u c t m y m s g 。/消息结构体l o n g i n t m y m s g t y p e;a/消息类型i n t t e x t ;o 。消息内容 m s g;i n t m ai n()(p i d _ t p i d s;p i d _ t p i d c;i n t m s g i d;i n t i=l;m s g i d=m s g g e t(K E Y,0 6 6 6|I P C _ C R E A T);/获得一个消息的描述符i f (p
21、 i d s=f o r k()=0 )“/创建S e r v e r 子进程o w h i l e (i l l)m s g.m y m s g t y p e=l l-i;g m s g.t e x t =i ;p r i n t f (t h e s e n d e d m e s s a g e i s%d t h n ,i);i+;m s g s n d (m s g i d,&m s g,M A X,0);/向 m s g i d 指定的消息队列发送消息,长度为I K)e x i t (0 );o e 1 s e i=1 0;i f (p i d c=f o r k ()=0)创建
22、 C l i e n t 子进程w h i l e(i!=1)msg r e v (m s g i d,&m s g,M A X,0,0);从m s g i d指定的消息队列接受消息p r i n t f (t h e m e s s ag e i s%d t h n H,m s g.t e x t );i=m s g.m y m s g t y p e;g e x i t (0);e l s e w a i t (0);w ai t (0);e x i t (0);)2、共享存储区的创建、附接和断接#i n c l u d e#i n c 1 u d e#i n c 1 u d e#i n
23、c 1 u d e#i n c l u d e#i n c l u d e#i n c l u d e#d e f i n e M A X 1 1#d e f i n e K E Y 7 5m a i n()n t i ,c h i 1 d 1 ,c h i l d 2,r u n n i n g=l ;定义子进程号o i n t i d ;i n t *l i s ti d=s h m g e t (K E Y,s i z e o f (i n t)*M A X,I P C _ C R E A T|0 6 6 6);建立一块共享存储区,返回该共享存储区的描述符i do 1 i s t=(i
24、n t*)s h m a t(i d,0,0);将 1 i s t 指针指向共享存储区i f (c h i l d l =f o r k ()=-1 )p r i n t f (,z e r r o r i n f o r k a n );e x i t (1);)i f(c h i l d l=0)s l e e p(l);。f o r(i=0;i =1 0;i +)s p r i n t f (y o u r m e s s a g e i s:%d n ,1 i s t i );e x i t (0);e l s e f (c h i l d 2=f o r k()=1)p r i n
25、t f (,z e r r o r i n f o r k an H);e x i t (1);。i f (c h i l d 2 =0)i=0;w h i l e (1)o l i s t i =i;向缓冲区里写入数据p r i n t f (t h e m e s s ag e s e n t i s :%d n”,l i s t i );o t,i f(l i s t i =1 0)br e ak;i +;。)e x i t (0 );)o e l s e w a i t (0);w ai t (0);s h m d t (l i s t);/将共享存储区与进城断开o s h m c t
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2023 操作系统 实验 报告 完整版
限制150内