上海大学操作系统_实验六

上海大学操作系统_实验六

ID:6082737

大小:2.28 MB

页数:37页

时间:2018-01-02

上海大学操作系统_实验六_第1页
上海大学操作系统_实验六_第2页
上海大学操作系统_实验六_第3页
上海大学操作系统_实验六_第4页
上海大学操作系统_实验六_第5页
资源描述:

《上海大学操作系统_实验六》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、《操作系统》实验报告指导老师:赵正德37实验三进程管理及进程通信一.实验目的利用Linux提供的系统调用设计程序,加深对进程概念的理解。体会系统进程调度的方法和效果。了解进程之间的通信方式以及各种通信方式的使用。二.实验准备复习操作系统课程中有关进程、进程控制的概念以及进程通信等内容(包括软中断通信、管道、消息队列、共享内存通信及信号量概念)。熟悉本《实验指导》第五部分有关进程控制、进程通信的系统调用。它会引导你学会怎样掌握进程控制。阅读例程中的程序段。三.实验方法用vi编写c程序(假定程序文件名为prog

2、1.c)编译程序$gcc-oprog1.oprog1.c或$cc-oprog1.oprog1.c运行$./prog1.o四.实验内容及步骤用vi编写使用系统调用的C语言程序。1.编写程序。显示进程的有关标识(进程标识、组标识、用户标识等)。经过5秒钟后,执行另一个程序,最后按用户指示(如:Y/N)结束操作。37编译运行结果:1.编写程序。实现父进程创建一个子进程。体会子进程与父进程分别获得不同返回值,进而执行不同的程序段的方法。编译运行:思考:子进程是如何产生的?又是如何结束的?子进程被创建后它的运行环境是

3、怎样建立的?答:子进程由fork()函数创建,通过exit()函数自我结束,子进程被创建后核心将为其分配一个进程表项和进程标识符,检查同时运行的进程数目,并且拷贝进程表项的数据,由子进程继承父进程的所有文件。371.编写程序。父进程通过循环语句创建若干子进程。探讨进程的家族树以及子进程继承父进程的资源的关系。程序如下:编译运行:思考:①画出进程的家族树。子进程的运行环境是怎样建立的?反复运行此程序看会有什么情况?解释一下。18392247224822522254224922512253225037每一次运行

4、返回的进程号都不相同,但是都符合家族进程树,出现这样的情况是由于系统本身就是随机分配进程号的。②修改程序,使运行结果呈单分支结构,即每个父进程只产生一个子进程。画出进程树,解释该程序。用一个break;语句使父进程在子进程结束后跳出循环,运行结果如下:进程家族树如下:200424012402240324041.编写程序。使用fork()和exec()等系统调用创建三个子进程。子进程分别启动不同程序,并结束。反复执行该程序,观察运行结果,结束的先后,看是否有不同次序。编译代码如下:37编译运行:37思考:子进

5、程运行其它程序后,进程运行环境怎样变化的?反复运行此程序看会有什么情况?解释一下。答:子进程运行其他程序后,这个进程就完全被新程序代替。由于并没有产生新进程所以进程标识号不改变,除此之外的旧进程的其他信息,代码段,数据段,栈段等均被新程序的信息所代替。新程序从自己的main()函数开始进行。反复运行此程序发现结束的先后次序是不可预知的,每次运行结果不一样。原因是当每个子进程运行其他程序时,他们的结束随着其他程序的结束而结束,所以结束的先后次序在改变。1.编译程序,验证子进程继承父进程的程序、数据等资源。如用

6、父、子进程修改公共变量和私有变量的处理结果;父、子进程的程序区和数据区的位置。编译源代码如下:编译运行结果:37思考:子进程被创建后,对父进程的运行环境有影响吗?解释一下。答:子进程被创建后,对父进程的运行环境无影响,因为当子进程在运行时,他有自己的代码段和数据段,这些都可以作修改,但是父进程的代码段和数据段是不会随着子进程数据段和代码段的改变而改变。1.参照《实验指导》第五部分中“管道操作的系统调用”。复习管道通信概念,编写一个程序。父进程创建两个子进程,父子进程之间利用管道进行通信。要求能显示父进程、子

7、进程各自的信息,体现通信效果。源代码:37编译运行:思考:①什么是管道?进程如何利用它进行通信的?解释一下实现方法。②修改睡眠时机、睡眠长度,看看会有什么变化。请解释。③加锁、解锁起什么作用?不用它行吗?答:1.管道是指能够连接一个写进程和一个读进程,并允许他们以生产者-消费者方式进行通信的一个共享文件,又称pipe文件。由写进程从管道的入端将数据写入管道,而读进程则从管道出端读出数据来进行通信。2.修改睡眠时机和睡眠长度都会引起进程被唤醒的时间不一,因为睡眠时机决定进程在何时睡眠,睡眠长度决定进程何时被唤

8、醒。3.加锁、解锁是为了解决临界资源的共享问题。不用它将会引起无法有效管理数据,即数据会被修改导致读错了数据。1.编程验证:实现父子进程通过管道进行通信。进一步编程,验证子进程结束,由父进程执行撤消进程的操作。测试父进程先于子进程结束时,系统如何处理“孤儿进程”的。把上题中的父进程中的wait()都去掉,运行结果如下:37思考:对此作何感想,自己动手试一试?解释一下你的实现方法。答:只要在父进程后加上wait()

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。