【Linux系统】—— 冯诺依曼体系结构与操作系统初理解

news2025/2/24 20:05:15

【Linux系统】—— 冯诺依曼体系结构与操作系统初理解

  • 1 冯诺依曼体系结构
    • 1.1 基本概念理解
    • 1.2 CPU只和内存打交道
    • 1.3 为什么冯诺依曼是这种结构
    • 1.4 理解数据流动
  • 2 操作系统
    • 2.1 什么是操作系统
    • 2.2 设计OS的目的
    • 2.3 操作系统小知识点
    • 2.4 如何理解"管理"
    • 2.5 系统调用和库函数

1 冯诺依曼体系结构

  我们的计算机是由硬件构成的,但各种硬件如:显示器、键盘、网卡、磁盘等硬件设备并不是杂乱无法揉在一起就能成为计算机的,所有的计算机都需要按照一定的组织结构将所有的硬件划分在一起,而当前最常见的计算机组织结构就是冯诺依曼体系结构

在这里插入图片描述

  

1.1 基本概念理解

对上图各个部分的介绍

  • 输入设备:
      键盘、鼠标、话筒、摄像头、网卡、磁盘……

  • 输出设备:
      显示器、磁盘、网卡、打印机……

  • CPU(中央处理器):主要由运算器控制器组成。
    运算器主要是用来进行运算的,我们所做的运算主要分为两种:算术运算(加减乘除)和逻辑运算(真假、位运算)
    控制器主要是用来控制CPU去取指令、分析指令、执行指令等工作

  • 存储器:现阶段理解存储器就是内存

  
其他概念介绍:

  • 外设: 输入输出设备我们统称为外设。外设需要做的是:将输入设备的数据读到内存里,将内存中的数据输出到外设中。
      磁盘和网卡比较特殊,他们既是输入设备又是输出设备。网卡因为网络我们还没学习,暂时先不做介绍。

  • IO: 之前我们写C/C++程序进行文件读取时,读文件就是将磁盘中的文件读到内存里,写文件就是将内存中的文件写到磁盘中。我们将这种读写的动作称为 input/output,即IO。
      理解IO应站在内存的角度,输入设备把数据交给你(内存)就是input;你(内存)把数据给输出设备就是output

  

1.2 CPU只和内存打交道

  我们都知道,我们写的程序要运行,必须先将生成的可执行文件加载到内存中,那么程序运行之前放在哪里?
  答案是在磁盘
  程序本质就是一个文件,它就是我们编译好的,在特定路径下的二进制文件。

  为什么程序要运行必须先加载到内存中呢?
  上面的冯诺依曼体系结构图中,红色箭头表示数据的流动方向。从图中不难看出:CPU只能从内存中读写数据! 在数据层面上,CPU只认内存,压根不认什么输入输出设备。
  那我们的软件运行,是谁在运行我们的软件呢?正是CPU,是CPU执行我们的代码,访问我们的数据
  可是CPU无法读取外设,所以我们必须把程序加载到内存,如此才能被CPU访问到。
  这是由冯诺依曼体系结构规定的。

  在冯诺依曼体系结构中,数据的流动方向永远是:输入设备 -> 内存 -> CPU -> 内存 -> 输出设备
  但"流动"这个词太抽象,我们换句话:数据流动的本质是从一个设备 “拷贝” 到另一个设备

  所以可以推导出:冯诺依曼体系结构的效率取决于设备的"拷贝"效率决定

小结:
  CPU在数据层面,只和内存打交道;外设只和内存打交道。

  

1.3 为什么冯诺依曼是这种结构

  所以冯诺依曼为什么是上图的结构呢?可不可以不要内存,直接:输入设备 -> CPU ->输出设备 这种结构呢?

在这里插入图片描述

  
  这里给大家介绍一下存储分级,如图:

在这里插入图片描述

  在计算机世界中,存储这件事:如果它离CPU越(金字塔顶端),它的存储容量,但是它速度、也更;离CPU越远(金字塔低端),它的存储容量越小,但速度更慢,不过也更便宜。
  ps:我们可以在淘宝看看同等加钱分能买到多少G内存条和磁盘

  如果直接:输入设备 -> CPU ->输出设备 这种结构,就会有一个很大的问题:
  输入输出设备属于外设,它的运算效率相比于CPU特别低!虽然CPU的运算效率很快,但根据木桶效应,总体的运行效率就取决于外设。
  那我们能不能将我们的各种外设全部做成寄存器,这样运行效率不就高了吗。是可以的,只要你有钱,因为这时一台电脑的造价将无比恐怖

  为了在效率和成本之间找平衡,我们在计算机体系结构中引入了:寄存器(内存)
  有了内存,内存的运行效率本身相对较高,我们可以提前将数据从外设拷贝到内存,这样CPU可以直接从内存中读数据。
  这样,我们花少量的前就可以获得一台运算效率不错的计算机。现在的计算机本质上是性价比的产物。

  为什么冯诺依曼体系这么简单,却是目前计算机体系的主流结构?
  冯诺依曼的历史意义不在技术上,它的意义在于让平民百姓可以用较低的价格买入效率不错的计算机,百姓买得起全世界才有那么多网民,有了这么多网民才有了互联网。冯诺依曼体系的历史意义在于:它是构成互联网的必要条件。是历史选择了冯诺依曼体系

  

