欢迎光临
我们一直在努力

【知识讲解】 Linux进程的状态及其之间的转化


目录

前言

Part1. 进程状态

Part1.1. 运行状态

Part1.2. 阻塞状态

Part1.3. 挂起状态

Part1.4. 内核链表

Part1.5. Linux进程状态标识

Part1.6. 僵尸进程 

Part1.7. 进程缓存

Part1.8. 补充知识点

Part2. 进程状态流转简图

Part3. 结语


前言

  这篇文章我们来进一步认识进程的状态以及之间的转化,接下来来跟随小编的视角来认识一下进程的概念吧。


let's go!!!!!!!!


Part1. 进程状态

进程状态是PCB中的属性,用来表征进程当前的情况,状态之间可以相互转化。


Part1.1. 运行状态

只要进程在调度队列中,就属于运行状态。 不一定正在CPU上跑,只要被放进CPU调度队列,就标记为R运行态。


Part1.2. 阻塞状态

进程等待某种外部条件/硬件资源就绪,例如键盘输入、磁盘IO、网卡数据。 典型场景:scanf / cin等待用户输入。 进程不在CPU调度队列,挂到对应硬件的等待队列;条件就绪后,进程会被重新放回CPU调度队列。


Part1.3. 挂起状态

内存不足时,操作系统会把暂时用不到、处于阻塞状态的进程,把进程数据换出到磁盘swap分区,释放物理内存。 等到内存资源充足,再把进程换回内存。


Part1.4. 内核链表

//Linux内核不使用普通指针管理task_struct,而是使用通用双向链表list_head。

struct list_head {
    struct list_head *next, *prev;
};

//task_struct内部包含list_head links成员。

//links是链表节点,不是task_struct本身。

//通过链表成员地址,反向算出整个task_struct结构体起始地址:

#define container_of(ptr, type, member) ((type *)((char *)ptr – offsetof(type,member)))

//一个task_struct可以嵌入多个list_head成员,让同一个进程节点挂入多条不同链表(运行队列、等待队列等)。


Part1.5. Linux进程状态标识

标识 含义  R 运行态:在CPU调度队列  S 浅睡眠:可被信号唤醒  T 暂停:调试暂停,ctrl+z  D 深度睡眠:磁盘IO等待,不能被信号杀死  X 死亡:进程彻底释放  Z 僵尸进程:进程已经退出,PCB保留等待父进程读取退出信息 

D状态深度睡眠例子:进程向磁盘写大量数据,等待磁盘IO完成。此时内存紧张,就算执行kill -9也无法杀掉D态进程,IO没有完成,操作系统不能随意杀掉进程,防止数据丢失。


Part1.6. 僵尸进程 

子进程执行完毕,不能直接彻底释放PCB。 父进程需要读取子进程的执行结果(main返回值、信号信息),信息保存在子进程PCB中

• 如果父进程一直不调用wait/waitpid接收子进程退出信息,子进程就一直保持僵尸Z状态

• 僵尸进程PCB不会被操作系统自动回收,必须父进程来读取,才会释放PCB

僵尸进程类似“内存泄漏”,PCB资源一直占用。


Part1.7. 进程缓存

进程退出的时候,不会把task_struct结构体完全释放还给内存。 把废弃的PCB结构体放到一个unused链表缓存起来。后续需要新建进程时,直接复用缓存中的PCB,只做初始化。 省去频繁申请、释放内存的开销,提升创建进程效率。


Part1.8. 补充知识点

1. 进程退出,普通资源操作系统会自动回收;僵尸进程PCB不会自动回收

2. 挂起状态对用户不可见,由操作系统内部完成换入换出。

3. X+:代表前台进程;X:后台进程。


Part2. 进程状态流转简图

1. 新建进程 → R运行状态(进入CPU调度队列)

2. R运行态 → S阻塞态:进程等待IO/外设,离开CPU调度队列,进入对应设备等待队列

3. S阻塞态 → R运行态:等待的资源就绪,进程被放回CPU调度队列

4. R运行态 → T暂停态:收到暂停信号,停止调度

5. R运行态 → Z僵尸态:子进程执行完毕,等待父进程读取退出状态

6. Z僵尸态 → X死亡态:父进程调用wait读取退出信息,PCB彻底释放

7. 内存紧张:S阻塞进程 → 挂起,数据换到swap磁盘;内存充足后换回内存回到S状态。


Part3. 结语

  这篇文章我们认识并知道了进程状态及其之间的转化,接下来,小编还会带来更多Linux相关的知识,敬请期待~

 最后,祝大家可以:春风得意马蹄疾,一日看尽长安花!

 最后的最后,要是觉得本文还可以的话,可以点点赞,关注小编一波,谢谢大家!~

赞(0)
未经允许不得转载:171主机测评 » 【知识讲解】 Linux进程的状态及其之间的转化
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址