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

【Linux】-- 进程概念的引入

目录

硬件

冯诺依曼体系结构

冯诺依曼体系结构推导

重点概念

网络数据流向

软件

操作系统(Operator System - OS)

概念

定位

进程内核数据结构PCB(task_struct)

通过系统调用创建进程-fork初始

fork基本用法

使用if进行分流

查看运行效果


硬件

冯诺依曼体系结构

        我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系。因为有些硬件的设计就是为了软件,有些软件的设计就是为了硬件,所以我们不能够将软件和硬件割裂开来学习。软件与硬件之间是会有千丝万缕的联系的。

  • 存储器:内存。
  • 输入设备:键盘、摄像头、话筒、磁盘、网卡……。
  • 输出设备:显示器、音响、磁盘、网卡……。
  • CPU(中央处理器):
    • 运算器:算术运算、逻辑运算。
    • 控制器:CPU是可以响应外部事件,协调外部就绪事件,比如,拷贝数据到内存。
关于冯诺依曼,必须强调几点:
  • 这里的存储器指的是内存。
  • 不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设(输入或输出设备)。
  • 外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取。
  • 一句话,所有设备都只能直接和内存打交道。
        对冯诺依曼的理解,不能停留在概念上,要深入到对软件数据流理解上。

冯诺依曼体系结构推导

#问:为什么会有一个存储器?


在我们看来:

  • 输入设备:是产生数据的。
  • 输出设备:是保存 / 显示数据的。

那么体系结构为:下图,不是也可以吗?

1. 存储的效率:

        CUP && 寄存器 > 内存 > 磁盘 / SSD > 光盘 > 磁盘(并且还是数量级的上升)

2. 木桶原理木桶原理又称短板理论,木桶短板管理理论

        最直接的话来说:一个木桶能够接多少水,是由木桶的最短的木板所决定的。换而言之就是,是由多个木板构成一个木桶,相当于由多个元素构成一个系统,同样的道理,一个系统的运行速度不是由最快的元素决定的,而是最慢的元素所决定。所以在计算机设计的角度来说,如果以:-> 输入设备 -> CUP -> 输出设备 -> 。来设计,这个时候输入设备和输出设备都会大大的拖慢CPU的运行速度,导致整个系统运行速度降低。更直接的来说就是:CPU运行速度太快了,对比起磁盘等外设的速度,磁盘们慢的离谱,CUP"等急了"

        于是我们在磁盘到CPU的间隔中,插入了一个内存更直接的来说就是:内存还行,比磁盘快不了太多,又比CPU慢不了太多,CPU"这个等待可以接受"利用存储器的存在,让我们对于速率上,以软件上做文章。

        通过将外设的数据预先加载到存储器当中,此时CPU读取数据时就不去外设而是去存储器读取数据。即:因为存储器的存在,以此通过软件层的策略(比如:操作系统),提升效率。以此达到以后的木桶短板就不是外设,而是内存了。例如:缓冲区满了才将数据打印到屏幕上,使用fflush函数 / 显示器的行刷新策略,将缓冲区当中的数据,都是将内存当中的数据直接拿到输出设备当中进行显示输出。

        比如:开机的时候操作系统将我们可能要访问的数据,预先从外设,读取到内存当中。

重点概念

结论:

  1. CPU读取数据(数据 + 代码),都是要从内存中读取数据。——  站在数据的角度,我们认为CPU不和外设直接交互。
  2. CPU要处理数据,需要先将外设中的数据,加载到内存。——  站在数据的角度,外设直接只和内存打交道。

        所以在语言级的学习中的一局话,我们就可以理解了:程序(在文件、磁盘中)要运行,必须先加载到内存中(因为体系结构决定)

网络数据流向

        我们利用QQ和远在其他地方上大学的朋友,进行聊天,并且使用的是由冯•诺依曼体系结构搭建的电脑。

        我们在与朋友聊天的时候,我们通过键盘,输入自己想说的话,于是键盘输入的信息会加载到内存,而我们也需要知道我们输入的是什么,所以信息还会回显屏幕上。而关键在于对方收到我们的信息,所以CPU需要将我们输入的内容,经过网络的包装、打包、网络IP等,然后打包完的内容写回到内存当中。然后通过网卡进行网络上的数据传输,然后对方通过网卡接受到我们所发出的信息,由于体系结构,就会将内容加载到内存当中,然后CPU进行读取分析,将分析完的数据写回到内存,然后将内容写到显示器上。

路线:

        冯诺依曼体系结构,能够帮助我们理解对用的日常生活中的软件行为的,是硬件规定了我们的软件应该怎么做

