【Linux】进程的概念

news2024/12/24 3:47:44

文章目录

  • 📖 前言
  • 1. 冯·诺依曼体系结构
    • 1.1 内存存在的意义:
    • 1.2 程序加载到内存的意义:
    • 1.3 程序的预加载:
  • 2. 认识进程
    • 2.1 如何理解管理:
    • 2.2 什么叫是进程:(初步理解)
  • 3. 简单认识操作系统
    • 3.1 操作系统如何提供服务:
  • 4. 查看进程
    • 4.1 第一种查看进程的方式:
    • 4.2 第二种查看进程的方式:
  • 5. 对当前路径的理解

📖 前言

在前面我们学习了Liunx的基本指令和权限相关知识,还有基本工具的使用,有了以上的基础知识我们本章将正式接触操作系统,搬好小板凳要开讲了🙋🙋🙋……


1. 冯·诺依曼体系结构

我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系。

在这里插入图片描述

  • 输入设备: 键盘,话筒,摄像头,磁盘,网卡……
  • 输出设备: 显示器,音响,磁盘,网卡,显卡……
  • (运算器 + 控制器)[CPU]: 算数计算 + 逻辑计算
  • 存储器: 就是内存,不是磁盘!

出了内存之外剩下的就是外设了~

1.1 内存存在的意义:

为什么要有内存?

  • a. 技术角度:
    • 存储速度的差别: cpu的运算速度 > 寄存器的速度 > L1 ~ L3Cache(各种缓存Cache) > 内存>> 外设(磁盘)>> 光盘磁带
  • b. 数据角度:
    • 外设不和CPU直接交互,而是和内存交互,CPU也是如此。
  • c. 成本角度:
    • 造价: 寄存器 >> 内存 >> 磁盘(外设)

如果冯诺依曼体系结构中没有内存的话:

  • 那么整个体系的效率是很低下,因为是由最慢的设备决定的。
  • 计算CPU速度够快,但是还是要等外设,这既是著名的木桶原理

当整个体系结构加上内存之后:

  • 因为中央处理器只和内存做数据交互,输入设备也和内存做交互。
  • 所以整个体系的效率就以内存为主要衡量标准。
  • 不以外设为标准,引入了存储器的设备,可以让整体效率以存储器为标准。
  • 内存的意义:
  • 有存储器的存在让软件的存在具有了更大的意义。开机的时候就是将操作系统加载到存储器当中。
  • 内存对应的最大意义:使用较低的钱的成本,能够获得较高的性能!

补充:

  • 中央处理器CPU也会和外说有交互,协调数据流向。
  • 中央处理器CPU只是个具有运算和控制能力的提现木偶,真正让中央处理器去完成计算和某些控制的是整个计算机的大脑,叫做软件,最具有代表性的就是操作系统,是操作系统来控制CPU的。

1.2 程序加载到内存的意义:

  • 在我们之前学习编程语言例如:C/C++时,我们都听过这样一句话:
  • 自己写的软件/程序,编译好之后,要运行,必须先加载到内存。

为什么???

  • 答案就是由体系结构(冯·诺依曼体系结构)决定的。

具体解释:

  • C/C+编译好的程序就必须从磁盘加载到内存要让CPU能够读取。
  • 我们编译好的程序是个文件是在磁盘上(外设),CPU读取数据,必须通过存储器读取,所以也就要求要运行程序,就必须将程序先加载到内存,因为CPU只会从内存当中读取指令代码和数据。

1.3 程序的预加载:

  • 几乎所有的硬件,只能被动的完成某种功能,不能主动的完成某种功能,一般都是要配合软件完成的(OS + CPU)
  • 开机等待本质是将操作系统加载到内存当中,因为体系结构规定,CPU要执行代码,执行的可不仅仅是我们写的代码,还有操作系统的代码所以必须先把操作系统加载到内存,这就是预加载。
  • 当启动时还没有执行,此时数据已经被预加载到了内存,CPU可能在进行某种其他的计算,这样就能把加载的过程和CPU运算的过程并行起来。
  • 操作系统一旦被加载之后,在软件层面上,就可以预先把将来要访问的数据或文件也可以提前加载到内存当中。

