当前位置: 首页 > java >正文

Linux操作系统从入门到实战(十七)进程与进程基本概念

Linux操作系统从入门到实战(十七)进程与进程基本概念

  • 前言
  • 一、什么是进程?
  • 二、系统里的进程谁来管理?
  • 三、管理进程的信息:PCB
  • 四、所以,进程到底是什么?
  • 五、Linux里的PCB:struct task_struct
  • 六、进程“排队”,其实是PCB在排队
  • 七、task_struct
    • 1. task_struct是什么?
      • 1.1 标识符(PID,进程ID)
      • 1.2 状态
      • 1.3 优先级
      • 1.4 程序计数器(PC)
      • 1.5 内存指针
      • 1.6 上下文数据
      • 1.7 I/O状态信息
      • 1.8 记账信息:进程的“资源账单”


前言

  • 上一篇博客里,我们讲解了冯诺依曼体系结构,操作系统与系统调用和库函数概念
  • 这篇博客我们开始讲解进程与进程基本概念

我的个人主页,欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343
我的Linux知识文章专栏
欢迎来阅读指出不足
https://blog.csdn.net/2402_83322742/category_12879535.html?spm=1001.2014.3001.5482


一、什么是进程?

在这里插入图片描述

  • 我们打开电脑,可能同时在刷浏览器、聊微信、听音乐——这些正在运行的程序,其实就是“进程”。

简单说:进程就是“正在干活的程序”

比如你双击“微信”图标,程序启动后开始接收消息、显示界面,这时候“微信”就从一个躺在硬盘里的“死程序”,变成了一个“活的进程”。

二、系统里的进程谁来管理?

我们想一下,电脑里可能同时跑着十几个甚至几十个进程:

浏览器开了5个标签页(可能对应5个进程)、后台还有杀毒软件、输入法、云同步工具……这么多“干活的程序”挤在一起,要是没人管,岂不是乱套了?

就像学校里有几百个学生,总得有老师管纪律、安排座位、分配资源(比如教室、操场),不然大家各干各的,肯定一团糟。

  • 电脑里管这些进程的“老师”,就是操作系统(比如Windows、Linux)。
  • 操作系统的核心工作之一,就是把这些进程管好:谁先运行、谁后运行、谁能用多少内存、谁能访问硬盘……

三、管理进程的信息:PCB

操作系统要管这么多进程,总得记点信息吧

  • 比如:这个进程叫啥?现在运行到哪一步了?用了多少内存?有没有在等什么资源(比如等你输入密码)?

这些信息总得有个地方存,这个“存信息的地方”,就叫PCB(进程控制块)。你可以把它理解成操作系统给每个进程发的“小本本”,上面记着所有管理这个进程需要的关键信息。

那进程本身呢?除了这个“小本本”,进程还有两部分核心内容:

  • 代码:就是程序本身的逻辑(比如微信怎么接收消息、怎么显示界面的规则);
  • 数据:就是程序运行中产生的临时内容(比如你刚收到的消息文字、正在输入的内容)。

四、所以,进程到底是什么?

进程 = PCB + 代码和数据)

五、Linux里的PCB:struct task_struct

  • 刚才说的PCB是个“概念”,在具体的操作系统里,它有具体的形式。
  • 比如在Linux系统里,PCB是用一个叫struct task_struct的“结构体”(可以理解成一个固定格式的表格)来实现的。这个“表格”里记着进程ID、状态(运行中/等待中)、占用的内存地址等几十项信息,Linux就是靠它来管理所有进程的。

六、进程“排队”,其实是PCB在排队

  • 有时候,多个进程要抢着用CPU(比如你一边听歌一边写文档,两个进程都想让CPU处理自己的任务),这时候操作系统就得让它们“排队”,按顺序来。

  • 进程排队,不是代码和数据在排队,而是它们的PCB在排队

举个例子

HR招聘时,一堆求职者来面试,HR不会让所有人挤在门口排队,而是把大家的简历(相当于PCB)按顺序排好,按简历顺序叫人。简历上记着每个人的名字、技能、应聘岗位(就像PCB记着进程信息),HR通过管理简历来安排面试,而不是直接拽着人排队。

进程排队也是一样:操作系统把所有进程的PCB(比如Linux里的struct task_struct)放进一个“队列”(数据结构里的排队形式),需要调度时,就从队列里拿出一个PCB,根据上面的信息找到对应的代码和数据,让CPU去运行。

  • 本质上,就是把PCB从一个队列移到另一个队列(比如从“等待队列”移到“运行队列”)。

  • 进程不只是“运行的程序”,它还带着操作系统给它PCB;操作系统靠这个PCB管着所有进程,包括让它们排队、分配资源

七、task_struct

1. task_struct是什么?

  • 前面我们说过说过,Linux系统里的PCB叫struct task_struct
  • 它就像给每个进程建了个“万能档案袋”,里面塞满了管理进程需要的所有信息。

而且,系统里所有进程的task_struct不是乱堆的,而是像串珠子一样,用双链表串起来(就像把所有档案袋按顺序串成一串)。这样操作系统想找哪个进程的信息时,顺着链表一个个翻就行,特别方便。

  • 这个task_struct 里到底有什么?

1.1 标识符(PID,进程ID)

作用:给每个进程发个唯一的“身份证号”,确保系统能精准找到它。
例子:就像班里每个学生都有唯一学号,老师喊“35号”,只有对应学生会应答。你打开电脑的“任务管理器”,里面每个进程后面的数字(比如“微信.exe 1234”)就是PID,系统靠它区分“微信”和“浏览器”,绝不会弄混。

1.2 状态

