进程的控制

进程控制模块PCB(Process Control Block)

进程控制块中记录进程存在和特征信息,PCB与进程同生死,创建一个进程就是为其建立一个PCB,当进程被撤消时,系统就回收它的PCB;OS对进程的控制就是根据PCB来进行,对进程管理也通过对PCB管理来实现。

进程控制块的作用:进程存在的唯一标志

PCB的信息:

  • 进程标识符

进程标识符用于唯一标识一个进程,由外部标识符(用户使用)和内部标识符(系统管理)组成

  • 进程调度信息

包括进程状态、队列(就绪、阻塞队列)、队列指针、调度参数(进程优先级、进程执行时间和等待时间等)

  • 处理机状态信息

由处理机各种寄存器(通用寄存器、指令计数器、程序状态字PSW、用户栈指针等)的内容所组成,该类信息使进程被中断后重新执行时能恢复现场从断点处继续运行。

  • 进程控制信息

包括程序和数据的地址、I/O资源清单,保证进程正常运行的同步和通信机制等。

  • 家族信息

包括该进程的父、子进程标识符、进程的用户主等。

进程上下文

进程是由程序、数据和进程控制块组成。进程上下文实际上是执行活动全过程的静态描述。具体说,进程上下文包括系统中与执行该进程有关的各种寄存器(例如:通用寄存器、程序计数器PC、程序状态寄存器PS等)的值。

程序段在经编译之后形成的机器指令代码集(或称正文段)、数据集及各种堆栈值和PCB结构,如下图所示:
在这里插入图片描述

进程的控制

内核

  • CPU对OS保护模式支持

Intel公司的80386及更高级的CPU可以提供程序代码4层不同等级的权力,包括有Ring0-3。Ring0拥有最高的运行优先权,它访问所有系统内存和所有的CPU指令,而Ring1-3访问权限受到不同限制。Windows 98/NT为了与基于RISC的结构上兼容只使用两个特权级别:Ring0和Ring3

  • 核心态和用户态

为了防止用户应用程序访问或更改重要的操作系统数据,Windows98/NT、UNIX使用两种处理器访问模式:核心态和用户态。操作系统代码在核心态下运行,即在X86处理器Ring0运行,它有着最高的特权。而用户应用程序代码在用户态下运行,即在X86处理器Ring3中运行。

  • 原语

原语是一种特殊的广义指令,它的功能是由系统通过一段不可分割的指令操作来完成,它又称原子操作,原语在核心态下完成。进程控制操作(创建、撤消、阻塞……)大都为原语操作。

  • 内核功能

内核是计算机硬件上的第一层扩充软件,它是OS中关键部分,它是管理控制中心。内核在核心态下运行,常驻内存,内核通过执行各种原语操作来实现各种控制和管理功能。内核为OS其它模块提供最基本的支撑功能,对中断进行“必要和有限的“处理,时钟管理和原语操作。同时完成进程(处理器)、存储器和设备各种资源基本管理功能。

  • 内核和裸机构成虚拟机的属性

虚拟机没有中断,即进程无需响应中断。虚拟机为每个进程提供一台虚拟机。虚拟机为每个进程和用户提供功能强大的指令系统,它包括机器指令和原语。

进程状态的细化

挂起:暂停某个进程,以便排除系统故障或者减轻系统负荷,也可以暂停进程以便检查中间结果。挂起后的进程状态有两种:静止就绪态和静止阻塞态。挂起前的进程状态有两种:活动就绪态和活动阻塞态。

激活:将处静止就绪态或静止阻塞态转换为活动就绪态和活动阻塞态。

细化后的进程状态:
在这里插入图片描述

进程控制原语

创建进程的方式:

  1. 系统建立时创建
  2. 使用进程创建原语创建