数据在流动的时候,从输入到内存,从内存到CPU,CPU计算处理完,将结果写回内存,然后定期再刷新到外设。

补充:

内存的存在可以去适配外设和CPU之间速度不匹配的问题,因为内存的存在可以去预先装载一些常见的内存管理软件,数据管理软件,就可以将数据以预加载的方式提前放在存储器当中,以提高中央处理器读取效率,就可以让我们以较高的效率完成计算和存储的任务。


2. 认识进程

2.1 如何理解管理:

  • 管理的本质是:对数据的管理。
  • 管理的本质:不是对被管理对象进行直接管理,而是只要拿到被管理对象的所有的相关数据,我们对数据的管理,就可以体现对对象的管理。
  • 管理的核心理念:先描述,再组织。
  • 当我们要管理的对象数目巨大,例如一个学校的学生,而每个学生身上又有大量的属性的时候,例如:每个学生都有自己的个人信息,身高、体重、年龄……
  • 大量的数据堆在一起很显然是不好管理的,我们可以先将每个对象描述起来,例如将每个学生描述为一个结构体,结构体内有学生的各种属性,然后再将这些结构体组织起来。
  • 组织起来的方式有很多,这就是我们之前学的数据结构啊。

先描述再组织,用C语言或C++描述,用数据结构组织数据。管理的本质对数据做管理 --> 对数据的管理 --> 对某种数据结构的管理 --> 对数据结构的各种操作,增删查改。

重点:

其实操作系统是一款软件,是一款专门搞管理的软件,软件可以管理软件,就像人可以管理人一样~


2.2 什么叫是进程:(初步理解)

进程是一个运行起来的程序。

一般书上都会那么说,真的让人理解起来一头雾水,脑子里一篇空白😓😓😓,进程和程序的区别是什么?一个跑一个没跑,这是用形容词描述的,用名词怎么描述??

下面我们来慢慢讲🙋🙋🙋……

  • 首先我们要知道,程序是个文件,是存在磁盘上的,然后不能简单的认为,将程序从磁盘加载到内存,这个程序就是进程了,就像随便一个人进入学校不能够称之为学生一样。

  • 再者我们要知道,操作系统里面可能同时存在大量的进程!

  • 操作系统要不要将所有的进程管理起来呢?答案是肯定的!

  • 对进程的管理,本质是不是就是对进程数据的管理?答案是肯定的!

那我们对进程的管理,核心是不是:先描述,再组织呢?答案是肯定的!

PCB(proccess ctrl block):

  • 描述进程的结构体我们叫做PCB
  • 也叫做进程控制块
  • Linux中的task_struct是一款具体的PCB

当一个程序加载到内存时候,不仅仅是将代码和数据加载到内存,操作系统还要为了管理该进程创建对应的数据结构。
在这里插入图片描述

  • 初步认识进程的概念:(重点)
  • 我们把一个进程的task struct结构和对应的可执行程序合起来才叫一个进程。
  • 进程 = 可执行程序 + 该进程对应的内核数据结构

有大量的进程就必须把进程先描述再组织起来,把进程组织起来实际上是把描述进程的进程控制块组织起来。

那我们学习进程到底学的是什么呢?

  • 我们学习的是进程控制块里面有什么属性!

第一阶段对进程的理解总结:

  • 当一个程序从磁盘加载到内存,将代码和数据加载到内存只是第一步,第二步,操作系统为了管理这个进程,需要为该进程创建对应的描述该进程的进程控制块PCB,Liunx 下叫task struct。
  • 只要在内存当中被操作系统管理,操作系统实际管的根本不是代码和数据,而是管的则是进程的PCB结构体。
  • 第一阶段进程的理解:程序加载到内存之后的代码和数据,以及操作系统为了管理进程,所生成的描述进程的进程控制块PCB结构体(内核数据结构 + 代码和数据,这二者合起来,叫做进程)。
  • 一个进程有一个PCB描述起来了,系统中有大量的PCB,只需要将系统中的PCB用数据结构组织起来,对应的对进程的管理就变成了对数据结构的增删查改。

3. 简单认识操作系统

在这里插入图片描述

3.1 操作系统如何提供服务:

