Linux相关概念和重要知识点(8)(操作系统、进程的概念)

1.操作系统(OS)

(1)基本结构的认识

任何计算机系统都包含一个基本的程序集合,用于实现计算机最基本最底层的操作,这个软件称为操作系统。操作系统大部分使用C语言编写,少量使用汇编语言。

从较大的层面来看,操作系统分为内核(Kernel)和外部程序内核主要进行进程/任务/线程管理,文件系统管理,内存管理、驱动程序管理;外部程序包括Shell(通常指的是命令行界面CLI)、图形化界面(GUI)、glibc、系统调用的库、预装软件等。

我们要理解:我们平时用图形化界面操作Windows实际上是在GUI的运行基础上进行的,同样,使用Linux的命令行窗口也是在CLI这个程序运行的基础上进行的,我们都是在外部程序里进行的操作

(2)OS软硬件资源管理的理解

操作系统的定位就是控制和管理计算机上软硬件资源,让计算机的使用成本降低,能够走进家家户户。在软件层面,有编译器对语言进行翻译;在硬件层面,有文件系统对磁盘数据进行管理,而操作系统则是夹在软硬件之间的软件,起到沟通、协调作用。总的来说,操作系统对软硬件资源高效且安全地管理,是一种以给用户提供更好的使用体验为目的的手段(以人为本)。

(3)OS的结构和软硬件管理方式

①用户调用接口

我们日常使用的软件都是在这个层面上的,包括图形化界面、命令行。像安卓也是以Linux为底层,在用户调用接口上建立起来的

