【Linux】进程2——管理概念,进程概念

1.什么是管理?

那在还没有学习进程之前,就问大家,操作系统是怎么管理进行进程管理的呢?

很简单,先把进程描述起来,再把进程组织起来!

我们拿大学为例子

  • 最典型的管理者——校长
  • 最典型的被管理者——学生

1.我们平时见得到校长吗?见不到——管理者和被管理者是不需要见面的

2. 这个就引出一个新的问题,管理者在不见被管理者的情况下,如何做好的管理?

  • 我们在学校就清楚,我们考试考了多少分,旷了多少节课,个人信息,校长想看都能看到
  • 就算校长来见我们,也是为了获取我们更多的信息
  • 所以只要校长有足够多的我们的信息,不见面都可以对我们进行有效的管理
  • 管理的本质就是:通过对数据的管理,达到对人的管理

3.管理者和被管理者面都不见,管理者怎么拿到被管理者的数据呢?

  •  我们还是拿校长和学生为例
  • 校长是通过老师,辅导员来获取学生的数据

4.拿老师和辅导员是不是管理者?

  • 不是,因为老师和辅导员只是在执行他们该做的东西,所以他们不是真正的管理者
  • 他们更多的是执行者
  • 校长相当于操作系统,老师,辅导员相当于驱动程序,学生相当于被管理的软硬件资源
  • 这样子就理解了操作系统怎么管理底层的软硬件资源了

5.操作系统怎么管理软硬件资源?——先描述,后组织

  • 操作系统只需要获取对应的软硬件资源的状态数据即可,获取状态数据的这个过程是通过驱动程序来执行的
  • 虽然每个学生的信息都不同,但是他们都有下面这些属性——电话,姓名,身高,体重,成绩,籍贯......
  • 校长可以通过一个结构体来记录这些属性,这样子学生的属性不就被描述起来了吗!!!——这个有点像面向对象编程里的抽象啊
  • struct student
    {
    char name[20];
    int number[20];
    ...
    struct student*next;
    };

  • 这样子我们就可以使用一个结构体对象来记录一个学生的信息,每个学生都带有一个指向下一个学生的结构体指针,这样子就很好管理了
  • 这样子校长对学生的管理工作就变成了对链表的增删查改
  • 校长找成绩最高的同学,只需要不断遍历链表即可
  • 上面这个把学生描述成结构体的过程叫做描述的过程
  • 将每个学生结构体通过结构体指针链接成一条链表的过程叫做组织的过程

我们的软硬件资源被操作系统管理,操作系统通过软硬件的数据对它进行管理,可是软硬件资源的数据太大,那么操作系统很难做管理

但是每一种设备都有共同的属性,我们描述清楚设备的属性,然后通过一定方法组织起来

这样子,操作系统对软硬件的管理就变成了对数据结构的管理 

管理的核心理念

  1. 操作系统管理软硬件资源时,必须先描述起来,再组织 
  2. 在操作系统中,我们管理对象,最终都可以转变为对某种数据结构的增删查改——这个一般叫建模
  3. 描述事物的方法:c语言的struct,c++的类等

    组织方式:依赖于某种数据结构

这个咋这么像面向对象编程的抽象!!!c++的类,STL容器!!!这个直接给了我们提供了这样一种描述事物的方式,这样子就能完成对事物的统一管理

理解了管理的概念,我们就会知道

  • 操作系统中注定存在大量的数据结构

linux操作系统是c语言写的,c语言只能用结构体来描述对象,所以linux只能用struct来描述对象 

2.c/c++库函数调用和系统调用的关系

 我们用c语言编写了一个程序,在屏幕打印一个hello world,但是在但是屏幕是硬件,硬件是受操作系统管理,操作系统不信息任何人,所以操作系统肯定封装了一个c语言函数调用接口

所以他们是上下层的调用和被调用的关系,库函数在上,系统调用在下

3.进程

  1. 进程:一个已经加载到内存的程序
  2. 进程:正在运行的程序
  3. 进程:任务

 我们可以查看linux的进程

widows里面也有进程

事实上

进程就是内核PCB数据结构对象+你自己的代码和数据 

3.1.PCB 

我们知道一个操作系统可以同时进行多个进程

 

