【Linux】冯诺依曼体系结构与操作系统概念理解-1

简介: 【Linux】冯诺依曼体系结构与操作系统概念理解

一、冯诺依曼体系结构

1、体系概述理清

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

  • 在冯诺依曼体系结构主要由五种设备组成,分别是:输入设备、存储器、运算器、控制器和输出设备,它们各司其职,都做着它们各自的工作

image.png

[ 细说五大结构 ]

  • 首先要来讲的就是我们能直接接触到的东西,也就是两个输入、输出设备
  • 【输入设备】:向计算机输入数据和信息的设备,是计算机与用户或其他设备通信的桥梁,例:键盘、话筒、摄像头、网卡、磁盘
  • 【输出设备】:是计算机硬件系统的终端设备,用于接收计算机数据的输出显示、打印、声音、控制外围设备操作,例:显示器、声卡、网卡、磁盘

对于输入输入设备和输出设备,我们统称为外围设备,对于外围设备而言,都比较慢,就比如说【磁盘】,不过虽然它比较慢,但是价格并不贵,三五百块钱就可以买到一块512G的硬盘,贵一点的话可能像固态硬盘价格在900 ~ 1200不等,但是它们都有一个优点就是:存储容量大、可以长久保存数据不丢失!

  • 可以看到,对于上面所列举的输入和输出设备中,同时出现的就是==网卡和磁盘==这两样,我们主要来说说磁盘这个东西。因为我们要通过输入设备将输入都输入到计算机中,那计算机肯定要对这些数据去进行一些处理,此时这些数据肯定是要一直存放在计算机中的,所以肯定要和东西将我们输入到计算机中的数据都保存起来,这个时候就需要使用到一些存储器了,此时我们就要来讲讲存储器了,它分为内存和外存,不过一般我们都称之为内存
  • 【内存】: 用于存放电脑运行中的原始数据、中间结果以及指示电脑工作的程序,断电后会丢失,容量小,速度快
  • 【外存】:用来存放一些需要长期保存的程序或数据,断电后也不会丢失,容量比较大,但存取速度慢
  • 既然可以存储我们输入进去的数据了,那要如何去处理这些数据呢?此时就需要使用到运算器
  • 【运算器】:计算机中执行各种算术和逻辑运算操作的部件,。运算器的基本操作包括加、减、乘、除四则运算等等
  • 当运算器运算完成之后,就会经过输出设备将处理后的结果展现给用户,==这就是用户与计算机之间的交互过程==
  • 不过上面这些从输入到存储到计算,再到输出的过程,计算机去如何去执行的呢?靠什么去控制这种种行为?此时就要使用到控制器
  • 【控制器】: 完成协调和指挥整个计算机系统的操作

对于上面的运算器和控制器,我们将其合称为【中央处理器】,即cpu。它是计算机的大脑、也是核心部分,很多控制信号都要经过CPU才能执行

2、内存的重要性

  • 经过我上面这一番讲解,相信读者对冯诺依曼的基本体系有了一个概念了,不过一定会有同学提出这样的疑问:既然计算机只是从外界接收数据,然后处理我们输入的数据再把结果反馈给我们,那也可以不用存储器呀!

image.png

  • 在上一小节中,我们讲到了输入设备和输出设备,它们统称为外围设备,对于像【磁盘】这种外围设备来说虽然它有着大容量的内存,但是读写速度却非常慢,机械硬盘读写速度平均60---80M每秒;固态硬盘不同品牌型号之间,平均大约在150---300M每秒
  • 但是对CPU来说,也就我们上面说到过的运算器 + 控制器,它的运算速度读者可以自行去网上看看,那比磁盘不知道要快出多少倍了。那一个写入很慢,一个读入很快,真的可以兼容吗?

在网上有流传着一个东西叫做【木桶效应

  • 什么叫木桶效应呢,也就是这个木桶的承水量不取决于木桶中最长的那块板,而==取决于最短的那块板==
  • 对应我们上面所说磁盘与CPU:一个输入,一个读取;一个慢,一个快,虽然二者的维度不同,但计算机还是会按照慢的那个来执行,也就是说==整体的效率就以外设为主了==

