【Linux】进程概念(上)

news2025/1/13 15:35:21

​🌠 作者:@阿亮joy.
🎆专栏:《学会Linux》
🎇 座右铭:每个优秀的人都有一段沉默的时光,那段时光是付出了很多努力却得不到结果的日子,我们把它叫做扎根
在这里插入图片描述

目录

    • 👉冯诺依曼体系结构👈
    • 👉操作系统(Operator System)👈
    • 👉进程👈
      • 什么是进程
      • 查看和杀死进程
      • 创建子进程
    • 👉总结👈

👉冯诺依曼体系结构👈

我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系。
在这里插入图片描述
截至目前,我们所认识的计算机,都是由一个个的硬件组件组成的。

  • 输入单元:包括键盘, 鼠标,扫描仪, 写板等
  • 中央处理器(CPU):含有运算器和控制器等
  • 输出单元:显示器,打印机等

关于冯诺依曼体系结构,必须强调几点:

  • 这里的存储器指的是内存,内存掉电易失。而磁盘输入外存,其具有永久性存储能力。
  • 不考虑缓存情况,这里的 CPU 能且只能对内存进行读写,不能访问外设(输入或输出设备)。
  • 外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取。
  • 一句话,所有设备都只能直接和内存打交道。
  • 有些硬件既是输入设备,又是输出设备,如磁盘和网卡。
  • 外设是相对于内存和 CPU 而言的。
  • 运算器 + 控制器 + 其他 = CPU。
  • 所有的外设有数据需要加载,只能加载到内存中。内存写出数据,也是写到外设中。
  • CPU 不和外设直接打交道,只能和内存直接打交道。

CPU 在读取和写入数据的时候,在数据层面上,只和内存打交道是为了提高整机运算效率。因为磁盘的速度是较慢的,内存的速度是较快的,CPU 的速度是快的,如果 CPU 直接向磁盘读取和写入数据,就会降低了整机的运算效率。

CPU 很快,但也很笨。它只能被动地接收别人的指令和数据,然后执行别人的指令和计算别人的数据。CPU 中有自己的指令集,分为精简指令集和复杂指令集。而编译代码的本质就是形成二进制可执行程序,翻译成 CPU 能够认识的指令,让 CPU 帮我们做计算。

在这里插入图片描述
程序要运行必须加载到内存中。那为什么要加载到内存中呢?CPU 要执行我的代码,访问我的数据,只能从内存中读取,这是冯诺依曼体系结构规定的!

对冯诺依曼体系结构的理解,不能只停留在概念上,要深入到对软件数据流理解上。请解释,从你登录上 QQ 开始和某位朋友聊天开始,数据的流动过程。 从你打开窗口,开始给他发消息,到他的到消息之后的数据流动过程。如果是在 QQ 上发送文件呢?

首先,先将我们 QQ 程序加载到了内存,CPU 再执行 QQ 程序的代码。如果我们从键盘中输入“你好”并点击发生,“你好”这个信息先加载到内存,然后再交给 CPU 处理,最后 CPU 将结果交给内存,内存再将结果交给显示器和网卡。经过网络传输后,朋友电脑的网卡接收到信息,然后交给其内存中,然后经过 CPU 处理后,再显示到朋友电脑的显示器上。

在这里插入图片描述

👉操作系统(Operator System)👈

在之前的博客,我们提到过:操作系统是一个进行软硬件资源管理的软件。为什么要管理呢?操作系统要通过合理地管理软硬件资源(手段),为用户提供良好的(稳定的、高效的和安全的)执行环境(目的)。

那操作系统是如何将软硬件资源管理起来的呢?为了更好地理解操作系统是如何管理软硬件资源的,我们先来看一下生活中的例子:在学校里,假如校长(管理者)从未和学生(被管理者)进行过交流,校长也能够很好地将学生管理起来。那么,我们可以得出一个堆管理者的理解:管理者不需要和被管理者进行直接交互,也能够把被管理者管理起来。管理者对重大事宜有决策的权利的,而决策是有依据的。那这是怎么做到的呢? 虽然学生不直接和校长打交道,但是学生的所有数据(绩点、各科成绩等)早已经被校方拿走了,而且这些数据一直都在更新。那么,校长只要管理好这些数据,就能将学生管理起来了。总的来说,管理的本质就是:对数据做管理。

在这里插入图片描述

管理者是通过被管理者的数据来进行管理的。那管理者是如何一直拿到这些数据呢?那么管理者和被管理者之间还有执行者,执行者会执行管理者的决策以及和被管理者接触,拿到被管理者的数据交给管理者。在学校里,校长就是管理者,辅导员就是执行者,学生就是被管理者。而在计算机里,操作系统就是管理者,驱动程序就是执行者,硬件就是被管理者。