软件

操作系统(Operator System - OS)

概念

        任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。笼统的理解,操作系统包括:
  • 内核(进程管理,内存管理,文件管理,驱动管理)。
  • 其他程序(例如函数库,shell程序等等)。

定位

在整个计算机软硬件架构中,操作系统的定位是:一款纯正的 "搞管理" 的软件。是为了:
  • 对上:提供良好的使用环境  ——  是目的
  • 对下:通过管理好软硬件资源,保证系统的稳定性  ——  是手段

可以说:给用户提供一个稳定、安全、简单的执行环境。

进程内核数据结构PCB(task_struct)

  • 进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。
  • 课本上称之为PCB(process control block),Linux操作系统下的PCB是: task_struct

task_ struct内容分类

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

#问:为什么要存在PCB(task_struct)?

        重点理解操作系统的作用,以及操作系统如何做管理的。要管理必须要先描述再组织,先描述就是面向对象,对于被管理的对象先抽象成类,然后再组织,就是根据类来定义对象。然后将对象,根据某种链入式的结构组织起来。

通过系统调用创建进程-fork初始

fork基本用法

        fork之后,代码是父子共享的,但是如果父子多做的事情都以一样的,那我们费这么劲作用不大,需要的是分出来做不同的事情,这样可以明显的提高效率。所以通常用法,使用fork是利用父子进程执行不同的代码。

使用if进行分流

        简单来说就是,父子进程都能看见fork后面的代码,但是只能执行自己的。

int main()
{pid_t id = fork(); //pid_t相当于无符号整数if(id<0){//创建失败perror("fork");//打印出fork失败的原因(由C语言提供)return 1;}else if(id == 0){//child process(task)while(1){peintf("I am child, pid %d, ppid %d\n", getpid(), getppid());sleep(1);}}else{//parent processwhile(1){peintf("I am father, pid %d, ppid %d\n", getpid(), getppid());sleep(1);}}printf("you can see me!\n");sleep(1);return 0;
}

        利用id在父进程里面是子进程的pid,在子进程里面是0。让else if与else里面的语句同时执行。主要是一个变量(id)是可以有不同的值。与语言本身无关,仅仅就是因为使用fork创建了子进程而产生的特殊现象。(不同值的原理:在进程地址空间讲解)

查看运行效果

        用于可以直接清晰的查看进程。

ps xaj | head -1

        就是打印一个表格的头标(表格中数据的名称) 

ps axj | head -1 && ps axj | grep myproc

        &&与逻辑与相同,只有左侧的执行成功才会执行右侧的,要成功答应,需要左侧与右侧都成功。

ps axj | head -1 && ps axj | grep myproc |  grep -v grep

while ;: do ps axj | head -1 && ps axj | grep myproc | grep - v grep; sleep 1; done 

  • 为什么给子进程返回0,给父进程返回子进程的pid?(此处没有官方的讲解,仅仅是理解)

        任何一个子进程,永远都只有一个父进程,任何一个父进程,可以有一到多个子进程。父进程 : 子进程 = 1: n,只要父进程调用fork之后就可以有子进程。而为了父子进程便于协同,所以,就相当于生活中:父亲不可能叫自己的孩子为,那个孩子吃饭了、那个孩子别乱摸……,更何况还会有多个孩子。所以,需要给子进程进行标识,等同于fork之后,给父进程返回子进程的pid,以此父进程来对子进程进行相关管理。

        而对于子进程永远都只有一个父进程,子进程与父进程的对应关系就是相当明确的、唯一的。子进程可以很方便的找到父进程。

  • 创建进程的时候,操作系统要做什么?fork为什么会有两个返回值?

        创建子进程,那么我们一定要给子进程配套一个task_struct,来让操作系统来管理这个新进程。这样这个 task_struct 就可以入到系统的全局的维护进程列表的结构当中,操作系统就可以对新进程进行管理了。

        对于在系统层的fork实现中,return时核心代码的执行状态:

         操作系统和CPU运行某一个进程,本质从 task_struct 形成的队列中挑选一个task_struct,来执行它的代码。

        进程调度,变成了在task_struct的队列中选择一个进程的过程。只要想到进程,优先想到进程对应的task_struct。

        所以当准备return的时候,核心代码已经完成了。因为return,是为上层返回结果。既然已经返回结果,证明计算过程已经结束。

        而通过此我们知道父与子进程的执行其实是有优先级的。

        所以,才会看到会有两个返回值。不是出了fork才有的父子进程,在fork中的return的时候,进程早已经创建出来了,甚至子进程都可以进行调度了。