程序要运行的话,就得先把相关数据加载到内存中,等待cpu运行产生进程,那么加载进内存该如何管理呢?操作系统需要直接面向加载到内存中的代码嘛?

答案是不需要。

我们可以先把进程类比上面的学生,先描述进程,再把它们组织起来

任何一个进程,在加载到内存的时候,形成真正的进程的时候,操作系统,要先创建描述进程的结构体对象——PCB(process control block),也就是进程控制块

3.1.1.理解PCB的本质

 人是怎么样辨别认识一个事物或者对象?

  • 都是通过属性认识的

举个例子,叫你自我介绍,你基本都是在讲你的属性——名字,兴趣,才能,成就,籍贯等等

当属性的集合够多的时候,你就能知道这个对应的是什么了

比如,它是一个人,他是中国最顶级的动作明星,他是男生,他演过《十二生肖》

我们就很容易得知这个人就是成龙

同样的我们描述进程,就是把进程足够多的属性描述起来,多到只有一个进程与之匹配,那么我们就能将这堆足够多的属性集合来描述进程,这个集合就是PCB,linux操作系统是c语言写的,c语言只能用结构体来描述对象,所以linux只能用struct来描述对象,所以PCB就是一个结构体

这个也是面向对象编程的核心理念

3.1.2.PCB的历程/作用

  1. 进程创建时,操作系统先为它新建一个PCB,该结构之后常驻内存,任意时刻都可以存取,并在进程结束时删除。PCB是进程实体的一部分,是进程存在的唯一标志。
  2. 进程执行时,系统通过其 PCB 了解进程的现行状态信息,以便操作系统对其进行控制和管理;进程结束时,系统收回其PCB,该进程随之消亡。

3.在进程的整个生命期中,系统总是通过PCB对进程进行控制的,亦即系统唯有通过进程的PCB才能感知到该进程的存在。

  • 当操作系统欲调度某进程运行时,要从该进程的 PCB 中查出其现行状态及优先级;
  • 在调度到某进程后,要根据其PCB 中所保存的处理机状态信息,设置该进程恢复运行的现场,并根据其PCB中的程序和数据的内存始址,找到其程序和数据;
  • 进程在运行过程中,当需要和与之合作的进程实现同步、通信或访问文件时,也需要访问 PCB;
  • 当进程由于某种原因而暂停运行时,又需将其断点的处理机环境保存在PCB中。

 

3.2.PCB的组织方式

在一个系统中,通常存在着许多进程的PCB,有的处于就绪态,有的处于阻塞态,而且阻塞的原因各不相同。操作系统怎么管理这么多进程呢?

为了方便进程的调度和管理,需要将各进程的PCB用适当的方法组织起来。

这样子对进程的管理就变成了对数据结构的增删查改

目前有下面几种组织方式

  • 1.线性表方式:不论进程的状态如何,将所有的PCB连续地存放在内存的系统区。这种方式适用于系统中进程数目不多的情况,不适合频繁的进程调度
  • 2.索引表方式:该方式是线性表方式的改进,系统按照进程的状态分别建立就绪索引表、阻塞索引表等。其中进程阻塞可能由于I/O请求、申请缓冲区失败、等待解锁、获取数据失败等原因造成,将其组成一张表忽略了进程的优先级,不利于进程的唤醒。

  • 3.链接表方式:系统按照进程的状态将进程的PCB组成队列,从而形成就绪队列、阻塞队列、运行队列等。

3.3程序段

程序段就是能被进程调度程序调度到CPU执行的程序代码段。

3.4数据段

一个进程的数据段,可以是进程对应程序加工处理的原始数据,也可以是程序执行时候产生的中间或最终结果。

 4.Linux是怎么取管理进程的?

  • 课本上称之为PCB(process control block),Linux操作系统下的PCB是: task_struct 。
  • task_struct是Linux内核的一种数据结构,它会被装载到RAM(内存)⾥里并且包含着进程的信息。

4.1.task_ struct内容分类

实际上这个结构体的成员非常多,我们只列举最主要的

  1. 标示符: 描述本进程的唯一标示符,用来区别其他进程。
  2. 状态: 任务状态,退出代码,退出信号等。
  3. 优先级: 相对于其他进程的优先级。
  4. 程序计数器: 程序中即将被执行的下一条指令的地址。
  5. 内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针
  6. 上下文数据: 进程执行时处理器的寄存器中的数据[休学例子,要加图CPU,寄存器]。
  7. I/O状态信息: 包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表。
  8. 记账信息: 可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。
  9. 其他信息