在这里插入图片描述

  • 管理者通过对数据进行管理实现对被管理者的管理
  • 数据的采集和决策的执行由执行者来做

校长要管理的学生很多,那么需要管理学生的信息也很多,但是需要管理的信息种类是一样的。那么,一个学生的各种信息可以定义成一个结构体,每个学习的信息结构体链接在一起就形成了链表。那么现在对学生数据做管理就变成了对链表做管理。

在这里插入图片描述

那么,以上的过程就是先描述(面向对象),再组织(数据结构)。其实,所有的管理,本质逻辑都是先描述,再组织。

在这里插入图片描述

  • 管理的本质是对数据进行管理
  • 管理的方法是先描述,再组织

以上是操作系统对硬件的管理方式,其是操作系统对软件也是这样子进行管理的。软件能管理硬件,也能够管理软件。

操作系统是不相信任何人的,它是很容易受到伤害的,但是操作系统也必须给上层用户提供各种服务。那如何解决呢?那么,在用户和操作系统之间还有一层系统调用接口,而这些接口也是用C语言写的,如:fork 和 wait 等等。

在这里插入图片描述
在这里插入图片描述

在系统调用上面还有一层,分别是 shell 、C / C++ 的库(lib)和界面等。shell 可以满足用户的指令操作,C / C++库满足用户的编程操作,它们都需要系统调用接口来完成相关操作。

系统调用和库函数的概念

  • 在开发角度,操作系统对外会表现为一个整体,但是会暴露自己的部分接口,供上层开发使用,这部分由操作系统提供的接口,叫做系统调用。
  • 系统调用在使用上,功能比较基础,对用户的要求相对也比较高。所以,有心的开发者可以对部分系统调用进行适度封装,从而形成库。有了库,就很有利于更上层用户或者开发者进行二次开发。

计算机软硬件体系结构

在这里插入图片描述

👉进程👈

什么是进程

在课本上,我们经常会看到一个运行起来(加载到内存)的程序就是进程、进程和程序相比具有动态性等等的说法。其实,这些说法都是不全面的。那么接下来,我们一起探讨什么是进程?

我们写代码经过编译和链接后,形成了可执行程序。而程序的本质是在磁盘上放着的文件。程序想要运行起来,首先需要加载到内存。那么,内存了肯定会有很多被加载进来的程序,那么操作系统如何管理这些程序呢?是不是先描述,在组织啊?

为了描述这些程序,就引入了进程控制块(Processing Control Block)的概念。而进程等于内核数据结构(struct task_struct)+ 进程对应的磁盘代码。

在这里插入图片描述
在这里插入图片描述

task_ struct 内容分类

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

查看和杀死进程

在这里插入图片描述

ps ajx | head -1 && ps ajx | grep '进程名' #查看指定进程
kill -9 进程的PID #杀死指定进程

在这里插入图片描述

在这里插入图片描述
注:PID (Process ID)是进程的标识符。grep 指令也是一个进程。进程在调度运行的时候,进程具有动态属性

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

注:getpid 函数是获得当前进程的 PID,而 getppid 函数是获得当前进程的父进程的 PID。

查看进程目录 ls /proc

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
注:删掉进程对应的可执行程序,进程还可以跑。因为进程跑起来就和可执行程序没有什么太大的关系了。Ctrl + C 可以退出前台程序。

如果我们把我们的进程退出再运行起来,如此重复。我们会发现一个现象:子进程的 ID 一直在变,而父进程的 ID 一直不变。这是为什么呢?

在这里插入图片描述
那么,我们就来看看这个父进程是什么。

在这里插入图片描述
其实该父进程就是 bash,该进程是云服务器开启时系统帮我们创建好的。一般情况下,命令行上启动的进程的父进程都是 bash。shell 以创建子进程的方式来跑我们的程序,子进程出问题了,父进程不会受到任何的影响。那 shell 是如何创建子进程将我们的程序跑起来的呢?这部分内容将在进程控制里讲解。接下来,我们来学习一下如何创建子进程。

创建子进程

fork 是一个创建子进程的函数。

在这里插入图片描述

注:vim 的批量化注释:先摁下 Ctrl + V 键,再连续摁下方向键(j - 向下,k - 向上)至你想要注释的内容,再摁下 Shift + i 键,最后输入 // 就可以实现批量化注释了。
在这里插入图片描述

在这里插入图片描述

