• 操作系统 进程(上)


    一、什么是并发

      并发是什么?很简单,前面介绍的多道批处理系统就是典型的并发执行。这里再次过一遍高性能的多道批处理系统,其本质在于保持对系统资源的占用,CPU运行一个任务,若这个任务中断,如需要IO请求之类的,那么CPU直接去运行其他任务,原任务的IO请求由IO设备自己处理。有一个著名的图——表示并发:

      

      如图,假设计算机有输入、计算、输出这三个部件,一组任务顺序执行,并发就是如图流水线一样的各部件配合。某一时刻,只有一个程序在占用CPU(计算设备)。那么什么是并行呢?并行是建立在多核的基础上的,即多个CPU同时运行,那么有几个CPU,同一时刻就有几个程序同时运行。所以电脑只有一个CPU的苦逼程序员只能并发了。

      现代系统的实际并发比上图要复杂的多,现代计算机系统的并发是以时间片为基础的,即在很短的时间内,每个进程都分别运行一次。这样,宏观上,每个进程都在不断的运行,而实际上每个进程的运行都是间断运行的。那么问题来了,什么是进程呢?

     


    二、什么是进程 

      进程的目的就是为了对并发执行的程序进行控制。进程实体由程序段、数据段、PCB三部分构成。我们知道计算机运行的本质就是对数据的处理的机器。

      ——数据段就是各种数据

      ——程序段就是一系列操作计算机的指令,即操作数据的方法策略

      ——PCB 即进程控制块(Process Control Block),控制运行程序段的时机。

      书本上是这样定义进程的:“进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位”。

      让我们理清楚思绪,进程是什么?进程就是进程实体的运行过程,是一个过程。就是说,进程实体不运行,那就不叫进程。一个没有被调用的进程实体,不叫进程。所以说,进程有动态的特征。上面提到,进程的目的就是为了对并发执行的程序进行控制。为了在一个时间片内,运行多个程序才引进进程。所以说,进程有并发的特征。进程实体是一个拥有独立的资源(程序段和数据段)、(因为PCB)能独立地接受调度并独立的运行的基本单位。所以说,进程有独立的特征。进程运行的过程中,由于涉及到的资源众多、运行环境不一定,也受到其他进程的影响,所以,进程的运行情况是不可具体预知的。所以书本定义,进程按各自独立的、不可预知的速度向前推进。所以说,进程有异步的特征。如上文所说,进程是进程实体这一数据结构被调用运行。所以说,进程有结构的特征。

      可以这么说,真正理解了进程的这五个特征,才算理解了进程这个概念。高手跟我们这些菜鸟的最大区别,不就在于对系统的理解吗?   


    三、进程的状态

      进程有3种基本状态:

    (1)就绪(Ready)状态

      此时的进程拥有完整的进程实体,只要获得CPU,即只要被调用就能马上执行,这种状态被称为就绪状态。处于这种状态的进程都会被放进就绪队列,以便随时接受CPU调用。

    (2)执行状态

      此时的进程已经获得CPU,正在执行。

    (3)阻塞状态

      执行中的进程,因为某种原因(IO请求)无法继续执行的一种暂停状态,暂停完毕就会变成就绪状态。

      除了以上的3种基本状态,有的系统额外还增加了一种状态。

    (4)挂起状态

      为什么需要挂起状态?因为有时候希望某些正在执行的线程暂停下来,持续一段时间后,让它回到之前的状态。

      挂起状态是一种静止的状态,相当于把某个进程从执行的流水线上拿出来,等到需要的时候再把它放进去继续执行。我们来看前三种基本状态,就绪 ->执行 -> 阻塞,阻塞完毕又回到就绪。由于线程的异步性,阻塞是会在不确定的有限时间内结束的。就是说,三种基本状态是动态的,通常不存在一个线程一直处于某种状态。挂起状态相对于它们来说,是静止的,因为它是被控制的,是对以不可预知的速度前进的线程的一种干扰。

      此外,为了管理的需要,通常还有两种比较常见的状态。

    (5)创建状态

      我们知道进程实体包括程序段、数据段和PCB。创建状态指的是PCB已经被创建,因为某些原因(程序段或数据段未放入内存等),进程还未被放入就绪队列的这种状态。

    (6)终止状态

      线程的终止也是有个过程的。终止状态指的是线程除了PCB以外的系统资源都被回收后的状态。此时线程真正终止。


    四、进程的核心PCB

    (1)PCB是什麽?

      作为进程实体的一部分,PCB是用来控制进程运行的一种数据结构。它包含了进程的状态、优先级、运行的状态、处理机状态、程序数据的内存地址等各种信息,一旦被操作系统调用,操作系统就从PCB中获取的信息,来恢复进程阻塞前的现场,继续执行。PCB一般都保存在CPU的寄存器中。

    (2)PCB包含的信息

      1)进程标识符。用来标识唯一的一个进程。包括方便系统调用的内部标识符和方便用户调用的外部标识符。进程标识符通常还包括父、子进程,以及所属用户等信息。

      2)处理机状态信息

        处理机状态信息指的是处理机调用线程时的环境信息。处理机处理调用进程时,运行过程中的许多信息都放在处理机的寄存器中。进程阻塞或挂起时,寄存器中的运行信息会保存到PCB中,以便进程下次被调用时恢复之前的运行现场。

      3)进程调度信息

        进程调度信息指的是本进程调度所需的必要信息。包括,本进程的状态(6种之一)、进程优先级、进程等待时间、进程执行时间(可能决定优先级)、阻塞原因、父子进程关系等。

      4)进程控制信息

        进程控制信息指的是进程的资源信息和进程切换时的所需信息,包括进程的程序和数据的内存地址、进程同步和通信的机制、进程资源的清单、指向下一个进程PCB的指针(若PCB的组织方式是链接方式)等。

    (3)PCB的具体信息(结构)

       这里我们来看一下Unix中,PCB的具体结构,以便对PCB有一个清晰的认识。这玩意其实就这么一回事:

    (下面代码摘自http://blog.sina.com.cn/s/blog_65403f9b0100gs3a.html)

     View Code

     (4)PCB的组织形式

      系统中拥有众多PCB,对应着众多进程,那么这些PCB怎么组织的呢?一般有两种组织方式:链接方式和索引方式。这两种方式的共同点在于,正在执行的PCB,都有一个执行指针指向它。不同在于,链接方式的就绪队列、阻塞队列等,通过指针链接的方式组织。进程切换时,直接取就绪队列指针即可,因为它指向的就是当前优先级最高的就绪的PCB,随后就绪队列指针指向其指向的下一个PCB。索引方式的就绪队列、阻塞队列等,通过一个表的形式来组织,就绪队列指针指向这个表的第一条数据。这个表本质是一个指针数组,第一个指针指向的当然是优先级最高的就绪进程。


    五、进程控制

      进程控制是什麽?本质就是切换进程状态的控制。 一般由操作系统中的原语实现。原语即具有“原子操作”这种属性的若干指令集合,说白了,就是这些指令集合,要么全部执行,要么全部不执行。不同操作系统的原语也是有区别的。

     (1)、进程创建

      进程可能是由系统内核收到请求而创建,也可能由进程本身创建,由进程本身创建的进程一般是子进程,它继承父进程拥有的全部资源。创建进程由进程创建原语实现,通常由下面几个步骤:

     

     (2)、进程终止

       进程的终止是由操作系统执行的。当一个进程因各种原因结束时,会通知操作系统。操作系统会调用进程终止原语来终止对应进程:

     

     (3)进程阻塞

      进程的阻塞是由进程自身主动执行的。但进程发现自身无法继续执行时,就主动调用进程阻塞原语,把自己阻塞:

     

     (4)进程唤醒

      进程的唤醒通常由其他线程执行。但其他线程由于某些事件希望执行线程执行时,会调用进程唤醒原语将指定进程唤醒:

      

       值得注意的是,进程唤醒和进程阻塞是一对作用刚好相反的原语。阻塞的进程必须由进程唤醒操作才能继续执行。

    (5)进程挂起和激活

      进程挂起由自身或其他进程执行。进程激活由其他进程执行。过程很简单,就不画图了:

      1)进程挂起:若进程为活动就绪,就将其改为静止就绪;若进程为活动阻塞,就将其改为静止阻塞;若进程正在执行,则让调度程序重新调度。

      (PS:由于没有挂起队列,所以需要把进程的PCB复制到指定的内存区域)

      2)进程激活:若进程为静止就绪,就将其改为活动就绪;若进程为静止阻塞,就将其改为活动阻塞;

  • 相关阅读:
    阿里云HBase携X-Pack再进化,重新赋能轻量级大数据平台
    CVE漏洞—PHPCMS2008 /type.php代码注入高危漏洞预警
    傻瓜神经网络入门指南
    一起来看 rxjs
    阿里云ACE共创空间——MQ消息队列产品测试
    阿里毕玄:技术人应如何选择职业发展路线?
    MyBatsi学习
    UEditor学习
    fastJson在java后台转换json格式数据探究(二)--处理数组/List/Map
    JS获取当前年份月
  • 原文地址:https://www.cnblogs.com/jiangzhaowei/p/7230628.html
Copyright © 2020-2023  润新知