【Linux进程篇1】认识冯·诺依曼体系结构(引出进程详解)
---------------------------------------------------------------------------------------------------------------------------------
每日鸡汤:
用这生命中的每一秒,给自己一个不后悔的未来。
---------------------------------------------------------------------------------------------------------------------------------
目录
一:认识冯诺依曼系统
二:冯诺依曼结构——硬件层
2.1:认识冯诺依曼体系硬件设备
2.2:关于内存
2.2.1:内存
2.2.2:为什么要给计算机引入内存
2.2.3:两个内存问题
2.3:两个实例深入理解冯诺依曼结构
2.3.1:实例一:QQ聊天数据流
2.3.2:实例二:实验报告发送流
三:冯诺依曼结构——软件层(操作系统)
3.1:OS是什么?
3.2:OS为什么进行管理?
3.3:OS是怎么管理的?
3.3.1:OS的六字真言
3.3.2:描述被管理对象
3.3.3:组织被管理对象
3.3.4:总结
一:认识冯诺依曼系统
冯·诺依曼结构也称普林斯顿结构,是一种将程序指令存储器 和 数据存储器合并在一起的存储器结构。 程序指令存储地址和数据存储地址指向同一个存储器的不同物理位置,因此程序指令和数据的宽度相同,如英特尔 公司的8086 中央处理器 的程序指令和数据都是16位宽。
我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系。
冯诺依曼体系结构:
二:冯诺依曼结构——硬件层
2.1:认识冯诺依曼体系硬件设备
截至目前,我们所认识的计算机,都是有一个个的硬件组件组成:
外部设备(外设):
- 输入设备:包括键盘, 鼠标,扫描仪, 写板等
- 输出设备:显示器,磁盘,打印机等
内部设备(内设):
- 存储器:内存。
- 中央处理器(CPU):含有运算器和控制器等。
关于中央处理器(CPU):
运算器:对我们的数据进行计算任务(算术运算(1+1=2),逻辑运算(1/0))
控制器:对我们的计算过程(计算硬件流程)进入一定的控制。
即;这五大部分都是独立的个体!各个硬件单元必须使用“线”连接起来,进行数据的交互。
2.2:关于内存
2.2.1:内存
内存 (Memory)是计算机的重要部件,也称内存储器和 主存储器,它用于暂时存放CPU中的运算数据,以及与硬盘等 外部存储器 交换的数据。 它是 外存 与 CPU 进行沟通的桥梁,计算机中所有程序的运行都在内存中进行,内存性能的强弱影响计算机整体发挥的水平。
在冯诺依曼体系中的存储器指的是内存
先看计算机中存储分级:
其中,L0,L1,L2,L3全部集成到CPU中,主存L4就是内存,L5和L6称为硬盘。
即存储是分级的!并且从上到下:价格越低,容量越大,速度越慢,离CPU越来越远。
2.2.2:为什么要给计算机引入内存
引入内存(RAM,随机存取存储器)是计算机设计中的一个关键决策,它在计算机系统中扮演着至关重要的角色。
那么为什么要给计算机引入内存呢?首先我们要知道外设运行数据的速度是毫秒级别,而CPU数据的运行速度是纳秒级别。【1ms = 1000000ns】,若没有内存设备,外设直接将数据给入的CPU,根据木桶原理,这个数据运行速度的大差别导致整个计算机的运行速度大大降低到外设级别的速度。即计算机的运行速度取决于外设输入数据的速度。所以,引入内存(速度级别是微秒),调整各个部分的速度差,提高计算机的运行速度。还有一点是,可以使用更少的钱买到不错的计算机。这就会使得计算机被大众所购买。
即引入内存的原因总结有以下几点:
- 提高数据访问速度
- 临时存储空间
- 支持多任务处理
- 虚拟内存的支持
- 数据一致性
- 支持复杂计算
提高数据访问速度
- 快速读写。内存是一种高速存储设备,其读写速度远高于硬盘或固态硬盘。通过将频繁使用的数据和程序代码加载到内存中,可以显著提高计算机的处理速度。
- 减少等待时间。CPU可以直接从内存中读取数据,而不需要频繁地访问较慢的外部存储设备,从而减少了数据访问的等待时间。
临时存储空间
- 工作区。内存为操作系统、应用程序和正在运行的任务提供了一个临时的工作区。这些任务可以在内存中快速执行和交换数据。
- 缓存功能。内存可以作为缓存,存储最近使用过的数据和指令,以便快速访问。这有助于提高系统的整体性能。
支持多任务处理
- 并发执行。现代操作系统允许多个任务同时运行。内存提供了足够的空间来存储多个进程的数据和状态,使它们能够并发执行而不互相干扰。
- 上下文切换。当操作系统在不同任务之间切换时,内存中的数据可以迅速恢复,确保任务之间的平滑过渡。
虚拟内存的支持
- 扩展内存。虚拟内存技术允许操作系统将一部分硬盘空间用作内存的扩展。虽然硬盘的速度较慢,但虚拟内存可以在物理内存不足时提供额外的空间,从而提高系统的稳定性和灵活性。
- 内存管理。通过内存管理和虚拟内存技术,操作系统可以更有效地分配和管理内存资源,优化系统的性能和响应时间。
数据一致性
- 实时更新。内存中的数据可以被实时更新,确保所有正在运行的任务都能访问到最新的数据。这对于需要频繁更新和共享数据的应用尤为重要。
- 减少磁盘I/O。通过将常用数据保存在内存中,可以减少对磁盘的读写操作,延长磁盘寿命并减少I/O瓶颈。
支持复杂计算
- 大数据处理。内存可以容纳大量的中间结果和临时数据,支持复杂的计算任务,如科学计算、数据分析和机器学习等。
- 高性能计算。对于高性能计算应用,内存的容量和速度直接影响计算效率。充足的内存可以支持大规模并行计算和高吞吐量的数据处理。
总结:内存是计算机系统中不可或缺的一部分,它通过提供快速的数据访问、临时存储空间、支持多任务处理、虚拟内存支持、数据一致性和复杂计算等功能,极大地提高了计算机的整体性能和用户体验。没有内存,计算机的运行效率将会大大降低,无法满足现代计算的需求。
2.2.3:两个内存问题
一个程序要运行,必须要先加载到内存中运行,为什么?
答:因为有冯诺依曼系统规定!
为什么当时写的进度条,默认显示的数据是可能会缓存起来的,在哪里缓存?
答:是在存储器(内存)中缓存的。
即:代码也是数据,是数据就必须要在CPU中运行,CPU无法从外设中拿取数据,CPU只能从内存中拿取数据。
2.3:两个实例深入理解冯诺依曼结构
2.3.1:实例一:QQ聊天数据流
当开启电脑时,就将操作系统加载到了内存中了。所以当打开QQ软件时,同样也将QQ软件加载到了内存中了。
2.3.2:实例二:实验报告发送流
具体步骤:实验报告发送给我的朋友整个过程(实验报告从我的磁盘拷贝到对方的磁盘)
实验报告=文档=文件,将其推拽发送给朋友。数据从磁盘中读取,到内存。CPU从内存中拿取实验报告数据进行解密加密等一系列操作,完成后将其加载到内存,之后内存再加载到输出设备(网卡,显示器等),通过网络,到朋友的输入设备(网卡),将其再加载到内存中,CPU从内存中拿取经过解密等操作完成后再加载到内存中,再加载到输出设备(显示屏,磁盘等)中。
总结:所有设备都只能和内存打交道!!!
三:冯诺依曼结构——软件层(操作系统)
3.1:OS是什么?
操作系统是一款进行管理(硬件和软件)的软件!!!
任何计算机系统都包含一个基本的程序集合,称为操作系统(OS),笼统的讲,操作系统包括:
- 内核(进程管理,内存管理,文件管理,驱动管理)
- 其他程序(例如函数库,shell程序等等)
3.2:OS为什么进行管理?
先说结论:
- 操作系统帮助用户,管理好下面的软硬件资源。
- 为了给用户提供一个良好(稳定、高效、安全)的运行环境。。
即:操作系统通过管理好底层的软硬件资源(手段),为用户提供一个良好的执行环境(目的)
OS硬件部分:
操作系统通过其内部的驱动程序来管理下部的底层硬件,因为硬件肯定会有众多的属性,所以可以通过一份结构体来描述这些硬件,注定了操作系统肯定有大量的数据结构。即操作系统和硬件直接打交道。
OS软件部分:
操作系统是一款软件,在操作系统里面,里面会有各种数据,可是操作系统并不相信任何用户!!!所以操作系统为了保证自己的数据安全,也为了保证给用户能够提供服务,操作系统以 接口 的方式给用户提供调用的入口,来获取操作系统内部的数据【类似于银行柜台,只留下一个小小的窗口与用户沟通交互】。
所以所谓的接口:是操作系统提供的用C语言实现的,自己内部的函数调用——系统调用。
系统调用:所有访问操作系统的行为,都只能通过系统调用【System call】来完成。与用户进行交互。
用户操作接口(shell外壳,lib库,部分指令):简称“王婆”,在它们上面进行的编程称为系统编程。即程序员通过用户操作接口来对操作系统进行操作。
例如:当我们输入一个printf打印函数时,通过l找到用户操作接口的【lib函数库】,然后命令到系统调用接口,再往下操作系统,操作系统通过执行显示器驱动程序,显示器驱动程序再调用底层的显示器硬件,将信息打印到显示器上,供给用户看到。
3.3:OS是怎么管理的?
3.3.1:OS的六字真言
面向对象最最最最重要的真言:先描述,在组织!
3.3.2:描述被管理对象
举个形象的例子:“大学就是在管理体系下的一套系统”
在学校学生就是最典型的被管理者,而最典型的管理者就是校长。所以,学生和校长并不是经常见面的。即特点一:管理者和被管理者是不需要见面的!但是校长是如何管理好学生的呢?是通过导员向校长传递关于学生的一系列信息,校长通过这些信息来进行发布相关的管理政策。即特点二:管理者在不见被管理者的情况下,只要能得到管理信息,就可以在未来进行管理决策【管理的本质:通过对数据的管理达到对人的管理】。而辅导员的情况,大部分是没有决策权的,不算管理者。只是传达管理者的决策,即执行者角色。此时得出事情可分为两种:1.决策;2.执行。即特点三:管理者和被管理者不见面的情况下,是通过执行者拿到对应的信息的。
即当前:校长就相当于计算机中的操作系统(OS),辅导员相当于计算机中的驱动程序,学生相当于计算机中的软硬件资源。
一个计算机故障实例:当计算机中的网卡出现问题时,驱动程序将故障信息传递给操作系统,若操作系统能修复则自动修复,若修复不了的,就往上报给用户,提醒用户出现故障(网卡)。
因为软硬件资源的数据量实在是太大了,所以要管理它们,就必须对它们进行描述。例如大学来描述学生:
学生学院 | 专业 | 班级 | 学号 | 姓名 | 性别 | ... |
XXX | XXXX | XXXXX | XXXXX | XX | XX | X |
... | ... | ... | ... | ... | ... | ... |
会将学生描述成为这样一个excl表格形式。
但是只要是事物或者物体,就能通过一系列属性将其表示出来。描述一个学生:
struct Student
{char 学生学院[];char 专业[];char 班级[];char 学号[];char 姓名[];char 性别[];// ...struct Student* next;
}
这就是描述的过程。
3.3.3:组织被管理对象
组织,就是将一个一个的对象组织起来。通过管理好这个组织起来的大家伙(链表、二叉树...)来管理好内部的一个个对象。
例如,将一个学生定义出来:
struct student stu1 = {};
struct student stu2 = {};
//...
通过一个个学生结构体,将众多学生通过链表形式连接起来,这样就可以将这个学生链表结构管理好就可以了。
成功的将 对学生的管理工作 转换成为了 对链表的增删改查等工作。
而在计算机中,所有的设备文件都可以将其描述出来。之后就通过对设备的管理转换成为了对数据结构的管理。
这就是组织的过程。
3.3.4:总结
计算机的世界都是围绕“先描述,后组织”这六子真言展开的。
因为这“六子真言”,在操作系统中,管理任何对象,最终都可以转化成为对某种数据结构的增删改查。这就是建模的过程!
所以:计算机管理硬件或者软件:
- 描述起来,使用 struct 结构体。
- 组织起来,使用链表或者其他高效的数据结构。