计算机和OS设计出来就是为了给人们服务的,那么是如何给我们提供服务的呢?

我们调用printf函数向显示器打印,显示器是硬件,所谓的打印,本质就是将数据写到硬件上,那我们写的C语言能直接访问硬件吗?

  • 答案是不能!!打印不是直接写到硬件上,而是通过间接的方式。
  • 所有的应用程序都没有资格直接访问硬件,因为硬件的管理者是操作系统。
  • 操作系统是不相信任何人的!不会直接暴露自己的任何数据结构,代码逻辑,其他数据相关的细节!!
  • 因为我们普通人写的代码或者软件没有资格直接访问硬件,需要计算机提供对应的服务。

操作系统是不相信任何人的要防止少数人,又要给多数人提供服务,所以操作系统是通过给用户提供接口的方式为用户提供服务的~

  • Linux操作系统是用C语言写的,这里所谓的“接口”,本质就是C函数!

  • 我们学习系统编程本质就是在学习这里的系统接口。

我们如何调用系统调用接口:
在这里插入图片描述

  • 要是小白的话,我们可以通过图形化界面或者是命令行指令来调用系统接口,在我们日常的生活中,安装卸载软件、本质就将各种资源拷贝到本地磁盘目录下,下载还用了网卡。我们只是用了图形化界面点击了一下,这就是管理操作。

  • 要是初级工程师,就像正在学习的我们,会调用C语言的printf函数来将内容打印到显示器上,但是我们并没有自己实现printf函数,但是我们清楚地知道:

    • 链接就是将库里面的代码和我们的代码合起来,库中的方法里面一定有对应的方法,底层一定有调用系统调用接口,只是我们平时不知道而已。

此时上层用中就可以做管理工作,开发工作,命令行操作。

补充:

  • 一门语言跨平台可移植,在Windows和Linux下都能选择其对应的接口,上层提供的都是printf(),原因标准库中用了多态,同个接口在不同的平台下实现同一个或者不同的功能。

4. 查看进程

  • 我们自己写的代码,编译成为可执行程序,启动之后就是一个进程!
  • 那么别人写的呢??启动之后是不是进程呢??肯定算!!

那么我们之前学习的各种指令,执行指令也是进程。

4.1 第一种查看进程的方式:

在这里插入图片描述

  • a:all
  • j:jobs
  • x:以特定格式显示

通过ps指令,后面的axj几个选项的顺序无所谓,这是显示所有的进程。

我们写一个简单的死循环然他一直在跑,我们来查看一下它的进程~

结合我们之前学的指令,我们可以查看指定的进程:

在这里插入图片描述
我们调用了grep指令,所以这里查看进程的时候也是能显示grep进程的。

显示出前五行:
在这里插入图片描述

只显示要查看的进程:

在这里插入图片描述
只要匹配到-v后面的关键字一律不显示。

Windows下是通过双击打开一个进程, 而Linux则是通过./启动,在系统中找到可执行程序启动,这两者在系统层面上一模一样~


4.2 第二种查看进程的方式:

Linux的根目录下有个proc目录里面放的就是实时的进程:
在这里插入图片描述
proc:process,内存文件系统,里面放的是当前系统实时的进程信息。

查看进程的ID:
在这里插入图片描述
既然proc里面存的是实时的进程,那么我们就可以查到当前正在跑的进程:

在这里插入图片描述


当我们将刚刚的进程结束掉之后,再次执行以下mytest这个可执行程序,我们发现进程的ID发生了变化:

在这里插入图片描述
所以重启之后就是一个新的进程了。

我们在proc中打开这个进程,可以查看它的详细属性:

在这里插入图片描述


5. 对当前路径的理解

在我们之前学习C / C++语言的时候,我们就只是肤浅的理解当路径就是源文件所在的路径。

事实真的是这样吗??

答案并不是!!!

我们用ls -al选项来在proce目录中对应的进程中看一下它的更详细的属性:

在这里插入图片描述
我们可以看到进程当前的工作路径,和进程所对应的可执行程序在磁盘上所对应的位置。

我们在源文件代码中加一个新建文件的语句,目的就是看看当前路径到底是指的什么:

同时我们还将可执行文件移出当前路径:

