【Linux】进程概念(上)(1)

简介: 【Linux】进程概念(上)(1)

👉冯诺依曼体系结构👈


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

b9ca779225284a32a1bb01060259f97e.png

截至目前,我们所认识的计算机,都是由一个个的硬件组件组成的。


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


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


  • 这里的存储器指的是内存,内存掉电易失。而磁盘输入外存,其具有永久性存储能力。
  • 不考虑缓存情况,这里的 CPU 能且只能对内存进行读写,不能访问外设(输入或输出设备)。
  • 外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取。

一句话,所有设备都只能直接和内存打交道。

有些硬件既是输入设备,又是输出设备,如磁盘和网卡。

外设是相对于内存和 CPU 而言的。

运算器 + 控制器 + 其他 = CPU。

所有的外设有数据需要加载,只能加载到内存中。内存写出数据,也是写到外设中。

CPU 不和外设直接打交道,只能和内存直接打交道。


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


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

e4958a9d7d134580b3bff61597e8ab28.png


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


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


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


b5e11aa7270d40ddb4bda351d6771922.png


👉操作系统(Operator System)👈


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


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

9524a21f6ab54385964577f4d8cbd22b.png

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


8f532b69d5454628827cfbfb3b82d45b.png

管理者通过对数据进行管理实现对被管理者的管理

数据的采集和决策的执行由执行者来做


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




adc94af609a84c9f8a29a571b826da2e.png

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

a08245df820c45c090e6855370a5f8e9.png



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

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


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

0395d45e03f941e2a600988a9c033670.png

ffd0136fc29b454ca82b44c9a3de275e.png


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


系统调用和库函数的概念


在开发角度,操作系统对外会表现为一个整体,但是会暴露自己的部分接口,供上层开发使用,这部分由操作系统提供的接口,叫做系统调用。

系统调用在使用上,功能比较基础,对用户的要求相对也比较高。所以,有心的开发者可以对部分系统调用进行适度封装,从而形成库。有了库,就很有利于更上层用户或者开发者进行二次开发。


计算机软硬件体系结构


a8efdaf912284d8ca5f6744a2d975bea.png



























相关文章
|
5月前
|
并行计算 Linux
Linux内核中的线程和进程实现详解
了解进程和线程如何工作,可以帮助我们更好地编写程序,充分利用多核CPU,实现并行计算,提高系统的响应速度和计算效能。记住,适当平衡进程和线程的使用,既要拥有独立空间的'兄弟',也需要在'家庭'中分享和并行的成员。对于这个世界,现在,你应该有一个全新的认识。
243 67
|
4月前
|
NoSQL Linux 编译器
GDB符号表概念和在Linux下获取符号表的方法
通过掌握这些关于GDB符号表的知识,你可以更好地管理和理解你的程序,希望这些知识可以帮助你更有效地进行调试工作。
201 16
|
4月前
|
Web App开发 Linux 程序员
获取和理解Linux进程以及其PID的基础知识。
总的来说,理解Linux进程及其PID需要我们明白,进程就如同汽车,负责执行任务,而PID则是独特的车牌号,为我们提供了管理的便利。知道这个,我们就可以更好地理解和操作Linux系统,甚至通过对进程的有效管理,让系统运行得更加顺畅。
129 16
|
4月前
|
Unix Linux
对于Linux的进程概念以及进程状态的理解和解析
现在,我们已经了解了Linux进程的基础知识和进程状态的理解了。这就像我们理解了城市中行人的行走和行为模式!希望这个形象的例子能帮助我们更好地理解这个重要的概念,并在实际应用中发挥作用。
103 20
|
3月前
|
监控 Shell Linux
Linux进程控制(详细讲解)
进程等待是系统通过调用特定的接口(如waitwaitpid)来实现的。来进行对子进程状态检测与回收的功能。
78 0
|
3月前
|
存储 负载均衡 算法
Linux2.6内核进程调度队列
本篇文章是Linux进程系列中的最后一篇文章,本来是想放在上一篇文章的结尾的,但是想了想还是单独写一篇文章吧,虽然说这部分内容是比较难的,所有一般来说是简单的提及带过的,但是为了让大家对进程有更深的理解与认识,还是看了一些别人的文章,然后学习了学习,然后对此做了总结,尽可能详细的介绍明白。最后推荐一篇文章Linux的进程优先级 NI 和 PR - 简书。
111 0
|
3月前
|
存储 Linux Shell
Linux进程概念-详细版(二)
在Linux进程概念-详细版(一)中我们解释了什么是进程,以及进程的各种状态,已经对进程有了一定的认识,那么这篇文章将会继续补全上篇文章剩余没有说到的,进程优先级,环境变量,程序地址空间,进程地址空间,以及调度队列。
72 0
|
3月前
|
Linux 调度 C语言
Linux进程概念-详细版(一)
子进程与父进程代码共享,其子进程直接用父进程的代码,其自己本身无代码,所以子进程无法改动代码,平时所说的修改是修改的数据。为什么要创建子进程:为了让其父子进程执行不同的代码块。子进程的数据相对于父进程是会进行写时拷贝(COW)。
79 0
|
6月前
|
Linux 数据库 Perl
【YashanDB 知识库】如何避免 yasdb 进程被 Linux OOM Killer 杀掉
本文来自YashanDB官网,探讨Linux系统中OOM Killer对数据库服务器的影响及解决方法。当内存接近耗尽时,OOM Killer会杀死占用最多内存的进程,这可能导致数据库主进程被误杀。为避免此问题,可采取两种方法:一是在OS层面关闭OOM Killer,通过修改`/etc/sysctl.conf`文件并重启生效;二是豁免数据库进程,由数据库实例用户借助`sudo`权限调整`oom_score_adj`值。这些措施有助于保护数据库进程免受系统内存管理机制的影响。
|
6月前
|
存储 Linux 调度
【Linux】进程概念和进程状态
本文详细介绍了Linux系统中进程的核心概念与管理机制。从进程的定义出发,阐述了其作为操作系统资源管理的基本单位的重要性,并深入解析了task_struct结构体的内容及其在进程管理中的作用。同时,文章讲解了进程的基本操作(如获取PID、查看进程信息等)、父进程与子进程的关系(重点分析fork函数)、以及进程的三种主要状态(运行、阻塞、挂起)。此外,还探讨了Linux特有的进程状态表示和孤儿进程的处理方式。通过学习这些内容,读者可以更好地理解Linux进程的运行原理并优化系统性能。
235 4