第4章进程及进程管理2精品.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
操作系统与实验教程 第3章第3讲 操作系统与实验教程 第3章第3讲 * 操作系统与实验教程 第3章第3讲 * 4.3 进程控制 * 操作系统与实验教程 第3章第3讲 * 附:中断及原语的概念 中断的概念及其重要性 中断的分类 原语的概念: 原语是指在执行过程中不允许中断,它属于操作系统内核的一部分,以系统调用的形式提供给用户和操作系统使用。 * 操作系统与实验教程 第3章第3讲 * 4.3 进程控制 与进程控制相关的基本操作: 进程创建 进程撤销 进程睡眠 进程唤醒 针对每种控制操作的三个问题: 1:使用或执行该操作的时机?? 2:执行该操作原语时操作系统完成的具体工作?? 3:Linux操作系统中实现的方法?? * 操作系统与实验教程 第3章第3讲 * 4.3.2 进程创建与撤销(创建) 1.进程创建的时机 在系统生成需要进程承担资源分配及管理工作——系统进程; 用户作业的执行需创建子进程,或作业中完成某项具体的任务时——用户进程。 2:进程创建时操作系统完成的工作 分配进程标识及空白PCB,并在系统进程表中增加一个表目。 为进程分配内存空间(程序、数据、用户栈等),复制父进程内存空间的内容到该进程内存空间中。 初始化PCB。 置该进程的状态为就绪,插入就绪队列。 生成其它相关的数据结构。 * 操作系统与实验教程 第3章第3讲 * Linux操作系统启动过程(了解) 3.Linux中终端用户进程的创建与调度执行 * 操作系统与实验教程 第3章第3讲 * 3.Linux中终端用户进程的创建与调度执行 Linux操作系统中用户进程的创建过程: 当用户在键盘上键入一个用户可执行文件名时,操作系统就为该文件创建一个相应的用户进程并投入运行。 如编译一程序后可执行文件名为:a.out 在当前目录下:./a.out,操作系统将创建一进程运行该程序(由终端程序使用fork()创建)。 * 操作系统与实验教程 第3章第3讲 * 4.Linux中用户子进程的创建与调度执行 Linux提供的创建子进程的系统调用为fork()。 格式: int fork( ) 返回值: =0 创建成功,从子进程返回; 0 创建成功,从父进程返回,其值为子进程的PID号; =-1 创建失败。 * 操作系统与实验教程 第3章第3讲 * 4.Linux中用户子进程的创建与调度执行 Linux中子进程创建时操作系统完成的工作:(了解) 检查同时运行的进程数目,若超过系统设定值则创建失败,返回-1; 为子进程分配进程控制块task_struct结构,并赋予唯一进程标识符pid; 子进程继承父进程打开的所有文件及资源,对父进程的当前目录和所有已打开系统文件表项中的引用记数加1; 为子进程创建进程映像: 创建子进程映像静态部分:复制父进程映像静态部分 创建子进程映像动态部分:初始化task_struct结构 结束创建,置子进程为内存就绪状态,插入就绪队列,作为一个独立的进程被系统调度。 若调用进程(父进程)返回,则返回创建的子进程标识符pid值(此时返回值0); 若子进程被调度执行,则将其U区计时字段初始化然后返回(此时返回值=0)。 * 操作系统与实验教程 第3章第3讲 * 使用fork创建进程时的应用程序的框架结构: main( ) { int p; //存放子进程pid号 while( ( p=fork( ) ) ==-1); //创建子进程直到成功为止 if (p == 0) //返回值=0表示子进程返回 { /*此处插入子进程程序段*/ } else //返回值0表示父进程返回 { /*此处插入父进程程序段*/ } } 4.Linux中用户子进程的创建与调度执行 * 操作系统与实验教程 第3章第3讲 * #includestdio.h main() { int p1; printf(Process begin\n); while((p1=fork())==-1); if(p1==0) printf(I am child\n); else printf(I am father\n); printf(process end\n); } 思考题:以下两程序运行后的结果是什么??并分析其原因。 #includestdio.h main() { int p1; prin

文档评论(0)

***** + 关注
实名认证
内容提供者

我是自由职业者,从事文档的创作工作。

1亿VIP精品文档

相关文档