Linux进程解析(冯诺依曼体系结构,操作系统,进程初步解析)

冯诺依曼体系结构:

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

截至目前,我们所认识的计算机,都是有一个个的硬件组件组成:
        中央处理器(CPU):含有运算器和控制器等;

        输入单元:包括键盘, 鼠标,扫描仪, 写板、话筒、摄像头、磁盘、网卡等;
        输出单元:显示器,打印机、声卡、显卡、网卡、磁盘等;

以上的设备有的只做输入,或者只做输出,有的即做输入又做输出。

关于冯诺依曼,必须强调几点:
        1.这里的存储器指的是内存,特点是:断电后在内存的数据会丢失(掉电易失)!
        2.不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设(输入或输出设备)外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取。
一句话,所有设备都只能直接和内存打交道。

效率越高,造价贵单体容量越小距离CPU越近的存储单元,

距离CPU越远的存储单元,效率越低,造价便宜,单体容量大 

各个设备之间是用总线连接在主板上的,目的:数据在设备之间流动(本质是设备之间会进行数据的来回拷贝,拷贝的整体速度,是决定计算机效率的重要指标!)

为什么在体系结构中要存在内存?

答:以一个文本文件为例:CPU的速度是非常快的,而键盘的输入和显示是我们写的速度决定的, 这样就导致CPU在效率上就过度的浪费,所以引入内存,可以理解为一个非常大的缓存,介于设备和CPU之间,这样计算机效率就变成了内存效率问题,并且由于内存的引入,让我们在计算机效率不错还比较便宜的情况下,让老百姓使用。

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

        答:我们在键盘进行输入,然后将数据交给内存,由内存将数据给CPU处理打包,然后返回给内存,内存再将打包好的数据交给网卡,另一个人的网卡接受到数据,交给内存,内存再给CPU处理解包,然后输出到显示器上。


 

操作系统

概念:

任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。

笼统的理解,操作系统包括:
        内核(进程管理,内存管理,文件管理,驱动管理)
        其他程序(例如函数库,shell程序等等)

设计OS的目的:

1.与硬件交互,管理所有的软硬件资源
2.为用户程序(应用程序)提供一个良好的执行环境

当我们将电脑开机,第一个被加载的软件是操作系统,

操作系统是一个进行软硬件资源管理的软件。

以操作系统、驱动程序、底层硬件讲解:

每一个硬件都有对应的驱动!!!

以校园生活为背景:

        校长(管理者)、辅导员(保证管理决策的落地)、学生(被管理者)

首先我们应该知道管理者与被管理者,并不需要见面,管理的本质不在于对人做管理,而在于对人的信息(数据)做管理,管理者核心工作是做决策,根据数据做决策。

先描述,再组织:

        以面向对象语言为例:

        从历史的角度:

        我们要对一个事物进行管理,首先要知道他们的属性:如:名字,学号,年龄……信息,有了这些信息我们将他们写成一个结构体,这就是先描述!!!

        我们再用不同的STL容器(string、list、map……)将数据统一管理就是再组织!!

        最后按不同的需求来对数据的增删改查!

        预测未来:

如果你要做一件事情第一步:先描述(struct/class);

          做一件事情的第二步:再组织——>容器(数据结构)

          最后把你对数据的管理场景转化成为对特点数据结构的增删改查!

以上将具体问题,进行计算机级别的建模过程!转成计算机能够认识的问题!

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

1.为什么要有操作系统?

需要去管理软硬件;

2.为什么要有操作系统的管理?

对下:管理好软硬件资源——手段

对上:提供一个良好(稳定、高效、安全)的环境——目的

比如:一个用户去银行存钱,是自己拿到金库中,取钱也是自己去金库拿,这样必然会出现问题!!!

所以在操作系统中,需要一个把用户和操作系统进行分隔的区间,所以就有了系统接口,它是由操作系统提供的系统调用函数。

