一、进程状态
1.1进程状态本质
- 进程状态,本质就是
task_struct
中的一个整形变量,用来表示当前进程的状态。
- 进程的状态决定了后续的动作,状态的改变引起的是
PCB
会被操作系统变迁到不同的队列(运行队列,等待队列)中,该点后文会提到。
二、运行状态
R状态:已经准备好随时被调度了。
- 运行队列: 每个
CPU
都会维护一个自己的运行队列(一个CPU
,一个运行队列)。
- 运行状态和运行队列:
三、阻塞状态
阻塞状态是一种什么状态呢?下面通过一张图来认识一下。
下面我们来看操作系统对硬件设备的管理:
- 首先是对硬件的描述情况:
CPU
是设备,它可以有自己的队列,那么其他硬件也可以有自己的队列。- 有些进程需要等待硬件资源,所以操作系统将其从运行状态变成阻塞状态,链接到对应的设备等待队列中;
- 用户一旦通过键盘输入,操作系统知道了,会将最前方等待的进程从键盘的等待队列中拿出,将它的状态从阻塞变为运行状态,再链入到
CPU
的运行队列中。
- 有些进程需要等待硬件资源,所以操作系统将其从运行状态变成阻塞状态,链接到对应的设备等待队列中;
所以,正如前文所说的:状态的改变引起的是进程的 PCB
会被操作系统变迁到不同的队列(运行队列,等待队列)中。
四、挂起状态
挂起状态是一种在计算机资源比较吃紧时会出现的状态。
挂起是指将进程信息写入到外设中,当使用时再写入进来。
4.1 阻塞挂起
-
一个进程当前处于阻塞状态:
-
当内存资源吃紧时,将阻塞进程的代码和数据唤出到磁盘中:
- 进行唤出的一定是阻塞状态的进程,因为运行状态的进程,操作系统不敢动他。正因为你阻塞着,所以操作系统认为你现在没有用着,所以才敢动你。
PCB
是不会被唤出到磁盘中的,因为操作系统是对PCB
进行的管理,通过PCB
才能知道它是运行/阻塞,唤入/唤出。
-
当需要运行程序时,将代码和数据唤入到内存中:
swap 分区的大小:
一般是内存的一半,或内存大小,不能超过内存大小的二倍。
- 如果过大,操作系统会非常依赖
swap
分区,那与swap
分区进行 I/O 交互的频率变高,效率变低。 - 如果过小,那存放空间有效,效果不大。
本文到这里就结束了,如果对您有帮助,希望可以得到您的一个赞,如果错误,欢迎指正。