1.4 理解数据流动

  请解释,从你登录上qq开始和某位朋友聊天开始,数据的流动过程。

  既然两个人聊天是用电脑,那么本质就是两台冯诺依曼体系进行聊天
  首先,要聊天要先登录 QQ,登录 QQ 就是启动 QQ 这款软件,其本质就是将QQ的可执行程序加载到内存。你在键盘输入"你好",本质就是输入设备(键盘)中的数据流动到了内存。数据经过运算器处理(加密、封包)后写回内存,数据再从内存流动到输出设备(网卡)。
  网卡将数据交到网络,网络再将数据交到朋友的机器。这点我们以后详细学习
  朋友的输入设备(网卡)拿到数据,拷贝给内存(QQ的可执行已加载到内存),再交给CPU解密等;CPU处理完后交给内存,内存在将数据输出到输出设备(显示器)中。
  
  数据流动的本质是在冯诺依曼体系中进行数据流动

  
  

2 操作系统

2.1 什么是操作系统

  任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。操作系统是一组主管并控制计算机操作、运用和运行硬件、软件资源和提供公共服务来组织用户交互的相互关联的系统软件程序

  说人话:操作系统是一款进行软硬件管理的软件
  没错,操作系统自己本身是一款软件

  操作系统分为狭义上的操作系统和广义上的操作系统
  狭义:操作系统的内核
  内核的四大主要工作:进程管理、内存管理、文件管理、驱动管理
  广义:内核 + 其他程序(例如函数库、shell程序等等)

在这里插入图片描述

  后面若不加说明,操作系统指的是狭义上的操作系统及内核

  

2.2 设计OS的目的

在这里插入图片描述

计算机软硬件结构

  
  在计算机结构的最底层是各种硬件(网卡、磁盘等),各种硬件在逻辑上时按照冯诺依曼体系结构组织的。
  每一种硬件都对应有一个驱动程序(网卡有网卡驱动,硬盘有硬盘驱动),因为读取每一种设备的信息都有自己个性化的读取方式,所以访问各种硬件都要配上对应的驱动程序。具体现象比如:你插上鼠标,可以依然动不了,过了一两秒显示器上弹出某某驱动安装成功,这时再动鼠标才有反应。驱动程序大部分是由对应硬件厂商来提供的。

  在驱动程序之上则是操作系统。

  操作系统对下:要与硬件交互,管理所有的软硬件资源
  但操作系统管理硬件并不是目的,而是手段。
  操作系统的目的是,对上:为用户程序(应用程序)提供一个良好的执行环境

  比如我打个游戏,你总不能3分钟一黑屏5分钟一重启吧,操作系统你能不能把底层的软硬件资源管理好,不要让他出错,让我安心打游戏。

  小结:操作系统存在的目的是给用户提供服务的,一切以人为本
  

2.3 操作系统小知识点

  从上图中不难看出计算机软硬件体系结构(从硬件到用户整个过程)是层状结构!
  如何理解呢?
  层状结构在软件工程上体现出的特点是:高内聚低耦合
  高内聚:把相同功能相同逻辑的代码和数据放在同一层内部,比如操作系统内全是操作系统的代码数据
  低耦合:指的是层跟层之间只使用一些接口的方式来互相调用,在数据和逻辑层面没有强耦合
