面向面经学习之操作系统 第一章 进程

一、进程的状态

1、基础三态:

        阻塞态、就绪态、运行态。

        进程在一开始创建出来后,等所需要的基础资源分配完成后,会进入活跃的状态,我们管这个状态叫 actived 。在 actived 状态下,进程会在多个状态之间进行转换。 三态模型是原理层面最基础的三个状态。

        运行态/running:进程所需全部满足,且正在占用 cpu 运行中。

        就绪态/ready:进程所需全部满足,但没有占用 cpu 。(一般操作系统会有一个指针,指针指向的 runnable 进程,为 running,其余的 runnable 的进程,就是就绪态)

        阻塞态/blocked:进程正在等待一些需求(资源、设备输入、人为干预等),所以进程 blocked。

2、三态转换:

       

        1:正在运行的进程发现自己需要的资源无法满足,或者信号没有到达,等,则主动阻塞自己。

        2:CPU 时间片用光,或者被更高优先级的进程抢占了时间片。

        3:CPU 空闲时,操作系统选择一个就绪进程。

        4:需要的资源满足了或信号到达了,等,则被唤醒(必须是别人唤醒),进入就绪队列(Ready)

3、调度器:

4、进程死亡:

进程 terminates 自己后会转入僵尸态,僵尸态是进程已经死亡,但是所占用的资源还没有被回收、清理干净。等待他的父亲来帮他收尸。

5、五态模型:

        可能会疑惑,进程难道天生就是就绪态吗?而且进程执行完后又是什么态呢?
        实际上,进程还具有创建态和终止态。
        创建态:进程创建后,系统还没有给进程提供运行所需要的资源(因为资源有限);

        创建态对应于进程刚刚被创建的状态。创建一个进程要通过两个步骤,

        1. 为一个新进程创建必要的管理信息,

        2. 让该进程进入就绪态。(此时进程将处于创建态,它并没有被提交执行,而是在等待操作系统完成创建进程的必要操作。需要注意的是,操作系统有时将根据系统性能或主存容量的限制推迟创建态进程的提交)

        终止态:进程已经执行完毕或者被强制停止了(比如windows中的进程管理器直接关掉某个进程),这时操作系统将执行一些数据统计工作,统计一下该进程执行过程中所消耗的各种资源,同时还会进行资源的回收工作。

        也就是说进入终止态的进程以后不再执行,但依然临时保留在操作系统中等待善后 。一旦其他进程完成了对终止态进程的信息抽取之后,操作系统将删除该进程。

加入了上面的两个状态,那么我们就可以得到“五状态进程模型”,如下图:

在这里插入图片描述

        我们上面说到:阻塞状态的进程,会在等待的条件满足后,被唤醒转入就绪态,那么具体是怎么实现的呢?一个常见的方法是——事件等待队列。

        五状态进程模型的状态模型如下,可以看到有多个等待队列,这是因为操作系统会将进程等待的事件的不同而将他们分成不同的队列。而且实际上就绪队列往往也不止一个(比如在多级反馈队列调度算法中)

在这里插入图片描述

6、七态模型:

        到目前为止,我们或多或少总是假设所有的进程都在内存中。事实上,可能出现这样一些情况,例如由于进程的不断创建,系统的资源已经不能满足进程运行的要求,这个时候就必须把某些进程挂起(suspend),对换到磁盘镜像区中,暂时不参与进程调度,起到平滑系统操作负荷的目的。

6.1引起进程挂起的原因

引起进程挂起的原因是多样的,主要有:

        1. 系统中的进程均处于等待状态,处理器空闲,此时需要把一些阻塞进程对换出去,以腾出足够的内存装入就绪进程运行。

        2. 进程竞争资源,导致系统资源不足,负荷过重,此时需要挂起部分进程以调整系统负荷 ,保证系统的实时性或让系统正常运行。

        3. 把一些定期执行的进程(如审计程序、监控程序、记账程序)对换出去,以减轻系统负荷。

        4. 用户要求挂起自己的进程,以便根据中间执行情况和中间结果进行某些调试、检查和改正。

        5. 父进程要求挂起自己的后代进程,以进行某些检查和改正。

        6. 操作系统需要挂起某些进程,检查运行中资源使用情况,以改善系统性能;或当系统出现故障或某些功能受到破坏时,需要挂起某些进程以排除故障。

        挂起态分为 就绪挂起 和 阻塞挂起 
