进程的创建终止、阻塞唤醒、挂起激活(操作系统)
创始人
2024-03-31 16:10:18
0次

目录

一、引起创建进程的事件

二、进程的创建

三、进制的终止

1.引起进程终止的事件

2.进程的终止过程

四、进程的阻塞和唤醒

1.引起进程阻塞和唤醒的事件

2.进程阻塞过程

3.进程唤醒过程

五、进程的挂起和激活

1.进程的挂起

2.进程的激活


 

进程控制是进程管理中最基本的功能。 进程控制包括:

◆ 创建进程         ◆ 终止进程         ◆ 进程状态转换

进程控制是由OS的内核完成的。

一、引起创建进程的事件


用户登录

作业调度

提供服务

        当用户进程提出某种请求后,系统将专门创建一个进程来提供用户所需的服务。如,文件打印。

应用请求

        是基于应用进程的需求,由应用进程自己创建一个新进程,以便新进程以并发运行方式完成特定任务。

二、进程的创建


调用进程创建原语Create(),按下述步骤创建一个进程:

(1)申请空白PCB;

(2)为新进程分配资源。主要是内存空间。

(3)初始化PCB。包括:

初始化标识信息

初始化处理机状态信息:程序计数器,堆栈指针等

初始化处理机控制信息:进程状态——就绪或静止就绪、优先级等。

(4)将新进程插入就绪队列。

Win32中创建进程的API函数是CreateProcess( );

创建线程的API是CreateThread( )函数;

三、进制的终止


1.引起进程终止的事件


正常结束

异常结束

常见的异常——结束事件

越界错误 保护错——试图访问不允许访问的资源或文件,或者以不适当方式访问 非法指令 特权指令错——用户程序试图执行只允许OS执行的指令 运行超时 等待超时 算术运算错——被0除 I/O故障 

外界干预

操作员或操作系统干预(如发生死锁)

 父进程请求

 父进程终止

2.进程的终止过程


OS调用终止原语,按下述过程终止进程

(1)根据被终止进程的标识,从PCB集合中找除该进程的PCB,读出该进程状态。 (2)若被终止进程正处于执行状态,应立即终止其执行,并置调度标志为真,用于指示该进程被终止后应重新进行调度。若该进程还有子孙进程,应将其所有子孙进程终止,以防止它们成为不可控进程。 (3)将被终止进程的所有资源,或者归还给其父进程,或者归还给系统。 (4)将被终止进程(它的PCB)从所在队列中移出,等待其他进程来搜索信息。 

Win32中终止进程的API函数是TerminateProcess( );

终止线程的API函数是TerminateThread( )。

四、进程的阻塞和唤醒


1.引起进程阻塞和唤醒的事件


请求系统服务

     当执行进程请求OS服务时,由于某种原因,OS并不立即满足该进程的请求时,该进程只能转变为阻塞状态来等待。

如,进程请求打印机

启动某种操作

        当进程启动某种操作后,如果该进程必须在该操作完成后才能继续执行,则必须先使该进程阻塞,以等待操作完成。

如,启动了某I/O设备

新数据尚未到达

        对于相互合作的进程,如果其中一个进程需要获得另一个(合作)进程提供的数据才能运行以对数据进行处理,则只要其所需数据尚未到达,该进程只有阻塞(等待)

无新工作可做

        系统往往设置一些具有特定功能的系统进程,每当这种进程完成任务后,便把自己阻塞起来以等待新任务到来。

如,系统中发送数据的进程

2.进程阻塞过程


调用阻塞原语block把自己阻塞。(主动行为)

阻塞(block)过程:

立即停止执行; 把PCB中进程状态由“执行”改为“阻塞”; 将PCB插入具有相同事件的阻塞队列; 转进程调度程序,将处理机分配给某个就绪进程,并进行进程切换——保留被阻塞进程的处理机状态(在PCB中),再按新进程的PCB中处理机状态设置CPU的环境。 

3.进程唤醒过程


调用唤醒原语wakeup( ),将等待事件的进程唤醒。

唤醒原语执行过程:

将被唤醒进程的PCB从阻塞队列移出;

将其PCB中进程状态由“阻塞”改为“就绪”;

将改PCB插入到就绪队列中。

block()和wakeup()是成对的。

Win32中线程阻塞的API函数是SuspendThread( );唤醒线程的API函数是ResumeThread ( )。

Windows中一般没有挂起状态,即线程“挂起”后并不调到外存,而只是阻塞。唤醒也称为释放。

五、进程的挂起和激活


1.进程的挂起


当出现了引起进程挂起的事件时(用户进程请求将自己挂起,或父进程请求将子进程挂起),系统将用挂起原语suspend( )将指定进程或处于阻塞状态的进程挂起。

挂起原语的执行过程:

1、检查被挂起进程的状态:

若处于活动就绪或执行状态,则将其转为静止就绪;

若处于活动阻塞,则将其转为静止阻塞

2、把该进程的PCB复制到某指定内存区域 -----为方便用户或父进程考查该进程的运行状态。

3、若该进程正在执行,则转进程调度程序重新调度。

2.进程的激活


        当发生激活进程的事件时(如父进程或用户请求激活指定进程,而内存中已有足够空间时),系统利用激活原语active( )将指定进程激活。

激活过程是:

1、将进程从外存调入内存;

2、检查该进程现行状态:

若是静止就绪,则改为活动就绪;

若是静止阻塞,则改为活动阻塞。

3、若采用的是抢占式调度策略,则应检查被激活就绪进程的优先级,若其优先级比先行执行进程高,则应将处理机分配给被激活进程。

上一篇:网络协议一

下一篇:ArrayList源码简析

相关内容

热门资讯

前端-session、jwt 目录:   (1)session (2&#x...
linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
关于测试,我发现了哪些新大陆 关于测试 平常也只是听说过一些关于测试的术语,但并没有使用过测试工具。偶然看到编程老师...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
nodejs:本地安装nvm实... 一、背景-使用不同版本node的原因 vue3+ts、nuxt3版本,node...
JAVA集合知识整理 Java集合知识整理 HashMap相关 HashMap的底层数据结构:jdk1.8之...
无刷直流电机介绍及单片机控制实... 无刷直流电机介绍及单片机控制实例前言基本概念优势与劣势使用寿命基本结构使用单片机控制实例电子调速器&...
fwdiary(2) dp2 1.传纸条  AcWing 275. 传纸条 - AcWing 走两条路,走一条最大的...
常用的DOS命令 常用的DOS命令 DOS(Disk Operating System,磁...
<C++> 类和对象(下) 1.const成员函数将const修饰的“成员函数”称之为const成员函数,cons...