进程的基本概念
顺序执行
仅当前一操作执行完毕后,才能执行后续操作。
特征
-
顺序性
处理机严格按照程序所规定的顺序执行,即每个操作必须在下一个操作开始之前结束。
- 外部顺序性
- 内部顺序性
-
封闭性
程序是在封闭的环境下运行的,它独占系统资源,执行过程中不受外界影响。
-
结果可再现性
程序执行得到的最终结果与程序执行速度无关,只要初始状态相同,每次执行结果必然相同。
并发执行
为了调高效率,允许若干个程序段同时在系统中运行。
特征
-
间断性
-
失去封闭性
-
结果不可再现性
结论
并发环境下,"程序"一词对描述和管理系统下各并发任务的执行过程已经不适用了。
进程定义
进程是程序的一次执行
进程是一个程序及其数据在处理机上顺序执行时发生的活动
进程是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单元。
传统OS中的进程定义:
“进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。”
进程和程序的区别与联系
-
程序是指令的集合,是静态的概念。进程是程序在处理机上的一次执行的过程,是动态的概念。程序可以作为软件资料长期保存。进程是有生命周期的。
-
进程是一个独立的运行单位,能与其它进程并发活动。而程序不是。
-
进程是竞争计算机系统有限资源的基本单位,也是进行处理机调度的基本单位。
-
一个程序可以作为多个进程的运行程序,一个进程也可以运行多个程序。
进程状态
-
就绪态 一个进程已经具备运行条件,但由于CPU暂时不能运行的状态。
-
执行态 进程占有CPU,并在CPU上运行。
-
阻塞态 也称为等待态、封锁态。指进程因等待某种事件的发生而暂时不能运行的状态。
阻塞态不能直接转执行态,还需放入到就绪态进行排队,因为这样高效并且简单。
挂起态
在系统资源不足的情况下,操作系统会对内存中的进程进行合理的安排,其中有的进程被暂时掉离出内存,即处于“挂起”状态。当条件允许的时候,会被操作系统再次调回内存,重新进入就绪态等待处理机调度。
引入挂起状态的原因:
-
终端用户的请求
-
父进程请求
-
负荷调节的需求
-
操作系统的需求
进程状态的转换:
活动就绪->静止就绪
活动阻塞->静止阻塞
静止就绪->活动就绪
静止阻塞->活动阻塞
进程控制块
作用
存放进程的管理和控制信息的数据结构称为进程控制块。它是进程管理和控制的重要的数据结构,在进程创建时,系统为该进程建立PCB,并伴随其运行的全过程,直到进程撤销而撤销。
PCB的作用是使一个在多道程序环境下不能独立运行的程序(含数据),成为一个能独立运行的基本单位,一个能与其它进程并发执行的进程。
进程控制块中的信息
进程描述信息
- 进程标识符
-
进程家族关系
父进程标识、子进程标识
-
用户
指示拥有该进程的用户
处理机状态 (CPU现场保护结构、进程上下文)
-
通用寄存器
又称为用户可视寄存器,它们是用户程序可以访问的,用于暂存信息。
-
指令计数器PC
其中存放了要访问的下一条指令的地址。
-
程序状态字PSW
其中含有状态信息,如条件码、执行方式、中断屏蔽标志。
-
用户栈指针
指每个用户进程都有一个或者若干个与之相关的系统栈,用于存放过程和系统调用参数及调用地址。
进程调度信息
-
进程状态
指明进程当前状态,作为进程调度和对换时的依据。
-
进程优先级
用于描述进程使用处理机的优先级别的整数,优先级高的进程应优先获得处理机。
-
进程调度所需的其它信息
它们与所采用的进程调度算法有关,如进程已等待CPU的时间总和,进程已执行的时间综合等。
-
事件
是指进程由执行状态转变为阻塞状态所等待发生的事件,即阻塞的原因。
进程控制信息
-
程序和数据的地址
指进程的程序和数据所在的内存或外存地(首)址,以便再调度到该进程执行时,能从PCB中找到其程序和数据。
-
进程同步和通信机制
指实现进程同步和进程通信时必须的机制,如消息队列、信号量等。
-
资源清单
是一张列出了除CPU以外、进程所需的全部资源及已分配到该进程的资源清单。
-
链接指针
给出本进程(PCB)所在队列中的下一个进程的PCB的首地址。
进程控制
就是系统使用一些具有特定功能的程序段来创建进程、撤销进程以及完成进程各状态之间的转换,从而达到多线程高效率并发执行、实现资源共享的目的。
为防止OS本身或关键数据被其他程序破坏,一般将处理机执行状态分成以下2种:
-
系统态(管态/内核态):它具有较高的特权,能执行一切指令,访问所有寄存器和存储区。
-
用户态(目态):具有较低的特权,仅能执行特定指令,访问指定寄存器和存储区。
应用程序只能工作在用户态。
OS的内核一般包括以下2方面功能:
支撑功能:时钟管理、中断处理、原语操作
资源管理功能:进程管理、存储器管理、设备管理
原语 (Primitive)
系统态下执行的某些具有特定功能的程序段。
也指原子操作——不可分割的基本单位。
创建原语Create
进程创建过程:
-
申请空白PCB
-
为新进程分配资源
-
初始化进程控制块
-
将新进程插入就绪队列 (前提是有空间能接纳新进程)
进程创建的事件:
-
用户登录
-
作业调度
-
提供服务: 以上三种由系统内核创建
-
应用请求: 由用户自己创建
进程终止Delete
进程终止过程:
-
根据标识符,从PCB集合中检索出对应PCB,并读出进程状态。
-
若正处于执行状态,应立即终止该进程的执行,并置调度标志位真。
-
若该进程还有子孙进程,还应将其所有子孙进程予以终止,以防他们成为不可控得进程。
-
将被终止进程的全部资源归还给其父进程或系统。
-
将被终止进程的PCB从所在队列移出。等待其它程序来收集它的信息。
引起进程终止的事件:
-
正常结束
-
异常结束
-
外界干预
异常结束:
出现某些错误和故障而迫使进程终止。
① 越界错误:程序所访问的存储区,已越出该进程的区域;
② 保护错:进程试图去访问一个不允许访问的资源或文件,或者以不适当的方式进行访问,如进程去写一个只读文件;
③ 非法指令:程序试图去执行一条不存在的指令。如程序错误地转移到数据区,把数据当成了指令;
④ 特权指令错:用户进程执行一条只允许OS执行的指令;
⑤ 运行超时:进程的执行时间超过了指定的最大值;
⑥ 等待超时:进程等待某事件的时间, 超过规定的最大值;
⑦ 算术运算错:进程试图执行一个被禁止的运算,如除0;
⑧ I/O故障:这是指在I/O过程中发生了错误等。
外界干预:
外界干预并非指在本进程运行中出现了异常事件,而是指进程应外界的请求而终止运行。
① 操作员或操作系统干预:由于某种原因,例如,发生了死锁, 由操作员或操作系统终止该进程;
② 父进程请求:由于父进程具有终止自己的任何子孙进程的权利, 因而当父进程提出请求时,系统将终止该进程;
③ 父进程终止。 当父进程终止时,OS也将他的所有子孙进程终止。
进程阻塞Block
阻塞是进程的自身调用阻塞原语而自我阻塞(主动行为)。而唤醒是引起阻塞的事件消失后,有关的“发现者”调用唤醒原语来唤醒被阻塞的进程,它们是一对逆过程。
阻塞是进程的主动行为
进程阻塞过程:
-
保存当前进程的CPU现场
-
置该进程的状态为阻塞状态
-
被阻塞进程进入等待队列
-
转进程调度
进程唤醒Wakeup
当被阻塞进程所期待的事件出现时,如I/O完成或其所期待的数据已经到达,则由有关进程(比如,用完并释放了该I/O设备的进程)调用唤醒原语wakeup( ),将等待该事件的进程唤醒。
唤醒原语 Wakeup() 不能自己唤醒
进程唤醒过程:
-
从等待队列中摘下被唤醒的进程
-
将被唤醒的进程置为就绪态
-
将被唤醒的进程送入就绪队列
-
转进程调度或返回
进程挂起Suspend
当出现了引起进程挂起的事件时,如用户进程请求将自己挂起,或父进程请求将自己的某个子进程挂起,系统将利用挂起原语suspend( )将指定进程或处于阻塞状态的进程挂起。
进程挂起过程:
-
检查被挂起进程的状态,若处于活动就绪状态,便将其改为静止就绪;对于活动阻塞状态的进程,则将之改为静止阻塞。
-
为了方便用户或父进程考查该进程的运行情况而把该进程的PCB复制到某指定的内存区域。
-
若被挂起的进程正在执行,则转向调度程序重新调度。
进程激活Active
当发生激活进程的事件时,例如,父进程或用户进程请求激活指定进程,若该进程驻留在外存而内存中已有足够的空间时,则可将在外存上处于静止就绪状态的进程换入内存。这时,系统将利用激活原语active( )将指定进程激活。
进程激活过程:
-
激活原语先将进程从外存调入内存,检查该进程的现行状态,若是静止就绪,便将之改为活动就绪;若为静止阻塞便将之改为活动阻塞。
-
假如采用的是抢占调度策略,则每当有新进程进入就绪队列时,应检查是否要进行重新调度,即由调度程序将被激活进程与当前进程进行优先级的比较,如果被激活进程的优先级更低,就不必重新调度;否则,立即剥夺当前进程的运行,把处理机分配给刚被激活的进程。