比如:用户在一个程序中用了printf这个函数,它会调用已经封装好系统调用的用户操作接口lib库,所有的操作都不能越级访问,必须按级调用

比如一个printf可以实现在windows和Linux上使用,调用设计者提供的lib库来实现对系统调用接口向下实现​​​​​​​

进程:

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

task_struct-PCB的一种
        在Linux中描述进程的结构体叫做task_struct。
        task_struct是Linux内核的一种数据结构,它会被装载到RAM(内存)里并且包含着进程的信息

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

事实
        1.我们可以同时启动多个程序--- 我们一定要将多个.exe加载到内存

        2.操作系统要不要管理多个加载到内存的程序呢??要的

        2.操作系统如何管理加载到内存的程序呢? 先描述,在组织!!!

进程=内核PCB对象(内核数据结构)+可执行程序

所有对进程的控制和操作,都只和进程的PCB有关,与进程的可执行程序无关!!!

如:需要启动多个程序,也是PCB去排队来等待调度!!!

因此,对进程的管理,转化为对PCB对象的管理,就可以通过对数据结构的增删改查来实现对进程的管理!!!

扩展:

程序计数器(pc指针 / eip寄存器):指向将被执行的下一条指令的地址。

        当程序运行到判断,循环,函数跳转这些语法时本质都是修改pc指针/eip寄存器,pc指针/eip寄存器指向哪一个进程的代码,就表示哪一个进程是下一个要被调度运行!!!

在Linux关于进程的相关操作:

查看进程信息:

进程的信息可以通过 /proc 系统文件夹查看。

 写一个死循环程序来,查看进程的执行:

ps ajx | head -1 && ps -ajx | grep myprocess(编译结束后的文件名)

查看进程里的信息: ls /proc/进程pid

更改cwd(当前工作目录):更改为/home/LFH路径

我们创建一个文件会去找到对应的cwd,然后在这个路径下创建对应的文件。

通过更改cwd,此时我们成功将110.txt创建到/home/LFH这个路径下。

通过系统调用获取进程标示符(pid):

1.getpid()和getppid()

2.查看进程pid和父进程pid:

特别注意:

        1.每次执行这个编译好的程序,操作系统分配的pid会不相同,运行结束就进程就会销毁,再次运行又会重新分配!!!

        2.而每次运行的父进程相同都是bach(即:上面的14047),每个进程都有它的父进程,而bash就是process的父进程,也是shell外壳的一种!

3.fork()函数

        用fork()函数创建子进程,如果创建成功父进程的返回值是子进程的pid,子进程的返回值为0;如果创建失败父进程返回值为-1.

4.创建子进程

运行后发现父进程和子进程都在执行!!!

总结:

用fork()函数创建子进程后:

        1.父子进程会共用代码块;

        2.在父子进程进行代码共享时,父进程会把PCB中的部分数据给子进程,但是比如pid就不会给,所以当创建子进程后,子进程也会执行后面的代码;

        3.因为代码共享,所以对应如果需要改变代码中的数据,各个进程会创建属于自己的数据区,用于存放自己改变的数据(写时拷贝)。

        4.创建子进程的目的:因为有些事情我们的父进程不想做,还有其他的事要做,所以创建一个子进程,然后通过if -else语句让它们去执行它们各个需要去做的事情!!!

5.进程之间具有相互独立性

任意一个进程之间具有相对独立性,相互之间没有影响!!!

        即使父进程和子进程亲如父子,但是当我们的子进程和父进程都运行起来之后,子进程挂了,代码也仍会存在,对父进程无影响,父进程挂了,代码也仍会存在,对子进程无影响!!!

 因为程序被加载到内存,运行起来后,进程里存放的是程序的拷贝数据。

以上就是个人学习的见解和学习过程的解析,欢迎各位大佬在评论区探讨,交流!

如果本篇对你有帮助的话,三连支持一下吧。

感谢大佬们的三连! 感谢大佬们的三连! 感谢大佬们的三连!

                                              

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

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