作用:记录进程当前“在干嘛”,以及结束时的“结果”。
进程状态常见的有:

  • 运行中(正在被CPU处理);
  • 暂停/等待中(比如等你输入密码,暂时没干活);
  • 已结束(程序关闭了)。

结束时还会留下“退出代码”(比如正常结束是0,出错可能是其他数字)或“退出信号”(比如被强行关闭的信号13)。

例子:你用视频软件看剧时,它是“运行中”;最小化到后台暂停播放,就是“暂停状态”;点叉关闭,就是“已结束”。如果闪退,系统会记下“退出信号”,方便查错。

1.3 优先级

作用:给进程排个“紧急程度”,高优先级的先让CPU处理。

例子:就像医院急诊室,救护车送来的重症病人(高优先级)不用排队,先治疗;普通病人(低优先级)按顺序等。电脑里也一样:系统核心进程(比如内存管理)优先级最高,就算你玩游戏时,它也能优先占用CPU,保证电脑不卡。

1.4 程序计数器(PC)

作用记录进程“下一条要执行的指令在内存中的位置”
这里得先简单说下CPU、PC和指令的关系:CPU是“干活的工人”,进程的代码是“工作步骤清单”,PC就是“工人当前看到清单的哪一行”。CPU每次按PC指的位置取指令执行,执行完后PC自动跳到下一行。

例子:你写作业时突然被叫去吃饭,用书签夹在当前页(PC的作用),回来就能从书签处继续写。进程被暂停时,PC会记下“下一条指令在哪”,恢复运行时CPU就知道从哪开始,不会乱套。

1.5 内存指针

作用告诉系统“进程的代码、数据、共享文件存在内存的哪个角落”。
例子:你把课本(代码)放在书桌抽屉A,笔记本(数据)放在抽屉B,和同学共享的复习资料(共享内存)放在抽屉C。内存指针就是这些抽屉的“地址标签”,系统按标签找东西,不会翻错地方。

1.6 上下文数据

作用保存进程运行时,CPU内部“小盒子”(寄存器)里的临时数据。
寄存器是CPU自带的超高速存储(比内存快得多),进程运行时会用它存临时结果(比如计算到一半的数字)。

  • 但CPU的寄存器只有一套,切换进程时必须先把这些“临时笔记”存到task_struct里(保存上下文),换另一个进程时再把它的“笔记”读回寄存器(恢复上下文)。

例子:你用计算器算题时,突然被老师叫去黑板做题,得先记下计算器上显示的数字(保存上下文),回来才能接着算。如果不记,回来计算器清零了,之前的步骤全白做了。

1.7 I/O状态信息

作用记录进程正在用哪些外部设备(键盘、硬盘、打印机),以及打开了哪些文件
例子:我们用Word写作文时,Word进程会“霸占”键盘(你输入文字时,其他程序抢不走)、占用硬盘(保存文件),并在task_struct里记下“正在编辑D盘的作文.docx”。

  • 这样系统就知道:这键盘和文件正被Word用,别让其他程序捣乱。

1.8 记账信息:进程的“资源账单”

作用:统计进程用了多少系统资源(比如CPU跑了多久、占了多少内存、用了多少流量)。

例子:就像手机会记每个APP用了多少电和流量,系统靠记账信息判断:如果某个进程偷偷占了90%的CPU(比如恶意软件),就可以限制它;如果是付费服务器,还能按“账单”收费。


以上就是这篇博客的全部内容,下一篇我们将继续探索Linux的更多精彩内容。

我的个人主页
欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343
我的Linux知识文章专栏
欢迎来阅读指出不足
https://blog.csdn.net/2402_83322742/category_12879535.html?spm=1001.2014.3001.5482

非常感谢您的阅读,喜欢的话记得三连哦

在这里插入图片描述

http://www.xdnf.cn/news/17570.html

相关文章:

  • Redis一站式指南一:从MySQL事务到Redis持久化及事务实现
  • Error: error:0308010C:digital envelope routines::unsupported at new Hash
  • 计算机视觉(CV)——pytorch张量基本使用
  • 青龙峡拔韭菜
  • 【东枫科技】NTN-IOT 卫星互联网原型系统,高达1.6G大带宽
  • 免费数字人API开发方案
  • 使用正则表达式检测Base64字符串并提取图片类型及正文的JavaScript函数,代码精简且高效
  • How Websites Work 网站如何运作
  • Linux入门指南:26个基础命令全解析
  • C语言(长期更新)第10讲:操作符详解(二)
  • vue3项目中在一个组件中点击了该组件中的一个按钮,那么如何去触发另一个组件中的事件?
  • playwright-mcp 项目全解析:从理论到实践
  • 量子计算机实用化:从理论到现实的艰难跨越
  • (一)Tailwindcss
  • Win10清理C盘步骤
  • Spring事务失效的常见原因
  • ROS2 QT 多线程功能包设计
  • 基于PyTorch一文讲清楚损失函数与激活函数并配上详细的图文讲解
  • redis集群-docker环境
  • 咪咕MGV3200-KLH_GK6323V100C_板号E503744_安卓9_短接强刷包-可救砖
  • 大数据架构演变之路
  • java的三种组件漏洞靶场攻略
  • LeetCode 组合总数
  • 人工智能系列(8)如何实现无监督学习聚类(使用竞争学习)?
  • 1. 电阻选型
  • 计算机网络:如何理解目的网络不再是一个完整的分类网络
  • mpv core_thread pipeline
  • jmeter常规压测【读取csv文件】
  • 北京JAVA基础面试30天打卡06
  • Vulhub靶场组件漏洞(XStream,fastjson,Jackson)