《操作系统》实验讲义二.pdfVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《操作系统》实验讲义二

《操作系统》实验讲义二 实验二 进程的控制 一.实验目的 1.熟悉和理解进程和进程树的概念,掌握有关进程的管理机制 2 .通过进程的创建、撤销和运行加深对进程并发执行的理解 3 .明确进程与程序、并行与串行执行的区别 4 .掌握用C 程序实现进程控制的方法 二.实验工具与设备 已安装Linux 操作系统的计算机。 三.实验预备内容 1.阅读Linux 的sched.h 源代码文件,加深对进程管理概念的理解 2 .阅读Linux 的fork.c 源代码文件,分析进程的创建过程 四.实验内容 1.了解系统调用fork( ), exec 系列函数,exit( ), wait( )的功能和实现过程 (1)进程的创建 用户在使用Linux 系统的时候,每次在终端下面输入一行命令,就由shell 进程接收这个命令并 创建一个新的进程,这个新的进程还可以通过fork()系统调用,继续创建自己的子进程。系统中的多 个进程构成一棵进程树。实际上,在Linux 系统启动时,最早产生的进程是idle 进程,其pid 号为0, 该进程会创建一个内核线程,该线程进行一系列初始化动作后最终会执行/sbin/init 文件,执行该文 件的结果是运行模式从核心态切换到用户态,该线程演变成了用户进程init,pid 为1。init 进程是一 个非常重要的进程,一切用户态进程都是它的后代进程。 a. 派生进程 #includeunistd.h pid_t fork(void); pid_t vfork(void); 调用fork 时,系统将创建一个与当前进程相同的新进程,其与原有进程具有相同的数据、连接 关系和在程序同一处执行的连续性。原进程称为父进程,新生进程称为子进程。子进程是父进程的 一个拷贝,子进程获得同父进程相同的数据,但是同父进程使用不同的数据段和堆栈段。子进程被 创建以后,处于可运行状态,与父进程以及系统中的其他进程平等地参与系统调度。 fork 调用将执行两次返回,即分别从父进程和子进程分别返回,即子进程一旦创建就绪,就与 父进程一样被平等地调度执行。因此,从fork 返回以后,不能确切知道执行哪一个进程。从父进程 返回时,返回值(0 )为子进程的进程标识号 PID ;而从子进程返回时,返回值为 0,并且返回都 将执行fork 之后的语句。调用出错时返回值为-1,并将errno 置为相应值。 调用vfork 的作用与fork 基本相同,但vfork 并不完全拷贝父进程的数据段,而是和父进程共享 数据段。调用执行vfork 函数返回之前,父进程被阻塞,子进程先运行,直到从vfork 调用返回。然 后,子进程继续执行,可以调用exec 执行新的进程,或调用exit 结束其运行。此后,父进程才被唤 醒,与子进程平等地被系统调度。因此,如果子进程在调用exec 之前等待父进程,由于父进程因为 执行vfork 被阻塞,会造成死锁。 《操作系统》实验讲义二 2 函数vfork 的主要用途是创建子进程以后,由子进程调用exec 函数启动其他进程,使新启动的 其他进程以该子进程的进程标识号身份执行,但拥有自己的程序段和数据区。 例2.1: #includesys/types.h n=5; #includestdio.h for(;n0;n--) #includeunistd.h { puts(message); sleep(1);} int main() break; { default: pid_t pid; char *message; int n;

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档