前言

由于单道程序设计系统资源(设备资源,内存资源,处理器资源)利用效率低的问题,所以引入多道程序。

  • 多道程序设计是操作系统所采用的最基本、最重要的技术

虽然,引入多道程序设计可以提高系统资源利用率,但是与此同时,依旧带来一些问题。

  • 处理器资源管理问题
    由于实际情况中,可运行程序的数量一般多于处理器的数量,这就需要解决可运行程序与处理器资源竞争的问题。
  • 内存资源管理问题
    为使多个程序在一个系统***存,需要按某种规则对内存空间进行划分,并将其分配给各个程序。由于一个程序在内存中的位置在加载进内存之前无法确定,而且程序运行时地址还会发生改变,因而,程序只能使用相对地址,不能使用绝对地址。操作系统负责存储空间的分配与管理,并在硬件的支持下将程序产生的逻辑地址映射到内存空间的物理地址(实现程序的重定位)
    此外还需防止内存中多道程序之间相互干扰或者对操作系统的干扰,即不允许一个程序侵犯另一个程序的地址空间或操作系统空间。所以,操作系统应当在硬件的支持下实现对存储空间的保护。
  • 设备资源管理问题
    操作系统应该确定适合的分配策略,使内存的多道程序在使用设备时不发生冲突,但是由于程序使用资源的不确定性以及程序推进速度的不确定性,理想情况很难达到。

进程

定义

  • 进程是具有一定独立功能的程序关于一个数据集合的一次运行活动

进程状态及状态转换

  • 进程状态

    • 运行态
      进程占有处理器资源,正在运行。单处理器系统中任一时刻只能有一个进程处于此种状态。
    • 就绪态
      进程本身具备运行条件,但是由于处理器的数量少于可运行进程的数量,暂未投入运行,即等待处理器资源
    • 等待态
      也称为挂起态、封锁态、睡眠态。进程本身不具备运行条件,即使分给其他处理器也不能运行。进程正在等待某一事件的发生,才能进入就绪态。
  • 状态转换

    • 进程基本状态转换图

    • 含有挂起状态的状态转换图


进程控制块
多道程序系统中运行的程序需要有一个断点现场保护区域,这个区域就在进程控制块
(Process Control Block ,PCB)中。

  • 定义
    进程控制块是标志进程存在的数据结构,其中包含系统对进程进行管理所需要的全部信息。

  • 作用

    • 系统感知进程的标识;

    • 反映进程的动态特征;

    • 与进程一一对应,常驻内存;

    • 进程控制块将构成并发执行控制和维护系统工作的依据。

  • 组成

    • (一)描述信息

      • ·进程名或进程标识号——识别进程

      • ·用户名或用户标识号——进程隶属的用户

      • ·家族关系——进程树

    • (二)控制信息

      • ·当前状态
      • ·优先级别
      • ·程序开始地址
      • ·计时信息
      • ·通信信息
    • (三)资源管理信息

      • ·占用内存大小及管理用数据结构指针

      • ·对换或覆盖信息

      • ·共享程序段大小及起始地址

      • ·I/O设备相关信息

      • ·指向文件系统的指针及有关标识

    • (四)CPU现场保护区

注:进程控制块存放在系统空间中,只有操作系统才能够对其进行存取,用户程序不能访问。

进程组成与上下文

  • 进程由两个部分组成,即进程控制块和程序,其中程序包括代码和数据等

  • 进程控制块属于系统空间,程序属于用户空间。

  • 进程的程序(代码和数据)被称为进程映象

  • 将进程的物理实体与支持进程运行的物理环境合称为进程上下文,进程切换就是上下文切换

    进程的队列

    为实现对进程的管理,系统需要按照某种策略将进程组织成若干队列。由于进程控制块是进程的代表,因而进程队列实际上是有进程控制块构成的队列。因为该队列通常是以链的形式实现的,所有也称为PCB链。该链既是可以单向也是可以双向的。

    • 虽然使用队列这一术语,但是PCB入队列和出队列不一定完全按照先进先出的次序,这与系统对进程的管理策略有关。
  • 就绪队列

    • 一般整个系统中有一个就绪队列。所有处于就绪态的进程按照某种组织方式排在这一队列中,进程入队列和出队列的次序与处理器调度算法有关。某些系统中,就绪队列可能有多个,用以对就绪进程进行分类,以方便某种调度策略的实施。
  • 等待队列

    • 每个等待事件有一个等待队列。当进程等待某一事件发生时,进入与该事件相关的
      等待队列中;当某事件发生时,与该事件有关的一个或多个进程离开相应的等待队列,进入就绪队列。
  • 运行队列

    • 在单处理器系统上只有一个运行队列,在多处理器系统中一个CPU对应一个运行队列,
      每个运行队列只有一个进程。指向运行队列头部的指针被称为运行指示字。

线程

  • 定义
    线程又称轻进程,是进程内一个相对的独立的执行流。
    一个进程可以包含读个线程,这些线程执行同一程序中相同代码段或不同代码段,共享数据区和堆。一般认为,进程是资源的分配单位,线程是CPU的调度单位。

  • 线程的优点

    • 上下文切换速度快
    • 系统开销小
    • 通信容易
  • 线程控制块

    • 定义

      线程控制块(Thread Control Block , TCB)是标志线程存在的数据结构,其中包含系统对线程进程管理的全部信息。

       线程标识
       线程状态
       调度参数
       现场(通用寄存器,指令计数器,用户栈指针)
       连接指针 
      

      线程控制块可能属于操作系统空间,也可能属于用户进程空间(由运行系统管理和使用),这取决于线程 的实现方式。

  • 线程的实现
    线程有两种实现方式:在目态实现的用户级别线程,在管态实现的核心级别线程。

    • 用户级别线程

      • 用户级别线程的优点
        线程不依赖于操作系统,可以采用与问题相关的调度策略,灵活性好;
        同一进程中的线程切换不需要进入操作系统,因而实现效率高。

      • 用户级别线程的缺点
        同一进程中多个线程不能实现真正的并行,即使处于多处理器的环境下;
        由于线程对操作系统不可见,调度在进程级别,某进程中的一个线程通过系统调用进入操作系统受阻,该进程的其他线程不能运行。

    • 核心级别线程

      核心级别线程通过系统调用由操作系统创建,线程的控制结构----线程控制块保存于操作系统空 间,线程状态转换由操作系统完成,线程是CPU调度的基本单位。
      另外由于系统调度以线程为单位,操作系统还需要为每个线程保持一个核心栈。

    • 优点:
      并发好,在多处理器环境中同一进程中的多个线程可以真正的并行执行。

    • 缺点:

      线程的控制和状态转换需要进入操作系统完成,系统开销大。