#问:父子进程被创建出来,哪一个进程先运行?

        有可能父进程刚刚将子进程创建出来,父进程就因为某些原因,就被放到了(run_queue)队列的尾部,反而放到了子进程的后面,这个时候就是子进程先运行了。但是也有可能,系统一口气将父进程跑完了,甚至将fork之后的代码也跑完了。所以这个时候:哪一个先跑完是不可控的。

        谁先运行,不一定,这个是由操作系统的调度器决定的。只有操作系统最清楚谁先调用。

相关文章:

【Linux】-- 进程概念的引入

目录 硬件 冯诺依曼体系结构 冯诺依曼体系结构推导 重点概念 网络数据流向 软件 操作系统(Operator System - OS) 概念 定位 进程内核数据结构PCB&#xff08;task_struct&#xff09; 通过系统调用创建进程-fork初始 fork基本用法 使用if进行分流 查看运行效果 …...

一文看懂“低代码、零代码”是什么?有什么区别?

低代码和零代码近几年热度一直居高不下&#xff0c;乍一看&#xff0c;很容易混淆低代码和零代码开发平台—— 因为它们都是传统开发的替代方案&#xff0c;旨在通过类似于可视化编程的功能加速软件开发过程。 但二者根本不是一回事。从开发人员经验 、目标角色到使用场景&…...

【华为OD机试真题】去除多余的空格(java)

去除多余空格 知识点字符串数组Q队列时间限制:2s空间限制:256MB限定语言:不限 题目描述: 去除文本多余空格,但不去除配对单引号之间的多余空格。给出关键词的起始和结束 下标,去除多余空格后刷新关键词的起始和结束下标。 输入: Life is painting a picture, not …...

【SQL 必知必会】- 第十三课 创建高级联结

目录 使用表别名 Oracle 中没有AS 使用不同类型的联结 自联结 用自联结而不用子查询 自然联结 外联结 全外联结 使用带聚集函数的联结 使用联结和联结条件 使用表别名 SQL 除了可以对列名和计算字段使用别名&#xff0c;还允许给表名起别名。这样做有两个主要理由&#xff…...

ios逆向工具有那些

以下是一些常用的 iOS 逆向工具&#xff1a; Cycript&#xff1a;一种用于在运行时动态分析和修改 iOS 应用程序的强大工具&#xff0c;可以与应用程序进行交互式调试和注入代码。 Frida&#xff1a;一个强大的动态二进制插桩工具&#xff0c;可以在运行时修改应用程序的行为&…...

【软件设计师14】UML建模

UML建模 稳定出一个&#xff0c;但是由于UML的图比较多&#xff0c;所以这种题比数据流图和数据库难度高 一般都会考用例图和类图&#xff0c;再附加其他的图 1. 用例图 包含关系include&#xff1a;比如登记外借信息必须先有用户登录 扩展关系extend&#xff1a;修改书籍…...

容器镜像的设计原理

1 概述&#xff1a; 1.1 历史概要 2016年&#xff0c;Docker制定了镜像规范v2&#xff0c;并在Docker 1.10中实现了这个规范。镜像规范v2分为Schema 1和Schema 2。 Schema 1主要兼容使用v1规范的Docker客户端&#xff08;从2017年2月起&#xff0c;镜像规范v1不再被Registry支…...

arm64异常向量表

arm64异常向量表1 arm64异常向量表2 linux arm64异常向量表3 kernel_ventry宏4 异常向量表的保存4. VBAR_ELx寄存器4.2 __primary_switched4.3 __primary_switched1 arm64异常向量表 When an exception occurs, the processor must execute handler code which corresponds to …...

【测试面试】吐血整理,大厂测试开发岗面试题(1~4面),拿下年40w...

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 自动化测试面试题&am…...

SpringSecurity之权限模块设计

目录 前言 实现思路 代码结构 使用说明 前言 前面我们了解了关于微服务权限设计方案以及J W T的相关介绍&#xff0c;今天我们来聊一下&#xff0c;如何避免自己重复的写相同的代码&#xff0c;一次代码实现&#xff0c;即可完美复制到任何项目中实现权限相关的功能。 实现…...

002_双指针法

1.移除元素 目标&#xff1a;移除数组中的某一个元素 数组的元素在内存地址中是连续的&#xff0c;不能单独删除数组中的某个元素&#xff0c;只能覆盖。 1.1暴力解法 建立两个for循环&#xff0c;当查找到某个元素以后&#xff0c;将此元素后面的元素全部往前移动 时间复…...

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

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

