《操作系统 - 清华大学》8 -4:进程管理:进程控制结构
深度剖析进程控制块:操作系统进程管理的核心关键
在操作系统的复杂体系中,进程控制块(PCB)是实现高效进程管理的关键所在。接下来,将从多个维度深入剖析进程控制块,帮助更好地理解其在操作系统中的重要作用。
一、进程控制块:进程的“数字档案”与管理核心
进程控制块是设计程序时构建的极为重要的数据结构。凭借这个数据结构,操作系统得以实现对进程的有效管理。它详细记录了进程的基本信息,比如进程的名称、初始资源需求等,同时还精准呈现进程在运行过程中的变化情况,像是进程的状态转变、资源使用状况等。
进程控制块(PCB)作为进程存在的唯一标识,这一特性至关重要。进程与PCB之间存在严格的一对一对应关系。当一个进程诞生,系统会立即为其创建对应的PCB;而当进程完成使命结束运行,对应的PCB也会被系统及时清理。基于此,操作系统能够对进程进行全生命周期管理,从进程的创建,到执行过程中的资源分配、调度,再到最终的终止,进程控制块都发挥着不可或缺的作用。
二、进程控制块存储的关键信息类别
既然进程控制块如此重要,那它到底存储了哪些关键信息呢?主要可归纳为以下三类:
(一)进程标识信息:进程的“身份标签”
第一类是进程标识信息。PCB本身就是进程的重要标识,同时每个进程还拥有独一无二的ID。通过这个ID,操作系统能够清晰地分辨出正在执行的是哪个程序,以及该程序被执行的次数。例如,在多用户系统中,不同用户可能多次启动同一个程序,通过进程ID就能准确区分这些不同的进程实例。
除了基本标识,进程标识信息还包含其他重要内容。比如,进程所属的用户信息,这对于操作系统进行用户权限管理意义重大,能确保不同用户的进程在各自权限范围内安全运行。另外,进程的父进程信息也属于这一类别。父进程即创建当前进程的那个进程,理解进程间的父子关系,有助于操作系统进行资源分配和进程层次结构的管理。比如,父进程可以为子进程分配特定的资源,或者在子进程结束时回收其占用的资源。
(二)处理器状态信息:进程执行的“实时记录仪”
第二类信息是处理器状态信息,它主要围绕寄存器展开。在CPU运行进程的过程中,寄存器扮演着关键角色。一方面,它作为数据处理的临时存储区域,当CPU进行各种数学计算(如加减乘除)和逻辑计算时,相关数据会暂存到寄存器中进行处理。另一方面,寄存器还负责保存进程执行过程中的关键状态信息。
例如,在完成一次寄存器加法操作后,寄存器会记录下诸如是否溢出等标志位信息。同时,程序计数器寄存器记录着程序当前的执行位置,栈指针寄存器则指示着堆栈的位置。这些与进程执行紧密相关的信息,都被完整地记录在PCB中。这使得操作系统在进行进程调度时,能够快速恢复进程的执行现场,保障进程的顺畅运行。假设一个进程在执行过程中被中断,当它再次获得CPU资源时,操作系统可以依据PCB中记录的处理器状态信息,从上次中断的位置继续执行。
(三)进程控制信息:操作系统的“进程调控中枢”
第三类信息是进程控制信息,这是操作系统对进程进行管理和控制的关键依据。它包含了进程的运行状态信息,进程在运行过程中可能处于运行、等待或就绪等不同状态。这些不同的状态反映了进程在执行过程中的临时情况和特征,展现出进程当前的执行现状。例如,当进程等待某个资源(如网络连接、文件读取权限)时,会处于等待状态;而当所有资源准备就绪,随时可以执行时,进程则处于就绪状态。
进程间通信的相关信息也存储在这一部分。在多进程协同工作的环境中,进程之间需要频繁地交换数据、传递信号,这些通信信息对于确保进程间的协作顺畅至关重要。此外,进程运行离不开内存,PCB中的存储管理信息负责记录进程对内存的占用情况,便于操作系统进行内存的分配与回收。同时,进程打开文件的管理信息以及进程间的关系信息也属于进程控制信息的范畴。进程可以打开多个文件,这些文件的管理信息以及进程间的父子关系等信息,通过链表(list)等数据结构进行组织和管理,构建起进程之间复杂而有序的联系网络。
三、进程控制块的组织方式及其影响
了解了进程控制块存储的信息后,我们再来探讨如何组织进程控制块。在内存中,往往存在多个进程,需要对它们进行有效的组织管理。在这个组织过程中,我们希望能够描述进程的状态变化,例如进程何时创建、何时结束、中间是否被切换等,而这些都需要通过合理组织PCB来实现。
PCB的组织方式主要有链表(list)和类似数组的索引方式。不同的组织方式会带来不同的性能差异。
一般情况下,操作系统更倾向于采用链表方式来组织PCB。这是因为进程的执行过程具有动态性,进程会不断地被创建和结束。链表的特性使其在动态插入和删除进程时效率极高,能够轻松应对进程数量和状态的频繁变化。与之相比,如果采用数组方式组织PCB,在进行动态插入和删除操作时,往往需要移动大量元素,从而产生较大的开销。
然而,如果进程的数量相对固定,从开始运行到结束都不会频繁地创建和删除进程,那么采用索引方式组织PCB也是一种不错的选择。这种方式在某些场景下能够提供更快捷的访问速度。因此,操作系统会根据自身的特点,如通用操作系统面对的复杂多变的进程环境,或特殊操作系统特定的进程需求,来选择最合适的PCB组织方式,以实现最佳的性能表现。

