文章目录
一、进程管理
进程管理是一个非常大的概念,包括了很多个方面,其中每个方面都可以分开来深入分析,本篇文章着重分析的是进程管理几大方面中的前3个,也就是进程的相关概念、线程的相关概念、进程与线程的调度。
二、进程的组成
1、进程的概念
程序是静止的,进程是动态的,进程包括程序和程序处理的对象。因此可以说,进程就是运行着的程序,或者进程是程序的一次实验。
- 进程是可并发执行的程序的一次执行过程;
- 是系统进行资源分配和调度的一个独立的基本单位和实体;
- 是一个动态的概念。
(1)程序顺序执行:顺序性,封闭性,可再现性。
(2)程序并发执行:间断性,无封闭性,可再现性
2、进程的程序段、数据段、PCB
(1)程序段:
程序段就是用来存放程序的段,可以是一个子过程SUB,一个函数FUNCTION(用面向对象的观点或称为方法);程序都是从上到下施行的。
(2)数据段:
用于存放数据的段,使用时候,用CS寄存器。
其实,内存并没有分段,段的划分来自于CPU。由于8086CPU用“基础地址(段地址×16)+偏移地址=物理地址”的方式给出内存单元的物理地址,使得我们可以用分段的方式来管理内存。
(3)PCB(Process Control Block)
也就是进程控制块,是一个用来描述进程本身的特性、进程的状态、进程的调度信息及对资源的占有情况的数据结构。
三、进程的特征与状态
1、进程的特征
2、进程的基本状态
主要分为:
关系为:
3、进程的运行状态
- 系统态(核心态,管态)具有较高的访问权,可访问核心模块。
- 用户态(目态)限制访问权。
四、进程的控制
(1)进程创建的工作
分配一个PCB,拷贝父进程的PCB的绝大部分数据
给子进程分配资源
复制父进程地址空间的数据
将进程状态置为就绪态,插入就绪队列
(2)进程何时终止
代码运行完毕,结果正确
代码运行完毕,结果不正确
代码异常终止。
(3)进程的退出
-
正常退出:
用main退出
调用exit
_exit -
异常退出
ctrl+c ,信号终止 -
_exit与exit的区别
进程终止时,_exit是强制终止的。
exit会执行用户通过atexit或on_exit定义的清理函数,关闭所用打开的流,所有的缓存数据均被写入,调用_exit.
(4)引起进程的阻塞与唤醒的事件
-
向系统申请资源时失败。如一个进程(A)申请打印机但是此时打印机被其他进程(B)正在使用,此时A进程则处于阻塞状态。
-
等待某种操作:进程A启动了某I/O设备,如果只有完成了指定的I/o任务后进程A才能执行,则进程A启动了I/O设备后会自动进入阻塞。
-
新数据尚未到达:对于相互合作的进程,如果一个进程需要先获得另一个进程的数据后才能对该数据进行处理,只要数据尚未到达其便会进入阻塞状态。
-
等待新任务的到达:每当这种进程完成自己的任务便把自己阻塞起来,等待新任务到达,才将其唤醒。
(5)进程阻塞的过程
正在执行的进程,如果遇到上面阻塞的事件后,进程便调用阻塞原语block将自己阻塞,(阻塞是进程自身的一种主动行为)并将正在运行的进程立即停止运行,并把PCB中进程状态信息改为阻塞,并将PCB插入阻塞队列,如果系统设置了不同阻塞原因的队列,则应将其插入到对应原因引起的阻塞队列中。
(6)进程唤醒的过程
当被阻塞进程所期待的事件发生时则有关的进程会调用唤醒原语(wakeup),将等待的进程唤醒,首先把阻塞的进程从阻塞队列中移除,将其PCB插入就绪队列中
五、进程的通信与运行
1、进程的通信
2、进程的运行步骤
3、进程间的约束关系
(1)互斥关系:进程之间由于竞争使用共享资源而产生的相互约束的关系。这种因共享资源而产生的制约关系称为进程的互斥。
(2)同步关系:并发执行进程之间通过在执行时序上的某种限制而达到相互合作的这种约束关系称为进程的同步—直接相互制约关系。
(3)临界资源:凡是以互斥方式使用的共享资源都称为临界资源,临界资源具有一次只允许一个进程使用的属性。
(4)临界区:每个进程互斥访问临界资源的那段代码称为临界区。
六、线程
1、线程的特点
线程就是进程的一个实体,是被独立调度和分配的基本单位,表示进程中的一个控制点,执行一系列指令。在实际的操作系统中,基本上都是多线程少进程的,因此可以说,相对于进程,线程更是操作系统调度的基本单位。
2、线程的实现方式与引用目的
七、进线程的调度
1、调度的层次
2、调度方式
(1)非剥夺式调度:分派程序一旦把处理机分配给某进程后便让它一直运行下去,直到进程完成或发生 进程调度某事件而阻塞时,才把处理机分配给另一个进程。
(2)剥夺式调度:当一个进程正在运行时,系统可以基于某种原则,剥夺已分配给它的处理机,将之分配给其它进程。
实际上它们都是处理机即资源的分配方式,只不过准则方法不同而已。