相关文章

Linux socket编程(12):Unix套接字之socketpair、sendmsg和recvmsg详解

在上一篇文章Unix套接字编程及通信例子中,我们对Unix套接字编程有一个基本的了解。但在Unix套接字编程的领域中,有一组特殊而强大的工具:socketpair、sendmsg 和 recvmsg,它们为实现本地进程间通信提供了便捷的方式。 文章目录 1 …

Pandas 打开有密码的Excel

安装包 pip isntall msoffcrypto-tool msoffcrypto库的简单介绍 msoffcrypto提供了对Microsoft Office文件进行加密和解密的功能。它支持对Word、Excel和PowerPoint文件进行加密和解密操作。 msoffcrypto的原理是利用Microsoft Office文件的加密算法对文件进行加密和解密。它能…

绝地求生:NH究极天命圈惊险吃鸡,17斩获单日积分第一,4AM梦游暂居倒数

绝地求生PGC小组赛B组第一轮的比赛即将结束,在刚刚那场决赛圈中NH和17给我们上演了非常精彩的较量,双方战至最后一人,最终由NH击败17收获一鸡,这两支PCL老牌强队总分都超过了40分,晋级胜者组对他们来说压力不大了。新队…

【FPGA图像处理实战】- FPGA图像处理仿真测试工程(读写BMP图片)

FPGA开发过程中“行为功能仿真”是非常必要的一个过程,如果仿真都没通过,则上板测试必定失败。 FPGA图像处理需要读写大量的图像数据,单看这些图像数据实际是没有规则的,如果直接上板测试,调试起来非常困难&#xff0…

看图学源码之— HashMap源码分析

简介: 是基于 哈希表 实现的,存放 k-v 键值对,非同步的方式(未加 synchronized )非线程安全的,hashmap 无序的数据结构: 数组 链表 > 数组 链表 红黑树「链表 和 链表 红黑树 都是为了解…

vue中字典的使用

1.引入字典 dicts: [order_status,product_type],2.表单中使用 select下拉 <el-form-item label"订单状态" prop"orderStatus"><el-select v-model"form.orderStatus" clearable placeholder"请输入订单状态" :disabled"…

新版Win10通过netplwiz设置自动登录时找不到“要使用本计算机,用户必须输入用户名和密码”选项的解决方法

众所周知&#xff0c;Windows系统有个传统艺能&#xff0c;就是通过“netplwiz”或者“control userpasswords2”设置免密码自动登录。前段时间在调整一台虚拟机的配置时&#xff0c;突然惊奇的发现&#xff0c;在设置免密码登录的时候居然找不到需要去掉勾选的复选框了。如下图…

QT+Unity3D 超详细(将unity3D与QT进行连接,并实现信息传递)

QTUnity3D连接 在QT中连接unity3D&#xff0c;首先要有一个unity.exe执行文件。在这里不提供unity执行文件的编写&#xff0c;只提供QT这边与unity3D连接和信息传递。 创建项目 创建一个新的项目&#xff0c;我创建的项目名称如下。 下图是我建立新项目的文件。APP文件就是…

Metasploit的安全防御和逃逸

预计更新 第一章 Metasploit的使用和配置 1.1 安装和配置Metasploit 1.2 Metasploit的基础命令和选项 1.3 高级选项和配置 第二章 渗透测试的漏洞利用和攻击方法 1.1 渗透测试中常见的漏洞类型和利用方法 1.2 Metasploit的漏洞利用模块和选项 1.3 模块编写和自定义 第三章 Me…

<Linux>(极简关键、省时省力)《Linux操作系统原理分析之Linux文件管理(1)》(25)

《Linux操作系统原理分析之Linux文件管理&#xff08;1&#xff09;》&#xff08;25&#xff09; 8 Linux文件管理8.1 Linux 文件系统概述8.2 EXT2 文件系统8.2.1 EXT2 文件系统的构造8.2.2 EXT2 超级块&#xff08;super block&#xff09;8.2.3 组描述符8.2.4 块位图 8.3 EX…

