【考研操作系统】进程管理

进程管理

进程与线程

进程的引入

  • 进程是资源分配的基本单位,也是独立运行的基本单位
  • 程序顺序执行的特征:顺序性,封闭性,可再现性
  • 程序并发执行的特征:间断性,失去封闭性,不可再现性
  • 程序并发执行的条件

进程的定义及描述

  • 进程的定义
  • 进程的特征:动态性、并发性、独立性、异步性、结构特征。
  • 进程与程序的关系
  • 进程和作业的区别
    • 作业是用户向计算机提交任务的任务实体,进程是完成用户任务的执行实体,是向系统申请分配资源的基本单位。
    • 一个作业可以由多个进程组成,而且至少由一个进程组成,一个进程不能构成多个作业。
    • 作业的概念主要用在批处理系统。UNIX这样的分时系统没有作业的概念。
  • 进程的组成
    • 程序段
    • 数据段
    • 进程控制块(PCB)
      • 进程标识符(PID)
      • 进程当前状态
      • 进程队列指针:记录PCB队列中下一个PCB的地址
      • 进程优先级
      • CPU现场保护区:CPU现场信息(比如指令计数器、状态寄存器、通用寄存器等)
      • 通信信息:进程执行过程中与别的进程发生的信息交换情况
      • 家族联系:进程家族树
      • 占有资源清单
    • PCB是进程存在的唯一标识
      • PCB为了保证程序的并发执行
      • 系统总是通过PCB对进程进行控制的

进程的状态与转换

  • 进程的五种状态
    • 就绪状态:进程获得了除处理器以外的所有资源。
    • 运行状态:
    • 阻塞状态:正在执行的进程由于发生某事件而暂时无法执行下去的状态。当进程处于阻塞状态的时候,即使把处理器分配给此进程,它也无法运行。
    • 创建状态:进程正在被创建,尚未转到就绪状态。
    • 结束状态
  • 进程状态的相互转换
    • 就绪状态 -> 执行状态
    • 运行状态 -> 阻塞状态
    • 运行状态 -> 就绪状态:时间片用完或在抢占式调度中有更高优先级的进程变为就绪状态
    • 阻塞状态 -> 就绪状态:进程因为等待的某个条件发生而被唤醒。
    • 只有从执行状态到阻塞状态是程序的自我行为,其他都是被动的。

进程的控制

  • 创建进程
    • 创建原语:进程创建是通过创建原语实现的
      • 用户登录
      • 作业调度
      • 请求服务
  • 进程的撤销:两种策略:一种是只撤销一个具有指定标识符的进程;另一种是撤销指定进程及其所有子孙进程。导致进程撤销的时间有进程正常结束、进程异常结束、外界干预等。
    • 注意进程撤销的最后要回收PCB。
  • 进程的阻塞与唤醒
    • 进程自身调用原语阻塞自己的,是主动行为
    • 发现者进程调用唤醒原语对于阻塞进程是一种被动行为。
    • 发现者进程与被唤醒进程是合作的并发进程。
  • 进程切换
    • 调度室决定资源分配给哪个进程,进程切换时实际分配系统资源。
    • 进程切换一定会产生中断,进行处理器模式切换,即从用户态进入内核态、之后回到用户态
    • 处理器模式切换不一定产生进程切换,如系统调用。

线程

  • 线程的概念
    • 线程的引入:为了减少程序并发执行时所付出的时空开销。
    • 线程的定义:线程是进程内的一个相对独立的、可调度的单元。自己不拥有资源,只拥有一点在运行时必不可少的资源(如程序计数器、一组寄存器和栈)
    • 线程的实现:最自然的方法是由操作系统内核提供线程的控制机制。在只有进程概念的操作系统中,可以由用户程序利用函数库提供线程的控制机制。
      • 内核级线程:内核维护进程和线程的上下文信息并完成线程切换工作。一个内核级线程由于I/O操作而阻塞时,不会影响其他线程的运行。此时处理器时间片分配的对象是线程,所以有多个线程的进程会获得更多时间。
      • 用户级线程:线程维护由应用进程完成,不需要操作系统内核了解用户级线程的存在。由于操作系统内核不了解用户线程的存在,当一个线程阻塞的时候,整个进程都必须等待。
  • 线程与进程的比较
    • 线程是独立调度的基本单位,同一进程中,线程的切换不会引起进程切换。
    • 线程不拥有系统资源,但可以访问其隶属进程的系统资源。
    • 同一进程内多个线程可并发
    • 线程切换时,只需保存和设置少量寄存器内容,开销很小。由于同一进程多个线程共享进程地址空间,多线程之间的同步与通信很容易实现且不需要操作系统干预。
  • 多线程模型
    • 多对一模型:将多个用户级线程映射到内核级线程上。一个用户级线程阻塞,会导致整个进程阻塞。由于系统只能识别一个线程(内核级线程),因此即使有多处理器,此进程的若干用户级线程也不能并行执行。
    • 一对一模型:创建一个用户及级线程相当于创建一个内核级线程。
    • 多对多模型

进程通信

  • 共享存储器系统
  • 消息传递系统:用户直接利用系统提供的一组通信命令(原语)来实现通信
  • 管道通信系统

