Linux探秘坊-------8.进程详解

发布时间 - 2025-04-19 00:00:00    点击率:

让我们深入探讨linux中的进程概念,包括运行、阻塞、挂起状态,以及pcb内核链表和进程状态的详细解释。

1. 概念详解

运行、阻塞、挂起状态

内容基础:方框中的是调度队列,是一个双向队列,每一个元素是由PCB及其对应的代码数据组成的。

  1. 运行:只要进程在调度队列中,其状态就是运行(running)。

  2. 阻塞:阻塞状态是指进程在等待某种硬件资源就绪(例如网卡、键盘等)。

在操作系统中,除了调度队列(runqueue)外,还有设备队列(device queue)用于管理设备。设备队列中包含等待队列(wait queue)。如果某个进程在调度队列中需要从键盘读取数据,但键盘没有响应,CPU会将该进程从调度队列中移除,并将其链接到对应硬件的等待队列中。这就是阻塞的过程。

  1. 挂起:挂起的本质是将数据交换到磁盘中的交换区(swap partition),通常在内存资源不足时发生。

当内存资源不足时,如果进程处于阻塞状态,系统会将进程的数据交换到硬盘的交换分区,保留PCB。当内存资源充足时,数据会从交换分区被唤出,并与PCB重新组合成进程,这就是阻塞挂起。运行挂起的情况类似。

2. PCB内核链表的理解

这是普通的双端队列,可以看到next指针指向下一个元素的头,prev指针指向上一个元素的头。

PCB中的next指针直接指向下一个元素的next,prev指针直接指向上一个元素的prev。

一个PCB可以隶属于多个数据结构,可以属于调度队列、等待队列,也可以属于设备队列。因此,PCB可能有多个next和prev指针。

2. 进程状态

  • R(running):表示进程正在运行。
  • S(浅睡眠):例如,输出一个字符只需1毫秒,但如果进程持续1秒(sleep(1)),剩余时间处于浅睡眠状态,可以被kill命令终止。
  • D(深度睡眠):通常与硬盘数据交换有关,不可被kill命令终止。
  • Z(僵尸状态):子进程在运行完后不会立即消失,而是先保留信息供父进程使用,信息保留在PCB中。

如果僵尸状态一直存在,子进程的PCB就不会消失,可能会导致内存泄漏。

3. 小知识

进程退出后,内存泄漏的问题就不存在了(例如malloc,进程结束后,申请的内存会被系统回收)。常驻内存的软件(例如Windows系统中的一些软件,开机后一直运行)可能会导致系统卡顿。


# linux  # windows  # 操作系统  # ai  # 指针  # 数据结构  # 挂起  # 多个  # 这就是  # 数据交换  # 的是  # 是一个  # 这是  # 链表  # 让我们  # 就不 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Javascript中的事件循环是如何工作的_如何利用Javascript事件循环优化异步代码?  惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?  手机网站制作与建设方案,手机网站如何建设?  php485函数参数是什么意思_php485各参数详细说明【介绍】  如何在腾讯云免费申请建站?  Laravel如何安装Breeze扩展包_Laravel用户注册登录功能快速实现【流程】  宙斯浏览器文件分类查看教程 快速筛选视频文档与图片方法  JavaScript模板引擎Template.js使用详解  七夕网站制作视频,七夕大促活动怎么报名?  佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】  如何在 Pandas 中基于一列条件计算另一列的分组均值  如何在IIS7上新建站点并设置安全权限?  如何在IIS中新建站点并配置端口与IP地址?  Python文本处理实践_日志清洗解析【指导】  Laravel如何使用Socialite实现第三方登录?(微信/GitHub示例)  如何用AI帮你把自己的生活经历写成一个有趣的故事?  Laravel事件和监听器如何实现_Laravel Events & Listeners解耦应用的实战教程  Laravel如何清理系统缓存命令_Laravel清除路由配置及视图缓存的方法【总结】  b2c电商网站制作流程,b2c水平综合的电商平台?  微信推文制作网站有哪些,怎么做微信推文,急?  HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】  英语简历制作免费网站推荐,如何将简历翻译成英文?  Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧  Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层  高端智能建站公司优选:品牌定制与SEO优化一站式服务  个人网站制作流程图片大全,个人网站如何注销?  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】  微信h5制作网站有哪些,免费微信H5页面制作工具?  Laravel如何使用Gate和Policy进行授权?(权限控制)  标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南  Laravel怎么使用artisan命令缓存配置和视图  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制  微信小程序 input输入框控件详解及实例(多种示例)  php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】  php嵌入式断网后怎么恢复_php检测网络重连并恢复硬件控制【操作】  Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性  Python自然语言搜索引擎项目教程_倒排索引查询优化案例  教你用AI润色文章,让你的文字表达更专业  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?  如何在云服务器上快速搭建个人网站?  jQuery validate插件功能与用法详解  什么是JavaScript解构赋值_解构赋值有哪些实用技巧  如何在Ubuntu系统下快速搭建WordPress个人网站?  使用C语言编写圣诞表白程序  悟空浏览器如何设置小说背景色_悟空浏览器背景色设置【方法】  Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程  郑州企业网站制作公司,郑州招聘网站有哪些?  如何在云主机快速搭建网站站点?