版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、北方工业大学计算机操作系统实验报告实验名称进程管理实验序号1实验日期2013.11.20实验人一、实验目的和要求1加深对进程概念的理解,明确进程和程序的区别2进一步认识并发执行的实质3分析进程争用资源的现象,学习解决进程互斥的方法4了解Linux系统中进程通信的基本原理二、相关背景知识1Linux编译运行程序 格式 gcc option sourcefilename 最简单的是:gcc hello.c 默认的情况下将生成a.out的可执行性文件,你只需要在终端上输入./a.out就可以看到执行的结果。如果想指定生成目标文件的名字那么你可以加上 -o选项,命令如下:gcc -o hello he
2、llo.c2. 保存文件至U盘插入U盘,保证其与主机连接良好。在Linux终端界面执行如下命令:mount t auto /dev/sda1 /mnt/usb注意:1) /mnt/usb目录必须已经存在,如果不存在可以新建这个目录。2) U盘在系统关闭后再拔出。三、实验内容1进程的创建编写一段程序,使用系统调用fork()创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“a”;子进程分别显示字符“b”和字符“c”。试观察记录屏幕上的显示结果,并分析原因。2进程的控制修改已有程序,将每个进程输出一个字符改为每个进程输出几行字符
3、,再观察程序执行时屏幕上的现象,并分析原因。如果在程序中使用系统调用lockf()来给每一个进程加锁,可以实现进程之间的互斥,观察并分析出现的现象。3进程的软中断通信使用系统调用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上来的中断信号(即按Del键);当捕捉到中断信号后,父进程用系统调用kill()向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止:Child process 1 is killed by parent!Child process 2 is killed by parent!父进程等待两个子进程终止后,输出如下的信息后终止:Parent
4、 process is killed!4进程的管道通信编制一段程序,实现进程的管道通信。使用系统调用pipe()建立一条管道线;两个子进程P1和P2分别向管道各写一句话: Child 1 is sending a message! Child 2 is sending a message!而父进程则从管道中读出来自于两个子进程的信息,显示在屏幕上。要求父进程先接收P1发来的消息,然后再接收P2发来的消息。四、关键数据结构与函数的说明fork()函数:fork函数用于创建一个新进程(子进程),返回整数。正确返回:等于0,创建子进程;大于0,从父进程返回的子进程的ID值。错误返回:等于-1,即进程
5、创建失败。exit()函数:exit()函数是进程结束最常调用的函数。在正常终止时,exit()函数返回进程结束状态。signal(): signal()函数是允许调用进程控制软中断信号的处理。kill()函数:kill()函数用于结束执行中的程序或者任务。pipe()函数:pipe函数用于创建一个管道wait()函数:wait()函数常用来控制父进程与子进程的同步。在父进程中调用wait(),则父进程被阻塞,进入等待队列,等待子进程结束。当子进程结束时,会产生一个终止状态字,系统会向父进程发出SIGCHLD信号。当接到信号后,父进程提取子进程的终止状态字,从wait()函数返回继续执行原程序
6、。五、编译与执行过程截图1.2.(1) 进程无锁(2) 进程加锁3.4.六、实验结果与分析1运行结果:abc。分析:进程并发执行,输出的结果可能是abc的排列组合。fork()创建进程所需的时间要多于输出一个字符的时间,因此在主程序创建进程2的同时,进程1输出“b”,进程1、进程2和主程序的执行次序及输出次序是随机的。2(1)进程无锁 运行结果:输出的各进程的字符串相互交错。 分析:由于进程的执行具有并发性这个特征,因此会产生字符交叉的情况,即某一个进程在自己的时间片当中使用处理机,但是当时间片结束,还没有完成,但也必须由下一个进程接管处理机,因为它就进入了阻塞的状态。多个进程反复出现,所以就
7、出现了输出的字符交叉的情况。 (2)进程加锁 运行结果:先输出完父进程再输出第二个子进程的所有字符串,最后输出第一个子进程。 分析:对进程加锁后,就表明只能由该程序占用处理机,必须这些完这段程序才能执行下一段,因为不会出现交叉的情况。3运行结果:输入 “Ctrl+c”后显示:Child process 1 is killed by parent!Child process 2 is killed by parent! 分析:程序到waiting()函数时,因为wait_mark!=0一直在循环,处于等待状态;当signal()捕捉键盘上来的中断信号时,调用stop(),让wait_mark=0
8、,于是程序能跳出waiting(),执行下面的程序,父进程用系统调用kill()向两个子进程发出信号,子进程捕捉到信号后分别输出。4运行结果:Child 1 is sending a message! Child 2 is sending a message! 分析:当写进程完成任务,把要求的数据写入管道后,便会睡眠等待。直到读进程将管道中的数据读取取出后,再把写进程唤醒。当读进程试图从一空管道中读取数据时,也应睡眠等待,直至写进程将数据写入管道后,才将其唤醒。当一个进程正对pipe进行读/写操作时,另一进程必须等待,程序中使用lock(fd1,1,0)函数实现对管道的加锁操作,用lock(f
9、d1,0,0)解除管道的锁定,所以在进程1使用完管道并解锁后进程2才能使用。 七、调试时遇到的问题及解决方法(提供BUG截屏)八、调试后的程序源代码1#includemain() int p1,p2; while(p1=fork()=-1); if(p1=0) putchar(b); else while(p2=fork()=-1); if(p2=0) putchar(c); else putchar(a); 2.(1)进程无锁#includemain() int p1,p2,i; while(p1=fork()=-1); if(p1=0) for(i=0;i10;i+) printf(fir
10、st sonn); else while(p2=fork()=-1); if(p2=0) for(i=0;i10;i+) printf(second sonn); else for(i=0;i10;i+) printf(farthern); (2)进程加锁#include#includemain() int p1,p2,i; while(p1=fork()=-1); if(p1=0) lockf(1,1,0); for(i=0;i10;i+) printf(first sonn); lockf(1,0,0); else while(p2=fork()=-1); if(p2=0) lockf(1
11、,1,0); for(i=0;i10;i+) printf(second sonn); lockf(1,0,0); else lockf(1,1,0); for(i=0;i10;i+) printf(farthern); lockf(1,0,0); 3.#include #include #include #include void waiting(),stop();int wait_mark;void main()int p1,p2;while (p1=fork()=-1);if(p10)while (p2=fork()=-1);if (p20)wait_mark=1;signal(SIGI
12、NT,stop);waiting();kill(p1,16);kill(p2,17);wait(0);wait(0);printf(parent process is killed n);exit(0);else wait_mark=1;signal(17,stop); signal(SIGINT,stop);waiting( );lockf(1,1,0);printf(child 2 process is killed n);lockf(1,0,0);exit(0);elsewait_mark=1;signal(16,stop); signal(SIGINT,stop); waiting(
13、); lockf(1,1,0); printf(child 1 process is killed n);lockf(1,0,0);exit(0);void waiting()while (wait_mark!=0);void stop()wait_mark=0;4.#include#include#includeint pid1,pid2;main() int fd2; char OutPipe100,InPipe100; pipe(fd); while(pid1=fork()=-1); if(pid1=0) lockf(fd1,1,0); sprintf(OutPipe,Child 1 i
14、s sending a message!); write(fd1,OutPipe,50); sleep(5); lockf(fd1,0,0); exit(0); else while(pid2=fork()=-1); if(pid2=0) lockf(fd1,1,0); sprintf(OutPipe,Child 2 is sending a message!); write(fd1,OutPipe,50); sleep(5); lockf(fd1,0,0); exit(0); else wait(0); read(fd0,InPipe,50); printf(%sn,InPipe); wait(0); read(fd0,InPipe,50); pri
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 书上架工作制度范本
- 临泉玩具厂工作制度
- 中学校消毒工作制度
- 交通检疫点工作制度
- 专业委员会工作制度
- 办公室人员工作制度
- 劳动局管理工作制度
- 区健康教育工作制度
- 医保各岗位工作制度
- 医务部工作制度汇编
- 招21人!大通县2026年公开招聘编外临聘工作人员考试参考试题及答案解析
- 2025年长沙市芙蓉区事业单位招聘笔试试题及答案解析
- 临床床头抬高30°-小角度大作用
- 2026陕西榆林市旅游投资集团有限公司招聘7人考试备考试题及答案解析
- 湖南省新高考教学教研联盟(长郡二十校联盟)2026届高三下学期3月联考试题 英语 含解析
- 2026年广州民航职业技术学院单招职业适应性测试题库含答案详解(基础题)
- 《安徽省建设工程概算费用定额》2025年版
- 幼儿园后勤业务培训制度
- 2025年高考(海南卷)地理试题(学生版+解析版)
- 空间不平等量化分析-洞察与解读
- 福建医卫系统事业单位招聘《护理学专业知识》近年考试真题题库资料及答案
评论
0/150
提交评论