下面是进程的几种状态的概念:
执行状态:当一个进程已获得必要资源,并占有CPU进行执行。
就绪状体:进程已分配到除CPU外的所有必要资源,只要获取CPU允许就可立即执行。
阻塞状态:正在执行的进程,由于等待外设输入/输出(或输入输出完成)而暂时停止在CPU中被执行。
挂起状态:指进程的代码数据资源暂时离开内存,进入到外设(一般是磁盘内存中),以节省操作系统里的内存(这种情况是操作系统内存资源不足时才有的)。
挂起状态分为:阻塞挂起和就绪挂起。
谈一下执行态和就绪态:
在操作系统中,我们可以将处于就绪态的进程理解成:这些就绪态进程将自己的PCB储存在一个双链表数据结构队列中,CPU只识别进程的PCB就可以准确的执行某个进程了,这样一来就绪态进程就可以高效的被CPU所执行,而不是那种混乱式的执行,调度器在就绪态的进程中进行筛选以确定哪一个进程被CPU执行。每一个进程所被CPU执行的时间(时间片)都不会相差太多,因为只有这样操作系统中的每个需要被执行的进程才可以执行,否则就会出现某个程序执行时间太长导致其他程序无法执行的情况。大量的把进程从CPU拿上去放下来的动作成为进程切换,CPU会同时执行多个进程被称为并发执行。
谈一下阻塞态和挂起态:
进程的阻塞状态其实就是进程等待外设响应的状态,如:当我们现在有一个程序其中包含scanf函数,数据资源必须通过键盘输入到内存中,但是如果程序中的scanf函数已经执行,但是我们并没有从键盘输入数据,此时该进程就处于 阻塞状态 了。同样,当我们执行printf函数在显示器上打印数据时,显示器接收该数据需要一定的时间(此时间对我们老说肯定是没有多大意义的,但是对计算机系统来说是有意义的),这段时间(进程等待显示器成功接收数据的时间)相应的进程就处于阻塞状态。(进程不能直接从阻塞状态转换为执行状态,因为只有被调度的进程才可以转换为执行态,而只有就绪态在可以被调度,因此阻塞态必须转换为就绪态,有就绪态转换为执行态)。
下面我们来谈一下挂起状态:挂起状态是对于执行态和阻塞态的进程而言。当操作系统内部的内存资源严重不足时,就会将自己内存中的进程的数据和代码交换到外设中(一般都是磁盘,磁盘的内存足够大),从而节省内存资源供其他进程使用。如下图,当然在一定条件下,被挂起的进程数据代码是可以再加换到操作系统中的。