4.3.组织进程

可以在内核源代码里找到它。

所有运行在系统里的进程都以task_struct双向链表的形式存在内核里。

4.4.查看进程

(1)进程信息可以通过 /porc系统文件夹查看,具体查看那个进程,需要得知其标识符(PID)。

看到以下有很多的数字还是蓝标的,数字就是PID,蓝标说明这是个目录,

 比如接下来我想看看PID为1的进程信息。

这个信息查看的不够详细,所以可以带上 -l选项查看详细信息 

(2)用ps工具来查看

关于ps工具,咱们只需要记住,只查看自己的bash进程选项为 -l,查看系统所有运行的进程选项为aux,这个不加-

这里可以看到,标识符PID展示出来了,还有一个PPID,这是父进程的PID,我们惊奇的发现,下面的ps指令的PPID是上面bash的PID。

命令行上的命令的父进程基本上都是bash。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/24029.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

来自工业界的知识库 RAG 服务(三),FinGLM 竞赛获奖项目详解

背景介绍 前面介绍过工业界的 RAG 服务 QAnything 和 RagFlow 的详细设计,也介绍过来自学术界的 一些优化手段。 前一阵子刚好看到智谱组织的一个金融大模型比赛 FinGLM,主要做就是 RAG 服务的竞赛,深入研究了其中的几个获奖作品&#xff…

Pyramid Vision Transformer, PVT(ICCV 2021)原理与代码解读

paper:Pyramid Vision Transformer: A Versatile Backbone for Dense Prediction without Convolutions official implementation:GitHub - whai362/PVT: Official implementation of PVT series 存在的问题 现有的 Vision Transformer (ViT) 主要设计…

C++结合ffmpeg获取声音的分贝值

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、分贝是什么?1.功率量2.场量 二、实际操作1.分析wav文件2.读取麦克风 总结 前言 最近面对一个需求,就是需要传递声音文件到模型里推…

链表的回文结构OJ

链表的回文结构_牛客题霸_牛客网对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为。题目来自【牛客题霸】https://www.nowcoder.com/practice/d281619e4b3e4a60a2cc66ea32855bfa?tpId49&&tqId29370&rp1&a…

CodeMeter助力Hilscher,推动实现全球智能制造连接解决方案

Hilscher的旗舰店为开放工业4.0联盟(OI4)社区提供了应用商店的便捷和开放性,将这一概念引入工业领域。该商店依托CodeMeter的许可证管理和加密保护,为工业用户提供了丰富的应用和解决方案库,满足他们在车间自动化和连接…

WPF中读取Excel文件的内容

演示效果 实现方案 1.首先导入需要的Dll(这部分可能需要你自己搜一下) Epplus.dll Excel.dll ICSharpCode.SharpZipLib.dll 2.在你的解决方案的的依赖项->添加引用->浏览->选择1中的这几个Dll点击确定。(添加依赖) 3.然后看代码内容 附上源码 using Excel; usi…

计网复习资料

一、选择题(每题2分,共40分) 1. Internet 网络本质上属于( )网络。 A.电路交换 B.报文交换 C.分组交换 D.虚电路 2.在 OSI 参考模型中,自下而上第一个提供端到端服务的是( )。 A.数据链路层 B.传输…

Thinkphp使用Elasticsearch查询

在Thinkphp中调用ES,如果自己手写json格式的query肯定是很麻烦的。我这里使用的是ONGR ElasticsearchDSL 构建 ES 查询。ongr ElasticsearchDSL 的开源项目地址:GitHub - ongr-io/ElasticsearchDSL: Query DSL library for Elasticsearch。ONGR Elastics…

100V 15A TO-252 N沟道MOS管 HC070N10L 惠海

MOS管的工作原理是基于在P型半导体与N型半导体之间形成的PN结,通过改变栅极电压来调整沟道内载流子的数量,从而改变沟道电阻和源极与漏极之间的电流大小。由于MOS管具有输入电阻高、噪声小、功耗低等优点,它们在大规模和超大规模集成电路中得…

