从今天开始我们复习一下操作系统面试相关的内容,也就是对大二下学期的重点知识进行以下回顾.
面试常问的就是进程和线程这一系列的知识.我们通过这篇文章来回顾以下.
进程的定义
我们首先看一下进程的定义
程序并发执行的三个特征
失去了封闭性(资源的共享),间断性,结果的不可再现性,通常的程序是不能够参与并发执行的.因此,我们就引入了进程的概念
引入线程的目的那,就是为了程序能够独立的运行,这样就能做到并发执行,然后我们来思考一下,它是如何存在内存中的那,我们需要为它分配一个特定的数据结构,所以我们引入了进程控制块(PCB).通过这种数据结构,描述了进程的基本状况和活动的过程,进而控制和管理进程.
有了PCB,在算上要用到的程序段和数据段就构成了一个进程的实体(进程映像).
重点:我们把进程实体就称作是进程,创建一个进程就是创建进程实体中的PCB,因为程序也是有数据段和代码段的,PCB相当于是区分程序和进程的重要依据.以此类推,撤销进程呢,就是撤销进程的PCB.
了解了上面的,我们来对进程做一个定义吧:
进程是具有独立功能的程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位
进程是进程实体的运行过程,是系统进行资源分配和管理的基本单位
进程的特征
我们通过PCB区分进程和程序,进程呢也有程序不具备的特征,大概下面几个方面
- 动态性 记住一句话,进程是进程实体的执行过程,除此之外,它由创建而产生,由调度而执行,由撤销而消亡
- 并发性 这个很好理解
- 独立性 独立的运行,独立的获得资源,独立的接收调度
- 异步性,进程是按照异步进行执行的,各自独立,速度是不可预知的.也就有了程序并发执行的结果不可再现性,但是进程有它相应的同步机制,仍可以保证运行的结果的可再现性
进程的状态以及转换
我们先来看一下进程的三个基本状态:就绪状态(Ready),执行(Running),阻塞(block)状态,然后还有其他的状态,我们一会在来看.
我们先分析一下这三种基本的状态
- 就绪状态
通俗的一点来讲,就绪状态就是只已经获得了所有执行需要的资源,只差分配到CPU的资源,也就是进程以及做好了运行的准备,这时候只要获得了CPU就可以运行了.如果系统中有多个处于就绪状态的进程,我们通常把它按照一定的策略排成一个队列,然后称这个队列为就绪队列. - 执行状态
如果获得了CPU的调度权,就进入了执行状态.如果是单处理机,那么只有一个进程处在执行状态,如果有多个处理机,就会有多个进程处在执行状态 - 阻塞状态
当前正在运行的进程由于发生了某些事件(IO请求,申请缓冲区失败),而无法继续执行,进程的执行受到了阻塞.此时引起了进程的调度,将CPU分配给另一个就绪进程,让受阻的进程处于暂停的状态,一般把这种阻塞状态,成为等待状态或者是封锁状态.就上就绪状态中的,它会把多个阻塞进程排成一个队列.实际上,在较大的系统中,为了减少队列操作的开销,提高系统效率,会根据不同的阻塞原因,设置多个阻塞队列
三个进程的基本状态说完了,我们在来看看三种基本状态的转换,其实根据上面的描述,我们已经大概知道了,什么时候进入就绪,什么时候进入阻塞,还有什么时候执行,我先来画一张图片:

注意:就绪状态只会和执行状态进行相互转换,就绪状态是不会变成阻塞状态的,阻塞状态也不会直接变成执行状态的
当一个执行状态的进程变成了阻塞状态,它只有可能在i/o完成之后变成就绪状态,不会变成其他的状态的
我们了解完了进程最基本的三种状态,我们进一步了解一下,进程还有什么其他的状态
创建状态和终止状态
- 创建状态是一个比较复杂的状态,它发生在就绪状态之前,就像前面所说的,进程是由创建而产生.首先要先申请一个空白的PCB,并向PCB中填写用于控制和管理进程的信息,然后为进程分配运行时所必要的资源,最后再把进程转化为就绪状态然后插入到就绪队列之中.如果进程所需的资源不能得到满足,进行就不能够被调度运行,此时的线程被称为创建状态,在其获得了所需要的资源以及对PCB的初始化之后,就可以由创建状态转化为就绪状态
-
终止状态 等待操作系统进行善后处理,最后将其PCB清零,并将PCB空间返还系统.
到达了自然结束点,出现了无法克服的错误,被操作系统终结,或者被其他有终止权的进程终结,它将进入终止状态.进入终止状态的进程以后就不能再执行了,但是操作系统中仍保持了这样的一个记录.当这些记录被其他的线程提取之后,操作系统就会删除这些进程,PCB清理,占用的空间返回给系统.
图片.png
核心思想并没有发生变化,只是在边边角角进行了修改
挂起操作
系统和用户观察和分析进程的需要,还引入对进程的重要操作-----挂起操作.当这个操作被执行作用于某个进程时,这个进程就会被挂起,然后进入静止状态.如果当前的线程在执行,那就停止执行.如果他处于就绪状态,此进程就不接受调度.与挂起操作对应的是激活操作.
挂起操作的引入
我们为什么要引入挂起操作呢?是基于系统和用户的需要
- 终端用户的需要,如果终端用户发现自己的程序在运行期间有可疑的问题,希望暂停自己程序的运行
- 父进程的请求.对子进程进行考察和修改,然后协调各个子进程的活动
- 负荷调节的需要.
- 系统操作的需要.操作系统有时希望挂起某些进程,对资源的使用情况进行记录
挂起操作的转换
活动就绪------>静止就绪.当进程处于未被挂起的就绪状态,这时候称为活动就绪状态,此时进程可以接收调度.当被挂起之后,该进程就转变为就绪状态,这个时候的进程就不再调度执行
活动阻塞----->静止阻塞.当进程处于未被挂起的阻塞状态之后,称作它是处于活动阻塞状态,如果这个时候被挂起之后,进程就变成了静止阻塞状态,当处于静止阻塞状态的时候,这个时候期待的事情发生之后,就会进入静止就绪状态
静止就绪----->活动就绪.当执行激活原语时,就由静止就绪变成了活动就绪.
静止阻塞----->活动阻塞.激活原语之后,变成了活动阻塞.

注意:当执行的时候执行挂起操作,没有与之对应的活动执行状态,而是直接进入静止就绪
网友评论