image.png

那这一个快。一个慢,该怎么办呢?

  • 此时就还是需要使用到冯诺依曼体系结构中的【存储器】,也就是我们俗称的内存,因为对于内存这个东西,它虽然比CPU来得慢一些,但是却比磁盘快多了,它们三者的速度大概可以像下面这样对比
  • CPU —— 纳秒(ns)
  • 内存 —— 微秒(us)
  • 外设 —— 毫秒(ms)
  • 可以看到CPU是纳秒级别的速度,但外设却是毫秒级别的,它们之间要进行交互的话还是太Crazy了🤣所以就有了内存这个东西,可以==作为中介==

那有了内存后则怎么使用呢?

  • 因为有了内存的存在,虽然它掉电易失,但还是局部短时间的存储,因此外设可以将数据暂存到内存中,此时,CPU后面想要去处理这些数据的话直接去内存中拿就可以了,无需再与外设进行交互造成不兼容的问题

CPU中不是有个叫寄存器的东西吗?也可以起到临时存储的功能,为什么不直接用它呢?

  • 因为寄存器太贵了,只要是贵的东西就不会让我们广泛去使用。内存可以适配和外设之间的效率,既能够完成我们需要的功能,而且性能还不怎么差,它还便宜

【总结一下】:

  • CPU的速度是很快的,外设的速度是很慢的,因为有了内存,CPU以后在进行数据计算的时候,根本不需要访问外设了,而只要直接伸手向内存要就可以了

3、从硬件层面看软件

对于上面讲得大部分都是理论,可能会比较难懂一些,本小节我将从硬件层面看软件,使用硬件的行为来解释软件

  • 当我们使用C/C++编写完代码后都会编译生成可执行程序,对于这个可执行程序,其实就是一个文件,那既然是文件的话,它就存放在磁盘中,对于磁盘我们上面说了,就是一种外设。那此时就引出了下面这个问题

💬 为什么要执行我们的程序要先加载到内存?

  • 我们自己的代码和数据、编译好的指令,是要由CPU去执行的,在上一小节我们讲到==CPU它只会伸手向内存要数据==,而我们的可执行程序是一个文件,文件存放在磁盘中,所以这就解释通了为什么我们的程序要先加载到内存中,因为CPU只会去内存中读数据,体系结构决定了这一切!

知道了上面这点我们还可以来拓展一下

💬 开机的时候为什么要加载操作系统呢?

  • 也是同样的道理,操作系统的底层也是各种指令和数据,这些都是需要CPU去解析的,它解析完了操作系统才能正常运行起来,但是CPU只能到内存中去拿数据,所以在开机的时候把操作系统率先加载进来CPU就方便很多了,不需要再和外设去进行交互,这样就太慢了

image.png

通过以上的两个问题解答,相信你对CPU和内存之间的关系应该是非常了解了,知道了数据为什么要加载到内存中,即Why,但是我现在想问什么时候加载,也就是When

  • 也是用运行我们的程序来举例:在Windows中,我们只需要双击可执行程序,那么它就会加载到内存中了;在Linux中,我们使用./就可以运行一个可执行程序,也代表它加载到内存中

4、理解数据在网络中的流动

清楚了整个冯诺依曼体系结构,知道了大部分的计算机都是基于这种结构,那么现在我通过一个场景带你带你真实地体会一下这种体系结构在实际中的应用

现在你在上网,使用QQ向你的朋友发送了一句“在吗”,那此时这个数据在网络中进行流动的呢?假设你们的电脑都是基于冯诺依曼体系结构,需要有这么一个输入、处理、输出这么一个流程

  • 下面是我画的一个流程图,可以看到就是两个冯诺依曼体系结构中间使用网络进行了互连,在这里我们先不考虑网络的问题,只谈数据是如何在各个器件中流动的

image.png