package.json中resolutions的使用场景

文章目录 用途配置示例使用方法注意事项和peerDependencies有什么不同peerDependenciesresolutions 总结 ✍创作者:全栈弄潮儿 🏡 个人主页: 全栈弄潮儿的个人主页 🏙️ 个人社区,欢迎你的加入:全栈弄潮儿的…

git【工具软件】分布式版本控制工具软件

一、Git 的介绍 git软件的作用:管理软件开发项目中的源代码文件。 常用功能: 仓库管理、文件管理、分支管理、标签管理、远程操作 功能指令: add,commit,log,branch,tag,remote…

华为端云一体化开发 (起步1.0)(HarmonyOS学习第七课)

官方文献: 为丰富HarmonyOS对云端开发的支持、实现端云联动,DevEco Studio推出了云开发功能,开发者在创建工程时选择云开发模板,即可在DevEco Studio内同时完成HarmonyOS应用/元服务的端侧与云侧开发,体验端云一体化协…

论文代码解读STPGNN

1.前言 本次代码文章来自于《2024-AAAI-Spatio-Temporal Pivotal Graph Neural Networks for Traffic Flow Forecasting》,基本模型结构如下图所示: 文章讲解视频链接 代码开源链接 接下来就开始代码解读了。 2.代码解读 class nconv(nn.Module):de…

NDIS Filter开发-网络数据的传输

和NIC小端口驱动不同的是,无需考虑网络数据具体是如何传输的,只需要针对NBL进行处理即可。Filter驱动程序可以启动发送请求和接收指示,或“过滤”其他驱动程序的请求和指示。Filter模块堆叠在微型端口适配器上。 驱动程序堆栈中的Filter模块…

谷粒商城实战(033 业务-秒杀功能4-高并发问题解决方案sentinel 1)

Java项目《谷粒商城》架构师级Java项目实战,对标阿里P6-P7,全网最强 总时长 104:45:00 共408P 此文章包含第326p-第p331的内容 关注的问题 sentinel(哨兵) sentinel来实现熔断、降级、限流等操作 腾讯开源的tendis&#xff0c…

ctfshow web

【nl】难了 <?php show_source(__FILE__); error_reporting(0); if(strlen($_GET[1])<4){echo shell_exec($_GET[1]); } else{echo "hack!!!"; } ?> //by Firebasky //by Firebasky ?1>nl //先写个文件 ?1*>b //这样子会把所有文件名写在b里…

JSON 无法序列化

JSON 无法序列化通常出现在尝试将某些类型的数据转换为 JSON 字符串时&#xff0c;这些数据类型可能包含不可序列化的内容。 JSON 序列化器通常无法处理特定类型的数据&#xff0c;例如日期时间对象、自定义类实例等。在将数据转换为 JSON 字符串之前&#xff0c;确保所有数据都…

「动态规划」如何求地下城游戏中,最低初始健康点数是多少?

174. 地下城游戏https://leetcode.cn/problems/dungeon-game/description/ 恶魔们抓住了公主并将她关在了地下城dungeon的右下角。地下城是由m x n个房间组成的二维网格。我们英勇的骑士最初被安置在左上角的房间里&#xff0c;他必须穿过地下城并通过对抗恶魔来拯救公主。骑士…

【Text2SQL 论文】C3:使用 ChatGPT 实现 zero-shot Text2SQL

论文&#xff1a;C3: Zero-shot Text-to-SQL with ChatGPT ⭐⭐⭐⭐ arXiv:2307.07306&#xff0c;浙大 Code&#xff1a;C3SQL | GitHub 一、论文速读 使用 ChatGPT 来解决 Text2SQL 任务时&#xff0c;few-shots ICL 的 setting 需要输入大量的 tokens&#xff0c;这有点昂贵…

MacOS M系列芯片一键配置多个不同版本的JDK

第一步&#xff1a;下载JDK。 官网下载地址&#xff1a;Java Archive | Oracle 选择自己想要下载的版本&#xff0c;一般来说下载一个jdk8和一个jdk11就够用了。 M系列芯片选择这两个&#xff0c;第一个是压缩包&#xff0c;第二个是dmg可以安装的。 第二步&#xff1a;编辑…