在这里插入图片描述
我们再将程序跑起来:

在这里插入图片描述

  • 其实我们发现了,cwd和exe都已经在了test这个路径下,并不是源文件的路径。
  • 更重要的是,我们代码中创建的文本文件此时也是创建在了test这个路径下。
  • 这就充分说明了,当前路径并不是源文件所在的路径,而是进程工作的路径。

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

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

相关文章

读SQL进阶教程笔记13_SQL中的分组和层级

1. 数据分组 1.1. SQL的语句中具有分组功能的是GROUP BY和PARTITION BY 1.1.1. 两者都有数学的理论基础 1.1.2. 都可以根据指定的列为表分组 1.1.3. 区别仅仅在于,GROUP BY在分组之后会把每个分组聚合成一行数据 1.1.4. GROUP BY的作用是将一个个元素划分成若干…

CentOS7误删自带python2或yum异常导致yum命令不可用的解决方法

yum命令不可用的解决方法 异常场景1原因验证解决方案让Python2与Python3共存 异常场景2原因解决方案卸载、删除残留文件下载系统版本对应的yum包 异常场景1 在执行yum命令时,系统无法找到 Python 解释器,因此无法运行 yum 命令,具体异常如下…

详解语义分割deeplabv3+模型的工业应用流程

来源:投稿 作者:某一个名字 编辑:学姐 导语 在工业视觉应用中,目标检测算法常用于特征的粗定位,而语义分割则在特征的精定位方面有着突出的表现。使用较多的语义分割模型主要有FCN、deeplab系列、unet等,根…

ASEMI代理ADI亚德诺AD8210YRZ-REEL7车规级芯片

编辑-Z AD8210YRZ-REEL7芯片参数: 型号:AD8210YRZ-REEL7 偏移电压(RTI):1.0mV 超温(RTI):1.8 mV 差分输入阻抗:2 kΩ 共模输入阻抗:5 MΩ 共模输入电压…

数据离奇丢失案件的侦破与思考

01 离奇的数据丢失案件 最近生产环境出了一起数据离奇丢失的案件,调查过程很曲折,几度进入死胡同。下面跟大家分享整个事件的来龙去脉。 1.1 数据丢失案件 8月初,用户批量导入了一批(300)委托人数据,导入…

完美解决丨SyntaxError: invalid syntax

样例 1.1. 不同编辑器 VSCode:点击查看PyCharm:点击查看 1.2. 不同版本 1.2.1. python2 与 python3 的差异 Python2 的 print 语句如下: python print Hello, World! Python3 的 print 语句如下: python print(Hello, World!) P…

超实用的 Linux 高级命令,程序员一定要懂

前言 在运维的坑里摸爬滚打好几年了,我还记得我刚开始的时候,我只会使用一些简单的命令,写脚本的时候,也是要多简单有多简单,所以有时候写出来的脚本又长又臭。 像一些高级点的命令,比如说 Xargs 命令、管…

前端登陆表单_内容非空验证_rules属性与validate方法

更多校验规则查看&#xff1a;ElementUI官网-form-attributes 表单内容 <!--3、通过rules属性传入约定的验证规则v-bind:model"dataForm"绑定data中的dataForm数据v-bind:rules"rules"绑定data中的rules属性&#xff0c;里面定义了要校验的属性及规则re…

网络安全之DVWA通关教程

网络安全之DVWA通关教程 一、DVWA简介二、DVWA安装2.1 安装PHPStudy2.2 安装DVWA 三、DVWA使用3.1 Brute Force&#xff08;暴力破解&#xff09;3.1.1 Low级别3.1.2 Medium级别3.1.3 High级别 3.2 Command Injection&#xff08;命令注入&#xff09;3.2.1 Low级别3.2.2 Middl…

三极管基本知识

1、三极管是常用的半导体器件&#xff0c;也称为双极型品体管、品体三极管&#xff0c;由P/N结组成&#xff0c;它分为NPN(简称P三极管)和PNP&#xff08;简称N三极管&#xff09;&#xff0c;P三极管用多一点。常用的有插件类和贴片类两大封装。具体封装类型有SOT-23-3,TO-92,…

