linux之进程状态(1)

张开发
2026/4/22 7:19:03 15 分钟阅读
linux之进程状态(1)
1.名词概念进程状态决定了OS接下来对其的处理方式。进程状态本身就只是一个整形(不完全是)。状态之间的关系一个CPU操作进程的顺序是通过调度队列维护的可以近似理解为该队列给了CPU一个task_struct*类型的指针。(一个进程可以同时属于多个数据结构后面有解释)因此CPU就是根据调度队列的顺序依次对进程进行调度执行。2.状态区分运行一个在调度队列的进程就是运行状态。阻塞等待某种资源或设备就绪。解释OS使用先描述再组织的方式管理系统中各种硬件系统(目前可以视为系统中存在着运行队列也存在着设备队列)在struct device的成员变量中有一个为struct task_struct* wait_queue。此时举一个例子来理解阻塞CPU当前正在调度的结点中需要从键盘中获取数据于是系统会查看device list中硬盘结点的状态若为无数据的状态CPU就会将当前的进程从调度队列中移除修改状态并将其连接到键盘结点的wait_queue上此时该进程的状态就是阻塞。从阻塞回到运行状态就是当键盘得到数据状态发生变化时OS会第一时间发现并检查键盘上的wait_queue是否挂着进程如果有就修改其状态并重新挂回调度队列当CPU运行到他时就会把键盘上的数据传输给该进程从而让其继续运行。从这里可以看出PCB的状态变化一定程度上取决于当前所在队列类型且进程的状态变化表现之一就是在不同的队列之间流动本质都是对数据结构的增删查改。3.内存不足时OS采取的各种手段(挂起与睡眠)磁盘中有一块区域叫swap分区用于内存不足时存放内存数据的。唤入将进程的数据与代码存进swap分区中。唤出将swap分区中的进程的数据与代码拷贝回对应的进程中。1.内存不足程度一OS会将一部分处于阻塞状态的进程的数据与代码存进swap分区中在内存中仅保留对应进程的PCB并将其状态修改为阻塞挂起。2.内存不足程度二还不足时OS甚至会将一部分运行状态的进程的数据与代码存进swap分区中在内存中仅保留对应进程的PCB并将其状态修改为运行挂起。2.内存不足程度三s和d(linux给不同状态的编号)都是堵塞的一种s是可中断睡眠例处于scanf时的进程可用ctrlc杀死但已经是在调用运行的情况了。d是不可中断睡眠是完全不可以被杀死的存在。当内存还是不足时OS甚至会杀死处于s状态的进程但如果此时该进程是进行与磁盘的数据运输时该数据就极易会被丢失因此系统将处于因为数据运输而睡眠的进程的状态设为d来防止意外杀死该进程。

更多文章