有了这样的设计特点,未来我想该某一层的数据或逻辑,其他层基本没有影响。比如我改操作系统,驱动和硬件都不用变。
  高内聚低耦合主要是为了方便代码后续的可维护性。可维护性简单来说就是一个模块我们修改了并不影响另一个模块,那个模块出问题就子啊那个模块找问题。

  计算机各种硬件在设计上也是高内聚低耦合的。
  一台计算机的各种硬件(CPU、磁盘、主板、网卡、显卡)都是由不同厂商提供的,我们想换某一个硬件随便换。这说明计算机设计在硬件上就是高内聚低耦合的


  
  操作系统不允许任何人直接访问操作系统内的各种代码和数据,我们要访问操作系统,必须使用系统调用 —— 其实就是函数,只不过是系统提供的
  用户要正确使用系统调用必须对操作系统有一定的了解。那使用起来成本不是很高?
  正是因为系统调用太麻烦了,所以有人给我们做了封装,给我们形成了一个库:比如 C标准库 、C++ 库

  所以我们平时的开发动作,在整个体系结构的最上层


  
  我们的程序,只要判断出它访问了硬件,那么它必须贯穿操作系统!

  我们之前用 printf 往显示器上打印,其本质是用户把数据写到了硬件,而我们是不可能直接绕过操作系统直接到硬件的,所以 printf 这个函数底层一定要封装系统调用,再通过操作系统访问对应驱动,才能把数据交到硬件上。
  所以我们之前的 scanf、printf 对各种文件的IO等等操作是要访问操作系统的

2.4 如何理解"管理"

  在整个计算机软硬件架构中,操作系统的定位是:⼀款纯正的“搞管理”的软件
  因此,要理解操作系统,就要先理解 “管理”
  为帮助小伙伴们更加深刻理解管理,我们举一个小例子。

  我们简化学校系统,认为整个学校只有校长(管理层)、辅导员(执行层)、学生(被管理层)。
  人类日常生活中做的事情就两种:决策和执行
  对老百姓来说,决策和执行是不分家的。决定明天不去上早8是决策,第二天睡到12点是执行
  但对一个管理体系来说,管理者最大的能力就是他有决策权,比如学校的校长。辅导员作为执行层时没有决策权的
  回过头看软硬件结构的下三层:操作系统是决策层(校长)、驱动层序是执行层(辅导员)、底层硬件是被管理层(学生)

  校长是如何管理生的呢?
  校长需要和学生见面吗?不需要!我们除了入学和毕业,就没见过校长。
  所以:要管理,管理者和被管理者可以不需要见面

  连面都不见,如何管理?
  见面并不是必要条件,见面只是为了获取你身上的相关数据。只要我有其他方式获得相关数据,就没必要见面。
  比如校长想给张三发奖学金,并不需要亲自去宿舍问张三成绩怎么样,只需要知道张三排名全校前十就可以
  所以,管理是通过数据进行管理

  不需要见面,如何拿到数据?
  所以校长和学生之间,必须要加一个人—— 辅导员。数据由辅导员帮忙获取。辅导员获取我们的信息,记录在教务系统当中,校长根据教务系统中的数据管理每一个学生。

  回过头,操作系统管理各种硬件并不需要和硬件接触,它管理硬件是通过数据进行管理的,而数据就是由驱动程序获取的


  
  数据要拿的有意义,总不能让辅导员统计今天学生穿什么颜色的衣服吧。
  校长给了辅导员一个Excel表格,让辅导员获取相关数据
  现在校长每天的工作由管理学生改为管理表格中的数据,基于数据做决策,比如校长看到表格中李四20门课挂科19门,直接将李四开除。

在这里插入图片描述


  
  但如果表格中的数据太多了呢?100名学生校长还管得过来,10万名呢?
  对学生的数据进行管理,本质不就是增删查改吗?可随着人越来越多,增删查改的负担越来越大。

  幸好,校长是计算机专业出生
  校长决定让计算机帮忙管理。
  校长发现,表格开头就是学生的各个属性,不同行之间大家的属性一样,只是具体的值不一样。
  在软件层面上如何把不同的属性集合在一起呢?
  结构体!(校长只会C语言,因为校长是操作系统,操作系统是由C语言写的)

struct student
{
	//姓名
	//年龄
	//籍贯
	//...
}

  这样我们就可以用这个结构体定义出上万个变量,每个变量都对应一个学生。
  可是上万个学生变量本身是独立的,如何对他们进行管理呢?
  数据结构!
  比如我们可以用链表将所有学生变量链接起来,当然也可以是其他结构。
  这样,校长对学生的管理工作就转化为了对链表的增删查改

  如此校长管理学生的工作我们称为:先描述,再组织
  即先用结构体将学生的属性描述起来,再用各种数据结构(如链表)将各个学生结点组织起来
  先描述,再组织可以完成现实世界对任何场景的建模。

  所以看完了上面的例子,操作系统是怎么管理硬件的?
  操作系统先对硬件进行描述,先定义一个结构体包含硬件的各种属性,每个硬件对应一个对象,再创建链表将各个对象链接起来。对应该的管理改为对链表中各个对象的增删查改。

  所以C++为什么要提供类的概念,为什么C++该提供STL?
  因为类解决的是先描述的问题;而STL是容器,本质是各种数据结构,容器解决的是再组织的问题

  任何面向对象的语言,都提供了类和容器!我们这个世界就是先描述再组织的世界。
  

