【Linux取经路】冯诺依曼结构体系与操作系统的碰撞(一)

简介: 【Linux取经路】冯诺依曼结构体系与操作系统的碰撞(一)

8f0f291eeb5f4738807660553533d7e9.gif

一、冯诺依曼体系结构

我们现在常见的计算机,如笔记本,以及我们不常见的计算机,如服务器,它们本质都是一堆硬件(如:cpu、内存、网卡、磁盘等)的集合。并不是把这些硬件毫无章法的放在一起就能够组成计算机,各硬件之间首先要具备协同能力,这就要求硬件与硬件之间要组织好,构建成一个系统,这样才能对外提供计算输出服务。

我们现在常见的计算机,大部分都遵守冯诺依曼体系。

bb327de5a47e4ba695aee2b981dabef6.png

1.1 硬件介绍

📖输入、输出设备的理解

首先,计算机是为了给用户提供计算服务的。前提条件是,用户需要先把数据交给计算机,但是计算机只认识二进制0和1,并且是以各种电路信号来控制的,而用户的数据一般都是文字、图片、音频等,此时就需要有一些设备,能够把用户的数据转换成二进制,然后再交给计算机。这就决定了,用户是无法直接访问到内存、中央处理器等硬件,必须要经过输入设备。例如通过键盘上输入字母abcd,在用户看来,输入的是一个个的字符串,但在计算机看来,我们只是输入了一串01序列。计算机运算完毕时,也只能输出二进制,为了将这些二进制结果转换成文字、图片等用户可以看懂的形式,就需要经过输出设备的处理。因此,输入、输出设备一般是用来进行人和计算机,计算机和计算机之间互相传递信息的外部设备。

● 输入设备:鼠标、键盘、摄像头、磁盘、网卡等

● 输出设备:显示器、播放器硬件、磁盘、网卡等

小Tips:需要注意,磁盘属于外部设备,计算机可以从磁盘中读取数据进行运算,也可以把运算结果写入到磁盘当中。

📖存储器

这里的存储器就是我们平时所说的内存,它是一种硬件级别的缓存空间,在冯诺依曼体系结构中占据核心地位。

📖中央处理器CPU

中央处理器也叫做CPU,它由运算器和控制器共同组成。在不考虑缓存的情况下,CPU只能对存储器(内存)进行读写,不能访问外设(输入、输出设备)。其中运算器是对用户输入的数据执行计算任务,分为算数运算和逻辑运算,前者就是加减乘除,后者就是真假判断。控制器是对计算过程,即硬件流程进行控制,协调各组件与各单元间的工作。

📖总线概念

冯诺依曼体系结构中涉及的五大模块,输入设备、存储器、运算设备、控制器、输出设备,都是独立的个体,有各自独立的功能,这些独立的个体要共同组成一个计算机,就必须要将它们组织联系起来。输入设备需要把数据交给内存,CPU再从内存中读取数据进行运算,将运算结果再写入内存,内存最终再把数据交给输出设备,为了实现数据在五大模块间的流动,就需要把用“线”把各个硬件单元连接起来,这个“线”在计算机中就被称作总线,总线可分为系统总线和IO总线。前者是用于连接CPU和内存,后者是连接内存和外设(输入、输出设备)。有些总线在我们拆开计算机后可以直接看到,有些则是直接集成在硬件电路上。

1.2 内存的重要性

冯诺依曼体系结构要求,数据必须先从输入设备写入存储器,CPU再从存储器读取数据进行运算,CPU不能直接从输入设备读取数据,同样CPU的运算结果也不能直接写入到输出设备,而是要先写入存储器,再从存储器中将结果刷新到输出设备。

📖为什么CPU只能和内存打交道?

在一台计算机中,可以用来存储数据的硬件有多种,例如:寄存器、缓存、内存、硬盘、网盘等,它们按照访问速度的快慢形成了一个存储金字塔,如下图所示:

f4ff0e8533fb44c2b8cb094716b7806f.png

寄存器的读取速度是纳秒级别,内存的读取速度是微秒级别,外部设备(磁盘)的读取速度是毫秒级别的。由于CPU和外设之间的速度代差比较大,如果将CPU与外设直接进行连接,那么在木桶效应的影响下,会导致计算机整体的运算速度下降。

