操作系统管理:进程解析
前言❤️❤️hello hello这里是洋不写bug~欢迎大家点赞关注收藏上篇博客从计算机组成cpu指令操作系统分析了计算机是如何工作的这篇文章会对计算机的操作系统以及系统对进程的管理进行解析进一步了解计算机的内部工作个人主页洋不写bug的博客所属专栏JavaEE学习铁汁们对于JavaEE的各种常用核心语法都可以在上面的JavaEE专栏学习专栏正在持续更新中有问题可以写在评论区或者私信我哦~1操作系统的管理谈到计算机的工作那当然是离不开操作系统的操作系统不仅要管理所有的硬件设备还要给各种软件提供稳定的运行环境例如在Windows系统中steam程序运行出现问题是不会影响其他程序的运行的大不了就是自己崩溃那既然Windows系统能保证一个程序出问题不影响其他程序的运行那为什么电脑还会出现蓝屏的情况呢这个就要提到另一个东西那就是驱动程序驱动程序是直接在操作系统内部运行的如果驱动程序遇到bug电脑就很可能会蓝屏例如买了个罗技鼠标一般就要在罗技官网上去下载驱动程序计算机的音响键盘、游戏耳机都需要驱动程序那为什么这些驱动程序还要再下载不能直接就安装好吗是因为计算机可以连接的外置设备太多了除了各种鼠标、键盘、音响还有医院的心电图机器核磁共振控制手柄这些这些设备的功能也不同因此操作系统就允许这些硬件开发商在研发硬件的同时提供一套对应的驱动程序通过开发商提供的驱动让操作系统“认识、理解”硬件进而对硬件进行管理操作系统驱动程序硬件设备就类似于这样一个关系校长并不熟悉每个班的同学例如要开运动会校长会先通知辅导员辅导员再管理同学进行备赛组队辅导员对同学是比较了解的如下图所示操作系统在管理硬件设备和软件资源的时候会有一个个的“类”来表示各个软件/硬件的各种属性类是Java中的定义主流操作系统都是C语言编写的因此更准确来说使用的是结构体来表示属性操作系统的管理具体是怎样进行的描述通过“类”来表示硬件/软件的属性管理把这若干个类的对象通过数据结构给串起来方便后面的增删改查总之操作系统管理的资源是非常多的例如CPU资源、内存资源、硬盘资源、网络资源…2进程介绍说到操作系统的管理就要提到进程“运行起来的程序”用计算机的专业术语来说就叫做进程每个进程都要消耗一定的系统资源操作系统给进程分配了硬件资源进程才能运行以win11为例打开任务管理器刚进入的就是进程界面如下图那操作系统是如何管理进程的呢这个其实前面已经提到过就是通过描述和组织管理过程描述操作系统使用 结构体 把一个进程的关键属性给表示出来这个结构体就称之为PCBProcess Control Block进程控制块这个称呼适用于各种操作系统但是如果具体到某个操作系统就会有专门的具体的结构体的名字来对应例如Linux上对应结构体的名字是task_struct组织操作系统使用一定的数据结构把上述数据体的变量对象给串起来大部分情况下使用的都是链表因为进程一会要终止一些一会要添加一些链表的增删比较方便创建进程创建PCB变量插入到链表上销毁进程把链表中对应的PCB删除掉释放在任务管理器中查看进程列表遍历链表打印每个PCB中的属性那铁汁们想一下组织的时候大部分是把进程的信息存到链表中的那在数据库中建个表存储这些进程的信息增删改查不是更方便吗像MySQLOracle等数据库本质都是一个运行在操作系统上的应用程序打开数据库这个应用程序就需要先有操作系统而这些进程的描述和组织过程实现操作系统的时候就得先实现出来了因此没法用数据库存储这些进程的信息3 PCB中的关键属性前面提到PCB结构控制块中存储了进程的关键属性方便系统进行管理下面就解析下具体有哪些属性。1PID进程id进程在系统上的身份标识不会重复在当前的计算机上这个时刻不会重复就类似与我们在大学的学号在这里博主运行微软浏览器这个程序启动了13个进程如下图2内存这里有个内存列如下图可以看出来在进程运行时需要申请一系列的内存资源这些内存资源分为两部分指令和数据下图在上篇博客中有提到过0123地址处里面存储的是指令131415地址处存储的是纯数据那操作系统如何知道每个进程的内存空间中分成了哪些部分的区域呢以及每个区域存储的到底是数据还是指令这就需要通过一个叫做内存指针的东西通过内存指针操作系统就知道在哪里找数据哪里找指令那铁汁们想下既然程序的指令是存储在内存中的那有没有办法直接修改内存中的指令内容让程序的逻辑发生变化呢当然是可以的这个一般有两种情况会这样做一种是外挂一种是病毒就拿做外挂而言比如做PUBG的无敌锁血挂大概就是分析出内存中的哪条指令在判定死亡然后修改这条指令让系统永远不会判定玩家被击杀如下图hp就是血量这里只是简单举个例子实际肯定不会这么简单注做游戏外挂是犯法行为要做遵纪守法的好公民3文件描述符表我们平时在计算机都是直接访问文件这就相当于访问了硬盘上的某一块空间操作系统就是通过文件这样的概念来管理硬盘的进程在使用文件的时候需要先打开才能使用就像在C语言中要先通过fopen打开文件再通过fwrite和fread这些真正访问硬盘进程打开文件成功之后会得到一个文件描述符整数类似于身份标识一个进程可以打开多个文件使用多个文件的硬盘资源这些文件的文件描述符就可以通过一个数组来进行表示这个数组就体现了进程访问的内存资源4进程状态要理解这个概念要先大概了解进程的运行打开任务管理器会发现这里有很多进程如下图所示打开性能部分看下面的信息博主的计算机中现在有296个进程如下所示博主的计算机有28个逻辑处理器一个逻辑处理器在同一时间只能处理一个进程铁汁们想一下这28个逻辑处理器全部使用也只能分别同时处理28个进程这也就是并行那这296个进程是如何处理的呢一个处理器核心可以一会运行线程1一会运行线程2一会运行线程3这样进行快速的切换铁汁们看下上面这个图里面的速度是4.03GHz也就是1s可以进行40亿次运算因此切换线程的速度我们是感受不到的现在这296个线程看起来是在同时执行但实际上还是“串行执行”这种操作模式就叫做并发现在的操作系统实际执行的时候都是并发并行就是不同处理器可以执行不同线程互不干扰 这两种模式同时存在的这种多任务操作系统同一个处理器快速切换线程的模式在windows 95系统上就已经使用了还是比较经典的诺基亚使用的塞班系统比较老就是单任务操作系统已经淘汰十多年了这些进程有个状态有的方便调到cpu上执行有的不方便最关键的两个进程状态就是就绪状态和阻塞状态:就绪状态就可以理解为是随叫随到进程随时可以调到cpu上来执行阻塞状态表示现在进程暂时不方便调度到cpu上执行比如说控制台上等待用户输入的情况scanner.next()用户不输入就一直处于阻塞状态5优先级操作系统会给进程分配cpu资源分配并不一定是平分的会根据进程的优先级就好比在电脑上玩三角洲同时电脑也运行着QQ那QQ的消息延迟个几s问题不大但是三角洲如果延迟几s如果正在和别人打架那就很炸缸了因此优先级还是比较重要的6上下文就好比铁汁们玩那些黑神话这次打到哪里了存个档下次接着这次打总不可能每次都重新打进程也是类似进程在运行时会有一系列的中间状态因为cpu是会切换进程的当进程从cpu中调走的时候就需要把中间状态保存起来当进程下次被cpu运行的时候就可以把中间状态恢复过来继续上次执行进程的中间状态就叫做上下文7记账信息PCB会统计该进程在cpu过去一共执行了多少条指令可以识别出某一条指令是不是太久没有执行了结语在JavaEE初学基础概念时还是比较简单的不涉及代码什么的还是比较好理解的后面线程部分就要上强度了会写很多的代码铁汁们要做好准备以上就是今天的所有内容啦完结撒花