就绪挂起:指就绪的进程被挂起了,表明了进程具备运行条件但目前在二级存储器中,只有当它被对换到主存才能被调度执行。

阻塞挂起:被阻塞的进程被挂起,表明了进程正在等待某一个事件且在二级存储器中。

下图就是引入了就绪挂起和阻塞挂起后的“七状态模型”
在这里插入图片描述

6.2引起进程状态转换的具体原因:

阻塞态 → 挂起阻塞态:如果当前不存在就绪进程,那么至少有一个阻塞态进程将被对换出去成为挂起阻塞态;操作系统根据当前资源状况和性能要求,可以决定把等待态进程对换出去成为挂起等待态。

挂起阻塞态 → 挂起就绪态:引起进程等待的事件发生之后,相应的挂起等待态进程将转换为挂起就绪态。

挂起就绪态 → 就绪态:当内存中没有就绪态进程,或者挂起就绪态进程具有比就绪态进程更高的优先级,系统将把挂起就绪态进程转换成就绪态。

就绪态 → 挂起就绪态:操作系统根据当前资源状况和性能要求,也可以决定把就绪态进程对换出去成为挂起就绪态。

挂起阻塞态 → 阻塞态:当一个进程等待一个事件时,原则上不需要把它调入内存。但是在下面一种情况下,这一状态变化是可能的。当一个进程退出后,主存已经有了一大块自由空间,而某个挂起阻塞态进程具有较高的优先级并且操作系统已经得知导致它阻塞的事件即将结束,此时便发生了这一状态变化。

运行态—→挂起就绪态:当一个具有较高优先级的挂起阻塞态进程的阻塞事件结束后,它需要抢占 CPU,,而此时主存空间不够,从而可能导致正在运行的进程转化为挂起就绪态。另外处于运行态的进程也可以自己挂起自己。

新建态—→挂起就绪态:考虑到系统当前资源状况和性能要求,可以决定新建的进程将被对换出去成为挂起就绪态。

可以把一个挂起进程等同于不在主存的进程,因此挂起的进程将不参与进程调度直到它们被对换进主存。

6.3挂起进程的特征:

1. 该进程不能立即被执行。

2. 挂起进程可能会等待一个事件,但所等待的事件是独立于挂起条件的,事件结束并不能导致进程具备执行条件。

3. 进程进入挂起状态是由于操作系统、父进程或进程本身阻止它的运行。

4. 结束进程挂起状态的命令只能通过操作系统或父进程发出。

二、进程之间的通信

首先我们要知道,进程与进程之间,默认是不通信的,两个进程之间老死不相往来。但因为逻辑上的原因,需要通信该怎么办呢?

1、Signal

        进程与进程之间可以互相发的整数,提前约定好。有的能改,有的不能改。

        如:9表示进程立刻结束,这个不能改。

        3表示键盘按下了 Ctrl + C, 这个信号我们是可以人为修改的。

2、管道 Pipes (单向)

2.1 无名管道/匿名管道

        父子进程之间进行通信。

2.2 有名管道 Named Pipes(FIFO)

        两个没有父子关系的进程之间共享的管道。所以分为 reader 和 writer。

3 SysV IPC 和 POSIX IPC (在一台计算机上)

       1)消息队列  2)信号量  3)共享内存

4 Sockets (两台不同的计算机)

       通过网络。

5 编译器层面(某些语言)

      对于进程并发访问的控制。管程:两段代码不会同时进入。

6 Barriers 

       就是拦着进程,等到齐了一起走。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值