进程的描述和控制

进程的描述

  1. 进程的定义:在多道程序环境下,程序的执行属于并发执行,为了使程序能并发执行,并且可以对并发执行的程序加以描述和控制,才引入了“进程”这个概念。进程是作为资源分配的基本单位
  2. PCB:为了使参与并发执行的每个程序都能独立运行,OS定义个一个专门的数据结构,称为进程控制(PCB),用PCB来描述进程的基本情况和活动过程,进而管理进程。这样,由程序段,相应的数据段和PCB三部分构成了进程。一般来说创建进程就是创建PCB,撤销进程就是撤销PCB。
进程的特征
  1. 动态性。进程由创建而产生,由调度而执行,由撤销而消亡
  2. 并发性。指多个进程同时在内存中,且能在同一时间段执行,而程序(没有建立PCB块)不能参与并发执行
  3. 独立性,指进程是一个能独立运行、独立获得资源和独立接收调度的基本单位,凡是未建立PCB块的程序都不能作为一个独立的单位参与运行
  4. 异步性,是指进程是按异步方式运行的,即按各自独立的、不可预知的速度向前推进
进程的三种基本状态

​ 多个进程在并发执行是共享系统资源,导致他们在运行过程中呈现间断性的运行规律,所以在生命周期内可能有多种状态

  1. 就绪状态。进程已经准备好运行,进程已经分配到除CPU以外的所有资源,只要再获得CPU许可,便可立即执行。如果系统中有许多就绪状态的进程,通常将它们按一定的策略排成一个队列,称为就绪队列
  2. 执行状态。进程已获得CPU,程序正在执行。
  3. 阻塞状态。正在执行的进程由于发生某些事件(IO请求,申请缓冲区失败)暂时无法继续执行的状态。一般也将处于阻塞状态的进程排成一个队列,叫做阻塞队列
  4. 基本状态的转换uOeU9e.png
进程的挂起操作

为了分析进程,引入了挂起操作。当该操作用于某个进程该进程将被挂起,即进程处于静止状态。如果进程正在执行,它将暂停执行,如果处于就绪,此时进程不接受调度。与挂起对应的是激活操作。

挂起的原因:

  1. 终端用户的需要。用于在自己的程序永兴期间发现问题,希望暂停程序的执行
  2. 父进程请求。有时父进程希望挂起自己某个子进程,协调子进程之间的活动
进程控制块PCB的作用

​ PCB作为进程的一部分,记录了操作系统所需的,用于描述进程的当前情况以及管理进程运行的全部信息。

  1. 作为独立运行基本单位的标志。
  2. 实现间断性的运行方式。

当进程引阻塞而暂停时,它必须保留自己运行时的CPU现场信息,再次被调度运行时,还需恢复现场信息。有了PCB之后,就可以将CPU现场信息保存在被中断进程的PCB中。

  1. 提供进程管理所需要的信息。

当调度彻骨调度到某进程运行时,只能根据进程PCB中记录的程序在内存或者外存中的指针去找相应的程序

  1. 提供进程调度所需要的信息。

只有处于就绪状态的进程才能被调度执行,而在PCB中就提供了进程处于何种状态的信息。

进程控制

​ 主要包括创建新进程、终止已完成的进程、将发生异常的进程置于阻塞状态,负责进程的转换等功能

操作系统内核

​ 操作系统一般被划分为多个层次,将不同的功能分别设置在不同的层次中,通常将一些常用的程序及运行频率较高的模块(始终管理,进程调度)常驻内存,也被称为OS内核,一方面对这些软件进行保护,也可以提高OS运行效率。

​ 同样为了防止OS以及一些关键数据(如PCB)遭受到破坏,通常也将OS的执行状态分为系统态和用户态两种。

  1. 系统态:也叫内核态,有较高的特权,能执行一切指令,访问所有的寄存器和存储区
  2. 用户态,也叫目态,具有较低的执行权限,仅能执行规定的指令
进程的创建
  1. 进程的层次结构

在OS中,允许一个进程创建另一个进程,吧创建进程的进程叫做父进程,另外一个叫做子进程,子进程可以创建孙进程。

在UNIX中,进程与子孙进程组成了一个进程家族树。子进程可以继承父进程所有的资源。

uOedcd.png