智能优化算法应用:基于社交网络算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于社交网络算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于社交网络算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.社交网络算法4.实验参数设定5.算法结果6.参考…

[ffmpeg] avcodec_alloc_context3 解析

背景 ffmpeg 通过 avcodec_alloc_context3 解析编码器&#xff0c;本文主要来解析一下&#xff0c;这个函数主要做了什么。 具体代码分析 主要是创建了 AVCodecContext ,并给结构体参数赋予初值。 初值设置主要分成两块&#xff0c;1. 所有编码器都相同的部分&#xff1b;2.…

用23种设计模式打造一个cocos creator的游戏框架----(七)代理模式

1、模式标准 模式名称&#xff1a;代理模式 模式分类&#xff1a;结构型 模式意图&#xff1a;为其他对象提供一种代理以控制对这个对象的访问。 结构图&#xff1a; ​ 适用于&#xff1a; 远程代理&#xff1a;也称为大使&#xff0c;这是最常见的类型&#xff0c;在分…

2022年第十一届数学建模国际赛小美赛C题人类活动分类解题全过程文档及程序

2022年第十一届数学建模国际赛小美赛 C题 人类活动分类 原题再现&#xff1a; 人类行为理解的一个重要方面是对日常活动的识别和监控。可穿戴式活动识别系统可以改善许多关键领域的生活质量&#xff0c;如动态监测、家庭康复和跌倒检测。基于惯性传感器的活动识别系统用于通过…

Vue3计算属性与监听属性和生命周期

文章目录 一、计算属性与监视1、computed函数2、watch函数3、watchEffect函数 二、生命周期1、与 2.x 版本生命周期相对应的组合式 API2、新增的钩子函数3、代码实例 一、计算属性与监视 1、computed函数 与computed配置功能一致只有getter有getter和setter 2、watch函数 与…

Kubernetes入门笔记——(2)k8s设计文档

​k8s最初源自谷歌的Brog项目&#xff0c;架构与其类似&#xff0c;主要包括etcd、api server、controller manager、scheduler、kubelet和kube-proxy等组件 etcd&#xff1a;分布式存储&#xff0c;保存k8s集群的状态 api server&#xff1a;资源操作的唯一入口&#xff0c;…

Kafka 的消息格式:了解消息结构与序列化

Kafka 作为一款高性能的消息中间件系统&#xff0c;其消息格式对于消息的生产、传输和消费起着至关重要的作用。本篇博客将深入讨论 Kafka 的消息格式&#xff0c;包括消息的结构、序列化与反序列化&#xff0c;以及一些常用的消息格式选项。通过更丰富的示例代码和深入的解析&…

【Java】Java8重要特性——Lambda函数式编程以及Stream流对集合数据的操作

【Java】Java8重要特性——Lambda函数式编程以及Stream流对集合数据的操作 前言Lambda函数式编程Stream流对集合数据操作&#xff08;一&#xff09;创建Stream流&#xff08;二&#xff09;中间操作之filter&#xff08;三&#xff09;中间操作之map&#xff08;四&#xff09…

2023年山东省职业院校技能大赛信息安全管理与评估二三阶段样题

2023年山东省职业院校技能大赛信息安全管理与评估二三阶段 样题 第二阶段 模块二 网络安全事件响应、数字取证调查、应用程序安全 一、竞赛内容 Geek极安云科专注技能竞赛技术提升&#xff0c;基于各大赛项提供全面的系统性培训&#xff0c;拥有完整的培训体系。团队拥有曾…

docker部署elasticsearch8.x

docker部署elasticsearch8.x 提示1 注意版本差别1.1 docker修改配置1.1.2 docker使用vim报命令不存在的解决办法1.1.3 docker 容器内报错 E: List directory /var/lib/apt/lists/partial is missing. - Acquire ( : No such file or directory) 或者其他权限 PermissionError: …