我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:港彩神鹰 > 读入原语 >

我的操作系统复习——进程(上)

归档日期:06-27       文本归类:读入原语      文章编辑:爱尚语录

  上一篇博文复习了操作系统总的概述我的操作系统复习操作系统概述,包括对操作系统的定义、发展历程以及操作系统结构。接下来我们就开始详细复习计算机知识,包括进程、处理器、存储器等等。本篇首先对进程这个及其重要的概念进行复习,这是进程系列的上篇。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

本文链接:http://chuyenchame.com/duruyuanyu/595.html