系统调用接口(System Call

对于操作系统而言,它不相信任何人,因为如果它相信用户,自己就危险了,因此它规定用户只能通过操作系统对外提供的接口来进行调用,同时,它也不允许用户跳过它直接向硬件访问。

尽管规定了只能通过接口来访问系统,但是这些接口同样复杂,因此系统调用接口上面还建立了我们日常接触到的软件(用户调用接口),当我们执行操作时,由软件来帮我们调用系统对应的接口,如printf就是通过库来调用对应接口,最后将数据输出到内存文件中。

当我们涉及到任何软硬件沟通时,都需要借助系统调用接口来调用内核。如当我们执行简单数学运算时,运算本身只会占用CPU资源,但运算程序的进程是在内存创建的,因此同样需要调用系统调用接口。

系统调用接口是C语言写的,这就意味着我们凡事要调用系统接口,必须使用C语言。进一步讲,所有编程语言、程序的底层,只要涉及系统接口调用,通通是C语言,包括我们熟知的Java、Python、Rust等

③Kernel

操作系统内核就像是一个管家,向下买菜做饭打扫清洁,向上询问主人的需求。在很多如银行、派出所、医院等也都能见到类似的影子,即用户通过对外开放的窗口提出自己的需求,一层一层向下传递,紧凑有序地完成任务。

④驱动程序

底层硬件都是采用冯诺依曼结构集成在主板上的,能够直接或间接被CPU控制器控制,每一种硬件都要有自己的驱动程序(操作系统自带或需要自己安装),驱动程序不可或缺,因为不同硬件功能不同,实现不同,迭代速度快,如果让操作系统直接访问硬件,那就要频繁修改操作系统和硬件之间的交互方式。为了避免操作系统频繁修改,在操作系统和硬件上做一层抽象,同样以接口形式进行访问,使得开发成本降低。

(4)OS如何控制软硬件资源?先描述,再组织

①硬件层面

Kernel中有大量C语言的数据结构,其中能描述对象的就是结构体。针对不同的硬件,Kernel会在其开辟的内存中存储描述硬件信息的结构体(Linux中一般是struct device),并且将这些结构体通过一定数据结构联系起来(如链表,构成device_list)。这些结构体里面存有硬件基本信息,以及调用驱动程序接口的操作方法。当要和硬件沟通时,Kernel就直接通过struct device调用驱动程序接口,进而和硬件沟通。我们发现,Kernel对硬件的管理转变为对device_list、struct device的管理

②软件层面

由冯诺依曼体系结构出发可以得到,当有程序开始运行时,在SSD(或HDD)中的数据就会被拷贝一份至DRAM中,内存中存储的就是硬盘代码和数据的备份。不仅如此,拷贝的数据还需要进行管理,因为可能同时有多份文件被拷贝进内存。因此,在计算机启动时,DRAM为Kernel分配一定大小的内存中,就有一部分空间是用于描述数据的结构体,称为PCB(进程管理块,PCB是总称,Linux中是struct task_struct)。

PCB底层就是结构体,其功能和前面说的struct device一样,是用于描述载入内存的代码数据的详细信息的。并且这些PCB也以某种数据结构联系在一起,Kernel通过管理这个数据结构,就能够间接管理程序的运行,这也涉及到进程的概念了。

③控制软硬件资源带来的启发-----数据结构、面向对象的思想

通过上面对软硬件管理的方法可以看出,要实现对某对象的管理,需要先对要管理的对象进行描述,将它们的信息和调用方式提取出来放一起,同时不同对象之间用某种结构联系起来(数据结构),进而实现对这些对象的管理(面向对象的思想OOP,体现了管理的本质是对数据和属性的管理)

OS管理软硬件的资源的核心思想是先描述,再组织。面向对象的思想提供了描述的方法,一系列数据结构提供了组织的方法。这也是C++、Java这种面向对象编程语言出现并在当今作为主流的原因。因为几乎所有的程序逻辑都可以用先描述、再组织的思想来进行管理,而面向对象的语言拥有面向对象设计的类,也有一系列数据结构组成的库。很符合管理对象的条件。

包括生活中,上层对我们的管理也是面向对象的思想,他们不需要和我们见面,他们只需要拿到我们的描述信息,一天里干了什么没干什么,再通过传话就可以实现对我们的管理。

2.进程

(1)进程的概念和组成

运行起来的程序就叫进程(进行中的程序),进程是操作系统管理软件的相关概念,是操作系统调度的实体。

当我们启动一个程序时,操作系统首先向硬盘访问,读取程序相关的代码和数据到DRAM中,这相当于冯诺依曼结构中输入设备 -> 存储器的步骤。但是只有代码和数据还不能管理它,还需要一个结构体来管理,Kernel中的PCB结构体就是完成这项工作的,将我们的代码和数据描述起来。每一项进程对应一个PCB、一块内存空间。换句话说,进程 = PCB(包含进程的属性) + 内存中的代码和数据PCB通过某种数据结构联系起来(以链表为例,PCB_list),由Kernel管理。这样,操作系统对软件、对进程的管理就转换为对PCB_list管理(对进程属性的管理),这也体现出先描述、再组织的思想。

注意只有操作系统生成了PCB并和代码数据联系起来后,才被操作系统认为是一个进程。

PCB开辟空间的操作是Kernel进行的,当操作系统启动时,DRAM最先为Kernel分配内存。

PCB是一类结构体的总称,在Linux中具体为struct task_struct

(2)并行处理和并发处理

当程序被操作系统管理起来后,就要解决如何执行的问题了。CPU有两种处理进程的方式,一种是并行处理,一种是并发处理。并行处理是将多个任务列表(struct runqueue = PCB组成的数据结构 + 其他属性)分配给多个CPU,同时并行处理。并发处理是指CPU执行进程代码时,会给每一个进程预分配一个时间片,CPU基于时间片进行轮转执行(非常快),每当执行时间达到时间片,不管有没有执行完都切换为下一个。

并行处理加快处理进程的速度,并发处理保证调度任务能较为公平地得到处理。这两种处理方式适用于绝大多数民用系统。但除此之外还有实时操作系统,这只在特殊领域使用。如车载操作系统就是实时操作系统,它不遵循公平处理的原则,必须要求汽车一旦发生紧急情况,操作系统一定要最高优先级处理紧急状况。

(3)调度顺序

这些任务列表会根据并行的处理方式交给CPU每个核心处理,CPU的每个核心都配有一个调度器,任务列表会先交给调度器,由调度器决策如何并发处理,适时将对应的PCB交给运算器进行处理。进程排队的本质是PCB在排队(进程的属性在排队),同样体现先描述、再组织的思想。

(4)查看进程

当我们创建一个进程时,操作系统会为这个进程分配唯一的pid,pid的生成用到了时间戳,因此不连续以及pid前后两次不同是正常的。

我们可以在代码中使用pid_t getpid()来查看运行代码的进程的pid,pid_t本质是int

当我们运行程序时,就能看到进程对应的pid了

我们还可以通过ps ajx | head -1 && ps ajx | grep (name)查看进程来验证

指令解读:

ps是显示进程的状态,一般需要搭配选项;ajx,a意味着所有进程,j意味着打印进程的pid和ppid等信息,x显示没有控制终端的进程,j可以替换为u,这时就会显示进程的用户、CPU使用率、内存使用率等。

但ps ajx获取到的信息太多了,我们将所有获取的信息通过管道,让head取第一行,也就是每一列的说明。&&意味着第二条指令,当我们想要在一行中执行多条指令时,需要使用&&或;

之后同理,将获取到的信息通过管道传给grep,grep的功能是筛选出所传信息中包含规定字符串的行,日常使用方式是grep (字符串,不能以符号开头) (文件路径)

如此我们就能筛选出我们想要看到的进程了

grep指令的执行本质也是一个进程,所以当我们筛选的时候,ps ajx | grep (name)作为一个指令也会将自己筛选出来,要避免这种情况,我们可以再使用一条管道,将含grep的行筛选出去,即grep -v grep

ps ajx | head -1 && ps ajx | grep (name) | grep -v grep指令执行结果是

(5)/proc内存文件

当进程被创建时,/proc目录下会创建内存文件(不存入磁盘,临时文件,随着进程的消亡而消亡),名字和进程的pid一致。进入这个目录,我们就能看到所有关于这个进程的信息。

ps的底层就是对/proc里面的信息做解读

其中有两个文件很特殊,一个是cwd,一个是exe

exe指向可执行程序的位置,实时监控进程启动的可执行文件的状态。cwd是指向可执行程序当前的工作目录。当我们在代码中有创建文件的行为,如果使用的是相对地址,那么程序运行起来后相对地址前面会拼上cwd构成绝对进程。

我们以下面的代码来进行验证

运行起来后在proc里面可以查看到cwd已经修改

因此最终生成的文件会在cwd目录下生成

当程序开始执行时,我们就可以删掉可执行程序,因为程序相关代码已经被加载到内存中了,此时exe就会检测到

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

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

相关文章

利用低代码快速搭建电商小程序之商品列表页

目标: 搭建商城的一个商品列表页面(先做静态页) 开发环境: 访问白码低代码平台:https://www.bnocode.com/ 白码的新自定义页功能(使用vue框架) 前期准备: 需要先准备商品数据表…

云手机的海外原生IP有什么用?

在全球数字化进程不断加快的背景下,企业对网络的依赖程度日益加深。云手机作为一项创新的工具,正逐步成为企业优化网络结构和全球业务拓展的必备。尤其是云手机所具备的海外原生IP功能,为企业进入国际市场提供了独特的竞争优势。 什么是海外原…

封装一个vue3的文件上传组件(拖拽或点击选择文件)

1. 效果 选择文件后: 2. 代码 <template><divclass"drop-zone c-normal":class"{borderOutline: outline,}"dragover.preventdrop.prevent"handleDrop"click"chooseFiles"><div v-if"files.length < 1"…

并查集 (Union-Find) :从基础到优化

并查集 (Union-Find) 并查集是一种树形数据结构&#xff0c;主要用于处理不相交集合&#xff08;Disjoint Set&#xff09;的合并和查询问题。它特别适用于解决有关连通性的问题&#xff0c;比如在图论中判断两点是否在同一个连通分量中。并查集可以高效地支持以下两种操作&am…

2024年数字化转型与管理国际学术会议(DTM 2024)

目录 重要信息 大会简介 大会组委 征稿主题 论文出版 会议议程 参会方式 重要信息 大会官网&#xff1a;www.icemme.org&#xff08;点击了解大会&#xff0c;投稿等详细信息&#xff09; 大会时间&#xff1a;2024年11月22-24日 大会地点&#xff1a;中国-大连 大会…

Cloudflare为网站添加AI审计 可检查AI爬虫何时抓取和抓取频次以及直接屏蔽爬虫

网络服务提供商 Cloudflare 宣布即日起为所有网站 (包括免费托管的网站) 带来 AI 审计功能&#xff0c;该功能目前处于测试阶段&#xff0c;可以分析 AI 公司的爬虫和抓爬数据。新的 AI 审计工具 (Cloudflare AI Audit) 主要提供 AI 公司的爬虫何时到网站来抓取数据、抓取的数据…

【Rust练习】16.模式

文章题目来自&#xff1a;https://practice-zh.course.rs/pattern-match/patterns.html 1 &#x1f31f;&#x1f31f; 使用 | 可以匹配多个值, 而使用 … 可以匹配一个闭区间的数值序列 fn main() {} fn match_number(n: i32) {match n {// 匹配一个单独的值1 > println!(…

16. C++ TinyWebServer项目总结(16. 服务器调制、调试和测试)

主要包括&#xff1a; 使用 tcpdump 抓包&#xff1b;使用 gdb 调试器&#xff1b;使用压力测试工具&#xff0c;模拟现实世界中的高并发请求&#xff0c;测试服务器在高压状态下的稳定性。 最大文件描述符数 Linux 对应用进程能打开的最大文件描述符数量有两个层次的限制&a…

4. 数据结构: 对象和数组

数字、布尔值和字符串是构建数据结构的原子。不过&#xff0c;许多类型的信息需要不止一个原子。对象允许我们对值&#xff08;包括其他对象&#xff09;进行分组&#xff0c;从而构建更复杂的结构。到目前为止&#xff0c;我们所构建的程序都受到限制&#xff0c;因为它们只能…

软件设计模式——工厂模式

软件设计模式——工厂模式 文章目录 软件设计模式——工厂模式一、设计模式的认知1.1 什么是软件设计模式&#xff1a;1.2 为什么要学习设计模式&#xff1a;1.3 设计模式的分类&#xff1a; 二、工厂模式2.1 工厂模式实例&#xff1a; 一、设计模式的认知 1.1 什么是软件设计…

WordPress LearnPress插件 SQL注入复现(CVE-2024-8522)

0x01 产品描述&#xff1a; LearnPress 是一款功能强大的 WordPress LMS&#xff08;学习管理系统&#xff09;插件&#xff0c;适用于创建和销售在线课程。凭借其直观的界面和丰富的功能&#xff0c;无论您是否具备编程背景&#xff0c;都能轻松搭建起在线教育网站。学会如何使…

Java之路--瓦解逻辑控制与方法使用已是瓮中捉鳖

嗨嗨大家&#xff01;今天我们来学习逻辑运算和方法的使用~ 目录 一 逻辑控制 1 分支结构 1.1 if语句 1.2 switch 语句 2 循环结构 2.1 while 循环 2.2 for 循环 2.3 do while 循环 2.4 break 2.5 continue 3. 输出输入 二、方法的使用 1 方法定义语法 2 实参和…

网络通信——DHCP

目录 一.DHCP应用场景 二.通信过程 三.DHCP报文 四.DHCP通信原理 &#xff08;1&#xff09;租借过程 &#xff08;2&#xff09;DHCP 租期更新 &#xff08;3&#xff09;DHCP重绑定 五.一般路由器的DHCP支持两种地址池 &#xff08;1&#xff09;接口地址池 &…

进制转换,原码反码补码

正数的三码合一 1个byte8位&#xff0c;-128符号位溢出了&#xff0c;所以是1000 0000

基于Python大数据的B站热门视频的数据分析及可视化系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目…

全连接神经网络

这里写目录标题 全连接神经网络vs前馈神经网络基于全连接神经网络的手写数字识别使用Pytorch实现纯Python实现 全连接神经网络的局限 端到端学习 深度学习有时也称为端到端机器学习&#xff08;end-to-end machine learning&#xff09;。这里所说的端到端是指从一端到另一端的…

David律所代理Jose Martin幽默水果版权首发维权,尚未TRO

案件基本情况&#xff1a;起诉时间&#xff1a;2024/9/18案件号&#xff1a;2024-cv-08484原告&#xff1a;Jose Martin原告律所&#xff1a;David起诉地&#xff1a;伊利诺伊州北部法院涉案商标/版权&#xff1a;原告品牌简介&#xff1a;西班牙的卓越艺术家Jose Martin以他非…

网络原理之IP协议(网络层)

目录 前言 什么是IP协议&#xff1f; IP协议的协议头格式 16位总长度&#xff08;字节数&#xff09; 16位标识、3位标志位和13位片偏移 8位生存时间 IP地址管理 1.动态分配IP 2.NAT机制&#xff08;网络地址转换&#xff09; NAT机制是如何工作的 NAT机制的优缺点…

Nginx反向代理配置支持websocket

一、官方文档 WebSocket proxying 为了将客户端和服务器之间的连接从HTTP/1.1转换为WebSocket&#xff0c;使用了HTTP/1.1中可用的协议切换机制&#xff08;RFC 2616: Hypertext Transfer Protocol – HTTP/1.1&#xff09;。 然而&#xff0c;这里有一个微妙之处:由于“升级”…

论文阅读:A Generalization of Transformer Networks to Graphs

论文阅读&#xff1a;A Generalization of Transformer Networks to Graphs 论文地址1 摘要2 贡献Graph TransformerOn Graph Sparsity&#xff08;图稀疏&#xff09;On Positional Encodings&#xff08;位置编码&#xff09;3 Graph Transformer Architecture&#xff08;架…