QS排名十年对比:美国大学最稳,中国大学进步最快

QS世界大学排名发布距今已有20年历史&#xff0c;迄今为止&#xff0c;全球已有超过90个国家和地区共1500多所大学进入QS世界排名。QS排名评估中所使用的5项评估标准基本保持不变。 QS使用5个关键指标来进行排名&#xff0c;包括学术声誉、雇主声誉、篇均论文引用、H指数和国际…

【Node.JS】初入前端,学习node.js基本操作

文章目录 一、Node.js 创建服务端应用二、npm 使用介绍三、Node.js 回调函数四、Node.js 事件驱动程序五、Node.js 事件监听器六、特殊的error事件七、Node.js Buffer&#xff08;缓冲区&#xff09;八、输入输出流 Stream九、Node.js 模块系统十、 Node.js 路由十一、GET/POST…

Node 内置模块 【http模块】

文章目录 &#x1f31f;前言&#x1f31f;http模块&#x1f31f; 1.引入http模块&#x1f31f; 2.创建服务&#x1f31f; 3.添加头信息&#x1f31f; 4.搭建一个简单的服务器&#xff1a;&#x1f31f; 5.Request对象&#x1f31f; 6.Response对象&#x1f31f; 7.练习&#xf…

Mac 安装Java反编译工具JD-GUI

一、下载JD-GUI软件 1.首先到Github下载JD-GUI软件&#xff1a; github java-decompiler/jd-gui Public 选择jd-gui-osx-1.6.6.tar. 2.解压打开软件&#xff0c;但是提示错误&#xff1a; 3.确保本机已安装JDK. 4.如果确定已经安装了JDK海报这个这个错误&#xff0c;选中JD…

Ubuntu由于没有公钥,无法验证下列签名: NO_PUBKEY 79CDFD222CD3495A

执行update时&#xff0c;打印几行错误信息&#xff1a; sudo apt-get update命中:3 https://deb.termius.com squeeze InRelease 错误:3 https://deb.termius.com squeeze InRelease 由于没有公钥&#xff0c;无法验证下列签名&#xff1a; NO_PUBKEY 79CDFD222CD3495A W: 校…

海量数据的交互式分析工具Dremel

海量数据的交互式分析工具Dremel 产生背景数据模型两方面的技术支撑面向记录和面向列的存储嵌套模型的形式化定义 嵌套式的列存储数据的无损表示重复深度的定义定义深度的定义 高效的数据编码&#xff08;了解&#xff09;数据重组 查询语言与执行&#xff08;了解&#xff09;…

易点易动设备管理系统帮助水泥厂实现智能设备巡检

着工业4.0的不断发展&#xff0c;智能制造成为企业追求的目标。水泥厂作为基础建设的重要产业&#xff0c;其生产过程中设备的巡检维护显得尤为重要。本文介绍了易点易动设备管理系统如何帮助水泥厂实现智能设备巡检&#xff0c;提高设备管理效率&#xff0c;降低维修成本&…

卫浴工厂如何通过电子作业指导书系统实现信息化管理?

电子作业指导书系统可以帮助卫浴工厂实现信息化管理和智能化生产。电子作业指导书系统可以与其他管理系统和设备进行数据共享和信息交换&#xff0c;从而实现生产过程的智能化和自动化。 电子作业指导书系统是一种指导工人操作的电子化工具&#xff0c;可以将工艺流程、操作规范…

你的企业是不是需要一个wiki维基网页呢?

随着科技的不断发展和企业的不断壮大&#xff0c;企业内部的知识管理变得愈发重要。而wiki维基网页正是一种非常有效的知识管理工具&#xff0c;可以帮助企业更好地管理、分享和利用内部知识。 企业需要一个wiki维基网页的原因有哪些&#xff1f; 提高信息共享效率 在传统的…

WEB 工程路径专题--base 标签的使用和建议示意图

目录 WEB 工程路径专题 工程路径解决方案 解决方案&#xff1a;相对路径 2. 相对路径带来的问题举例 > 示意图 解决方案&#xff1a;base 标签 base 基本介绍 base 应用实例 a.html b.html Servlet03.java 练习 login.HTML user.html WEB 工程路径注意事项和细…