AI+明厨亮灶智能算法 yolo

AI明厨亮灶智能算法通过pythonyolo网络模型分析算法&#xff0c;AI明厨亮灶模型算法可接对后厨实现如口罩识别、厨师服穿戴、夜间老鼠监测、厨师帽识别、厨师玩手机打电话识别、抽烟识别等实时分析监测。Python是一种由Guido van Rossum开发的通用编程语言&#xff0c;它很快就…...

gRPC-Go源码解读一 客户端请求链路分析

最近在学习gRPC相关的知识&#xff0c;为啥要学呢&#xff1f;因为一直在用&#xff0c;古人云&#xff0c;“工欲善其事&#xff0c;必先利其器”。为此&#xff0c;花了不少时间阅读gRPC-Go的源码&#xff0c;收货甚多&#xff0c;比如透过服务发现和负载均衡这俩组件来学习复…...

Word控件Spire.Doc for .net 功能详解

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下&#xff0c;轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具&#xff0c;专注于创建、编辑、转…...

联想服务器配置RAID

一、背景描述 目前有台联想服务器&#xff0c;配置如下&#xff1a; CPU&#xff1a;2颗处理器&#xff0c;40核 内存&#xff1a;512GB 磁盘&#xff1a;2*960GB SATA 4*2.4TB SAS 计划在联想物理机上安装 Vmware 的 ESXi 6.7 虚拟化管理软件&#xff0c;作为虚拟化服务器。…...

C++ 虚函数表

在 C 中&#xff0c;虚函数表&#xff08;Virtual Function Table&#xff0c;简称 vtable&#xff09;是一种用于实现多态性&#xff08;Polymorphism&#xff09;的机制。它是一种编译器和链接器生成的数据结构&#xff0c;用于处理虚函数调用。 虚函数是在基类中声明的&…...

rancher2.7丢失集群信息

使用Docker 单节点安装rancher&#xff0c;然后在rancher中创建了一个k8s的集群。重启rancher所在的虚拟机后&#xff0c;登录rancher发现这是新的实例&#xff0c;集群信息丢失了。但是k8s集群还是好好的。 检查k8s的日志&#xff0c;api server日志会报错 time"2023-0…...

数据库管理-第六十八期 Oracle 23c的其他(20230417)

数据库管理 2023-04-17第六十八期 Oracle 23c的其他1 DGPDB2 无锁并发总结第六十八期 Oracle 23c的其他 由于Oracle 23c的文档相对较少&#xff0c;一是当前文档主要面向开发人员&#xff0c;二是感觉实际内容还在不断增加&#xff0c;主要还有一点就是各种新特性的在官方文档…...

精准关键词获取-行业搜索词分析

SEO关键词的收集通常可以通过以下几种方法&#xff1a; 根据市场价值、搜索词竞争性和企业实际产品特征进行筛选&#xff1a;确定您的关键词列表之前&#xff0c;建议先进行市场分析&#xff0c;了解您的竞争对手、行业状况和目标受众等信息&#xff0c;以更好的了解所需的特定…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程&#xff0c;它的核心机制是 Goroutine 协程、Channel 通道&#xff0c;并基于CSP&#xff08;Communicating Sequential Processes&#xff0…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日&#xff0c;2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席&#xff0c;并作《智能体在安全领域的应用实践》主题演讲&#xff0c;分享了在智能体在安全领域的突破性实践。他指出&#xff0c;百度通过将安全能力…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...

使用LangGraph和LangSmith构建多智能体人工智能系统

现在&#xff0c;通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战&#xff0c;比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...

华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)

题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...

【FTP】ftp文件传输会丢包吗?批量几百个文件传输,有一些文件没有传输完整,如何解决?

FTP&#xff08;File Transfer Protocol&#xff09;本身是一个基于 TCP 的协议&#xff0c;理论上不会丢包。但 FTP 文件传输过程中仍可能出现文件不完整、丢失或损坏的情况&#xff0c;主要原因包括&#xff1a; ✅ 一、FTP传输可能“丢包”或文件不完整的原因 原因描述网络…...

智能职业发展系统:AI驱动的职业规划平台技术解析

智能职业发展系统&#xff1a;AI驱动的职业规划平台技术解析 引言&#xff1a;数字时代的职业革命 在当今瞬息万变的就业市场中&#xff0c;传统的职业规划方法已无法满足个人和企业的需求。据统计&#xff0c;全球每年有超过2亿人面临职业转型困境&#xff0c;而企业也因此遭…...