相关新闻

Ubuntu 18.04下编译FFmpeg实现H.265 RTMP推流完整指南

Ubuntu 18.04下编译FFmpeg实现H.265 RTMP推流完整指南

1. 为什么非要自己编译一份FFmpeg如果你只是想推 H.264 的 RTMP 流,Ubuntu 18.04 上通过 apt 直接安装的 FFmpeg 完全够用,系统源里那个 3.4 版本虽然老,但推流 H.264 一点问题没有。可需求一旦变成“把 H.265 画面推成 RTMP”,自…

2026/10/17 13:25:32 阅读更多 →
PyTorch数据管道入门:Dataset、TensorDataset与DataLoader详解

PyTorch数据管道入门:Dataset、TensorDataset与DataLoader详解

1. 搞懂这三个组件,数据管道才算真正入门刚接触深度学习那会儿,我写训练脚本最怕的不是模型不收敛,而是数据加载这一环。明明手里有几千张图、几万条文本,却不知道怎么把它们规规矩矩地喂给网络。后来踩了不少坑才明白&#xff0c…

2026/10/17 13:25:32 阅读更多 →
MATLAB新手入门:从矩阵运算到数据可视化的科学计算指南

MATLAB新手入门:从矩阵运算到数据可视化的科学计算指南

简介:这是一份面向科学计算初学者的MATLAB入门PDF指南,内容结合工程、数学建模、信号处理与机器学习等典型场景,系统讲解矩阵运算、数据可视化和工具箱应用,适合零基础者从零起步。内容从软件基础概念与界面操作讲起,覆…

