考研帮 > 数学 > 每日一练

2.1 进程与线程

2.1.3 进程控制

  进程控制的内容主要包括进程控制机构、进程的创建、进程的终止等内容,下面我们分别介绍这些内容。
  1.进程控制机构
  操作系统作为资源管理和分配程序,其本质任务是自动控制程序的执行,并满足进程执行过程中提出的资源使用要求。因此,操作系统的核心控制结构是进程结构,资源管理的数据结构将围绕进程结构展开。
  操作系统使用系统原语控制进程状态改变,原语被认为是机器语言的延伸,是完成特定任务的一段基本程序,它具有原子操作性。原子操作是不可分的操作,要么全做,要么全不做,它是通过中断屏蔽来实现的。原语对用户是透明的,一般不允许直接使用,但是允许程序员作为一种特殊的系统调用来使用。
  操作系统的控制表分为四类:进程控制表,存储控制表,I/O 控制表和文件控制表。
  进程控制表用来管理进程及其相关信息。
  存储控制表用来管理一级(主)存储器和二级(辅)存储器,主要内容包括:主存储器的分配信息,二级存储器的分配信息,存储保护和分区共享信息,虚拟存储器管理信息。
  I/O控制表用来管理计算机系统的I/O 设备和通道,主要内容包括:I/O 设备和通道是否可用,I/O设备和通道的分配信息,I/O 操作的状态和进展,I/O 操作传输数据所在的主存区。
  文件控制表用来管理文件,主要内容包括:被打开文件的信息,文件在主存储器和二级存储器中的位置信息,被打开文件的状态和其他属性信息。
  2.主要进程原语
  (1)创建原语(Create)
  进程创建的方式有两种:一是由系统程序模块统一创建,二是由父进程创建。它们都需要调用创建原语来实现。创建原语的主要工作是,首先扫描系统的PCB表,查询有无空的PCB表项,如有,则申请一个,并对其进程初始化,初始化的项目有进程标识符(PID)、进程状态和执行程序的起始地址;如果申请不成功,则创建失败。
  进程的创建过程描述如下。
  在主进程表中增加一项,并从PCB 池中申请一个空白PCB。
  为新进程的进程映像分配地址空间。对于进程创建操作还需要传递环境变量,构造共享地址空间。
  为新进程分配资源,除内存空间外,还有其他各种资源。
  查找辅助存储器,找到进程正文段并装入到进程地址空间的正文区。
  初始化进程控制块(如状态、PSW、栈等),为新进程分配一个唯一的进程标识符。
  把进程加入某一就绪进程队列(这时子进程就绪),或直接将进程投入运行(这时父进程就绪)。
  通知操作系统的某些模块,如记账程序、性能监控程序。
  (2)撤销原语(Kill)
  当进程正常执行完毕后,或者由于某种错误非正常终止时,都需要调用撤销原语来释放该进程所占用的各种资源和PCB结构本身,以利于有效地使用资源。撤销原语的主要工作是,首先检查PCB链表,寻找所要撤销的进程是否存在。如果找到了相应的表项,撤销原语就释放该进程占用的资源并回收对应的PCB结构;如果被撤销的进程还有子进程,则撤销原语必须先撤销子进程的  PCB并释放其所占用的资源。
  进程撤销的具体步骤如下。
  根据撤销进程标识号,从相应队列中找到它的PCB。
  将该进程拥有的资源归还给父进程或操作系统。
  若该进程拥有子进程,应先撤销它的所有的子孙进程,以防它们脱离控制。
  撤销进程出队,将它的PCB 归还到PCB 池。
  (3)阻塞原语(Block)
  当进程等待某些事件(如读写磁盘、接受其他进程的数据)的产生时,通过执行阻塞原语来阻塞自己。阻塞原语在执行时,必须先中断处理机并同时保存该进程的CPU现场。然后将阻塞进程插入到等待队列中,再转由调度程序从就绪队列中选择一个进程投入运行。进程阻塞的步骤如下。
  停止进程执行,保存现场信息到PCB。
  修改进程控制块的有关内容,如进程状态由运行改为等待等。
  把修改状态后的进程控制块加入相应等待进程队列。
  接着便应转入进程调度程序去调度其他进程运行。
  (4)唤醒原语(Wakeup)
  又称为恢复原语,当进程等待的条件或事件产生后,等待该事件的所有进程都被唤醒。唤醒进程的方法有两种:一种是系统进程唤醒;另一种是由事件发生进程唤醒。它们都需要调用唤醒原语来唤醒另一进程。唤醒原语首先将被唤醒进程从相应的等待队列取下,并将其状态设置为就绪态后,送入就绪队列。此时,唤醒原语既可以从调用程序处直接返回,也可以转向进程调度程序,让调度程序选择一个合适的进程去执行。需要注意的是,一个进程由执行状态转变为阻塞状态,是这个进程自己调用阻塞原语去完成的;而进程由阻塞状态到就绪状态,是另一个发现者进程调用唤醒原语实现的,一般这个发现者进程与被唤醒进程是合作的并发进程。进程唤醒的步骤如下。
  从相应的等待进程队列中取出进程控制块。
  修改进程控制块的有关信息,如进程状态改为就绪。
  把修改后的进程控制块加入有关就绪进程队列。
  (5)挂起原语(Suspend)
  当用户或创建者需要了解进程的活动情况或干预进程活动时,可以把某进程置于挂起就绪状态或挂起阻塞状态,这时,要调用挂起原语,挂起方式如下。
  发命令进程自身挂起。
  挂起具有制定标识符的进程。
  将某进程及其全部或部分子进程挂起。
  (6)激活原语(Active)
  激活原语使处于静止状态的进程变为活动状态,即供用户或创建者重新激活已挂起的进程,激活方式有多种,如激活一个指定标识符的进程,或激活某进程及其所有子进程等。当激活后的进程处于活动就绪状态时,将引起重新调度。
  进程在系统中能够并行执行,并且它们必须要动态地创建和删除。因此,操作系统必须提供进程创建和终止的机制(或方法)。
  3.进程的创建
  进程在运行期间,通过创建进程系统调用可以创建多个新进程。创建进程的进程被称为父进程,而新进程被称为子进程。每个新进程都可以创建另外的进程,从而形成一个进程树。
  每一个进程都有生命期,即从创建到消亡的时间周期。当操作系统为一个程序构造一个进程控制块并分配地址空间之后,就创建了一个进程。进程的创建来源于以下四个事件。
  提交一个批处理作业。
  在终端上一个交互式作业登录。
  操作系统创建一个服务进程。
  存在的进程创建新的进程。
  4.进程的终止
  进程执行完最后一条语句后就终止执行,并调用exit系统调用来使操作系统删除它。在此,该进程可能要把数据(输出)返回给它的父进程(通过wait系统调用)。操作系统回收该进程的所有资源——包括物理和虚拟内存、打开文件和I/O 缓冲器。
  进程也可能在其他的情况下终止运行。一个进程可以利用系统调用(例如:abort)终止其他的进程。通常,只有进程的父进程可以调用这样的系统调用来终止它。否则,用户可以任意地取消其他用户的作业。所以父进程需要知道其子进程的标识符。如此,当一个进程创建一个新进程时,新创建的进程的标识符要传给其父进程。
  父进程可能会出于某种原因而结束它的一个子进程,例如:
  子进程需要更多的资源。这需要父进程能够检查其子进程的状态;
  分配给子进程的任务已经不再需要;
  父进程退出,而且操作系统禁止子进程在父进程终止后继续执行。在这样的系统中,如果一个进程(正常或非正常)终止,那么它的所有子进程也必须终止。通常这种级联式的进程终止是操作系统发起的。

关于"最后阶段,真题的正确打开方式_备考经验_考研帮"15名研友在考研帮APP发表了观点

扫我下载考研帮

考研帮地方站更多

你可能会关心:

来考研帮提升效率

× 关闭