欢迎来到天天文库
浏览记录
ID:17851344
大小:541.77 KB
页数:7页
时间:2018-09-07
《操作系统原理-进程管理与进程通信》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、广州大学学生实验报告开课学院及实验室:计算机科学与工程实验室2014年11月10日学院计算机科学与教育软件学院年级/专业/班姓名学号实验课程名称操作系统实验成绩实验项目名称进程管理与进程通信指导老师张艳玲一、实验目的1、掌握进程的概念,明确进程的含义2、认识并了解并发执行的实质3、了解什么是管道4、熟悉UNIX/LINUX支持的管道通信方式二、实验器材1、计算机一台。2、Linux三、实验内容1、编写一段程序,使用系统调用fork()创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示'a',子进程分
2、别显示字符'b'和字符'c'。试观察记录屏幕上的显示结果,并分析原因。2、修改上述程序,每一个进程循环显示一句话。子进程显示'daughter…'及'son……',父进程显示'parent……',观察结果,分析原因。3、编写程序实现进程的管道通信。用系统调用pipe()建立一管道,二个子进程P1和P2分别向管道各写一句话:Child1issendingamessage!Child2issendingamessage!父进程从管道中读出二个来自子进程的信息并显示(要求先接收P1,后P2)。四、实验步骤、记录和结果实验二进程管理实验(一)进程的创建实验1.使用vi输
3、入下面代码第7页编译运行结果:从执行情况来看,可能输出bac,bca...2.使用vi输入下面代码第7页编译运行结果:第7页分析原因:1、从进程并发执行来看,各种情况都有可能。上面的三个进程没有同步措施,所以父进程与子进程的输出内容会叠加在一起。输出次序带有随机性。2、由于函数printf()在输出字符串时不会被中断,因此,字符串内部字符顺序输出不变。但由于进程并发执行的调度顺序和父子进程抢占处理机问题,输出字符串的顺序和先后随着执行的不同而发生变化。这与打印单字符的结果相同。第7页实验总结:通过这次实验,即时在多进程中printf()在输出字符串时不会被中断。
4、调用fork()会使运行着的程序分成2个(几乎)完全一样的进程,每个进程都启动一个从代码的同一位置开始执行的线程。这两个进程中的线程继续执行,就像是两个用户同时启动了该应用程序的两个副本。调用一次却返回2次这点也是非常特殊的。思考题:(1)系统是怎样创建进程的?操作系统通过进程创建原语来创建一个进程。创建原语通过下述步骤创建一个进程:1.申请空白PCB2.为新进程分配资源3.初始化进程控制块4.讲新建进程插入就绪态队列(2)当首次调用新创建进程时,其入口在哪里?fork之后。系统调用穿件的子进程继承了原进程的context,但由于子进程也继承了父进程的程序指针,
5、所以子进程是从fork()之后的语句开始执行,也就是新进程的入口。实验三进程通信实验(二)进程的管道通信实验使用vi输入下面代码:第7页编译运行结果结果分析第7页首先在向管道写入“child1....”之前,下面的第一句作用就是给其上锁,使得其他进程不得使用该管道,等到写完之后,倒数第二句将其解锁,然后调用exit(0)正常退出,清楚进程占用资源。在主进程读取管道数据输出这段使用得很有考究,使用了2个wait(0),它的作用是等待子进程完成对管道的写入执行完毕后,等待唤醒后才开始读取管道数据,避免因为主进程过早结束,而子进程未结束而产生僵尸进程。思考题1、程序中
6、的sleep(5)起什么作用?暂停子进程5秒,让其它进程有机会运行。2、子进程1和2为什么也能对管道进行操作?父进程通过调用pipe()创建无名管道,而子进程1和2同属一个父进程,都知道该管道文件描述符,所以可以直接访问该管道进行数据传输。心得体会通过这次实验对lockf(),wait(),sleep()等函数有更深的理解。从实现方式可以看出,使用管道进行进程通信是很原始的方式,但是要学习好操作系统原理,必须对原理性的基本性的功能要有深刻的理解认识才能学好。第7页
此文档下载收益归作者所有