2026/10/17 13:24:31 阅读更多 →

最新新闻

线程池+epoll:构建高并发网络服务的关键骨架

线程池+epoll:构建高并发网络服务的关键骨架

1. 先想明白:单线程模型到底堵在哪里1.1 一个连接一个线程的代价网络服务做到第二步,很多项目会开始纠结一个问题:accept 到新连接之后,到底在哪条线程里处理读写?最直觉的方案是“thread per connection”&#xff0c…

2026/10/17 15:17:53 阅读更多 →
用Terser优化E2E测试代码:Cypress和Playwright体积与CI时间大幅下降

用Terser优化E2E测试代码:Cypress和Playwright体积与CI时间大幅下降

测试代码这东西,平时不给它做优化,等到项目一大了,它自己就会跑出来找你算账。尤其是端到端(E2E)测试,用 Cypress 或 Playwright 写出来的一大堆用例,里面充斥着辅助函数、动态选择器、接口 Moc…

2026/10/17 15:17:53 阅读更多 →
HBase与Iceberg:从列式存储误解到数据湖表格式演进

HBase与Iceberg:从列式存储误解到数据湖表格式演进

前两天在技术社群里看到有人提问:HBase到底算不算列式存储?底下吵了几十楼,有人搬出“列式数据库鼻祖”的说法,也有人坚持HBase是NoSQL行存,跟分析型列存没半毛钱关系。说实话,这个问题值得认真回答&#x…

2026/10/17 15:17:53 阅读更多 →
多任务学习实战指南:从共享参数到损失平衡的完整落地路径

多任务学习实战指南:从共享参数到损失平衡的完整落地路径

我在真正动手做多任务学习之前,其实犹豫了很长时间。当时手里的线上模型数量已经多到快失控,三个场景、六个标签,每个都单独训练、单独上线,时间一长光是特征对齐和结果口径的校验就耗掉不少人力。促使我去认真研究Multi-Task Lea…

2026/10/17 15:17:53 阅读更多 →
纯NumPy实现Q Learning迷宫求解:从贝尔曼方程到Q表可视化

纯NumPy实现Q Learning迷宫求解:从贝尔曼方程到Q表可视化

简介:本资源是一份面向强化学习初学者与Python实践者的Q Learning算法完整实现方案,聚焦于离散状态-动作空间下的智能体策略学习问题,适用于高校课程实验、AI自学项目及算法原理验证场景。压缩包共5个文件,包含核心算法脚本qlearn…

2026/10/17 15:17:53 阅读更多 →
HTML游戏代码包本地部署指南:从白屏到中文汉化全流程

HTML游戏代码包本地部署指南:从白屏到中文汉化全流程

简介:《Degrees of Lewdity》中文版安装指南代码包,是一份面向中文玩家与入门开发者的本地化配置参考。它围绕这款文本冒险游戏的汉化安装,系统梳理了从环境准备、仓库克隆、依赖安装到Mod加载器配置的完整链路,适合想亲手复现中文…

2026/10/17 15:16:52 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/16 21:35:51 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/17 1:44:59 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 21:54:38 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →