【Linux】从冯·诺依曼体系到操作系统的理解

目录

一、冯·诺依曼体系结构

[1. 冯·诺依曼体系结构是什么?](#1. 冯·诺依曼体系结构是什么?)

[2. 数据流动是怎么样的?](#2. 数据流动是怎么样的?)

[3. 场景:解释qq聊天数据流动的过程](#3. 场景:解释qq聊天数据流动的过程)

二、操作系统

[1. 操作系统是什么?为什么存在?](#1. 操作系统是什么?为什么存在?)

[2. 理解如何管理:先描述,再组织](#2. 理解如何管理:先描述,再组织)


前言

本章我们将从硬件和软件两个方面来介绍。在硬件方面,我们将理解一下冯·诺依曼体系结构;在软件方面,我们将理解操作系统是什么、为什么存在,以及它是如何工作(管理)的。


一、冯·诺依曼体系结构

1. 冯·诺依曼体系结构是什么?

冯·诺依曼体系结构是由美籍科学家冯·诺依曼在20世纪40年代提出的。

当代我们常见的计算机,如笔记本,以及我们不常见的计算机,如服务器,它们大部分都遵守冯·诺依曼体系结构的。如图所示:这就是冯·诺依曼体系结构。它是由5个主要部分构成的:

  • 输入设备:负责将外部的信息(如键盘敲击、鼠标点击)转换成计算机能处理的二进制数据并送入内存(例如键盘、鼠标、麦克风)。
  • 输出设备:负责将计算机处理后的结果转换成人能理解的形式展示出来(例如显示器、打印机、音响)。
  • 存储器 :计算机系统中用来存放数据和程序代码的部件,通常指主存储器,其实就是内存。它是CPU直接交换数据的对象。
  • 运算器:负责完成各种算术运算(如加、减、乘、除)和逻辑运算(如与、或、非)。
  • 控制器:是整个计算机的"指挥中心",负责对计算机硬件的运行流程进行一定的控制。

其中,输入设备输出设备 它们又被叫做外部设备 ,简称外设 ;而运算器控制器 通常被集成在一块芯片上,也就是我们常说的 CPU(中央处理器)

这5大硬件设备模块都是独立的,每个都有各自的功能。也就是说,其实在我们的电脑上,是可以将它们都分别拆开的。而这些独立的个体要能共同组成一个计算机,也就是要实现各个设备之间的数据交互,那么各个硬件单元之间必须使用"线"连接起来,这些线在计算机中被称为总线,它又分为两类:

  • 一类叫做系统总线:它是实现CPU内存之间交互的总线;
  • 一类叫做IO总线:它是实现外设内存之间交互的总线。

所以就有了上面的这个冯·诺依曼体系结构图。

2. 数据流动是怎么样的?

冯·诺依曼体系结构不仅规定了硬件的构成,它还规定了我们数据的流动,也就是上面图中我们红色箭头的部分,即:

数据流动的过程:

我们的数据必须是先从输入设备交到内存中,然后CPU再在从内存中拿数据(CPU不能直接从输入设备中拿数据),CPU再在内部做计算,计算后,再将数据从CPU写会到内存中(不能将数据直接从CPU输出到输出设备上),最后在将数据从内存刷新到输出设备上。

上面数据流动的结论就是:数据都必须经过存储器(内存)让CPU与外设进行交互,而不能让CUP与外设直接进行数据交互。一句话,所有设备都只能直接和内存打交道(数据层面)

为什么呢?

为什么不能让CPU与外设直接进行数据交互呢?这是因为这样做会导致效率很慢。原因如下:

在CPU中寄存器的存储效率是很高,而外设的存储效率是很低的,而内存存储效率适中。在存储领域,我们有一个存储金字塔,如图所示:而我们CPU中的寄存器,我们可以理解成纳秒级的,而内存理解成微秒级的,外设理解成毫秒级的,所以CPU和外设之间的存储效率差别太大了,正如木桶原理(存多少水取决于构成这个木桶的最短的木头片决定),所以如果CPU和外设进行交互,则其存储效率会以外设的效率为主,这就会让我们的计算机很慢。所以我们就引入了内存,内存它速度适中,容量适中, 这样就可以适配我们硬件层面上CPU和外设的速度差,那么最终呈现出的速度就一内存的速度为主了。

有了内存,其效率也不会很慢,因为:

引入内存后,当我们从外设加载第一个程序到内存,CPU 就可以直接与内存进行数据交互。此时,如果我们再加载第二个程序,即便 CPU 正在运行第一个程序,我们也可以同时让第二个程序加载到内存中。等到 CPU 空闲时,就可以直接执行第二个程序。这样,就实现了程序的加载与运行同时进行,从而让多个程序看起来像是在同时运行(并发),也提高了系统效率。

所以,存储器(内存)可以看做是一个硬件级别的缓存空间。它在整个冯·诺依曼体系结构时出于核心地位的

以前问题的理解:

所以,为什么一个程序要运行,必须先加载到内存中? 就是因为这是冯·诺依曼体系结构规定的。而我之前的写的一篇**进度条程序,为什么没有加\n,就没有立即显示数据?**就是因为数据被缓存起来了,它缓存的位置就是内存中的每一个位置。

注意

CPU和外设之间在数据层面是没有交互的(上面冯·诺依曼体系结构图中的红色箭头),但是在控制层面是有交互的(上面冯·诺依曼体系结构图中的黑色箭头),关于控制信号的交互,咱们后面再说。

3. 场景:解释qq聊天数据流动的过程

上面我们只是对冯·诺依曼体系结构概念的理解,下面来理解一下关于它在实际应用上的认识。示例:

通过冯·诺依曼体系结构解释一下,你登录QQ开始和朋友聊天,其中数据流动的过程。

当我打开QQ,会把QQ的执行程序(.exe文件)从硬盘加载到内存(存储器) 中,当我们在QQ中输入消息,我们是通过键盘来输入的,所以输入设备是键盘 ,输入的消息就会打印在qq的对话框中,qq这个软件本间就在内存中,所以我们输入的消息就会先加载到内存中 ,然后QQ会将我们输入的消息(还包括我们的发送事件,发送人名等信息)给CPU进行打包计算 ,打包计算完成后,再将这些包写回内存 ,然后通过QQ这个软件就会将数据从内存发送到我计算机的网卡中**(** 同时QQ中的显示器也会看到我们发送的消息),这是的输出设备就是网卡和显示器

经过网络(忽略其他细节),你朋友电脑的网卡中,就会在网络中拿到你发送的数据,此时输入设备是网卡 ,网卡会将输入加载到内存中 ,在朋友的电脑上,CPU会将内存中的该数据进行解包解压 ,再将解包完成后的数据写会内存 ,最后再将此时内存中的数据显示到它的电脑的显示器(QQ对话框)上了,此时输出设备就是显示器 。如图所示:

另外,如果我发送的是文件,则此时我的qq就需要从磁盘上先去读取这个文件,输入设备就是磁盘,这个文件经内存,再由CPU打包写回内存,在由网卡发送出去,输出设备是网卡;而朋友则通过网卡获取到数据,输入设备则是网卡,网卡将数据加载到内存,在由CPU解包,写回内存,最后再将文件存在磁盘上,输出设备则是磁盘。

所以,本质上,我们发的消息,就是通过冯·诺依曼体系结构从一台电脑拷贝到了另一台电脑上。


二、操作系统

1. 操作系统是什么?为什么存在?

定义

操作系统(Operating System,简称 OS)是一款管理 计算机硬件与软件资源的软件。

是软件,所以当我们启动计算机的时候,最先被加载的核心系统软件就是它。

为什么需要操作系统?

有两点:

  • 操作系统可以帮助用户管理好底层软硬件资源。
  • 为用户(包括普通用户和开发人员)提供一个稳定、高效、安全的运行环境。

操作系统的定位

如图是操作系统的体系架构图

其中最底层的是一些硬件,它们是通过冯·诺依曼体系结构规定构成的。

硬件上面就是一些驱动程序,所有的硬件要被访问,都要配上对应的驱动程序(因为不同的硬件有不同的工作原理和指令集),没有驱动程序,硬件就访问不了。比如:当我们将鼠标插在电脑上,我们鼠标可能不是立即就可以使用,可能会等几秒才可以使用,这段时间中,虽然我们在物理上连接了鼠标,但是它的驱动程序还没有加载,所以这段时间其实就是在加载鼠标的驱动程序。所以驱动程序其实就是和硬件打交道的程序,充当了操作系统内核与物理硬件之间的桥梁。

在上面就是操作系统,里包含了四大核心管理功能:内存管理,进程管理, 文件管理, 驱动管理。

再往上是 系统调用接口,因为操作系统内部有大量的关键数据, 为了保证自身数据的安全,以及保证为用户提供服务的质量,操作系统不信任任何用户。所以为了保证自己数据的安全以及给用户提供良好的服务,操作系统会以接口 的形式给用户提供访问操作系统内部数据或服务的入口。因为操作系统是C语言实现的,所以这些接口就是操作系统提供的、用C语言实现的内部函数调用 ,它们可以获取操作系统内部的数据,这就是系统调用 。最终所以,所有访问操作系统的行为,都必须通过系统调用完成。这是用户与内核交互的唯一途径 。

所以有了这些系统调用接口,我们就允许用户对底层这些软件资源进行间接的管理了,所以有很多人基于系统调用接口设计一系列的软件了,这就是再上一层的用户操作接口了,也就是我们熟悉的 Shell 外壳(命令行界面)和lib(函数库),所以通过这些接口,我们可以方便地操作计算机,而不需要去关心底层硬件是如何工作的。

所以操作系统处于承上启下的核心位置 :它向下管理硬件资源,向上为用户提供简单易用的服务接口。所以操作系统就是一个搞管理的软件。

其中,我们就把基于操作系统提供的接口(如系统调用)之上,去控制硬件管理资源,的开发称为系统编程。

2. 理解如何管理:先描述,再组织

操作系统的核心任务是对下层的软硬件资源(如CPU、内存、硬盘、进程等)进行管理。为了实现高效管理,它核心思想就是:先描述,再组织

核心观点

  1. 管理者和被管理者是不需要见面的。而管理者在不见被管理者的情况下,做好的管理,只要能够得到管理信息,就可以在未来进行管理决策 ------管理的本质:是通过对数据的管理,达到对人的管理。
  2. 管理者和被管理者面都不见,我们怎么拿到对应数据的呢?通过执行者拿到的。

类比理解

我们可以基于一个"大学里面对学生的管理",来对应计算机系统的各个部分。

在大学中,大学的管理者是校长,学生是被管理者,但是我们知道校长和学生一般都是不见面的,也就是说操作系统(管理者)不需要直接"触碰"每一个硬件或进程(被管理者) 。而校长要做到管理学生,比如当进行查看学生的成绩,绩点,开除学生等操作的时候,并不是把学生叫到面前一个个去问,而是将一个个学生的信息属性(如姓名,学号,班级,电话等等)都写在一个表中,每次查看学生的状态,则就可以通过查阅这些表格来决定某个学生的处理。在掌握了这些描述学生状态的数据之后,校长就能进行决策(如:成绩好的发奖学金,成绩差的开除)。

在操作系统中也是同理,它通过将一个个软硬件的信息属性都定义成一个个结构体,然后将这些结构体通过某种数据结构(如双链表,单链表,树等)"组织"起来,这样操作系统对软硬件资源的管理就变成了对这个数据结构进行增删查改的操作 --- 这就是 先描述,再组织的过程。

这时,我们又会有两个问题:管理者和被管理者面都不见,我们怎么拿到对应的数据的呢?

校长要拿到学生的数据,肯定不是让学生一个一个的到校长面前问(因为学生很多,慢慢问,浪费时间,也没意义),它是通过中间的辅导员来收集的。这些辅导员负责去接触学生,把学生的状态(在不在宿舍、成绩)记录下来,整理成报表(数据),最后汇报给校长。校长只需要看报表,就能做出决策了。校长决策完了,他依然不需要亲自去找学生。他会将指令 再次通过中间人(即辅导员)传达下去。这里的辅导员就是执行者

在操作系统中,这个"辅导员"的角色就是驱动程序。 比如当操作系统(校长)想要知道显卡(学生)现在的温度是多少时,它不会直接去摸显卡芯片。它会调用显卡驱动程序(辅导员)提供的接口。驱动程序会去读取显卡硬件寄存器里的数值,然后封装成一个数据包汇报给操作系统;又比如当操作系统决定让硬盘(学生)保存一个文件时,它只需要把"保存"的命令和"数据"交给硬盘驱动程序。驱动程序拿到指令后,再去控制硬盘马达转动、磁头读写,完成具体的物理操作。

所以,驱动程序就是那个负责"承上启下"的执行者,它屏蔽了底层硬件的复杂细节,让操作系统只需要面对干净、统一的数据和指令。


感谢各位观看!希望大家多多支持!

相关推荐
Bruce_kaizy5 分钟前
c++ linux环境编程——文件io介绍以及open 、write 、read 三剑客深度详解
linux·服务器·c++·ubuntu·操作系统·文件io
亦良Cool20 分钟前
VMware虚拟机ubuntu瘦身,解决虚拟机越用越大
linux·运维·ubuntu
星辰&与海2 小时前
KVM + QEMU虚拟化方案
linux·运维
宋浮檀s2 小时前
应急响应——恶意流量&攻击行为识别
linux·运维·网络·网络安全·应急响应
REDcker2 小时前
Linux OverlayFS详解
java·linux·运维
Royzst2 小时前
xml知识点
java·服务器·前端
TechWJ2 小时前
数据库在公司内网,出差路上想查数据怎么办?
服务器·数据库·mariadb
zizle_lin3 小时前
WSL的系统安装和部分环境配置(按需操作)
运维
lwx9148523 小时前
Linux系统中用户锁定后如何解锁
linux·运维·服务器
zhangrelay4 小时前
ROS 2 Lyrical Luth启程-Ubuntu26.04-
linux·笔记·学习·ubuntu