- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
课程实践准备知识.ppt
pb011t01 : 123456 pb011t02 : 123456 * 实验中用到的系统调用 如果fork( )调用成功,它向父进程返回子进程的PID,并向子进程返回0,即fork( )被调用了一次,但返回了两次。此时OS在内存中建立一个新进程,所建的新进程是调用fork( )父进程(parent process)的副本,称为子进程(child process)。子进程继承了父进程的许多特性,并具有与父进程完全相同的用户级上下文。父进程与子进程并发执行。 实验中用到的系统调用 核心为fork( )完成以下操作: 为新进程分配一进程表项和进程标识符: 进入fork( )后,核心检查系统是否有足够的资源来建立一个新进程。若资源不足,则fork( )系统调用失败;否则,核心为新进程分配一进程表项和唯一的进程标识符。 检查同时运行的进程数目:超过预先规定的最大数目时,fork( )系统调用失败。 拷贝进程表项中的数据: 将父进程的当前目录和所有已打开的数据拷贝到子进程表项中,并置进程的状态为“创建”状态。 子进程继承父进程的所有文件:对父进程当前目录和所有已打开的文件表项中的引用计数加1。 为子进程创建进程上、下文 进程创建结束,设子进程状态为“内存中就绪”并返回子进程的标识符。 子进程执行: 虽然父进程与子进程程序完全相同,但每个进程都有自己的程序计数器PC,然后根据pid变量保存的fork( )返回值的不同,执行了不同的分支语句。 实验中用到的系统调用 wait( ) #include sys/wait.h 等待子进程运行结束。如果子进程没有完成,父进程一直等待。wait( )将调用进程挂起,直至其子进程因暂停或终止而发来软中断信号为止。如果在wait( )前已有子进程暂停或终止,则调用进程做适当处理后便返回。 系统调用格式: int wait(status) int *status; 其中,status是用户空间的地址。它的低8位反应子进程状态,为0表示子进程正常结束,非0则表示出现了各种各样的问题;高8位则带回了exit( )的返回值。exit( )返回值由系统给出。 实验中用到的系统调用 核心对wait( )作以下处理: 首先查找调用进程是否有子进程,若无,则返回出错码; 若找到一处于“僵死状态”的子进程,则将子进程的执行时间加到父进程的执行时间上,并释放子进程的进程表项; 若未找到处于“僵死状态”的子进程,则调用进程便在可被中断的优先级上睡眠,等待其子进程发来软中断信号时被唤醒。 实验中用到的系统调用 exit( ) 终止进程的执行。 系统调用格式: void exit(status) int status; 其中,status是返回给父进程的一个整数,以备查考。 为了及时回收进程所占用的资源并减少父进程的干预,UNIX/LINUX利用exit( )来实现进程的自我终止,通常父进程在创建子进程时,应在进程的末尾安排一条exit( ),使子进程自我终止。exit(0)表示进程正常终止,exit(1)表示进程运行有错,异常终止。 如果调用进程在执行exit( )时,其父进程正在等待它的终止,则父进程可立即得到其返回的整数。 实验中用到的系统调用 核心须为exit( )完成以下操作: 关闭软中断 回收资源 写记帐信息 置进程为“僵死状态” 实验中用到的系统调用 kill( ) #include signal.h 系统调用格式 int kill(pid,sig) int pid,sig; 其中,pid是一个或一组进程的标识符,参数sig是要发送的软中断信号。 (1)pid0时,核心将信号发送给进程pid。 (2)pid=0时,核心将信号发送给与发送进程同组 的所有进程。 (3)pid=-1时,核心将信号发送给所有用户标识符 真正等于发送进程的有效用户标识号的进程。 实验中用到的系统调用 signal( ) 预置对信号的处理方式,允许调用进程控制软中断信号。 系统调用格式 signal(sig,function) int sig; void (*func) ( ) 其中sig用于指定信号的类型,sig为0则表示没有收到任何信号,其它信号类型见下页表格 实验中用到的系统调用 实验例一 进程创建 内容:编写一段程序,使用系统调用fork( )创建两个子进程,再用系统调用signal( )让父进程捕捉键盘上来的中断信号(即按ctrl+c键),当捕捉到中断信号后,父进程用系统调用kill( )向两个子进程发出信号,子进程捕捉到信号后,分别输出下列信息后终止: Child process 1 is killed by parent! Child p
您可能关注的文档
最近下载
- 2021届北京市海淀高三语文一模阅读部分讲评 课件(150张PPT).pptx
- 背负式风力灭火机的操作与使用 .ppt VIP
- 苏州七年级月考试卷及答案.doc VIP
- 山东科学技术版劳动实践指导手册三年级第11课公益劳动与志愿服务校园公益劳动清洁美化校园我行动 教案.docx VIP
- 2025年中级审计师测试题习题.docx VIP
- 一、毕业设计(论文)的目的和意义.doc VIP
- 四川大学软件学院2008级毕业设计启动会课程设计.ppt VIP
- 2025全科医生考试题及答案.docx VIP
- 大班科学标准教案小油滴不见了.pptx VIP
- 2024年隆昌市兴诚投资集团有限公司人员招聘考试题库及答案解析.docx VIP
文档评论(0)