e9ebfca03d144ef1abc243c2e878b2ff.png


如果CPU直接和外设连接,尽管CPU的运算速度再怎么快,计算机整体的运算能力也会被外设的读取速度所限制。因此为了降低木桶效应对计算机整体运行速度的影响,引入了一种速度和容量都比较合适的存储设备——内存,冯诺依曼体系结构要求CPU只能和内存进行数据交互。

内存除了读取速度比较快以外,它还起着第三方中转站的作用,即我们可以把数据从输入设备先预加载到内存,等CPU空闲了,再直接到内存读取数据即可。CPU的运算和内存从外设读取数据是可以同时进行的。内存的工作就像菜鸟驿站,寄给我们包裹可以暂存在菜鸟驿站,等我们工作结束有空了再去将包裹取回来,假设没有菜鸟驿站,包裹就必须直接寄到收件人的手上,那就只能等收件人在家的时候再寄包裹。内存也是同理,假设没有内存,外设与CPU直连,那此时外设就只能等CPU当前的运算结束后,才能继续将数据喂给CPU。

小Tips:操作系统保证了CPU的运算和IO可以同时进行。

📖一个程序要运行,必须先加载到内存

以我们写的.c源文件为例,我们代码写好后,需要先编译生成一个.exe结尾的可执行程序,然后才能运行。我们写的源文件,以及编译得到的可执行文件,它们都是存在磁盘(外设)上的。运行就是让CPU来执行我们的代码,对我们的数据进行运算,而根据冯诺依曼体系结构的要求,CPU只能从内存中拿数据,因此就决定了,一个程序想要运行,就必须先加载到内存。

所有的软件设计,都必须遵守硬件结构,硬件是我们整个计算机的下线和边界,软件是上线和天花板,只要是硬件要求,所有的软件都必须要遵守。即所有的软件要想运行,必须先把数据加载到内存。

现在再来看我们之前写的进度条小程序,在不加\n的时候,输出信息会暂时存储在缓冲区中,只有当我们主动去刷新缓冲区才能把数据输出到显示器(外设)上。缓冲区就是内存的一部分,上面的现象就是冯诺依曼结构体系的侧面印证,CPU会将运算的结果先写入到内存,然后外设再从内存中拿数据。

小Tips:外设和CPU在数据层面不会直接交互,但是在信号控制阶段,CPU和外设是可以直接进行交互的。

📖QQ聊天时的数据流动


1d4de990e76d43a5a1d4a8e1968492ef.png

QQ聊天的第一步是打开QQ这款软件。在春人看来,打开QQ这款软件,就是点击它的应用图标,但是在计算机看来,本质上是把QQ这个可执行程序加载到内存当中,此时CPU就可以从内存中读取数据进行运算啦,运算的结果在春人看来,就是显示出了QQ的应用界面。

b83eebe6ee964437a2975bc14a6e25c0.png

接下来,春人点开和你的对话框,通过键盘输入了“你好呀,伙计!”。因为这个对话框是QQ的,此时QQ已经被加载到了内存当中,所以春人通过键盘输入的内容,本质上会被加载到内存中。接下来CPU就闪亮登场啦,它从内从中将春人想要发送的消息拿出来,进行一系列的打包运算,再把它交还给内存,然后内存会将这个包交给输出设备(这里是网卡、显示器),输出设备再将包通过网络就可以发送给对方啦。

对方的计算机,要通过网卡从网络中获取春人发送的消息,此时网卡又充当了输入设备,网卡拿到的数据必须先交给内存,CPU从内存中把数据拿出来进行解包将结果再写入到内存,内存再将数据刷新到输出设备(显示器),此时你就能看到春人发送的消息啦。