上面只是一个小小的例子,我们通常不这么来写代码。

对于 fork 函数,我们重点研究它的返回值。如果子进程创建成功,将会给父进程返回子进程的 ID,给子进程返回 0。如果子进程创建失败,将会给父进程返回 -1。

在这里插入图片描述
知道了 fork 函数的返回值后,我们对上面的代码再进行修改并让程序跑起来。

在这里插入图片描述
在这里插入图片描述

上图的结果,很好地说明了子进程创建成功,将会给父进程返回子进程的 ID,给子进程返回 0。但我有一个问题,为什么同一个变量 id在后续不会被修改的情况下有不同的内容呢?现在这个知识点,无法给大家讲解,这里涉及了进程地址空间的内容。

fork 函数真正的用法是利用分支结构来让父子进程执行不同的代码,那我们再把上面的代码修改一下。

在这里插入图片描述

在这里插入图片描述
现在父子进程在一起运行,那么这就是多进程了。那现在问题来了,如果是 C语言的话,if - else if - else 结构能够同时成立吗?很明显不能!但是现在似乎可以了。其实真正的原因是 fork 函数执行之后,会有父子进程两个进程在执行后续的代码,也就是说 fork 函数之后的代码,被父子进程共享。那么,我们就可以通过返回值的不同,让父子进程执行后续共享代码的一部分。

👉总结👈

本篇博客主要讲解了冯诺依曼体系结构,什么是操作系统、库和函数调用的区别、什么是进程、如何查看和杀死进程以及如何创建子进程等等。那么以上就是本篇博客的全部内容了,如果大家觉得有收获的话,可以点个三连支持一下!谢谢大家!💖💝❣️

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

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

相关文章

1754. 构造字典序最大的合并字符串

摘要 1754. 构造字典序最大的合并字符串 一 贪心算法分析 题目要求合并两个字符串 word1 与 word2,且要求合并后的字符串字典序最大。首先需要观察一下合并的选择规律,假设当前需要从 word1​ 的第 i 个字符和 word2​ 的第 j个字符选择一个字符加入到…

24. 【gRPC系列学习】gRPC安全认证-TLS认证

TLS认证是gRPC比较常见的方式,利用PKI体系,生成客户端证书、服务端证书、以及CA证书,在交互期间进行身份验证,经秘钥协商后,以对称秘钥进行加密通信,保证数据隐私。Basic、Jwt都是要自实现,TLS是官方支持,操作简单。 1. TLS原理 双向认证简单来讲:服务端验证客户端证书…

前端小知识:返回浏览器上一页(back、go、referrer)

官方文档(document.referrer): https://developer.mozilla.org/zh-CN/docs/Web/API/Document/referrer   官方文档(history.back) https://developer.mozilla.org/zh-CN/docs/Web/API/History/back   官方文档&#…

DaVinci:曲线之 HSL 曲线

调色页面:曲线Color:CurvesH 指的是色相 Hue,S 指的是饱和度 Saturation,L 指的是亮度 Luminance。DaVinci Resolve 的曲线调板中,除了自定义曲线,还提供了六种基于色相、饱和度或亮度的调节曲线&#xff0…

Akka 进阶(二)Mailbox 邮箱

目录一 默认邮箱配置二 内置邮箱三 自定义邮箱四 配置邮箱五 RequiresMessageQueue接口Actor中的邮箱是一个队列结构,所有发送过来的消息都会在该队列进行排队,在默认情况下,它遵循先进先出(FIFO)的模式,假…

如何将ppt图片压缩?统一压缩ppt图片的简单方法

日常生活中经常需要用到ppt,一份PPT少则十几页多则上百页,就很容易造成PPT过大不易传送的情况,其实我们可以先把ppt图片压缩(图片压缩到指定大小 图片压缩大小至指定kb以下-压缩图)之后再制作成ppt文件,那么…

【推荐收藏】这份图解算法数据结构的材料太良心

5年前发生的一件事,成为了我职业生涯的重要转折点。当时的我在交大读研,对互联网求职一无所知,但仍然硬着头皮申请了 Microsoft 实习生。面试官让我在白板上写出“快速排序”代码,我畏畏缩缩地写了一个“冒泡排序”,并…

Unity 3D Inspector 视图 || Unity 3D Scene View 视图 || Unity 3D Game View 视图

Unity 3D Inspector 视图 Unity 3D 的 Inspector 视图用于显示当前选定的游戏对象的所有附加组件(脚本属于组件)及其属性的相关详细信息。 视图布局 以摄像机为例,在 Unity 3D 的 Inspector 视图中显示了当前游戏场景中的 MainCamera 对象所…