2.5 系统调用和库函数

   操作系统要向上提供对应的服务,但是操作系统不相信任何用户或者人!
   操作系统不允许任何人直接访问操作系统内的各种代码和数据,我们要访问操作系统,必须使用系统调用 —— 其实就是函数,只不过是系统提供的

  这就是一个非常矛盾的地方:一个事物要给人提供服务,却不相信任何人
  现实中有没有类似的机构呢?要给人提供服务,却不相信任何人。
  银行!

在这里插入图片描述

  银行要给我们提供各种金融服务,却不信任任何人,不让任何人到它的金库去取钱。
  于是银行将自己封装起来,仅仅设置了各个窗口开放给用户,这个窗口就相当与操作系统的系统调用接口

  Linux / Windows / macos 等大部分操作系统都是用 C语言 写的,系统调用本质就是系统提供的函数 — C语言风格的函数。既然是函数,就要有函数参数和返回值。
  输入参数是用户给操作系统的,返回值是操作系统给用户的,所以系统调用的本质就是用户和系统之间进行数据交互。银行中我们要取钱,要先将银行卡等资料给窗口里的工作人员,这就是传参;银行在自己内部运作,再将结果返回给我们,我们拿到结果。
  这样操作系统与用户之间的耦合度就非常低,能达到既给用户提供服务,又不让用户访问的目的。

  但是,银行办一件事往往比较麻烦,有的老太太去银行存钱可能还不知道去银行要先取个号。所以银行在大堂中设置了工作人员来帮助人们完成相关手续。
  系统调用也同理,如果让小白直接访问系统调用那成本比较高,所以操作系统还给我们提供了各种库、外壳、指令,我们只需访问库、外壳等不懂操作系统也能将操作系统用起来了。
  这就是用户操作接口层,而我们用户就是再最上层做相应开发

总结:
  在开发角度,操作系统对外会表现为⼀个整体,但是会暴露自己的部分接⼝,供上层开发使用,这部分由操作系统提供的接口,叫做系统调用
  系统调用在使用上,功能比较基础,对用户的要求相对也比较高,所以,有心的开发者可以对部分系统调用进行适度封装,从而形成库,有了库,就很有利于更上层用户或者开发者进行二次开发。
  库函数和系统调用属于上下层的关系

  
  
  
  


  好啦,本期关于冯诺依曼体系结构与操作系统的知识就介绍到这里啦,希望本期博客能对你有所帮助。同时,如果有错误的地方请多多指正,让我们在 Linux 的学习路上一起进步!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2304546.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux 权限系统和软件安装(二):深入理解 Linux 权限系统

在 Linux 的世界里,权限系统犹如一位忠诚的卫士,严密守护着系统中的文件与目录,确保只有具备相应权限的用户才能进行操作。与其他一些操作系统不同,Linux 并不依据文件后缀名来标识文件的操作权限,而是构建了一套独特且…

Windows 中的启动项如何打开?管理电脑启动程序的三种方法

在日常使用电脑时,我们经常会发现一些应用程序在开机时自动启动,这不仅会拖慢系统的启动速度,还可能占用不必要的系统资源。幸运的是,通过几个简单的步骤,你可以轻松管理这些开机自启的应用程序。接下来,我…

uniapp邪门事件

很久之前在这篇《THREEJS 在 uni-app 中使用(微信小程序)》:THREEJS 在 uni-app 中使用(微信小程序)_uni-app_帶刺的小葡萄-华为开发者空间 中学到了如何在uniapp的微信小程序里接入three.js的3d模型 由于小程序自身很…

百度首页上线 DeepSeek 入口,免费使用

大家好,我是小悟。 百度首页正式上线了 DeepSeek 入口,这一重磅消息瞬间在技术圈掀起了惊涛骇浪,各大平台都被刷爆了屏。 百度这次可太给力了,PC 端开放仅 1 小时,就有超千万人涌入体验。这速度,简直比火…

PLC通讯

PPI通讯 是西门子公司专为s7-200系列plc开发的通讯协议。内置于s7-200 CPU中。PPI协议物理上基于RS-485口,通过屏蔽双绞线就可以实现PPI通讯。PPI协议是一种主-从协议。主站设备发送要求到从站设备,从站设备响应,从站不能主动发出信息。主站…

Image Downloader下载文章图片的WordPress插件

源码介绍 一个用于下载图片的WordPress插件,包含下载统计功能,支持任何主题使用 用户点击下载后自动打包该文章所有原始图片,并把文章标题作为压缩包的文件名。 不占用服务器空间,也不占网盘空间,直接利用浏览器的性…

乐享数科:供应链金融—三个不同阶段的融资模式

供应链金融是与产业链紧密结合的融资模式,它主要体现在订单采购、存货保管、销售回款这三个不同的业务阶段,并针对这些阶段提供了相应的金融服务。以下是这三个阶段中主要的融资模式及其特点: 供应链金融融资模式主要分为以下几种&#xff1…

Jenkins 创建 Node 到 Windows

Jenkins 创建 Node 到 Windows 一. 新建 Node Dashboard -> Manage Jenkins -> Manage Nodes and Clouds Dashboard -> Nodes -> New Node 二. 配置节点 Node:节点名 Description:节点描述 Number of executors:节点最大同…

halcon机器视觉深度学习对象检测,物体检测

目录 效果图操作步骤软件版本halcon参考代码本地函数 get_distinct_colors()本地函数 make_neighboring_colors_distinguishable() 效果图 操作步骤 首先要在Deep Learning Tool工具里面把图片打上标注文本, 然后训练模型,导出模型文件 这个是模型 mod…

【分布式数据一致性算法】Gossip协议详解

在分布式系统中,多个节点同时提供服务时,数据一致性是核心挑战。在多个节点中,若其中一个节点的数据发生了修改,其他节点的数据都要进行同步。 一种比较简单粗暴的方法就是 集中式发散消息,简单来说就是一个主节点同时…

蓝桥杯笔记——递归递推

递归 0. 函数的概念 我们从基础讲起,先了解函数的概念,然后逐步引入递归,帮助同学们更好地理解递归的思想和实现方式。 函数是程序设计中的一个基本概念,简单来说,它是一段封装好的代码,可以在程序中多次…

【复现DeepSeek-R1之Open R1实战】系列7:GRPO原理介绍、训练流程和源码深度解析

【复现DeepSeek-R1之Open R1实战】系列博文链接: 【复现DeepSeek-R1之Open R1实战】系列1:跑通SFT(一步步操作,手把手教学) 【复现DeepSeek-R1之Open R1实战】系列2:没有卡也能训模型!Colab跑Op…

【Qt】可爱的窗口关闭确认弹窗实现

文章目录 ​​​实现思路界面构建交互逻辑实现颜色渐变处理圆形部件绘制 代码在主窗口的构造函数中创建弹窗实例ExitConfirmDialog 类代码ColorCircleWidget 类代码 今天在Qt实现了这样一个可互动的窗口(上图由于录屏工具限制没有录制到鼠标) ​​​实现…

计算机毕业设计SpringBoot+Vue.jst网上购物商城系统(源码+LW文档+PPT+讲解)

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

自制操作系统前置知识汇编学习

今天要做什么? 为了更好的理解书中内容,需要学习下进制分析和汇编。 汇编语言其实应该叫叫机器指令符号化语言,目前的汇编语言是学习操作系统的基础。 一:触发器 电路触发器的锁存命令默认是断开的,是控制电路触发器…

Unity制作游戏——前期准备:Unity2023和VS2022下载和安装配置——附安装包

1.Unity2023的下载和安装配置 (1)Unity官网下载地址(国际如果进不去,进国内的官网,下面以国内官网流程为例子) unity中国官网:Unity中国官网 - 实时内容开发平台 | 3D、2D、VR & AR可视化 …

深度学习(5)-卷积神经网络

我们将深入理解卷积神经网络的原理,以及它为什么在计算机视觉任务上如此成功。我们先来看一个简单的卷积神经网络示例,它用干对 MNIST数字进行分类。这个任务在第2章用密集连接网络做过,当时的测试精度约为 97.8%。虽然这个卷积神经网络很简单…

【HarmonyOS Next】拒绝权限二次申请授权处理

【HarmonyOS Next】拒绝权限二次申请授权处理 一、问题背景: 在鸿蒙系统中,对于用户权限的申请,会有三种用户选择方式: 1.单次使用允许 2.使用应用期间(长时)允许 3.不允许 当用户选择不允许后&#xff0…

跟着李沐老师学习深度学习(十四)

注意力机制(Attention) 引入 心理学角度 动物需要在复杂环境下有效关注值得注意的点心理学框架:人类根据随意线索和不随意线索选择注意力 注意力机制 之前所涉及到的卷积、全连接、池化层都只考虑不随意线索而注意力机制则显示的考虑随意…

基于YOLO11深度学习的半导体芯片缺陷检测系统【python源码+Pyqt5界面+数据集+训练代码】

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…