【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。 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

java线程变量共享

在Java中,线程变量共享可以通过几种方式实现: 1.实例变量:如果一个实例变量被多个线程共享,你需要确保适当的同步,以避免竞态条件。你可以使用synchronized关键字或者Lock接口来保护共享变量。 2.静态变量:…

【vuex小试牛刀】

了解vuex核心概念请移步 https://vuex.vuejs.org/zh/ # 一、初始vuex # 1.1 vuex是什么 就是把需要共享的变量全部存储在一个对象里面,然后将这个对象放在顶层组件中供其他组件使用 父子组件通信时,我们通常会采用 props emit 这种方式。但当通信双方不…

高考志愿填报有哪些技巧和方法

一年一度高考季,又高考志愿填报的时侯了。高考志愿填报的时侯,需要考虑的因素比较多,有的同学觉是离家越远越好,要放飞自我,家长再也管不了我了。有的同学觉得专业比学校牌子重要,只要报个好专业&#xff0…

ros2笔记

Ros2 hello world ccreate packagehelloworld.cpp hello world pythonhelloworld.py file explainros2 cmdcreatebuildfindruninstall interfacesmsg filesrv fileaction file Topic hello world c mkdir -p {your workspace name}/src cd {your workspace name} #进入工作空间…

linux 服务器上离线安装 node nvm

因为是离线环境 如果你是可以访问外网的 下面内容仅供参考 也可以继续按步骤来 node 安装路径 Node.js — Download Node.js nvm 安装路径 Tags nvm-sh/nvm GitHub 后来发现 nvm安装后 nvm use 版本号 报错 让我去nvm install 版本 我是内网环境 install不了 下面 你要 把安…

Java——面向对象进阶(一)

前言 面向对象进阶(一):static,继承,this和super关键字 文章目录 一、static1.1 静态变量1.2 静态方法1.3 静态变量和静态方法在内存中 二、继承2.1 概念2.2 继承的特点和能继承什么2.3 继承中的重写2.4 this和super关键字 一、static 在 Jav…

Isaac Lab CartPole实验(摄像头版本)

Isaac Lab安装可以看这个教程:http://t.csdnimg.cn/SN7duhttp://t.csdnimg.cn/SN7du 1. 问题定义与建模 问题描述:CartPole问题是一个经典的强化学习问题,cartpole 由 cart和pole构成,其中一个小车(Cart)上…

上市公司绿色并购数据+do文件(1996-2024.4)

数据简介:手工搜集重污染上市公司的并购公告,采用内容分析法,对每次并购的背景和目的,主并企业和标的企业经营范围以及该次并购对主并企业带来的影响进行综合分析,逐一判断该项并购事件是否为绿色并购 时间跨度&#…

幽门螺杆菌感染关联和有哪些自然战斗者

谷禾健康 幽门螺杆菌(helicobacterpylori,H.pylori)是革兰氏阴性,螺旋形,微需氧细菌,是一种独特的,能持续定植于人类胃粘膜并能引起胃感染的细菌。 世界上有超过一半的人感染了幽门螺杆菌,但很多没有临床症…

问题:新零售是以消费者体验为中心的数据驱动的泛零售形态,是基于大数据的“人货场“重构 #其他#知识分享

问题:新零售是以消费者体验为中心的数据驱动的泛零售形态,是基于大数据的"人货场"重构 参考答案如图所示

stdlib.h: No such file or directory

Qt报错: error: stdlib.h: No such file or directory #include_next <stdl 报错, 其他博主的解决方法: Qt报错: error: stdlib.h: No such file or directory #include_next <stdl_qt5.15 无法打开包括文件“stdlib.h” no suc…

临床应用的深度学习在视网膜疾病的诊断和转诊中的应用| 文献速递-视觉通用模型与疾病诊断

Title 题目 Clinically applicable deep learning for diagnosis and referral in retinal disease 临床应用的深度学习在视网膜疾病的诊断和转诊中的应用 01 文献速递介绍 诊断成像的数量和复杂性正在以比人类专家可用性更快的速度增加。人工智能在分类一些常见疾病的二…

【数据结构】图论入门

引入 数据的逻辑结构: 集合:数据元素间除“同属于一个集合”外,无其他关系线性结构:一个对多个,例如:线性表、栈、队列树形结构:一个对多个,例如:树图形结构&#xff1…

C++基础编程100题-005 OpenJudge-1.3-03 计算(a+b)/c的值

更多资源请关注纽扣编程微信公众号 http://noi.openjudge.cn/ch0103/03/ 描述 给定3个整数a、b、c&#xff0c;计算表达式(ab)/c的值&#xff0c;/是整除运算。 输入 输入仅一行&#xff0c;包括三个整数a、b、c, 数与数之间以一个空格分开。(&#xff0d;10,000 < a,…

创新指南 | 5个行之有效的初创企业增长策略

本文探讨了五种初创企业实现快速增长的有效策略&#xff1a;利用网络效应通过激励和资本化用户增长&#xff1b;通过持续提供高质量内容建立信任和权威的内容营销&#xff1b;利用简单有效的推荐计划扩展用户群&#xff1b;采用敏捷开发方法快速适应市场变化和客户反馈&#xf…

Flink中因java的泛型擦除导致的报错及解决

【报错】 Exception in thread "main" org.apache.flink.api.common.functions.InvalidTypesException: The return type of function Custom Source could not be determined automatically, due to type erasure. You can give type information hints by using th…

【Stable Diffusion】(基础篇二)—— Stable Diffusion图形界面介绍和基本使用流程

本系列笔记主要参考B站nenly同学的视频教程&#xff0c;传送门&#xff1a;B站第一套系统的AI绘画课&#xff01;零基础学会Stable Diffusion&#xff0c;这绝对是你看过的最容易上手的AI绘画教程 | SD WebUI 保姆级攻略_哔哩哔哩_bilibili 在上一篇博客中&#xff0c;我们成功…

【红黑树变色+旋转】

文章目录 一. 红黑树规则二. 情况一叔叔存在且为红情况二.变色旋旋 一. 红黑树规则 对于红黑树&#xff0c;进行变色旋转处理&#xff0c;终究都是为了维持颜色以下几条规则&#xff0c;只有颜色和规则维持住了&#xff0c;红黑树就维持住了最长路径的长度不超过最短路径的两倍…

MySQL之查询性能优化(十)

查询性能优化 MySQL查询优化器的局限性 松散索引扫描 由于历史原因&#xff0c;MySQL并不支持松散索引扫描&#xff0c;也就无法按照不连续的方式扫描一个索引。通常&#xff0c;MySQL的索引扫描需要先定义一个起点和终点&#xff0c;即使需要的数据只是这段索引中很少数的几…

WSDM2022推荐系统相关论文整理(一)

2022年第15届国际网络搜索与数据挖掘会议WSDM在2022年2月21日到25日于线上举行&#xff0c;共收到了786份有效投稿&#xff0c;最终录取篇数为159篇&#xff0c;录取率为20.23%。作为主流的搜索与数据挖掘会议&#xff0c;论文的话题主要侧重于搜索、推荐以及数据挖掘领域&…