当前位置:文档之家› 操作系统实验1

操作系统实验1

五、编译与执行过程截图
1.进程的创建
执行后出现acb和abc两种不同情况
2.进程的控制
(1)加锁情况:
( 2 )没有加锁的情况
3.进程的软中断通信
4.进程的管道通信
六、实验结果与分析
1.进程的创建:
实验一为进程创建,由以上截图可以看到产生了不同的结果,即acb和abc。最初只有acb一种情况,反复执行之后,会出现abc。原因很简单,就是因为进程的特性:并发性。进程之间是并发执行的,并发只说一段时间内同时进行。第一个输出一定是a,因为a在bc之外优先执行,而在执行bc的时候,2者会随机出现,多数情况会是acb,若想更快的见到abc,可以讲c语句变长,如改为this is c child.这样进程需要的时间就稍长,后一个会先出现了。但宏观来看,还是并行的。
Child 1 is sending a message!
Child 2 is sending a message!
而父进程则从管道中读出来自于两个子进程的信息,显示在屏幕上。要求父进程先接收P1
来的消息,然后再接收P2发来的消息
四、关键数据结构与函数的说明
1.fork()函数
Fork函数用于创建一个新进程(子进程),返回整数。
三、实验内容
1.进程的创建
编写一段程序,使用系统调用fork()创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“a”;子进程分别显示字符“b”和字符“c”。试观察记录屏幕上的显示结果,并分析原因。
2.进程的控制
修改已有程序,将每个进程输出一个字符改为每个进程输出几行字符,再观察程序执行时屏幕上的现象,并分析原因。如果在程序中使用系统调用lockf()来给每一个进程加锁,可以实现进程之间的互斥,观察并分析出现的现象。
Child process 2 is killed by parent!
父进程等待两个子进程终止后,输出如下的信息后终止:
Parent process is killed!
4. 进程的管道通信
编制一段程序,实现进程的管道通信。使用系统调用pipe()建立一条管道线;两个子进程P1和P2分别向管道各写一句话:
3.exit()函数
exit()函数是进程结束最常调用的函数。在正常终止时,exit()函数返回进程结束状态。
4.kill()函数
kill()函数用于结束执行中的程序或者任务。
5.signal()
signal()函数是允许调用进程控制软中断信号的处理。
6.pipe()函数
pipe函数用于创建一个管道
但是,当我们对进程加锁后,就表明只能由该程序占用处理机,必须这些完这段程序才能执行下一段,因为不会出现交叉的情况,这个就是锁的作用。
3. 进程的软中断通信
进程的软中断控制,使用系统调用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上来的中断信号(即按Del键);当捕捉到中断信号后,父进程用系统调用kill()向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止:
正确返回:等于0,创建子进程;大于0,从父进程返回的子进程的ID值。
错误返回:等于-1,即进程创建失败。
2. wait()函数
wait()函数常用来控制父进程与子进程的同步。在父进程中调用wait(),则父进程被阻塞,进入等待队列,等待子进程结束。当子进程结束时,会产生一个终止状态字,系统会向父进程发出SIGCHLD信号。当接到信号后,父进程提取子进程的终止状态字,从wait()函数返回继续执行原程序。
总之,程序在处理机上执行时的活动称为进程。具有并发性,动态性,独立性,异步性。
2.进程控制
进程有三个状态。就绪态,阻塞态,运行态。系统通过使用一些具有特定功能的程序段来创建、撤销进程以及完成进程各状态间的转换,从而达到多进程高效率并发执行和协调、实现资源共享的目的。期中,运行态可以转换到阻塞,就绪。阻塞可以转换到就绪,就绪可以到运行。
实验报告书
学 生 姓 名高 雪
学 号
班 级计10A-2
2011— 2012学年第一学期
《计算机操作系统》实验报告
实验名称
进程管理实验
实验序号

实验日期
2012/12/16
实验人
高雪
一、实验目的和要求
1.加深对进程概念的理解,明确进程和程序的区别
2.进一步认识并发执行的实质
3.分析进程争用资源的现象,学习解决进程互斥的方法
Child process 1 is killed by parent!
4.了解Linux系统中进程通信的基本原理
二、相关背景知识
1.进程的定义
进程是操作系统结构的基础;是一个正在执行的程序;计算机中正在运行的程序实例;可以分配给处理器并由处理器执行的一个实体;由单一顺序的执行显示,一个当前状态和一组相关的系统资源所描述的活动单元。进程是一个独立的可以调度的活动,是一个抽象实体,当它执行某个任务时,将要分配和释放各种资源。
2. 进程的控制
实验二为进程控制,分为不加锁和加锁的情况,产生的结果不同,在不加锁的情况下,还有由于进程的执行具有并发性这个特征,因此会,还没有完成,但也必须由下一个进程接管处理机,因为它就进入了阻塞的状态。多个进程反复出现,所以就出现了输出的字符交叉的情况。
3.软中断
软中断是对硬中断的一种模拟,发送软中断就是向接受进程的proc结构中的相应项发送一个特定意义的信号。软中断必须等到接收进程执行时才能生效。
4.管道
在Linux中,管道是一种使用非常频繁的通信机制。是一个先进先出,大小固定的缓冲区,用于两个进程之间的单向数据传递。当管道有空间时,写进程把数据送入管道,否则将被阻塞;如果管道中没有数据或者读进程需要的数据多于其中的数据,读进程被阻塞,否则执行读进程的请求。
3.进程的软中断通信
使用系统调用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上来的中断信号(即按Del键);当捕捉到中断信号后,父进程用系统调用kill()向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止:
Child process 1 is killed by parent!
相关主题