参考程序段前面部分用了两个time wait 作用,它们起什么作用

机问题,输出字符串的顺序和先后随着执行的不同而发;实验;2.1~2.2;程序在调用fork()建立一个子进程后,马上调用;实验;3.1~3.2;加锁和没加锁还是有区别的;实验4.1;终端:;日志:;fprintf(fp,&Thecurr;实验5.1~5.2;屏幕上无反应,按下^C后,显示Parentpro;上述程序中,signal()都放在一段程序
机问题,输出字符串的顺序和先后随着执行的不同而发生变化。这与打印单字符的结果相同。
程序在调用fork( )建立一个子进程后,马上调用wait( ),使父进程在子进程结束之前,一直处于睡眠状态。子进程用exec( )装入命令ls ,exec( )后,子进程的代码被ls的代码取代,这时子进程的PC指向ls的第1条语句,开始执行ls的命令代码。wait( )给我们提供了一种实现进程同步的简单方法。
加锁和没加锁还是有区别的。没加锁,子进程的for循环会被“打断”,也就是说,10个daughter和10个son会互相穿插。而加锁以后,尽管10个son和10个daughter会或先或后出现,但是不会互相穿插,以10个10个这样的完整形式输出。这是因为加锁以后,屏幕输出要等解锁指令发出后,才会让第二个进程执行输出,在第一个进程没有解锁前,其余进程不能输出。
fprintf(fp,&The current time is %s\n&,asctime(localtime(&t)))只是把当前时间输入到缓冲区,并没有写到Mydaemon.log文件里面,所以并不会输出时间。唯有在fprintf最后写上fflush(fp)才能强制输出时间戳到Mydaemon.log文件里面。
实验5.1~5.2
屏幕上无反应,按下^C后,显示
上述程序中,signal( )都放在一段程序的前面部位,而不是在其他接收信号处。这是因为signal( )的执行只是为进程指定信号值16或17的作用,以及分配相应的与stop( )过程链接的指针。因而,signal( )函数必须在程序前面部分执行。
延迟5秒后显示:child 1 process is sending message!
再延迟5秒:child 2 process is sending message!
应当是每当client发送一个消息后,server接收该消息,client再发送下一条。也就是说
“(client)sent”和 “(server)received”的字样应该在屏幕上交替出现。实际的结果大多是,先由client发送了两条消息,然后server接收一条消息。此后client 、server交替发送和接收消息。最后server一次接收两条消息。client 和server 分别发送和接收了10条消息,与预期设想一致。
在运行过程中,发现每当client发送一次数据后,server要等待大约0.1秒才有响应。同样,
之后client又需要等待大约0.1秒才发送下一个数据。
七、问题回答分析
(1.1)系统是怎样创建进程的?
答:系统通过fork()系统调用来创建父进程对应的子进程,创建成功将返回一个值“0”
给子进程,父进程会被返回子进程的id值(大于0),若创建失败返回“-1”。
(1.2)当首次调用新创建进程时,其入口在哪里?
答:入口就是fork()返回给创建的子进程的pid值。
(2.1)可执行文件加载时进行了哪些处理?
答:获得目录下所有文件的信息,然后把目录倒序,再加载到子进程中。
(2.2)什么是进程同步?wait( )是如何实现进程同步的?
答:进程同步就是不同进程按照一定的顺序先后执行,而不是没有顺序的或先或后执
行。Wait()是要等待子进程中exit()返回正常软中断的信号时才结束等待,执行父进程wait()后面的代码。Wait和exit是配合使用的,在进程的同步上面,一般wait放在父进程中用来等待子进程的exit返回值。
(3)无习题。
(4)无习题。
(5.1)该程序段前面部分用了两个wait(0),它们起什么作用?
答:等待两个子进程exit()的返回值再继续执行下面代码。
(5.2) 该程序段中每个进程退出时都用了语句exit(0),为什么?
答:子进程正常退出时,返回值给wait(),再执行父进程。
(5.3) 为何预期的结果并未显示出?
答:由于父子进程都同时接收到^c中断信号,所以两个子进程在创建之后,signal就得到中断信号,子进程正常中止,并没有执行signal之后的代码,返回正常中止的信号给wait(0),父进程得到子进程正常中止的信号后就执行后面的代码,输出“Parent process is killed!”。
(5.4) 程序该如何修改才能得到正确结果?
答:在终端发送指令给父进程,或着更换成如下代码:
#include&stdio.h&
#include&signal.h&
#include&unistd.h&
#include&stdlib.h&
#include&sys/wait.h&
void waiting( ),stop( ),nye( );
int main( )
int p1,p2,
while((p1=fork( ))==-1);
while((p2=fork( ))==-1);
wait_mark=1;
signal(SIGINT,stop);
waiting( );
kill(p1,16);
kill(p2,17);
printf(&Parent process is killed!\n&);
wait_mark=1;
signal(SIGINT,nye);
signal(17,stop);
waiting( );
lockf(stdout,1,0);
printf(&Child process 2 is killed by parent!\n&);
lockf(stdout,0,0);
wait_mark=1;
signal(SIGINT,nye);
signal(16,stop);
waiting( );
lockf(stdout,1,0);
printf(&Child process 1 is killed by parent!\n&);
lockf(stdout,0,0);
void waiting( )
while(wait_mark!=0);
void stop( )
wait_mark=0;
包含各类专业文献、生活休闲娱乐、中学教育、专业论文、各类资格考试、外语学习资料、文学作品欣赏、幼儿教育、小学教育、91操作系统实验_实验1等内容。 
 操作系统实验_实验1_理学_高等教育_教育专区。广州大学学生实验报告开课学院及实验室:计算机科学与工程实验室 实验课 程名称 实验项 目名称 操作系统实验 进程管理...  操作系统实验1_电脑基础知识_IT/计算机_专业资料。操作系统实验1,实验环境的使用,哈尔滨工程大学 操作系统实课程名称 实验项目名称 学号 姓名 学生所在学院 验操作...  操作系统实验1-朱_教学案例/设计_教学研究_教育专区。操作系统 实课程名称 ...实验内容 4.1 启动 OS Lab 4.2 学习 OS Lab 的基本使用方法 4.3 EOS 内核...  操作系统实验1_计算机软件及应用_IT/计算机_专业资料。学生实验报告 实验课名称:计算机操作系统 实验项目名称:进程调度 专业名称:计算机科学与技术(交通信息工程) 班...  操作系统实验指导_实验1_计算机硬件及网络_IT/计算机_专业资料 暂无评价|0人阅读|0次下载|举报文档 操作系统实验指导_实验1_计算机硬件及网络_IT/计算机_专业资料...  操作系统实验1_工学_高等教育_教育专区。北方工业大学NCUT 操作系统实验一 北方工业大学 实验报告书 学生姓名学班号级 高 雪
计 10A-2 2011 ― ...  信息学院 操作系统实验报告 姓名: 学号: 专业: 班级: 实验名称: 杨博敏
软件工程 软件 1302 班 进程控制与描述 实验一 3.1 进程控制与描述 Windows...  实验名称:Linux 基本操作与编程 实验环境 1、硬件环境: 计算机设备:P4+2G 内存 2、软件环境: VM+红帽子 Linux 5.5 《操作系统》实验指导(一) Linux 基本操作...  计算机操作系统实验1,2_电脑基础知识_IT/计算机_专业资料。实验一 Linux 操作系统基本命令学号: 姓名:冯毓权 指导老师:吴绍春 沈文枫 日期:9.3 一. 实验...1、了解什么是信号;2、熟悉LINUX系统中进程之间软中断通信的基本;实验内容;1、编写程序:用fork()创建两个子进程,再用;Childprocess1iskilledbyp;Childprocess2iskilledbyp;父进程等待两个子进程终止后,输出如下的信息后终止;Parentprocessiskilled!;2、分析利用软中断通信实现进程同步
1、了解什么是信号
2、熟悉LINUX系统中进程之间软中断通信的基本原理
1、编写程序:用fork( )创建两个子进程,再用系统调用signal( )让父进程捕捉键盘上来的中断信号(即按^c键);捕捉到中断信号后,父进程用系统调用kill( )向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止:
Child process1 is killed by parent!
Child process2 is killed by parent!
父进程等待两个子进程终止后,输出如下的信息后终止:
Parent process is killed!
2、分析利用软中断通信实现进程同步的机理
1、信号的基本概念
每个信号都对应一个正整数常量(称为signal
number,即信号编号。定义在系统头文件&signal.h&中),代表同一用户的诸进程之间传送事先约定的信息的类型,用于通知某进程发生了某异常事件。每个进程在运行时,都要通过信号机制来检查是否有信号到达。若有,便中断正在执行的程序,转向与该信号相对应的处理程序,以完成对该事件的处理;处理结束后再返回到原来的断点继续执行。实质上,信号机制是对中断机制的一种模拟,故在早期的UNIX版本中又把它称为软中断。
信号与中断的相似点:
(1)采用了相同的异步通信方式;
(2)当检测出有信号或中断请求时,都暂停正在执行的程序而转去执行相应的处理程序;
(3)都在处理完毕后返回到原来的断点;
(4)对信号或中断都可进行屏蔽。
信号与中断的区别:
(1)中断有优先级,而信号没有优先级,所有的信号都是平等的;
(2)信号处理程序是在用户态下运行的,而中断处理程序是在核心态下运行;
(3)中断响应是及时的,而信号响应通常都有较大的时间延迟。
信号机制具有以下三方面的功能:
(1)发送信号。发送信号的程序用系统调用kill( )实现;
(2)预置对信号的处理方式。接收信号的程序用signal( )来实现对处理方式
(3)收受信号的进程按事先的规定完成对相应事件的处理。
2、信号的发送
信号的发送,是指由发送进程把信号送到指定进程的信号域的某一位上。如果目标进程正在一个可被中断的优先级上睡眠,核心便将它唤醒,发送进程就此结束。一个进程可能在其信号域中有多个位被置位,代表有多种类型的信号到达,但对于一类信号,进程却只能记住其中的某一个。
进程用kill( )向一个进程或一组进程发送一个信号。
3、对信号的处理
当一个进程要进入或退出一个低优先级睡眠状态时,或一个进程即将从核心态返回用户态时,核心都要检查该进程是否已收到软中断。当进程处于核心态时,即使收到软中断也不予理睬;只有当它返回到用户态后,才处理软中断信号。对软中断信号的处理分三种情况进行:
(1)如果进程收到的软中断是一个已决定要忽略的信号(function=1),进程不做任何处理便立即返回;
(2)进程收到软中断后便退出(function=0);
(3)执行用户设置的软中断处理程序。
二、所涉及的中断调用
1、kill( )
系统调用格式
kill(pid,sig)
其中,pid是一个或一组进程的标识符,参数sig是要发送的软中断信号。
(1)pid&0时,核心将信号发送给进程pid。
(2)pid=0时,核心将信号发送给与发送进程同组的所有进程。
(3)pid=-1时,核心将信号发送给所有用户标识符真正等于发送进程的有效用户标识号的进程。
2、signal( )
预置对信号的处理方式,允许调用进程控制软中断信号。
系统调用格式
signal(sig,function)
#include &signal.h&
signal(sig,function)
void (*func) ( )
其中sig用于指定信号的类型,sig为0则表示没有收到任何信号,余者如下表:
function:在该进程中的一个函数地址,在核心返回用户态时,它以软中断信号的序号作为参数调用该函数,对除了信号SIGKILL,SIGTRAP和SIGPWR以外的信号,核心自动地重新设置软中断信号处理程序的值为SIG_DFL,一个进程不能捕获SIGKILL信号。
function 的解释如下:
(1)function=1时,进程对sig类信号不予理睬,亦即屏蔽了该类信号;
(2)function=0时,缺省值,进程在收到sig信号后应终止自己;
(3)function为非0,非1类整数时,function的值即作为信号处理程序的指针。
四、运行结果
五、分析原因
1、该程序段前面部分用了两个wait(0),它们起什么作用?
2、该程序段中每个进程退出时都用了语句exit(0),为什么?
3、为何预期的结果并未显示出?
4、程序该如何修改才能得到正确结果?
5、不修改程序如何得到期望的输出?
(二)进程的管道通信实验
1、了解什么是管道
2、熟悉UNIX/LINUX支持的管道通信方式
编写程序实现进程的管道通信。用系统调用pipe( )建立一管道,二个子进程P1和P2分别向管道各写一句话:
Child 1 is sending a message!
Child 2 is sending a message!
父进程从管道中读出二个来自子进程的信息并显示(要求先接收P1,后P2)。
一、什么是管道
UNIX系统在OS的发展上,最重要的贡献之一便是该系统首创了管道(pipe)。这也是UNIX系统的一大特色。
所谓管道,是指能够连接一个写进程和一个读进程的、并允许它们以生产者―消费者方式进行通信的一个共享文件,又称为pipe文件。由写进程从管道的写入端(句柄1)将数据写入管道,而读进程则从管道的读出端(句柄0)读出数据。
句柄fd[0] 读出端
二、管道的类型:
1、有名管道
一个可以在文件系统中长期存在的、具有路径名的文件。用系统调用mknod( )建立。它克服无名管道使用上的局限性,可让更多的进程也能利用管道进行通信。因而其它进程可以知道它的存在,并能利用路径名来访问该文件。对有名管道的访问方式与访问其他文件一样,需先用open( )打开。
2、无名管道
一个临时文件。利用pipe( )建立起来的无名文件(无路径名)。只用该系统调用所返回的文件描述符来标识该文件,故只有调用pipe( )的进程及其子孙进程才能识别此文件描述符,才能利用该文件(管道)进行通信。当这些进程不再使用此管道时,核心收回其索引结点。
二种管道的读写方式是相同的,本文只讲无名管道。
3、pipe文件的建立
分配磁盘和内存索引结点、为读进程分配文件表项、为写进程分配文件表项、
分配用户文件描述符
4、读/写进程互斥
内核为地址设置一个读指针和一个写指针,按先进先出顺序读、写。
为使读、写进程互斥地访问pipe文件,需使各进程互斥地访问pipe文件索引结点中的直接地址项。因此,每次进程在访问pipe文件前,都需检查该索引文件是否已被上锁。若是,进程便睡眠等待,否则,将其上锁,进行读/写。操作结束后解锁,并唤醒因该索引结点上锁而睡眠的进程。
三、所涉及的系统调用
1、pipe( )
建立一无名管道。
系统调用格式
pipe(filedes)
pipe(filedes);
filedes[2];
其中,filedes[1]是写入端,filedes[0]是读出端。
该函数使用头文件如下:
#include &unistd.h&
#inlcude &signal.h&
#include &stdio.h&
2、read( )
系统调用格式
read(fd,buf,nbyte)
功能:从fd所指示的文件中读出nbyte个字节的数据,并将它们送至由指针buf所指示的缓冲区中。如该文件被加锁,等待,直到锁打开为止。
read(fd,buf,nbyte);
3、write( )
系统调用格式
read(fd,buf,nbyte)
功能:把nbyte 个字节的数据,从buf所指向的缓冲区写到由fd所指向的文件中。如文件加锁,暂停写入,直至开锁。
参数定义同read( )。
五、运行结果
六、思考题
1、程序中的sleep(5)起什么作用?
2、子进程1和2为什么也能对管道进行操作?
包含各类专业文献、行业资料、外语学习资料、应用写作文书、中学教育、文学作品欣赏、各类资格考试、专业论文、幼儿教育、小学教育、计算机操作系统实验50等内容。 
 计算机科学与工程学院 标准实验报告 (实验)课程名称 计算机操作系统 实验) 电子科技大学教务处制表 实学生姓名: 学生姓名: 实验地点: 实验地点: 一、实验室名称: ...  计算机操作系统实验四_IT/计算机_专业资料。实验四:文件系统& 实验四:文件系统&一& [背景知识 背景知识] 背景知识 1. 选择文件系统 文件系统决定了操作系统能够对...  计算机操作系统课程设计 班级:计 091-1 姓名: 学号: 使用语言:C++ 指导老师: 学院: 一、系统要求 1、实验目的 通过一个简单多用户文件系统的设计,加深理解文件...  1.3 工具/准备工作在开始本实验之前,请回顾教科书的相关内容。 您需要做以下准备: 1)一台运行 Windows 2000 Professional 操作系统的计算机。 2)计算机中需安装...  计算机操作系统课程设计(大作业)_工学_高等教育_教育专区。摘要银行家算法是一个用来预防系统进入死锁状态的算法,用它可以判断系统的 安全性,如果系统当前处于安全...  操作系统实验报告 学院: 计算机与通信工程学院 专业: 计算机科学与技术 班级: 学号: 姓名: 指导教师: 成绩: 2014 年 1 月 1 日 实验一 线程的状态和转换(5...  《计算机操作系统》实验报告_电脑基础知识_IT/计算机_专业资料。操作系统 实验报告《操作系统原理》 实验报告 实验一 文本处理程序 实验时间: 实验时间: 6 小时 实...  华北电力大学 实验报告 实验 环境 实验 名称 Windows2000/XP、Microsoft Visual ...优先权调度的重要意义: 操作系统(Operating System,简称 OS)是管理电脑硬件与...  计算机操作系统实验课实验报告_电脑基础知识_IT/计算机_专业资料。大学 计算机操作系统 实验报告实验报告 实验课程: 学生姓名: 学号: 计算机操作系统 XXX XXXX 软件 ...您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
2012级操作统实验报告.doc18页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
需要金币:150 &&
2012级操作统实验报告
你可能关注的文档:
··········
··········
哈尔滨学院实验报告课程名称:计算机操作系统专业:软件工程班级:12-8学号:姓名:常燕如教务处制 实验一进程管理【实验目的与要求】⒈加深对进程概念的理解,明确进程与程序的区别。⒉掌握Linux进程创建及撤销的方法,进一步认识并发执行的实质。⒊掌握Linux系统下守护进程的创建方法。【实验原理】⒈Linux进程管理命令⑴进程查看⑵进程终止⑶进程优先级设置⒉Linux进程控制函数⑴创建和修改进程⑵设置进程属性⑶获取进程属性⑷进程的退出⒊Linux守护进程⑴独立启动守护进程⑵超级守护进程⑶守护进程的编写流程
守护进程的编写遵循特定的流程,主要包括五个步骤:Step⒈创建子进程,退出父进程Step⒉在子进程中创建新会话Step⒊改变当前目录为根目录Step⒋重设文件权限掩码Step⒌关闭文件描述符【实验主要仪器与材料】⒈带Linux操作系统的PC机⒉GCC编译器【实验内容】⒈获取进程信息通过管理命令,获取系统当前执行进程的信息,包括进程名称与ID、PID和PGID等。⒉创建进程编程程序,实现父进程创建一个子进程,返回后父子进程都分别循环输出字符串“Iamparent.”或“Iamchild.”5次,每输出一次延时1秒(sleep(1)),然后进入下一次循环。观察并分析运行结果。然后将程序改为父子进程同步执行:子进程循环输出字符串“Iamchild.”5次,然后父进程再循环输出字符串“Iamparent.”5次。再次观察并分析运行结果。【实验步骤及实验结果分析】⒈实验内容1通过进程实现及验证父进程及子进程的id号的命令ps-lg⒉实验内容2⑴实现父进程创建一个子进程,返回后父子进程都分别循环输出字符串“Iamparent.”或“Iamchild.”5次,每输出一次延时1秒(sleep(1)),然后进入下一次循环。#include#in
正在加载中,请稍后...操作系统实验报告_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
操作系统实验报告
上传于||暂无简介
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩6页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢}

我要回帖

更多关于 wait 0 作用 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信