流程细说

  • 当你使用输入设备,比如:键盘,在QQ的聊天框中发送了一句“在吗”的时候,这条信息就被读取到了计算机内部,被暂时存放在了【内存】中,接着CPU就会到内存中去读取数据,解析里面的指令然后由【运算器】进行运算,接下去通过【控制器】将这些信息由【输出设备】,例如:网卡,转发到网络中进行传输,网络内是如何传输的这里就不细讲了,涉及要一些 网络协议 相关的内容
  • 因为你朋友的电脑也是基于冯诺依曼体系的,所以也会存在【输入设备】,例如:网卡,将网络中传输过来的数据输入到它的计算机中,也是将其存放到内存中,然后一样CPU去内存中拿出这些数据再进行处理,转换成我们可以识别的样子,通过【输出设备】,例如:显示器,将消息打印在你朋友的屏幕。之后你的朋友再发送一句“在的”,也是同理经过这样的传输,继而你们就实现了==相互通信==

5、拓展

在了解了数据如何基于冯诺依曼体系结构在网络中进行流通,接下去我来拓展一些小知识:mag:

:book:早些年的计算机,因为芯片本身的集成能力比较差,有时候在进行数据读取的时候时间输入设备的数据直接打给CPU的,CPU读取完数据后再把数据写到内存中缓存起来,后面在合适的时候再让CPU从内存里拿出数据

:book:不过随着时代的发展,计算机内部除了CPU这个芯片,还有第二张芯片交DMA,它只负责将外设的数据搬到内存中,这个过程就不用CPU参与了,所以目前认为CPU不会和外设直接沟通。

:book:虽然CPU在数据层面不会和外设直接交互了,但是有些控制信号还要交互了,比如说外设要给CPU发一些控制信号,然后让CPU帮它做一些事情

image.png

【总结】:

  • 以上就是有关冯诺依曼体系结构的叙述,大多以概念为主,配合图示进行理解,清楚五大部件各自的作用,它们之间是如何关联的。不过最重要的一点还是在于CPU是直接与内存进行交互的,因为任何数据都要通过输入设备先存放到内存中,而不是直接与CPU进行交互


二、操作系统概念理解

1、引入

我们上面所讲到的冯诺依曼体系中的各大部件可以理解为硬件,在冯诺依曼体系之上,还有一堆概念叫做软件

  • 刚才我们有说过,因为有【存储器】的存在,所以可以把外设的数据预加载到内存当中,然后供CPU进行读取,但是文件中数据非常多,那此时我想提出以下几个问题:
  • 既然要预加载,那是要加载哪一部分数据呢?
  • 预加载的时候如果内存不够了怎么办?
  • CPU在执行对应的数据时,如何快速地找到你预加载的数据?
  • 计算机在进行某种计算的时候,是不是把一个任务直接跑完才跑下一个,还是多个任务同时在跑
  • 数据计算完后可以将其重定向到文件当中,在特定的路径下就可以看到所写入的文件内容,可是我们怎么去快速地找到这个文件呢? —— 有目录,但是谁给你维护的这个目录呢?

以上这些工作是无法通过硬件来完成的,而是要通过==软件==来完成

  • 比方说在一家医院里有一些先进的仪器,照CT、照X光。但是医院当中医生少病人多要怎么分流;医生的水平也不同,要怎么更好地分配。这些光靠仪器是做不到的,要靠人去做

image.png此时我们就可以引出一个概念,叫做【软件】,对于软件分为系统软件和应用软件,而我们本模块所要讲解的 ==操作系统== 就是属于系统软件的一部分

2、基本概念

然后我们就来聊聊有关操作系统的相关概念

【概念】:操作系统是系统最基本最核心的软件,属于系统软件的组成部分,用于控制和管理整个计算机的硬件和软件资源

image.png笼统的理解,操作系统包括:

  1. 内核(进程管理,内存管理,文件管理,驱动管理)
  2. 其他程序(例如函数库,shell程序等等)

