《操作系统》实验讲义二

《操作系统》实验讲义二

ID:34086527

大小:190.66 KB

页数:6页

时间:2019-03-03

《操作系统》实验讲义二_第1页
《操作系统》实验讲义二_第2页
《操作系统》实验讲义二_第3页
《操作系统》实验讲义二_第4页
《操作系统》实验讲义二_第5页
资源描述:

《《操作系统》实验讲义二》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、《操作系统》实验讲义二实验二进程的控制一.实验目的1.熟悉和理解进程和进程树的概念,掌握有关进程的管理机制2.通过进程的创建、撤销和运行加深对进程并发执行的理解3.明确进程与程序、并行与串行执行的区别4.掌握用C程序实现进程控制的方法二.实验工具与设备已安装Linux操作系统的计算机。三.实验预备内容1.阅读Linux的sched.h源代码文件,加深对进程管理概念的理解2.阅读Linux的fork.c源代码文件,分析进程的创建过程四.实验内容1.了解系统调用fork(),exec系列函数,exit(),wait()的功能和实现过程

2、(1)进程的创建用户在使用Linux系统的时候,每次在终端下面输入一行命令,就由shell进程接收这个命令并创建一个新的进程,这个新的进程还可以通过fork()系统调用,继续创建自己的子进程。系统中的多个进程构成一棵进程树。实际上,在Linux系统启动时,最早产生的进程是idle进程,其pid号为0,该进程会创建一个内核线程,该线程进行一系列初始化动作后最终会执行/sbin/init文件,执行该文件的结果是运行模式从核心态切换到用户态,该线程演变成了用户进程init,pid为1。init进程是一个非常重要的进程,一切用户态进程都是

3、它的后代进程。a.派生进程#includepid_tfork(void);pid_tvfork(void);调用fork时,系统将创建一个与当前进程相同的新进程,其与原有进程具有相同的数据、连接关系和在程序同一处执行的连续性。原进程称为父进程,新生进程称为子进程。子进程是父进程的一个拷贝,子进程获得同父进程相同的数据,但是同父进程使用不同的数据段和堆栈段。子进程被创建以后,处于可运行状态,与父进程以及系统中的其他进程平等地参与系统调度。fork调用将执行两次返回,即分别从父进程和子进程分别返回,即子进程一旦创建

4、就绪,就与父进程一样被平等地调度执行。因此,从fork返回以后,不能确切知道执行哪一个进程。从父进程返回时,返回值(>0)为子进程的进程标识号PID;而从子进程返回时,返回值为0,并且返回都将执行fork之后的语句。调用出错时返回值为-1,并将errno置为相应值。调用vfork的作用与fork基本相同,但vfork并不完全拷贝父进程的数据段,而是和父进程共享数据段。调用执行vfork函数返回之前,父进程被阻塞,子进程先运行,直到从vfork调用返回。然后,子进程继续执行,可以调用exec执行新的进程,或调用exit结束其运行。此

5、后,父进程才被唤醒,与子进程平等地被系统调度。因此,如果子进程在调用exec之前等待父进程,由于父进程因为执行vfork被阻塞,会造成死锁。《操作系统》实验讲义二2函数vfork的主要用途是创建子进程以后,由子进程调用exec函数启动其他进程,使新启动的其他进程以该子进程的进程标识号身份执行,但拥有自己的程序段和数据区。例2.1:#includen=5;#includefor(;n>0;n--)#include{puts(message);sleep(1);}intm

6、ain()break;{default:pid_tpid;char*message;intn;message=“Parentprocessidprinting.”;printf(“Forkprogramstarting”);n=3;pid=fork()for(;n>0;n--)switch(pid){{puts(message);sleep(1);}case–1:break;printf(“Forkerror!”);exit(1);}case0:exit(0);message=“Childprocessisprinting

7、.”;}b.创建执行其他程序的进程可以使用exec族的函数执行新的程序,以新的子进程来完全替代原有的进程。#includeintexecl(constchar*pathname,constchar*arg,…,(char*)0);intexeclp(constchar*filename,constchar*arg,…,(char*)0);intexecle(constchar*pathname,constchar*arg,…,(char*)0,constchar*envp[]);intexecv(constch

8、ar*pathname,char*constargv[]);intexecvp(constchar*filename,char*constargv[]);intexecve(constchar*pathname,char*constargv[],c

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。