相关实践学习
CentOS 7迁移Anolis OS 7
龙蜥操作系统Anolis OS的体验。Anolis OS 7生态上和依赖管理上保持跟CentOS 7.x兼容,一键式迁移脚本centos2anolis.py。本文为您介绍如何通过AOMS迁移工具实现CentOS 7.x到Anolis OS 7的迁移。
目录
相关文章
|
2天前
|
缓存 网络协议 Linux
Linux操作系统内核
Linux操作系统内核 1、进程管理: 进程调度 进程创建与销毁 进程间通信 2、内存管理: 内存分配与回收 虚拟内存管理 缓存管理 3、驱动管理: 设备驱动程序接口 硬件抽象层 中断处理 4、文件和网络管理: 文件系统管理 网络协议栈 网络安全及防火墙管理
19 4
|
1天前
|
安全 网络协议 Linux
Linux操作系统的内核升级与优化策略####
【10月更文挑战第29天】 本文深入探讨了Linux操作系统内核升级的重要性,并详细阐述了一系列优化策略,旨在帮助系统管理员和高级用户提升系统的稳定性、安全性和性能。通过实际案例分析,我们展示了如何安全有效地进行内核升级,以及如何利用调优技术充分发挥Linux系统的潜力。 ####
14 1
|
4天前
|
物联网 Linux 云计算
Linux操作系统的演变与未来趋势####
【10月更文挑战第29天】 本文深入探讨了Linux操作系统从诞生至今的发展历程,分析了其在服务器、桌面及嵌入式系统领域的应用现状,并展望了云计算、物联网时代下Linux的未来趋势。通过回顾历史、剖析现状、预测未来,本文旨在为读者提供一个全面而深入的视角,以理解Linux在当今技术生态中的重要地位及其发展潜力。 ####
|
9天前
|
边缘计算 人工智能 运维
Linux操作系统:开源力量的崛起与影响###
一场技术革命的回顾 回溯至1991年,当Linus Torvalds宣布Linux操作系统的诞生时,世界或许并未意识到这一举措将如何深刻地改变技术领域的面貌。本文旨在探讨Linux操作系统的发展历程、核心特性、以及它如何引领了一场开源运动,重塑了软件行业的生态。从最初的个人爱好项目成长为全球最广泛采用的服务器操作系统之一,Linux的故事是技术创新与社区精神共同推动下的辉煌篇章。 ###
|
8天前
|
人工智能 安全 Linux
|
11天前
|
物联网 Linux 5G
Linux操作系统的演变与未来趋势####
本文深入探讨了Linux操作系统的发展历程,从最初的一个学生项目到如今全球最流行的开源操作系统之一。文章将分析Linux的核心优势、关键特性以及它在云计算、物联网和嵌入式系统中的应用前景。通过具体案例展示Linux如何推动技术创新,并预测其在未来技术生态中的角色。本文旨在为读者提供一个全面而深入的理解,帮助他们认识到Linux在现代计算环境中的重要性及其未来的潜力。 ####
|
11天前
|
人工智能 安全 物联网
Linux操作系统的演变与未来:从开源精神到万物互联的基石###
本文是关于Linux操作系统的演变、现状与未来的深度探索。Linux,这一基于Unix的开源操作系统,自1991年由林纳斯·托瓦兹(Linus Torvalds)学生时代创造以来,已经彻底改变了我们的数字世界。文章首先追溯了Linux的起源,解析其作为开源项目的独特之处;随后,详细阐述了Linux如何从一个小众项目成长为全球最广泛采用的操作系统之一,特别是在服务器、云计算及嵌入式系统领域的主导地位。此外,文章还探讨了Linux在推动技术创新、促进协作开发模式以及保障信息安全方面的作用,最后展望了Linux在未来技术趋势中的角色,包括物联网、人工智能和量子计算等前沿领域的潜在影响。 ###
|
17天前
|
运维 安全 Linux
Linux中传输文件文件夹的10个scp命令
【10月更文挑战第18天】本文详细介绍了10种利用scp命令在Linux系统中进行文件传输的方法,涵盖基础文件传输、使用密钥认证、复制整个目录、从远程主机复制文件、同时传输多个文件和目录、保持文件权限、跨多台远程主机传输、指定端口及显示传输进度等场景,旨在帮助用户在不同情况下高效安全地完成文件传输任务。
126 5
|
17天前
|
Linux
Linux系统之expr命令的基本使用
【10月更文挑战第18天】Linux系统之expr命令的基本使用
59 4
|
4天前
|
缓存 监控 Linux
下一篇
无影云桌面