四、总结
进程控制块(PCB)是操作系统中管理进程的关键数据结构。它就像是进程的“专属档案”,记录着进程的各类信息,是进程存在的唯一标识,与进程一一对应,进程创建则PCB创建,进程消失则PCB消失 。
PCB存储的信息主要分三类:一是进程标识信息,包括PCB自身、进程ID,还有进程所属用户、父进程等信息,用于明确进程身份和所属关系;二是处理器状态信息,主要涉及寄存器,CPU运算时数据存于寄存器,寄存器还保存运算标志位、程序执行位置、堆栈位置等信息,这些信息都记录在PCB中,方便进程调度时恢复执行现场;三是进程控制信息,包含进程运行状态(运行、等待、就绪等)、进程间通信信息、内存管理信息、文件管理信息以及进程间关系信息,操作系统依据这些信息管理和控制进程。
在组织方式上,PCB有链表和索引(类似数组)两种。链表适合进程频繁创建和结束的情况,能高效进行动态插入和删除操作;索引方式在进程数量固定、创建删除操作少的场景下,访问速度更快。操作系统会根据自身特点选择合适的PCB组织方式。
相关文章:
《操作系统 - 清华大学》8 -4:进程管理:进程控制结构
深度剖析进程控制块:操作系统进程管理的核心关键 在操作系统的复杂体系中,进程控制块(PCB)是实现高效进程管理的关键所在。接下来,将从多个维度深入剖析进程控制块,帮助更好地理解其在操作系统中的重要作用…...
RPC 框架项目剖析
RPC 框架项目剖析 说明 本文用于梳理一个 rpc项目的实现细节,此项目基于cpp语言 大概三千行左右,用于学习目的。 项目链接:rpc项目 项目底层类 1.抽象消息类 描述: 各种消息的基类 属性: 消息id,消息类型…...
C++ Boost面试题大全及参考答案
目录 boost::thread_group 如何实现批量线程管理? 解释 boost::asio 中 proactor 模式的设计原理 使用 boost::atomic 实现无锁环形缓冲区 boost::mutex 与 std::mutex 在异常安全上的差异 如何用 boost::condition_variable 实现生产者 - 消费者模型 当 boost::shared_p…...
关于Transparent native-to-ascii conversion
1、功能 自动转换ASCII编码,即在文件系统上,文件的编码格式为ascii编码,在编辑器(idea/pycharm)中,其展现结果为配置的编码格式,仅展现方便阅读 使用UTF-8并勾选自动转换ASCII编码结果&#x…...
js数据类型检测
JavaScript的数据类型检测 typeof操作符 适用场景 基本数据类型快速判断:适用于快速判断变量是否为number、string、boolean、undefined、function等基本数据类型。比如在函数参数检查中,若要求传入数字参数,可用typeof来初步判断。函数类型…...
go 模块管理
go version 查看版本 go version go1.21.12 windows/amd64 需要保证:go的版本升级为1.11以上,go mod依赖的最底版本 go env 查看go的环境变量 go env 开启go mod # 标识开启go的模块管理 set GO111MODULE=on GO111MODULE有三个值:off, on和auto(默认值)。 GO111M…...
记一次复杂分页查询的优化历程:从临时表到普通表的架构演进
1. 问题背景 在项目开发中,我们需要实现一个复杂的分页查询功能,涉及大量 IP 地址数据的处理和多表关联。在我接手这个项目的时候,代码是这样的 要知道代码里面的 ipsList 数据可能几万条甚至更多,这样拼接的sql,必然是要内存溢出的,一味地扩大jvm参数不…...
基于 Python 的项目管理系统开发
基于 Python 的项目管理系统开发 一、引言 在当今快节奏的工作环境中,有效的项目管理对于项目的成功至关重要。借助信息技术手段开发项目管理系统,能够显著提升项目管理的效率和质量。Python 作为一种功能强大、易于学习且具有丰富库支持的编程语言&…...
java面试场景问题
还在补充,这几天工作忙,闲了会把答案附上去,也欢迎各位大佬评论区讨论 1.不用分布式锁如何防重复提交 方法 1:基于唯一请求 ID(幂等 Token) 思路:前端生成 一个唯一的 requestId(…...
JS宏实例:数据透视工具的制作(四)
上一节中,我们完成了核心的计算代码部分,本节中将完善事件代码 一、创建所有需求的事件函数 1、窗体初始化 // 窗体初始化 function pivotForm_Initialize(){} function typeSet_Initialize(){} function valueSet_Initialize(){} function allCol…...
5. Go 方法(结构体的方法成员)
Go语言没有传统的 class ,为了让函数和结构体能够关联,Go引入了“方法”的概念。 当普通函数添加了接收者(receiver)后,就变成了方法。 一、函数和方法示例 // 普通函数 func Check(s string) string {return s }//…...
20250223学习记录
之前HDFview查看.hdf5文件的时候,看到土壤湿度数据是分为AM和PM,当时我有一个这样的疑问 但是后来用Python处理的时候,直接就是对整个的.hdf5文件处理,当时没有注意这一块,所以就没有这个疑问了。 今天突然看到一篇论…...
WPS携手DeepSeek:开启智能办公新时代
在数字化办公的浪潮中,效率与智能成为了人们追求的核心目标。近年来,人工智能技术的飞速发展为办公领域带来了前所未有的变革契机。DeepSeek作为一款备受瞩目的人工智能工具,以其强大的功能吸引了众多用户,然而在使用过程中&#…...
无需服务器,浏览器跑700+AI模型?!
Transformers.js 是一个创新的网络机器学习库,它将先进的 Transformer 模型直接带入浏览器,无需服务器端支持。这个库与 Hugging Face 的 Python transformers 库功能对等,提供相似的 API 接口来运行预训练模型,涵盖了自然语言处理…...
WSL2下ubuntu开启NFS服务
1. wsl2下ubuntu配置 安装 NFS 服务: sudo apt-get install nfs-kernel-server rpcbindnfs 配置文件/etc/exports: sudo vi /etc/exports打开/etc/exports 以后在后面添加如下所示内容: /home/mk/nfs *(rw,sync,no_subtree_check,no_root…...
深入了解 DevOps 基础架构:可追溯性的关键作用
在当今竞争激烈的软件环境中,快速交付强大的应用程序至关重要。尽管如此,在不影响质量的情况下保持速度可能是一项艰巨的任务,这就是 DevOps 中的可追溯性发挥作用的地方。通过提供软件开发生命周期 (SDLC) 的透明视图…...
k2路由器登录校园网
教程1刷入Breed,并手动刷入Padavan固件:斐讯K1、K2、K2P 刷机、刷入Breed 辅助工具 | tb (tbvv.net) Padavan下载网址: 我用的是: Padavan 登录的网址是 192.168.123.1 Padavan配置教程: 先用网线连上校园网&#…...
构建知识图谱的关键:高效三元组抽取技术在文本挖掘中的应用
在当今数字化时代,数据如潮水般涌来,文本数据更是海量且复杂。从科研论文到社交媒体动态,从新闻报道到电商商品描述,文本蕴含着丰富信息。而要让机器理解这些文本、挖掘有价值知识, “三元组抽取” 成为自然语言处理&a…...
超高清大图渲染性能优化实战:从页面卡死到流畅加载
目录 问题背景:1.为什么大图会导致页面卡死?一、DOM树构建(HTML Parsing)二、 资源加载:下载完整图片文件(可能高达30MB)三、解码处理(Decoding & Rasterization)、四…...
当使用vcpkg安装的qt5时,在VS调用出现libcrypto-*-x64.dll不是有效路径时
英文解决站点 applocal.ps1 fails in Visual Studio 2019 because of wildcard path in VcpkgAppLocalDLLs Issue #28614 microsoft/vcpkg 虽然这个bug不影响生成exe文件,第一次会弹出该错误,再次运行就正常,vcpkg会把对应的libcrypto-*-x64.dll版本复制到exe路径下..但是对…...
SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...
大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...
ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...
Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...
搭建DNS域名解析服务器(正向解析资源文件)
正向解析资源文件 1)准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2)服务端安装软件:bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...
