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

【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.rhkb.cn/news/23044.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【行业解决方案篇十八】【DeepSeek航空航天:故障诊断专家系统 】

引言:为什么说这是“航天故障终结者”? 2025年春节刚过,航天宏图突然官宣"DeepSeek已在天权智能体上线",这个搭载在卫星和空间站上的神秘系统,号称能提前48小时预判99.97%的航天器故障。这不禁让人想起年初NASA禁用DeepSeek引发的轩然大波,更让人好奇:这套系…

计算机网络真题练习(高软29)

系列文章目录 计算机网络阶段练习 文章目录 系列文章目录前言一、真题练习总结 前言 计算机网络的阶段练习题,带解析答案。 一、真题练习 总结 就是高软笔记,大佬请略过!

从猜想终结到算法革新,弹性哈希开启数据存储新篇章

目录 哈希表的前世今生基本原理从传统到现代:哈希表的演变历程安德鲁 克拉皮文及其团队的创作历程弹性哈希详解基本原理优点技术细节漏斗哈希解析基本原理优点技术细节新算法的实际应用案例电子商务推荐系统金融交易监控系统社交媒体内容过滤物联网设备管理结论与展望哈希表的…

DeepSeek各模型现有版本对比分析

文章目录 一、基础模型系列:V1 到 V3 的演进二、专用模型系列:推理与多模态三、版本选型与商业化趋势 DeepSeek作为最近特别火爆的模型,本文将对DeepSeek现有的主要版本进行对比分析,涵盖参数规模、训练数据、功能改进、应用场景和性能表现等…

RabbitMQ学习—day6—springboot整合

目录 1. springboot配置 2. 开始写RabbitMq代码 3. 队列优化 4. 插件实现延迟队列 5. 总结 前一小节我们介绍了死信队列,刚刚又介绍了 TTL,至此利用 RabbitMQ 实现延时队列的两大要素已经集齐,接下来只需要将它们进行融合,再加…

Automa 浏览器自动化编排 实现自动化浏览器操作

在日常的浏览器使用过程中,我们常常会遇到一些重复繁琐的任务,比如反复填写网页表单、从网页抓取数据、定时截图等,这些工作不仅耗费时间和精力,还容易出错。今天要给大家介绍的Automa,就是一款专门用来解决这类问题的…

【多模态处理篇五】【DeepSeek文档解析:PDF/Word智能处理引擎】

你知道吗?全球每天产生的PDF文档超过10亿份,但90%的上班族还在用复制粘贴的笨办法处理文档!DeepSeek文档解析引擎就像给你的电脑装上了"文档翻译官",能把PDF/Word里的文字、表格、公式甚至排版样式都变成AI能理解的"语言"。举个真实场景:法务小姐姐用…

【C语言】结构体内存对齐问题

1.结构体内存对齐 我们已经基本掌握了结构体的使用了。那我们现在必须得知道结构体在内存中是如何存储的?内存是如何分配的?所以我们得知道如何计算结构体的大小?这就引出了我们今天所要探讨的内容:结构体内存对齐。 1.1 对齐规…

【多模态处理篇三】【DeepSeek语音合成:TTS音色克隆技术揭秘】

最近帮某明星工作室做AI语音助手时遇到魔幻需求——要求用5秒的咳嗽声克隆出完整音色!传统TTS系统直接翻车,生成的语音像得了重感冒的电音怪物。直到祭出DeepSeek的TTS音色克隆黑科技,才让AI语音从"机器朗读"进化到"声临其境"。今天我们就来扒开这个声音…

IDEA使用Maven方式构建SpringBoot项目

1、环境准备 确保你已经安装了以下工具: Java JDK(推荐 JDK 8 或更高版本) IntelliJ IDEA(推荐使用最新版本) 2、创建 Spring Boot 项目 (1) 打开 IntelliJ IDEA。 (2&#xff09…

【Redis原理】底层数据结构 五种数据类型

文章目录 动态字符串SDS(simple dynamic string )SDS结构定义SDS动态扩容 IntSetIntSet 结构定义IntSet的升级 DictDict结构定义Dict的扩容Dict的收缩Dict 的rehash ZipListZipListEntryencoding 编码字符串整数 ZipList的连锁更新问题 QuickListQuickList源码 SkipListRedisOb…

Git Repo下如何制作一个patch文件

Git Repo下如何制作一个patch文件 1. 源由2. 步骤2.1 本地代码差异2.2 添加修改代码2.3 添加未跟踪代码2.4 确认打包文件2.5 输出打包文件2.6 自查打包文件2.7 恢复工作环境 3. 总结 1. 源由 patch分享,更好的差异化比较,减少时间浪费。同时&#xff0c…

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

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

STM32的“Unique device ID“能否修改?

STM32F1系列的"Unique device ID"寄存器的地址为0x1FFFF7E8。 这个寄存器是只读的。 "Unique device ID"寄存器位于“System memory”中。“System memory”地址范围为“0x1FFF F000- 0x1FFF F7FF”。 所有STM32 MCU上都存在系统引导加载程序。顾名思义&a…

模型思维 - 领域模型的应用与解析

文章目录 引言模型的核心作用与价值四大模型类型UML建模工具UML类图的核心价值类关系深度剖析企业级建模实践 领域模型(推荐) vs 数据模型(不推荐)区别联系错把领域模型当数据模型错误方案 vs 正确方案对比正确方案的实现1. 数据库…

基于GWO灰狼优化的WSN网络最优节点部署算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 无线传感器网络(Wireless Sensor Network, WSN)由大量分布式传感器节点组成,用于监测物理或环境状况。节点部署是 WSN 的关键问…

产品概念的提出

产品概念的提出 一个产品或者一个产品概念idea是怎么想到的呢?很多情况下它其实来自生活中的一些不爽、不满意、想吐槽,凡是用户抱怨的事情就是用户的强烈刚需需求是我们要去做的事情。当有了一个想法时需要弄清楚一下几个问题: 核心用户事…

3.Docker常用命令

1.Docker启动类命令 1.启动Docker systemctl start docker 2.停止Docker systemctl stop docker 3.重启Docker systemctl restart docker 4.查看Docker状态 systemctl status docker 5.设置开机自启(执行此命令后每次Linux重启后将自启动Docker) systemctl enable do…

交互编程工具之——Jupyter

Jupyter 是什么? Jupyter 是一个开源的交互式编程和数据分析工具,广泛应用于数据科学、机器学习、教育和研究领域。其核心是 Jupyter Notebook(现升级为 JupyterLab),允许用户在一个基于浏览器的界面中编写代码、运行…

使用 AIStor 和 OpenSearch 增强搜索功能

在这篇文章中,我们将探讨搜索,特别是 OpenSearch 如何帮助我们识别模式或查看不断增长的数据中的趋势。例如,如果您正在查看运营数据,如果您的服务似乎是随机的,那么您需要尽可能回溯以识别模式并找出原因。这不仅适用…