创建原语:一个进程可借助创建原语来创建一个新进程,该新进程是它的子进程,创建一个进程主要是为新进程创建一个PCB。创建原语首先从系统的PCB表中索取一个空白的PCB表目,并获得其内部标识,然后将调用进程提供的参数:如外部名、正文段、数据段的首址、大小、所需资源、优先级等填入这张空白PCB表目中。并设置新进程状态为活动/静止就绪态,并把该PCB插入到就绪队列RQ中,就可进入系统并发执行。

进程创建的时机:

  1. 在分时系统中用户登录成功后,系统为该用户创建一个进程用于接受用户的命令。
  2. 在批处理系统中发生作业调度时为选中的作业创建进程。
  3. 当应用进程在执行过程中提出某种特殊服务,系统创建专用进程来提供这种服务。

撤消原语:

对于树型层次结构的进程系统撤消原语采用的策略是由父进程发出,撤消它的一个子进程及该子进程所有的子孙进程,被撤消进程的所有资源(主存、I/O资源、PCB表目)全部释放出来归还系统,并将它们从所有的队列中移去。如撤消的进程正在运行,则要调用进程调度程序将处理器分给其它进程

进程撤销的时机:

  1. 正常结束
  2. 异常结束:越界错,保护错,非法指令,特权指令错,除法错等
  3. 外界干预:程序员干预停止,父进程终止子进程或父进程终止时其子进程也必须终止

撤销原语的过程:

  1. 根据进程标识符找到被撤消进程的PCB
  2. 若进程状态是运行,则终止该程序的运行,并设置调度标志
  3. 若有子孙进程,则终止所有子孙进程
  4. 归还进程占有的全部资源给其父进程或系统
  5. 把PCB移出所在队列,释放PCB
  6. 若调度标志设置,则转进程调度

阻塞原语

当前进程因请求某事件而不能执行时(例如请求I/O而等待I/O完成时),该进程将调用阻塞原语阻塞自己,暂时放弃处理机。进程阻塞是进程自身的主动行为。阻塞过程首先立即停止原来程序的执行,把PCB中的现行状态由运行态改为活动阻塞态,并将PCB插入到等待某事件的阻塞队列中,最后调用进程调度程序进行处理机的重新分配。

阻塞的时机:

  1. 所需资源得不到满足时(进程互斥)
  2. I/O请求
  3. 等待数据(进程同步)
  4. 某些系统进程在无事可做时阻塞自己(输入/输出进程)

唤醒原语

当被阻塞的进程所期待的事件发生时(例如I/O完成时),则有关进程和过程(例如I/O设备处理程序或释放资源的进程等)调用唤醒(wakeup)原语,将阻塞的进程唤醒,将等待该事件的进程从阻塞队列移出,插入到就绪队列中,将该进程的PCB中现行状态,如是活动阻塞态改为活动就绪态,如是静止阻塞态改为静止就绪态。

唤醒的时机:

  1. 所需资源可以得到(进程互斥)
  2. I/O完成
  3. 数据准备好(进程同步)
  4. 某些系统进程在有事可做时(输入/输出进程)

挂起原语

调用挂起原语的进程只能挂起它自己或它的子孙,而不能挂起别的族系的进程。挂起原语的执行过程是:检查要挂起进程PCB的现行状态,若正处于活动就绪态,便将它改为静止就绪态;如是活动阻塞态则改为静止阻塞态。如是运行态,则将它改为静止就绪态,并调用进程调度程序重新分配处理机。为了方便用户或父进程考察该进程的运行情况,需把该进程的PCB复制到内存指定区域。

挂起的时机:

  1. 终端用户需要
  2. 父进程需要
  3. 内存紧张
  4. OS需要(检查统计、记帐等)
  5. 可能影响到实时任务的性能时

激活原语

用户进程或父进程通过调用激活原语将被挂起的进程激活。激活原语执行过程是:检查被挂起进程PCB中的现行状态,若处于静止就绪态,则将它改为活动就绪态,若处于静止阻塞态,则将它改为活动阻塞态

激活的时机:与挂起相反

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值