在windows中,进程不存在层次结构,所有进程具有相同的地位,通过句柄来控制其他进程。

  1. 引起创建进程的事件

    1. 用户登录。用户在终端登录成功之后,系统将为该用户建立一个进程,并将其插入就绪队列中
    2. 作业调度。当作业调度程序按照一定的算法调度到某些作业时,便将他们装入内存,为他们创建进程,并把插入到就绪队列
    3. 提供服务。当运行中的程序提出某种请求时,系统将专门创建一个进程来提供用户所需的服务,比如打印机
  2. 进程的创建过程

    1. 申请空白PCB(进程控制块),为新进程申请唯一的数字标识符,并从PCB集合中索取一个空白PCB
    2. 为进程分配其运行所需的资源,包括物理和逻辑资源
    3. 初始化PCB
    4. 如果进程就绪队列能接纳新进程,便将新进程插入就绪队列

进程同步

​ 对多个相关进程在执行次序上进行协调,使并发执行的进程之间能按照一定的规则共享系统资源

临界资源:吧这种一段时间内只允许一个进程访问的资源叫做临界资源。如打印机,磁带机。进程之间应采用互斥方式实现对这个种资源的共享

临界区:不论是硬件临界资源还是软件临界资源,多个进程必须互斥的对他进行访问。吧在每个进程中访问临界资源的那段代码称为临界区

信号量机制:是一种进程同步工具

  1. 整型信号量。

定义了一个用于表示资源数目的整型量S,S只能通过两个原子操作wait(S)和signal(S)来访问,也叫P、V操作。原子操作在执行中是不可中断的,也就是输当一个进程在修改某信号量时,其他进程不可以对该信号量进行修改

  1. 记录性信号量。

除了有一个用于代表资源数目的整型变量S外,还增加了一个进程链表指针list,用于链接所有的等待进程

  1. AND型信号量

前两种信号量针对的是多个并发进程仅共享一个临界资源的情况,有一些场景是进程需要获得两个或者多个资源后才能执行任务

AND型信号量基本思想是将进程在整个运行过程中需要的所有资源一次性全部分配给进程,待进程使用完毕后一起释放。只要有一个资源未能分配给进程,其他所有可能为之分配的资源也不分配给他。

进程通信

​ 进程通信:进程间传输信息。

  1. 管道

管道是通过调用 pipe 函数创建的,fd[0] 用于读,fd[1] 用于写。

#include <unistd.h>
int pipe(int fd[2]);

它具有以下限制:

    • 只支持半双工通信(单向交替传输);
    • 只能在父子进程或者兄弟进程中使用。uOeDBt.png
    1. FIFO

    也称为命名管道,去除了管道只能在父子进程中使用的限制。

    1. 消息队列

    相比于 FIFO,消息队列具有以下优点:

    • 消息队列可以独立于读写进程存在,从而避免了 FIFO 中同步管道的打开和关闭时可能产生的困难;
    • 避免了 FIFO 的同步阻塞问题,不需要进程自己提供同步方法;
    • 读进程可以根据消息类型有选择地接收消息,而不像 FIFO 那样只能默认地接收。
    1. 信号量

    它是一个计数器,用于为多个进程提供对共享数据对象的访问。

    1. 共享存储

    允许多个进程共享一个给定的存储区。因为数据不需要在进程之间复制,所以这是最快的一种 IPC。

    需要使用信号量用来同步对共享存储的访问。

    多个进程可以将同一个文件映射到它们的地址空间从而实现共享内存。另外 XSI 共享内存不是使用文件,而是使用内存的匿名段。

    1. 套接字

    与其它通信机制不同的是,它可用于不同机器间的进程通信。

    线程

    ​ 调度和分派的基本单位

    ​ 在OS中引入进程的目的是为了使多个程序能并发执行,提高系统资源利用率,而引入线程则是为了减少程序在并发执行时所付出的时空开销(进程在创建、撤销、切换时花费的时空开销),使OS具有更好的并发性

    ​ 线程的状态和线程控制块(TCB)

    1. 线程的状态

      • 执行。线程正在执行
      • 就绪。线程已具备执行条件,只需获得CPU便可立即执行
      • 阻塞。在执行过程中因某些时间受阻而处于暂停状态。
    2. TCB

    每个线程都有一个线程控制块TCB,将管理线程的信息记录在其中。主要包含以下信息:

    • 线程标识符
    • 一组寄存器。包含程序计数器PC、状态寄存器、通用寄存器
    • 线程运行状态,描述线程处于何种状态
    • 线程专有存储区,用于存放线程切换时的一些信息
    • 优先级,描述线程执行的优先级
    Last modification:October 20th, 2019 at 12:02 pm
    如果觉得我的文章对你有用,请随意赞赏