对于我们日常使用的Windows,或者是现在正在学习的Linux,它们都属于操作系统,是一个很笼统的概念,这里就不细说了【可以看看这篇文章:链接

3、设计目的与定位

那此时就有同学会疑问,操作系统被设计出来的真正用途是什么?

首先来看看下面这张图,是一整个计算机内部的软硬件系统架构【后面系统调用细述】image.png

  • 可以明确地看出,【操作系统】是位于整个系统架构的中间层,所以你可以理解它是核心所在,也就是我们常说的C位,在上面我们也有提到,对于操作系统而言,它可以对上管理软件,对下管理硬件,这就是它被设计出来的目的
  1. 与硬件交互,管理所有的软硬件资源
  2. 为用户程序(应用程序)提供一个良好的执行环境
  • 既然它那么重要,那我们就给它一个定位:一款纯正的“搞管理”的软件
相关文章
|
16天前
|
存储 安全 Linux
探索Linux操作系统的心脏:内核
在这篇文章中,我们将深入探讨Linux操作系统的核心—内核。通过简单易懂的语言和比喻,我们会发现内核是如何像心脏一样为系统提供动力,处理数据,并保持一切顺畅运行。从文件系统的管理到进程调度,再到设备驱动,我们将一探究竟,看看内核是怎样支撑起整个操作系统的大厦。无论你是计算机新手还是资深用户,这篇文章都将带你领略Linux内核的魅力,让你对这台复杂机器的内部运作有一个清晰的认识。
41 3
|
16天前
|
存储 数据挖掘 Linux
服务器数据恢复—Linux操作系统网站服务器数据恢复案例
服务器数据恢复环境: 一台linux操作系统服务器上跑了几十个网站,服务器上只有一块SATA硬盘。 服务器故障: 服务器突然宕机,尝试再次启动失败。将硬盘拆下检测,发现存在坏扇区
|
14天前
|
存储 监控 安全
探究Linux操作系统的进程管理机制及其优化策略
本文旨在深入探讨Linux操作系统中的进程管理机制,包括进程调度、内存管理以及I/O管理等核心内容。通过对这些关键组件的分析,我们将揭示它们如何共同工作以提供稳定、高效的计算环境,并讨论可能的优化策略。
19 0
|
19天前
|
Linux Shell
Linux 中 Tail 命令的 9 个实用示例
Linux 中 Tail 命令的 9 个实用示例
59 6
Linux 中 Tail 命令的 9 个实用示例
|
15天前
|
设计模式 Java Linux
Linux的20个常用命令
Linux的23个常用命令
Linux的20个常用命令
|
1天前
|
Linux Shell
10-10|linux命令查询 关键字在文本中出现的行数
10-10|linux命令查询 关键字在文本中出现的行数
|
1天前
|
存储 Linux Shell
常用vim命令和vim基本使用及Linux用户的管理,用户和组相关文件
这篇文章介绍了Vim编辑器的基本使用、常用命令和模式,以及Linux系统中用户和组的管理方法,包括用户和组相关文件如/etc/passwd、/etc/shadow和/etc/group的说明。
常用vim命令和vim基本使用及Linux用户的管理,用户和组相关文件
|
24天前
|
Linux 应用服务中间件 nginx
|
2天前
|
Linux Docker 容器
linux之docker命令
linux之docker命令
|
3天前
|
Ubuntu Java Linux
LINUX常用命令总结_持续更新
本文汇总了多种Linux命令的使用方法,包括系统信息查询、文件与目录管理、打包与压缩、软件包管理、文件系统分析、备份操作及网络配置等。例如,使用`df -h`检查文件系统使用情况,`uname -a`查看内核版本,`ps -ef|grep java`查看Java服务,`kill -9 pid`结束进程,以及使用`tar`、`zip`、`unzip`进行文件压缩与解压。此外,还介绍了系统关机、重启、登录注销、文件权限设置、磁盘空间管理、RPM与DEB包安装更新、文本处理、文件系统初始化与修复、SWAP文件系统管理、光盘刻录与挂载、网络接口配置等实用命令。