进程控制操作-父子进程的并发执行
等待
fock() ps ls
实验的模 型描述
fock()
唤醒
子进程 2 结束
pause()
子进程 1
kill() waitpid()
子进程 1
主要数据 结构分析 说明
int i; exec()执行装入命令时所需的迭代参数 int seconds = 5; 指定睡眠秒数 int pid1,pid2; 存放生成子进程 1,2 的返回参数 int status1,status2; 存放子进程返回状态 1,2 char *args1[] = {"/bin/ls","-all",NULL}; 子进程 1 要缺省执行的命令 char *args2[] = {"/bin/ps","-l",NULL}; 子进程 2 要缺省执行的命令 8 个学时(1 个学时差不多 1 小时) 首先在创建多个子进程上遇到了问题,在 fock()创建完一个子进程并将其 pause()后直 接继续 fock()了一个进程。这样创建的子进程是子进程的子进程,而非父进程创建的第 二个子进程。所以应该在 else 语句块后面,也就是主进程执行段继续创建。
#include "pctl.h" int main() { int i; //迭代参数 int seconds = 5;// 指定睡眠秒数
int pid1; int pid2; //存放生成子进程 1,2 的返回参数 int status1; int status2;//存放子进程返回状态 1,2 char *args1[] = {"/bin/ls","-all",NULL};//子进程 1 要缺省执行的命令 char *args2[] = {"/bin/ps","-l",NULL};//子进程 2 要缺省执行的命令 signal(SIGINT,(sighandler_t)sigcat); //注册一个本进程处理键盘中断的函 数 pid1 = fork() ; //建立子进程 1 if(pid1<0) { //建立子进程 1 失败 printf("Create Process No.1 fail!\n"); exit(EXIT_FAILURE); } if(pid1 == 0) { //子进程 1 ls 代码执行段 //报告父子进程进程号 printf("I am Child process No.1 \tPid is %d\n My father's Pid is %d\n",getpid(),getppid());//报告子进程进程号&父进程进程号 pause(); //暂停,生成运行下一个子进程,等待键盘中断信号唤醒 //子进程被键盘中断信号唤醒继续执行 status1 = sleep(seconds); //子进程 1 开始执行命令 ls printf("%d child process No.1 will Running: \n",getpid()); for(i=0; args1[i] != NULL; i++) printf("%s ",args1[i]); printf("\n"); //装入并执行新的程序 status1 = execve(args1[0],args1,NULL); exit(EXIT_SUCCESS); } else { //父进程继续执行 printf("I am Parent process %d\n",getpid()); //报告父进程号 pid2 = fork() ; //父进程建立子进程 2 if(pid2<0){ //建立子进程 2 失败 printf("Create Process No.2 fail!\n"); exit(EXIT_FAILURE); } if(pid2 == 0) { //子进程 2 ps 代码执行段 printf("\nI am Child process No.2 \tPid is %d\n My father's Pid is %d\n",getpid(),getppid()); //报告子进程进程号&父进程进程号 //唤醒子进程,与子进程并发执行不等待子进程执行结束 if(kill(pid1 ,SIGINT) >= 0) { printf("Child %d wakeup %d child.\n",getpid(),pid1) ; } printf("But %d don't Wait for %d child done.\n\n",getpid(),pid1); //子进程 2 开始执行 status2 = execve(args2[0],args2,NULL); exit(EXIT_SUCCESS);
实验投入 的实际学 时数 调试排错 过程的记 录
多种方式 探测结果 的记录
实验结果 的分析综 合 实验中遇 到哪些问 题和解决 的办法 实验结果 达到设计 目标的程 度 还可以进 行哪些改 进 实验得到 哪些收获 和启发 参考文献
父进程 5448 首先创建了子进程 1,pid 为 5448,子进程 1 暂停。父进程继续创建子进程 2,pid 为 5449。子进程 2 唤醒了子进程 1,子进程 1 进入 sleep()5 秒倒计时。子进程 2 执行 ps 退出,子进程 1 执行完 ls,程序结束。 如何先执行 ps 后执行 ls。最后的解决办法,就是在建立子进程 2 并且唤醒子进程 1 后 子进程 sleep(seconds = 5)。这样子就可以先执行 ps 后执行 ls。
操作系统实验报告
实验题目:进程控制操作-父子进程的并发执行 学号:201000301161 日期:2012 年 04 月 12 日 班级:软件 10 级(1)班 姓名:盛宇帆 1、对理论课中学习的进程、程序等的概念作进一步的理解,明确进程和程序的区别; 2、加深理解进程并发执行的概念,认识多进程并发执行的实质; 实验目标 3、观察进程争夺资源的现象,分析其过程和原因,学习解决进程互斥的方法; 4、对经典的多用户、多任务的优先级轮转调度系统 Linux 有一定的了解; 5、了解 Linux 系统中多进程之间通过管道通信的基本原理和应用方法。 编写一个多进程并发执行程序。 父进程首先创建一个执行 ls 命令的子进程, 然后再创建 实验要求 一个执行 ps 命令的子进程,并控制 ps 命令总在 ls 命令之前执行。 CPU 英特尔 酷睿 i7 四核 2.53GHz 主板 LENOVO - 英特尔 HM65 (Cougar Point) [B3] 内存 Ramaxel Technology 4G DDR3 SDRAM 1333 MHz 双通道 实验的软 显卡 ATI Mobility Radeon HD 6500M 硬件环境 主硬盘 希捷 500GB 声卡 High Definition Audio Controller [B3] 网卡 英特尔 WiFi Link 1000 BGN 查阅了实验指导书,我们不难发现,Linux 的环境下有如下的系统调用。我们可以调用 fock()创建子进程。创建键盘中断信号后,使用 pause()可以暂停子进程执行,继续创 建新的子进程。子进程并发执行子进程可以首先通过键盘中断信号唤醒子进程。通过 实验思路 exec()调用族装入一个新的执行程序。第一个子进程可以使用 wait()或者是 waitpid() 系统调用等待子进程 2 执行完 ps 后执行。当然也可以使用 sleep()挂载子进程 1,等待 子进程 2 执行完后执行。最后就是父进程的结束,程序结束。
100%,我肯定
子进程 1 使用 waitpid()等待进程 2 执行完毕退出后执行
熟悉了 Linux 的进程创建过程,和进程间的调度。父子进程的执行顺序。 1、 操作系统概念(第七版)郑扣根翻 译 2、 C 程序设计(第四版)谭浩强 著 3、 操作系统实验指导rn EXIT_SUCCESS; }
#include <sys/types.h> #include <sys/wait.h> #include <unistd.h> #include <signal.h> #include <stdio.h> #include <stdlib.h> //进程自定义的键盘中断信号处理函数 typedef void (*sighandler_t) (int); void sigcat(){ printf("%d Process continue\n",getpid()); }
智慧树 计算机操作系统 网课章节测试答案
计算机操作系统在线学堂•得分:8••评语:••名称计算机操作系统•成绩类型百分制•截止时间2022-07-22 23:59•题目数5•总分数10说明第二次见面课课后测验提示:选择题选项顺序为随机排列•第1部分•总题数:51【单选题】 (2分)关于同步和互斥关系,以下叙述错误的是:A.并发进程推进过程中由于共享互斥资源可能形成互斥关系B.互斥表现的是一种竞争关系,互斥进程不能同时使用互斥资源C.并发进程推进过程中围绕共享资源可能形成合作关系D.同步表现的是进程之间的合作关系,同步进程可以同时使用临界资源2【单选题】 (2分)关于临界区和临界资源的说法,错误的是A.并发进程体中关于同一临界资源的临界区称为相关临界区B.临界区指的是进程体中使用临界资源的代码段C.一个进程体中只能有一块临界区D.临界资源指的是并发进程并发推进过程中需要共享但是不能同时共享的资源3【多选题】 (2分)PV操作可用来实现A.并发进程间的互斥B.进程间少量信息的传递C.并发进程间的同步D.进程间大量信息的传递4【判断题】 (2分)为了让用户进程互斥地进入临界区,可以把整个临界区实现成不可中断的过程,即让用户具有屏蔽所有中断的能力。
每当用户程序进入临界区的时候,屏蔽所有中断。
当出了临界区的时候,再开放所有中断A.对B.错5【判断题】 (2分)互斥是指不但不能同时用,谁先用谁后用也有严格约束A.错B.对总分8第1部分12345Copyright © 2003-现在Zhihuishu. All rights reserved.沪ICP备10007183号-5沪公网备31010402003974号电子营业执照计算机操作系统在线学堂•得分:10••评语:••名称计算机操作系统•成绩类型百分制•截止时间2022-07-22 23:59•题目数5•总分数10说明第一次见面课课后测验提示:选择题选项顺序为随机排列•第1部分•总题数:51【单选题】 (2分)以下关于进程的表述错误的是A.进程具有独立性,进程是分配资源和参与CPU调度的独立单位B.进程具有动态性,操作系统为了描述和管理程序动态的执行过程才引入了“进程”C.进程是一个程序的一次动态执行过程,进程由要执行的代码和要处理的数据组成D.进程具有并发性和异步性,每个进程的推进速度都是不可预知的2【单选题】 (2分)下列哪一种进程状态转换是不可能的A.阻塞态→运行态B.就绪态→运行态C.运行态→就绪态D.运行态→阻塞态3【判断题】 (2分)进程是按异步方式运行的,即,它的推进速度是不可预知的A.对B.错4【判断题】 (2分)一个进程由程序代码、数据集和进程控制块TCB组成。
操作系统进程控制实验报告
操作系统进程控制实验报告硬件环境:处理器:Intel(R) Core(TM) i5-3210M CPU @2.50GHz 2.50GHz安装内存:4.00GB系统类型:64位操作系统软件环境:Linux系统一、实验目的加深对于进程并发执行概念的理解。
实践并发进程的创建和控制方法。
观察和体验进程的动态特性。
进一步理解进程生命期期间创建、变换、撤销状态变换的过程。
掌握进程控制的方法,了解父子进程间的控制和协作关系。
练习Linux系统中进程创建与控制有关的系统调用的编程和调试技术。
二、实验步骤(1)分析实例实验(2)进行独立实验(3)思考并完成实验报告实验截图:思考:说明它们反映出操作系统教材中进程及处理机管理一节讲解的进程的哪些特征和功能?在真实的操作系统中它是怎样实现和反映出教材中讲解的进程的生命期、进程的实体和进程状态控制的。
你对于进程概念和并发概念有哪些新的理解和认识?子进程是如何创建和执行新程序的?信号的机理是什么?怎样利用信号实现进程控制?根据实验程序、调试过程和结果分析写出实验报告。
1.进程的概念:进程不仅是一段程序代码,还包括当前活动(通过程序计数器和寄存器中的内容来表示),另外,进程还包括进程堆栈段,和数据段等。
2.并发概念:是指进程之间交替并发执行3.进程通过系统调用fork()函数创建子进程,子进程由唯一的pid值标示,pid通常是一个整数值。
通过fork创建的子进程实际上是父进程的克隆体,通过复制原来进程的地址空间而成,父子进程同时执行fork之后的程序。
但是父子进程的pid值不同,可以通过对pid的判断,使父子进程执行不同的程序。
子进程如果想执行不同的程序,需要系统调用exec()函数装入新的程序执行。
4.信号的机理:信号是用来通知进程某个特定的事件已经发生。
信号是由特定的事件产生,信号必须要发送到进程,一旦发送,进程必须得到处理。
信号可以可以有系统默认处理也可以用户自定义处理。
操作系统上机实验报告
操作系统上机实验报告实验一进程的建立1.实验目的学会通过基本的Windows进程控制函数,由父进程创建子进程,并实现父子进程协同工作。
2.实验软硬件环境Dev-C++3.实验内容创建两个进程,让子进程读取一个文件,父进程等待子进程读取完文件后继续执行,实现进程协同工作。
进程协同工作就是协调好两个进程,使之安排好先后次序并以此执行,可以用等待函数来实现这一点。
当需要等待子进程运行结束时,可在父进程中调用等待函数。
4.实验程序及分析实验程序源代码如下:父进程:#include<stdio.h>#include<windows.h>int main(){STARTUPINFO si;PROCESS_INFORMA TION pi; //当Windows创建新进程时,将使用这两个结构体的有关成员。
所以在创建子进程之前应该对结构体进行声明和初始化。
ZeroMemory(&pi,sizeof(pi));ZeroMemory(&si,sizeof(si));si.cb=sizeof(STARTUPINFO);if(CreateProcess("lab1.2.exe",NULL,NULL,NULL,FALSE,CREATE_NEW_CONSOLE,NULL ,NULL,&si,&pi))//创建一个新进程,若是成功,就返回1,进而实现if选择{printf("子进程已创建~\n");int i,sum=0;for(i=1;i<=100;++i){sum+=i;printf("sum=%d\n",sum);} //进行1+2+3+….+100计算WaitForSingleObject(pi.hProcess,INFINITE); FILE *fp;fp=fopen("date.txt","r");char ch=fgetc(fp); //创建文件并打开while(ch!=EOF){putchar(ch);ch=fgetc(fp);}fclose(fp); //关闭文件}elseprintf("子进程创建失败~\n");return 0;}子进程:#include<stdio.h>#include<stdlib.h>int main(){printf("子进程运行~\n");FILE *fp;if(fp=fopen("date.txt","w")){printf("已经创建文件!\n");int i;for(i=48;i<58;i++) fputc(i,fp);fputc('\n',fp);fclose(fp);printf("已经写入数据:"); //向文本中写入数据fp=fopen("date.txt","r");char ch=fgetc(fp);while(ch!=EOF){putchar(ch);ch=fgetc(fp); //输出数据}fclose(fp);}else printf("创建文件失败!\n");system("pause");return 0;}5. 实验截图说明及分析6. 实验心得体会掌握了父进程创建子进程的方法,对操作系统多线程认识更深了。
操作系统原理试卷
操作系统原理试卷1、父进程创建子进程之后,父子进程间的关系是什么?答案:一个进程创建子进程之后,进程与产生的进程之间的关系是父子关系,分别成为进程和子进程。
子进程一经产生就与你进程并发执行,子进程共享父进程和子进程。
子进程一经产生就与你进程并发执行,子进程共享父进程的正文段和已经打开的文件。
2、简述文件、文件系统的概念答案:文件是具有符号名的、在逻辑上具有完整意义的一组相关信息项的有序序列。
文件系统就是操作系统中实现文件统一管理的一组软件、被管理的的文件以及为实施文件管理所需的一些数据结构的总称。
3、简述作业调度的主要算法答案:作业调度的主要算法包括先来先服务调度算法,短作业优先调度算法,优先级调度算法和高响应比调度算法。
4、简述请求分页存储管理方式中三种内存分配策略的原理答案:固定分配局部置换为每个进程分配一组固定数目的物理块,在进程运行期间物理块数保持不变,当发生缺页中断且需要进行页面置换时,从自己进程的物理块中选择一个页面换出;可变分配全局置换,是先为每个进程分配一定数量的物理块,系统留空闲物理块,当发生缺页中断时,先从空闲物理块中选择空闲空间进行调入页面,当无空闲空间时,从所有内存中选择一个页面进行置换,此种方式会使发生缺页中断的进程物理块数增加,而调出页面的进程物理块数减少;可变分配局部置换,先为进程分配一定数量的物理块,系统预留空闲物理块,当进程发生缺页中断且需要进行页面置换时,从自己的物理块中选择页面换出,只有当某个进程的缺页率上升时,系统增加该进程的物理块数,反之,减少进程分配的物理块数。
5、简述段页式存储管理方式答案:段页式存储管理方式是对用户的逻辑地址空间先分段,再对每段划分成大小相等的页,而内存地址空间会按照页面大小划分成大小相等的物理块,段页式存储管理方式每个用户的进程会具有一张段表和一组页表。
6、简述有哪些程序链接方式答案:程序的链接方式主要包括静态链接、装入时动态链接、运行时动态链接7、简述什么是快表以及快表的作用答案:基本的地址变换机构需要两次访问内存才能够访问到数据。
Linux系统编程之进程控制(进程创建、终止、等待及替换)
Linux系统编程之进程控制(进程创建、终⽌、等待及替换)进程创建在上⼀节讲解进程概念时,我们提到fork函数是从已经存在的进程中创建⼀个新进程。
那么,系统是如何创建⼀个新进程的呢?这就需要我们更深⼊的剖析fork 函数。
1.1 fork函数的返回值调⽤fork创建进程时,原进程为⽗进程,新进程为⼦进程。
运⾏man fork后,我们可以看到如下信息:#include <unistd.h>pid_t fork(void);fork函数有两个返回值,⼦进程中返回0,⽗进程返回⼦进程pid,如果创建失败则返回-1。
实际上,当我们调⽤fork后,系统内核将会做:分配新的内存块和内核数据结构(如task_struct)给⼦进程将⽗进程的部分数据结构内容拷贝⾄⼦进程添加⼦进程到系统进程列表中fork返回,开始调度1.2 写时拷贝在创建进程的过程中,默认情况下,⽗⼦进程共享代码,但是数据是各⾃私有⼀份的。
如果⽗⼦只需要对数据进⾏读取,那么⼤多数的数据是不需要私有的。
这⾥有三点需要注意:第⼀,为什么⼦进程也会从fork之后开始执⾏?因为⽗⼦进程是共享代码的,在给⼦进程创建PCB时,⼦进程PCB中的⼤多数数据是⽗进程的拷贝,这⾥⾯就包括了程序计数器(PC)。
由于PC中的数据是即将执⾏的下⼀条指令的地址,所以当fork返回之后,⼦进程会和⽗进程⼀样,都执⾏fork之后的代码。
第⼆,创建进程时,⼦进程需要拷贝⽗进程所有的数据吗?⽗进程的数据有很多,但并不是所有的数据都要⽴马使⽤,因此并不是所有的数据都进⾏拷贝。
⼀般情况下,只有当⽗进程或者⼦进程对某些数据进⾏写操作时,操作系统才会从内存中申请内存块,将新的数据拷写⼊申请的内存块中,并且更改页表对应的页表项,这就是写时拷贝。
原理如下图所⽰:第三,为什么数据要各⾃私有?这是因为进程具有独⽴性,每个进程的运⾏不能⼲扰彼此。
1.3 fork函数的⽤法及其调⽤失败的原因fork函数的⽤法:⼀个⽗进程希望复制⾃⼰,通过条件判断,使⽗⼦进程分流同时执⾏不同的代码段。
第2章 处理机管理(1)答案
第2章处理机管理(1)一、单项选择题1.以下对进程的描述中,错误的是。
A.进程是动态的概念 B.进程执行需要处理机C.进程是有生命期的 D.进程是指令的集合解:进程是程序的T次执行过程,是动态的,它有生命周期。
本题答案为D。
2.以下关于进程的描述中,正确的是。
A.进程获得CPU运行是通过调度得到的B.优先级是进程调度的重要依据,一旦确定就不能改变C.在单CPU的系统中,任意时刻都有一个进程处于运行状态D.进程申请CPU得不到满足时,其状态变为阻塞解:调度程序的功能是为进程分配处理机;动态优先级是可以改变的;有时计算机系统中没有任何进程运行,CPU处于空闲状态,计算机进行空转;进程已获得除CPU以外的资源时处于就绪状态。
本题答案为A。
3.一个进程是。
A.由处理机执行的一个程序 B.一个独立的程序+数据集C.PCB结构、程序和数据的组合 D.一个独立的程序解:进程由PCB、程序和数据组成的。
本题答案为C。
4.并发进程指的是。
A.可并行执行的进程 B.可同一时刻执行的进程C.可同时执行的进程 D.不可中断的进程解:同时是指宏观上的,含有时间上的重叠,而并行则不含时间上的重叠,表示同一时刻同时执行。
本题答案为C。
5.在多道程序环境下,操作系统分配资源以为基本单位。
A.程序 B.指令 C.进程 D.作业解:进程是资源分配的基本单位。
本题答案为C。
6.操作系统通过对进程进行管理。
A.JCB B.PCB C.DCT D.CHCT解:操作系统通过进程控制块,即PCB对进程进行管理。
本题答案为B。
7.分配到必要的资源并获得处理机时间的进程状态是。
A.就绪状态 B.运行状态 C.阻塞状态 D.撤销状态解:对于分配到必要的资源并获得处理机时间的进程,CPU调度立刻将其状态转变为运行状态。
本题答案为B。
8.当一个进程处于这样的状态时,,称为阻塞状态。
A.它正等着输入一批数据 B.它正等着进程调度C.它正等着分给它一个时间片 D.它正等着进入内存解:阻塞状态是指进程在等待I/O或数据的到来,等待CPU的进程处于就绪状态。
操作系统实验-进程控制
实验一、进程控制实验1.1 实验目的加深对于进程并发执行概念的理解。
实践并发进程的创建和控制方法。
观察和体验进程的动态特性。
进一步理解进程生命期期间创建、变换、撤销状态变换的过程。
掌握进程控制的方法,了解父子进程间的控制和协作关系。
练习 Linux 系统中进程创建与控制有关的系统调用的编程和调试技术。
1.2 实验说明1)与进程创建、执行有关的系统调用说明 进程可以通过系统调用fork()创建子进程并和其子进程并发执行.子进程初始的执行映像是父进程的一个复本.子进程可以通过 exec()系统调用族装入一个新的执行程序。
父进程可以使用 wait()或 waitpid()系统调用等待子进程的结束并负责收集和清理子进程的退出状态。
fork()系统调用语法:pid_t#include <unistd.h>fork(void);fork 成功创建子进程后将返回子进程的进程号,不成功会返回-1.exec 系统调用有一组 6 个函数,其中示例实验中引用了 execve 系统调用语法:#include <unistd.h>const char * envp[]);path 要装const char *argv[],int execve(const char *path,入的新的执行文件的绝对路径名字符串.argv[] 要传递给新执行程序的完整的命令参数列表(可以为空).envp[] 要传递给新执行程序的完整的环境变量参数列表(可以为空).Exec 执行成功后将用一个新的程序代替原进程,但进程号不变,它绝不会再返回到调用进程了。
如果 exec 调用失败,它会返回-1。
wait() 系统调用语法:#include <sys/types.h>pid_t#include <sys/wait.h>wait(int *status);status 用pid_t waitpid(pid_t pid,int *status,int option);于保留子进程的退出状态pid 可以为以下可能值:-1 等待所有 PGID 等于 PID 的绝对值的子进程1 等待所有子进程0 等待所有 PGID 等于调用进程的子进程>0 等待 PID 等于 pid 的子进程 option 规定了调用 waitpid 进程的行为:WNOHANG 没有子进程时立即返回WUNTRACED 没有报告状态的进程时返回wait 和 waitpid 执行成功将返回终止的子进程的进程号,不成功返回-1。
父子进程的说法
父子进程的说法
"父子进程"是指在操作系统中,由一个进程创建(通常是通过fork系统调用)的进程关系。
这种关系通常用于实现并发执行或并行计算,允许父进程和子进程在独立的执行空间中运行。
以下是关于父子进程的一些说明:
1.父进程:执行fork系统调用的进程称为父进程。
父进程在创建子进程后,通常会继续执行一些任务,或者等待子进程完成执行。
2.子进程:通过fork系统调用创建的新进程称为子进程。
子进程是父进程的副本,拥有独立的内存空间,但通常会继承父进程的代码段、数据段、文件描述符等信息。
3.进程独立性:父进程和子进程之间是相对独立的,它们可以并发执行,互不影响。
子进程的修改通常不会影响父进程,反之亦然。
4.通信机制:父子进程之间可以通过进程间通信(Inter-Process Communication,IPC)来进行数据交换。
常见的IPC方法包括管道、共享内存、消息队列等。
5.等待子进程:父进程通常会使用wait系统调用等待子进程的结束,并获取子进程的退出状态。
这样可以确保父进程在子进程执行完毕后进行进一步的处理。
在多进程的环境中,父子进程的概念非常重要,它们共同构成了并发执行的基础。
在Unix/Linux等操作系统中,fork系统调用是实现多进程的一种常见方式。
操作系统原理-第三章进程管理习题(1)
第三章进程管理习题一. 单选题1. UNIX操作系统的进程控制块中常驻内存的是()。
A.proc结构B.proc结构和核心栈C.ppda区D.proc结构和user结构2. 当()时,进程从执行状态转变为就绪状态。
A.进程被调度程序选中B.时间片到C.等待某一事件D.等待的事件发生3.在进程状态转换时,下列()转换是不可能发生的。
A.就绪态→运行态B.运行态→就绪态C.运行态→阻塞态D.阻塞态→运行态4.下列各项工作步骤中,()不是创建进程所必需的步骤。
A.建立一个PCBB.作业调度程序为进程分配CPUC.为进程分配内存等资源D. 将PCB链入进程就绪队列5.下列关于进程的叙述中,正确的是()。
A.进程通过进程调度程序而获得CPU。
B.优先级是进行进程调度的重要依据,一旦确定不能改变。
C.在单CPU系统中,任一时刻都有1个进程处于运行状态。
D.进程申请CPU得不到满足时,其状态变为等待状态。
6.从资源管理的角度看,进程调度属于()。
A.I/O管理B.文件管理C.处理机管理D.存储器管理7.下列有可能导致一进程从运行变为就绪的事件是()。
A.一次I/O操作结束B.运行进程需作I/O操作C.运行进程结束D.出现了比现运行进程优先权更高的进程8.一个进程释放一种资源将有可能导致一个或几个进程()。
A.由就绪变运行B.由运行变就绪C.由阻塞变运行D.由阻塞变就绪9.一次I/O操作的结束,有可能导致()。
A.一个进程由睡眠变就绪B.几个进程由睡眠变就绪C.一个进程由睡眠变运行D.几个进程由睡眠变运行10.当一个进程从CPU上退下来时,它的状态应变为()。
A.静止就绪B. 活动就绪C. 静止睡眠D. 活动睡眠11.为使进程由活动就绪变为静止就绪,应利用()原语?** B. ACTIVE C. BLOCK D. WAKEUP12.在下面的叙述中,不正确的是()。
A.一个进程可创建一个或多个线程B.一个线程可创建一个或多个线程C.一个线程可创建一个或多个进程D.一个进程可创建一个或多个进程13. 若系统中只有用户级线程,则处理机调度单位是()。
Linux进程控制原语
Linux/UNIX进程控制原语Linux/UNIX进程控制原语-1 进程控制原语
(2)exec系统调用 系统调用 格式: 六种 六种) 格式:(六种)
int execl(path,arg0,arg1,…,argn,(char *)0)
char *path, *arg0, *arg1, …, *argn ; exec调用进程的正文段被指定的目标文件的正文段 调用进程的正文段被指定的目标文件的正文段 所覆盖,其属性的变化方式与fork成功后从父进程 所覆盖,其属性的变化方式与 成功后从父进程 那里继承属性的方式几乎是一样的。 那里继承属性的方式几乎是一样的。系统中绝大多 数命令都是通过exec来执行的,不但 来执行的, 数命令都是通过 来执行的 不但shell进程所 进程所 创建的子进程使用它来执行用户命令, 创建的子进程使用它来执行用户命令,shell进程本 进程本 身和它的祖先进程也是用exec来启动执行的。 来启动执行的。 身和它的祖先进程也是用 来启动执行的
(6)程序执行说明 (6)程序执行说明 该程序说明主进程创建了一个子程序后, 该程序说明主进程创建了一个子程序后,二 个进程并发执行的情况。 个进程并发执行的情况。 主进程在执行fork系统调用前是一个进程, 主进程在执行 系统调用前是一个进程, 系统调用前是一个进程 执行fork系统调用后,系统中又增加了一个与 系统调用后, 执行 系统调用后 原过程环境相同的子进程, 原过程环境相同的子进程,它们执行程序中 fork语句以后相同的程序,父和子进程 中都有 语句以后相同的程序, 语句以后相同的程序 自己的变量pid,但它们的值不同,它是 自己的变量 ,但它们的值不同,它是fork调 调 用后的返回值,父进程的pid为大于 的值, 为大于0的值 用后的返回值,父进程的 为大于 的值,它 代表新创建子进程的标识符,而子进程的pid为 代表新创建子进程的标识符,而子进程的 为 0。这样父子进程执行相同一个程序,但却执行 。这样父子进程执行相同一个程序, 不同的程序段。子进程执行if(pid= = 0)以后的 不同的程序段。子进程执行 以后的 大括号内的程序, 语句; 大括号内的程序,即execlp语句;而父进程执 语句 以后的大括号内的程序。 行else以后的大括号内的程序。 以后的大括号内的程序