腾讯云轻量应用服务器使用 Cloudreve 应用镜像搭建个人私有云盘!

Cloudreve 是一款开源的网盘软件,支持服务器本机及腾讯云对象存储 COS 等多种存储方式,提供离线下载、拖拽上传、在线预览等功能,能够帮助您快速搭建个人使用或多人共享的云盘系统。该镜像基于 CentOS 8.2 64位操作系统,已集成宝塔…

OpenAI | GPT-3新模型Davinci,将AI写作提升到新水平!网友惊呼:GPT-4要来了?

文 | 王思若20年,OpenAI推出了1750亿参数量的屠榜‘杀器’GPT-3,但基于大模型至今悬而未决的伦理和社会风险以及商业盈利等因素的考量,OpenAI将GPT-3以付费API的形式向公众开放。通过调用GPT-3的API,问答、语义检索、翻译、数学推…

消息队列RabbitMQ学习笔记(四)死信队列和延迟队列

1. 死信的概念 先从概念解释上搞清楚这个定义,死信,顾名思义就是无法被消费的消息,字面意思可以这样理 解,一般来说,producer 将消息投递到 broker 或者直接到queue 里了,consumer 从 queue 取出消息 进行…

【Linux】调试器gdb的使用

​🌠 作者:阿亮joy. 🎆专栏:《学会Linux》 🎇 座右铭:每个优秀的人都有一段沉默的时光,那段时光是付出了很多努力却得不到结果的日子,我们把它叫做扎根 目录👉什么是gdb…

2022-忙碌的一年

(点击即可听音频)前言花有重开日,人无再少年.每当这个时候,回头驻足,不是感慨万千,就是惜时如金,一年悄无声息的从指尖划过,星海横流,岁月如碑.那些被偷走的时光,发生了大大小小的事无论是平淡无奇,还是历久难忘,有惊喜,有遗憾,终将都会隐入尘烟。大到国…

自定义coco数据集

1、环境 anaconda环境安装配置 2、工具 安装labelme工具 3、安装软件 3.1、打开anaconda控制台 3.2、创建虚拟环境 conda create -n labelme python3.73.3、激活环境 conda activate labelme3.4、下载labelme pip install labelme3.5、输入labelme打开软件 以后打开跳…

微信小程序--P2P消息收发模式(MQTT)

目录 前言 js demo 参数 new Paho.Client 创建对象 onConnectionLost 连接丢失回调 onMessageArrived 监听数据 connect (connectOptions)将此消息客户端连接到其服务器。 mqtt 频繁断开和重连问题 小程序实践 前言 P2P,顾名思义,是一对一的消…

vTESTstudio入门到精通 - vTESTstudio工具栏介绍_Layout

到今天这一篇vTESTstudio工具栏介绍就将暂时告一段落了,后续如果大家有需求的话可以私信我,我就继续再往深的介绍,如果没有催更的话,就当这部分是给大家做个普及,作为一个扫盲篇吧,实际项目使用和编程的内容…

Nginx反向代理的一个算法API的接口调用超时:504,GateWay Timeout,怎么破?

背景 服务端由第三方部署了一个基于 darknet (一个较为轻型的完全基于C与CUDA的开源深度学习框架)的识别算法服务,通过 Flask 的 Web 服务对业务服务暴露 API 接口。作为测试,一开始是直接通过 python3 app.py 的命令行启动的服务…

SAP Product Lifecycle Costing 里的 Costing Sheet 成本核算表

有朋友在我的知识星球里向我提问: 请您帮忙讲一下这个AP0100的costing sheet rows这里都表示什么意思吗?比如row10、base Z010、overhead啥、描述、from、to row、credit都说明了什么,能够实现上面👆🏻的目标吗&#x…

【详细学习SpringBoot源码之属性配置文件加载原理(Bootstrap.properties|Bootstrap.yml)-8】

一.知识回顾 【0.SpringBoot专栏的相关文章都在这里哟,后续更多的文章内容可以点击查看】 【1.SpringBoot初识之Spring注解发展流程以及常用的Spring和SpringBoot注解】 【2.SpringBoot自动装配之SPI机制&SPI案例实操学习&SPI机制核心源码学习】 【3.详细学…

Transformer图解

Transformer正在席卷自然语言处理领域。 这些令人难以置信的模型正在打破多项 NLP 记录并推动最先进的技术发展。 它们被用于许多应用程序,如机器语言翻译、会话聊天机器人,甚至为更好的搜索引擎提供动力。 Transformer在当今深度学习领域风靡一时&…