版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 西 安 邮 电 大 学 (计算机学院)课内实验报告实验名称: 进程管理 专业名称: 计算机科学与技术班 级:计科1104 学生姓名:张冬冬(07)学号(8位): 04111112指导教师: 任东陕设计起止时间: 2013年11月22日一. 实验目的及实验环境(1)加深对进程概念的理解,明确进程和程序的区别。 (2)进一步认识并发执行的实质。 (3)分析进程竞争资源现象,学习解决进程互斥的方法。 (4)了解Linux系统中进程通信的基本原理。二. 实验内容(1)进程的创建 编写一段源程序,使系统调用fork()创建两个子进程,当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在
2、屏幕上显示一个字符:父进程显示字符“a”;子进程分别显示字符“b”和字符“c”。试观察纪录屏幕上的显示结果,并分析原因。 (2)进程的控制 修改已编写的程序,将每个进程输出一个字符改为每个进程输出一句话,在观察程序执行时屏幕出现的现象,并分析原因。 如果在程序中使用调用lockf()来给每一个子进程加锁,可以实现进程之间的互斥,观察并分析出现的现象。 (3)编写一段程序,使其现实进程的软中断通信。 要求:使用系统调用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上来的中断信号(即按DEL键);当捕捉到中断信号后,父进程用系统调用Kill()向两个子进程发出信号,子进程
3、捕捉到信号后分别输出下列信息后终止: Child Processll is Killed by Parent! Child Processl2 is Killed by Parent! 父进程等待两个子进程终止后,输出如下的信息后终止 Parent Process is Killed! 在上面的程序中增加语句signal (SIGNAL, SIG-IGN) 和signal (SIGQUIT, SIG-IGN), 观察执行结果,并分析原因。 (4)进程的管道通信 编制一段程序,实现进程的管理通信。 使用系统调用pipe()建立一条管道线;两个子进程P1和P2分别向管道中写一句话: Child 1
4、 is sending a message! Child 2 is sending a message! 而父进程则从管道中读出来自于两个子进程的信息,显示在屏幕上。 要求父进程先接收子进程P1发来的消息,然后再接收子进程P2发来的消息。三方案设计1 进程的创建任务编写一段程序,使用系统调用fork( )创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符;父进程显示字符“a”,子进程分别显示字符“b”和“c”。试观察记录屏幕上的显示结果,并分析原因。程序#include<stdio.h>main()int p1,p2;if(p1=
5、fork() /*子进程创建成功*/ putchar('b');else if(p2=fork() /*子进程创建成功*/ putchar('c'); else putchar('a'); /*父进程执行*/<运行结果>bca(有时会出现bac)分析:从进程执行并发来看,输出bac,acb等情况都有可能。原因:fork()创建进程所需的时间多于输出一个字符的时间,因此在主进程创建进程2的同时,进程1就输出了“b”,而进程2和主程序的输出次序是有随机性的,所以会出现上述结果。2 进程的控制<任务> 修改已编写好的程序,将每个
6、程序的输出由单个字符改为一句话,再观察程序执行时屏幕上出现的现象,并分析其原因。如果在程序中使用系统调用lockf()来给每个程序加锁,可以实现进程之间的互斥,观察并分析出现的现象。程序1#include<stdio.h>main()int p1,p2,i;if(p1=fork() for(i=0;i<500;i+) printf("child %dn",i);else if(p2=fork() for(i=0;i<500;i+) printf("son %dn",i); else for(i=0;i<500;i+) pri
7、ntf("daughter %dn",i);运行结果child.sondaughterdaughter或childsonchildsondaughter分析:由于函数printf()输出的字符串之间不会被中断,因此,字符串内部的字符顺序输出时不变。但是 , 由于进程并发执行时的调度顺序和父子进程的抢占处理机问题,输出字符串的顺序和先后随着执行的不同而发生变化。这与打印单字符的结果相同。程序2#include<stdio.h>main()int p1,p2,i;if(p1=fork() lockf(1,1,0); for(i=0;i<500;i+) prin
8、tf("child %dn",i); lockf(1,1,0);else if(p2=fork() lockf(1,1,0); for(i=0;i<500;i+) printf("son %dn",i); lockf(1,1,0); else lockf(1,1,0); for(i=0;i<500;i+) printf("daughter %dn",i); lockf(1,0,0); <运行结果大致与未上锁的输出结果相同,也是随着执行时间不同,输出结果的顺序有所不同。分析:因为上述程序执行时,不同进程之间不存在共享临
9、界资源(其中打印机的互斥性已有由操作系统保证)问题,所以,加锁与不加锁效果相同。3软中断通信任务1编制一段程序,使用系统调用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上来的中断信号(即按ctrl+c键),当捕捉到中断信号后,父进程用系统调用kill()向两个子进程发出信号,子进程捕捉到信号后,分别输出下列信息后终止:child process1 is killed by parent!child process2 is killed by parent!父进程等待两个子进程终止后,输出以下信息后终止:parent process is killed! 4.fork
10、( ) 创建一个新进程。系统调用格式:pid=fork( )参数定义:int fork( )fork( )返回值意义如下:0:在子进程中,pid变量保存的fork( )返回值为0,表示当前进程是子进程。>0:在父进程中,pid变量保存的fork( )返回值为子进程的id值(进程唯一标识符)。-1:创建失败。如果fork( )调用成功,它向父进程返回子进程的PID,并向子进程返回0,即fork( )被调用了一次,但返回了两次。此时OS在内存中建立一个新进程,所建的新进程是调用fork( )父进程(
11、parent process)的副本,称为子进程(child process)。子进程继承了父进程的许多特性,并具有与父进程完全相同的用户级上下文。父进程与子进程并发执行。核心为fork( )完成以下操作:(1)为新进程分配一进程表项和进程标识符进入fork( )后,核心检查系统是否有足够的资源来建立一个新进程。若资源不足,则fork( )系统调用失败;否则,核心为新进程分配一进程表项和唯一的进程标识符。(2)检查同时运行的进程数目超过预先规定的最大数目时,fork( )系统调用失败。(3)拷贝进程表项中的数据将父进程的当前目录和所有已打开的数据拷贝到子进程表项中,并置进程的状态为“创建”状态
12、。(4)子进程继承父进程的所有文件对父进程当前目录和所有已打开的文件表项中的引用计数加1。(5)为子进程创建进程上、下文进程创建结束,设子进程状态为“内存中就绪”并返回子进程的标识符。(6)子进程执行虽然父进程与子进程程序完全相同,但每个进程都有自己的程序计数器pc,然后根据pid变量保存的fork()返回值的不同,执行了不同的分支语句。#include <stdio.h>main( )int p1,p2;while(p1=fork( )= = -1); /*创建子进程p1*/if (p1
13、= =0) putchar('b'); elsewhile(p2=fork( )= = -1); /*创建子进程p2*/if(p2= =0) putchar('c'); else putchar('a'); 运行结果:bca四测试数据及运行结果五总结1实验过程中遇到的问题及解决办法;实验结果为c,b,a或b,c,a。父进程a刚启动,接着就生成子进
14、程b,c,父进程此时之后暂停,去生成子进程b,c。生成完子进程b,c之后,父进程继续执行。 2不能够同时生两个子进程,会发生进程间的互斥。 进程创见之后,从键盘上接受一个信后,然后关闭子进程和父进程。 4子进程之间通过管道相互发送消息 2对设计及调试过程的心得体会。本次实验主要实现Linux操作系统中进程管理的功能。了解了进程的创建、执行特定任务、终止、和同步的相关系统调用。理解了fork、exec、wait、exit3个系统调用的使用。该系统包括有简单的进程控制、同步与通讯机构,系统在运行过程中能显示各进程的状态及有关参数的变化情况,从而观察诸进程的运行过程及系统的管理过程,在我的电脑能够运行通过,虽不能尽善尽美,但也基本能实现老师的要求的实验,虽然时间有点短,但我也收获不少,这次实验,加深了我对进程
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 餐饮工厂合作合同范本
- 饭店采购小吃合同范本
- 合作协议书模板制作
- 箱梁模板安装合同协议
- 精密模具买卖合同范本
- 终末消毒服务合同范本
- 绿化员工劳务合同范本
- 网络服务专用合同范本
- 美业股东退股合同范本
- 聘任围棋教练合同范本
- 2025江苏南通市通州区石港镇招聘便民服务中心人员2人考试笔试备考题库及答案解析
- 外墙施工技术方案范本
- 人物的描写方法
- 2025四川南充市嘉陵城市发展集团有限公司招聘10人备考考试题库附答案解析
- 2025年消防月系列:消防宣传月专题培训(编号4)
- 义齿加工合同范本模板
- 山东港口集团笔试题库2025
- 《公路工程集料试验规程》JTG 3432-2024新旧规范对比(细集料、填料)
- 艾梅乙反歧视培训课件
- 企业公示信息实地核查记录表
- CW6163使用说明书模版
评论
0/150
提交评论