处理机调度

处理器的三级调度

  • 高级调度(作业调度):按照一定原则从外存上处于后备状态的作业中选择一个或者多个给他们分配内存、输入输出设备等必要资源,并建立相应进程,使该作业具有获得竞争处理器的权利。运行频率较低,一般几分钟一次。常用于批处理系统
  • 中级调度(交换调度):按照给定的原则和策略,将处于外存对换区的具备运行条件的进程调入内存,将其状态修改成就绪状态;或者将处于内存中的暂时不能运行的进程交换到外存的对换区,将此时的进程称为挂起状态。为了提高内存利用率和系统吞吐量。
  • 低级调度(微观调度):按照某种策略或方法,从就绪队列选择一个进程,将处理器分配给它。运行频率很高,几十毫秒要运行一次。
  • 作业调度和低级调度的区别:作业调度的结果是为作业创建进程,进程调用的结果是进程被执行。

调度的基本原则

  • CPU利用率
  • 系统吞吐量(单位时间CPU完成作业的数量)
  • 响应时间
  • 周转时间:作业从提交至完成的时间间隔,包括等待和执行时间。带权周转时间:作业周转时间与运行时间的比

进程调度

  • 进程调度的功能
    • 记录系统中所有进程的有关情况以及状态特征
    • 选择获得处理器的进程
    • 处理器分配
  • 引起进程调度的原因
    • 当前运行进程运行结束
    • 当前进程因某种原因,比如I/O请求、P操作、阻塞原语等从运行状态进入阻塞状态
    • 执行完系统调用等系统程序后返回用户进程
    • 采用抢调度方式的系统中,一个更高优先级的进程要求使用处理器。
    • 分时系统中,分配给该进程的时间片已经用完
  • 不能进行进程调度的情况
    • 处理中断的过程中
    • 在操作系统内核程序临界区中
    • 其他需要完全拼比中断的原子操作过程中。如加锁、解锁、中断现场保护、恢复等原子操作。
  • 进程调度的方式
    • 抢占方式
    • 非抢占方式

常见调度算法

  • 先来先服务调度算法(FCFS):按照进程进入就绪队列的先后次序来分配处理器。利于长进程不利于短进程。不能作为分时系统和实时系统的主要调度策略。

  • 短作业优先调度算法(SJF):把处理器分配给最快完成的作业。平均周转时间最短,对长作业不利。

  • 优先级调度算法:核心问题是如何确定进程优先级。

    • 静态优先级是创建进程时候确定的,确定之后整个进程运行期间不再改变。确定依据有:
      • 按进程类确定:系统进程优先级高于用户进程。批处理和分时结合的系统中,为了保证分时用户的响应时间,前台作业的进程优先级高于后台作业的进程
      • 按作业的资源要求确定:进程所申请的资源越多,估计的运行时间越长,进程优先级越低。
      • 按用户类型和要求确定:用户的收费标准越高,该用户作业对应进程的优先级越高,例如租用服务器。
    • 动态优先级是创建进程时,根据进程的特点及相关情况确定一个优先级,在进程运行过程中再根据情况的变化调整优先级。确定动态优先级的依据以下几种:
      • 根据进程占用CPU的时间的长短
      • 根据就绪进程等待CPU时间的长短
    • 非抢占优先级调度算法与抢占优先级调度算法
    • 优先级相同情况下,通常按照先来先服务或者短作业优先的顺序执行。
  • 时间片轮转调度算法:分时系统。时间片大小对系统性能的影响很大,由以下因素决定

    • 系统的响应时间:T = N * q,T是系统响应时间,q为时间片大小,N为就绪队列中的进程数。根据这个,若系统中的进程数一定,时间片的大小与系统响应时间成正比。
    • 就绪队列的进程数目:响应时间固定的情况下,进程数与时间片大小成反比。
    • 系统的处理能力
  • 高响应比优先调度算法:每次作业调度时,先计算就绪队列中的每个作业的响应比,将响应比最高的作业投入运行。响应比 = 作业响应时间 / 估计运行时间。有利于短作业,考虑了长作业,但因为计算每个后背作业的响应比,因此增加了系统开销。

  • 多级反馈队列调度算法:时间片轮转调度算法和优先级调度算法的综合与发展。

    • 设置多个就绪队列,为每个队列赋予不同的优先级。优先级逐渐降低。
    • 进程所在队列的优先级越高,其相应的时间片越短。第(i+1)队列的时间片是第i队列时间片的两倍。
    • 新进程进入系统,将其放在第一个队列的末尾,按先来先服务的原则排队等待调度。如果其一个时间段内没有完成,调度程序将其转到第二个队列的末尾。如此下去,最后一个队列使用时间片轮转算法。
    • 仅当第一个队列空闲时,调用程序才调度第二个队列中的进程运行。当处理器正在为第i个队列中的某进程服务时,若又有新进程进入优先级高的队列中,则新进程抢占正在运行进程的处理器,即由调度程序把正在执行的进程放回第i个队列末尾,重新将处理器分配给新的进程。

猜你喜欢

转载自blog.csdn.net/magic_jiayu/article/details/83446142