简而言之,进程可以处于以下3种状态之一

·运行(running):在运行状态下,进程正在处理器上运行。这意味着它正在执行指令。
·就绪(ready):在就绪状态下,进程已准备好运行,但由于某种原因,操作系统选择不在此时运行。
·阻塞(blocked):在阻塞状态下,一个进程执行了某种操作,直到发生其他事件时才会准备运行。一个常见的例子是,当进程向磁盘发起I/O请求时,它会被阻塞,因此其他进程可以使用处理器。

如果将这些状态映射到一个图上,会得到图。如图所示,可以根据操作系统的载量,让进程在就绪状态和运行状态之间转换。从就绪到运行意味着该进程已经被调度(scheduled)。从运行转移到就绪意味着该进程已经取消调度(descheduled)。一旦进程被阻塞(例如,通过发起I/O操作),OS将保持进程的这种状态,直到发生某种事件(例如,I/O完成)。此时,进程再次转入就绪状态(也可能立即再次运行,如果操作系统这样决定)。

正在执行sql mysql 正在执行英文_正在执行sql mysql

我们来看一个例子,看两个进程如何通过这些状态转换。首先,想象两个正在运行的进程,每个进程只使用CPU(它们没有I/O)。在这种情况下,每个进程的状态可能如表所示。

正在执行sql mysql 正在执行英文_进程_02


在下一个例子中,第一个进程在运行一段时间后发起I/O请求。此时,该进程被阻塞,让另一个进程有机会运行。下表展示了这种场景。

正在执行sql mysql 正在执行英文_就绪状态_03


更具体地说,Process0发起I/O并被阻塞,等待I/O完成。

例如,当从磁盘读取数据或等待网络数据包时,进程会被阻塞。OS发现Process0不使用CPU

并开始运行Process1。当Process1运行时,I/O完成,将Process0移回就绪状态。最后,Process1结束,Process0运行,然后完成。

请注意,即使在这个简单的例子中,操作系统也必须做出许多决定。首先,系统必须决定在Process0发出I/O时运行Process1。这样做可以通过保持CPU繁忙来提高资源利用率。其次,当I/O完成时,系统决定不切换回Process0。目前还不清楚这是不是一个很好的决定。

总结

  • 进程三种状态 运行 就绪 阻塞