浅谈冯诺依曼体系和操作系统

news2025/3/1 9:58:55

🌎冯诺依曼体系结构


文章目录

冯诺依曼体系结构

    认识冯诺依曼体系结构
      硬件分类
      各个硬件的简单认识
        输入输出设备
        中央处理器
        存储器

    关于内存

    对冯诺依曼体系的理解

    操作系统

    操作系统概念

      设计操作系统的目的
      理解管理概念
      管理工作
      先描述,再组织
      为什么要有操作系统
      总结

    系统调用

      理解系统调用
      总结

    本文小结


前言:

  我们常见的计算机,像笔记本,台式机等,不常见的计算机,像服务器,大部分都遵守冯诺依曼体系结构。那冯诺依曼体系结构究竟是什么呢?话不多说,开启我们今天的话题!

在这里插入图片描述


🚀认识冯诺依曼体系结构

在这里插入图片描述

✈️硬件分类

  截止到目前为止,我们所认识的计算机都是由一个个硬件组件组成。

  • 输入单元:包括键盘、鼠标、扫描仪等设备。
  • 输出单元:显示器,打印机等。
  • 中央处理单元:简称CPU。
    |
    |______ 运算器:对数据进行计算任务
    |
    |______ 控制器:对计算机硬件流程进行一定的控制

关于冯诺依曼,必须 强调 的几点:

  •  不考虑缓存的情况下,这里的CPU只能对内存进行读写,不能访问外设。
  •  外设要输入输出数据,也只能从内存写入和读取数据。
  •  也就是说,所有设备只能直接和内存打交道

注意: 它们都是独立的个体, 各个部分必须用 总线 连接起来,总线分为 系统总线 和 IO总线。


✈️各个硬件的简单认识
🚩 输入输出设备

  输入输出设备是指能够把数据输入到计算机或者把计算机处理的数据输出给用户的设备。可以说,它是计算机与外界沟通的桥梁,没有输入输出设备,计算机就没办法接收发送数据,更不能和用户进行交互。

🚩 中央处理器

  中央处理器全称Central Processing Unit,简称CPU,它由 负责执行算数逻辑运算运算器(ALU)负责控制计算机运行,协调其他部件工作控制器(CU) 组成。CPU是计算机中最重要的硬件之一,它的性能决定了计算机整体性能。

🚩 存储器

  存储器是 指内存,而不是磁盘,具有 “掉电易失” 的特性,如果突然停电导致计算机不能正常工作,那么加载到内存中的数据就很容易丢失了。而我们所谓的 磁盘,其实 也属于输入输出设备的一种


🚀关于内存


  不知道你有没有想过,我们直接让CPU与输入输出设备进行交互就好了啊,为什么还需要内存这个 “中间商” 呢?

在这里插入图片描述
  其实,在我们计算机当中,存在着一种存储金字塔模型:

在这里插入图片描述
  我们可以发现:

  • 距离CPU越近的存储单元,效率越高,造价贵,单体容量小
  • 距离CPU越远的存储单元,效率越低,造价便宜,单体容量大

  输入与输出这些是设备,距离CPU有一定距离,而相 对CPU来说,这些设备的速度就显得非常慢 了,而有一个原理叫做 木桶效应

在这里插入图片描述
  一个团队的好坏,取决于最差的那个人,而计算机也是如此,整个计算机就像一个团队一样,而这些外设对于CPU来说非常的慢,所以这些外设 必定会拖慢CPU的速度

  于是人类就在计算机外设与CPU之间,加上了 内存 ,让外设直接访问到内存,CPU也只需要从内存中拿数据即可。

在这里插入图片描述
  但是这似乎看起来更加拖慢速度了?原本我CPU只需要与外设打交道,现在还多了个 “中间商” 在那赚差价,不就变得更慢了吗?

  其实,在我们内存中,存在着两个机制:预先加载缓存 技术:

  • 预先加载:指在用户调度之前,预先将数据加载到内存或缓存 中,这样可以减少用户的等待时间。
  • 缓存:将 数据存储在临时存储器 中,以便于快速访问。

  这就好比,在工作当中有一个急性子和一个慢性子的人合作,而事情往往会向着慢性子的方向发展,但是如果在来一个性子适中的人,既可以催促慢性子人工作,等到慢性子的人汇聚一定工作结果,适中性子的人再将结果反馈给急性子的人,而其他闲的时候也可以和急性子的人一起干其他事情。

  而我们存储金字塔越往塔尖就存储设备就越贵,如果我们把内存全部换为更加高效的寄存器,效率确实很高,但是我们 普通用户消费不起 啊,而最 适中且大众能够接受 的选择就是 内存

  我们再看冯诺依曼体系结构:

在这里插入图片描述

  我们只看数据流动的信号,我们来思考一个问题:为什么我们前面说程序在运行的时候,为什么要先把程序加载到内存?

  我们要先知道,程序文件是存储在磁盘当中 的,而程序中的指令和数据,是要被CPU拿来执行的,磁盘属于外设,那么根据上图,外设就 必须要先经过内存,才能被CPU读取。

  结论因为冯诺依曼体系是这样规定的,所以运行程序要先加载到内存


🚀对冯诺依曼体系的理解


  对冯诺依曼体系的理解不能只停留在概念上,要深入到软件数据流理解上,我们拿在QQ与别人聊天为例子:

  阿熊与远在异地的女朋友联系,一个在安徽,一个在北京,并且两人都在用电脑聊天,这时,阿熊给女朋友发了一句:“在吗?”
  我的问题是:当阿熊输入 在吗 这个字符串,整个数据的信息流动是怎样的?

  首先,两人都是用电脑在联系,那么两台电脑就是两台冯诺依曼机,而发送端输入的内容经过冯诺依曼处理,由网卡经网络所送到对端,对端再由网卡接收,进行解包等操作,最后到输出设备。

在这里插入图片描述

  这个时候,阿熊的女朋友刚学完C语言,直接给阿熊发了一个关机程序,阿熊女朋友将程序拖入聊天框内,点击发送。
  我的问题是,这个时候的数据传输又是怎样的?

  其实只需要把上图的接收端和发送端调换一下位置,程序要传输,需要先被加载到内存中,在由输出设备经网卡传输,接收端也是由网卡接收到输入设备,加载到内存进行解包等操作,最后到了阿熊的输出设备。

  结论数据在流动的时候必须从外设到达内存,完全遵循冯诺依曼体系结构。


🚀操作系统


  什么是操作系统,对我们来说,这是一个很模糊的观念,今天我们就来简单认识一下操作系统。

  我们先来了解一下计算机层状结构图:

在这里插入图片描述

✈️操作系统概念

  任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。笼统的理解,操作系统包括:

  • 内核(进程管理,内存管理,文件管理,驱动管理)
  • 其他程序(例如函数库,Shell程序等)

也可以这样理解:操作系统是一个 软硬件 资源 管理 软件

✈️设计操作系统的目的
  • 与硬件进行交互,管理所有的软硬件资源。
  • 为用户程序(应用程序)提供一个良好的执行环境。

  在整个操作系统软硬件架构中,操作系统的 定位 是:一款纯正的 “搞管理” 的软件。

✈️理解管理概念

那么什么叫做 管理

 世界上无非就三种人,一种是 做决策的人,一种是 做执行的人,还有一种是 既做决策,也做执行 的人。而我们的管理者其实就是做决策的人,而被管理者就是做执行的人。

  那么对于我们操作系统来说,操作系统就是管理者底层硬件部分就是被管理者

在这里插入图片描述

✈️管理工作

  我们拿校园生活举例:

  在大学期间,校长就是管理者,辅导员是保证管理决策的落地,而学生就是被管理者。在大学开学之前,校长没见到你的面,但是却知道你是我们学校的,于是将录取通知书发给你。

  明明校长没有和你见过面,但是却能将录取通知书发给你,说明管理者不需要对执行者见面。

结论管理者的本质,不在于对人做管理,而在于对人的信息做管理,管理者的核心工作是做决策,根据数据来做决策。

在这里插入图片描述

  这里有个疑问:为什么没有见过面,但是校长却知道我?

  其实是因为辅导员保证了校长所做决策的落地,辅导员在你还没上大学的时候,就已经将你的信息从高中档案里拿到了。而校长只需要从辅导员那里获取信息即可。

✈️先描述,再组织

  但是,当数据量很大的时候,我们的校长该如何管理呢?假如我们的校长曾经是个教C语言的老师,校长C语言很好,于是,校长写了一个 结构体 来对每个学生的信息进行管理:

struct Student{
	char name[20];//姓名
	char sex[5];//性别
	int age;//年龄
	char tele[20];//电话
	//...
};

  每个学生的信息我们用结构体对象来存储,但是如何让很多学生的数据关联起来呢?这时校长想到了在学习数据结构时学过的——链表,使用 链表将学生信息进行关联 起来:

struct Student{
	char name[20];//姓名
	char sex[5];//性别
	int age;//年龄
	char tele[20];//电话
	//...
};
struct Student *next; //链式结构关联起数据

  有了链式结构之后,校长就对着整个链表在那里翻看,校长一想,这不对啊,这样的话还用链表存储干嘛呢?直接读不就完了?
  然后校长想到,写一批 对链表的增删改查 的代码,这样,当学校需要一个会C++的同学参加比赛,那么校长直接遍历这个链表,找到C++考的最好的同学去参加即可。

  这样以来,校长所有的决策工作,就变为了对链表的增删查改!

在这里插入图片描述

  其实这也就是对管理的一个 计算机建模 的过程,这个过程用六个字来总结就是:先描述再组织

如何理解六个字?

  就拿上面的结构体举例,校长想要管理学生,需要知道这个学生的脾气吗?需要知道这个学生的爱好吗?不需要,校长只需要知道学生的属性信息即可,也就是将学生的属性信息进行具象化描述,再将这些属性组织起来,就是Student结构体,再以链表的形式进行管理。
  所以,校长对学生的管理工作 转化为了 对链表的增删查改!

  那么将学生、辅导员、校长映射到操作系统中就是:

在这里插入图片描述

✈️为什么要有操作系统

  现在再来看这个问题,其实就是在问:为什么要有操作系统的管理

  • 对下管理好软硬件资源 ——手段
  • 对上提供一个良好的运行环境 ——目的

  操作系统通过对下硬件的管理,对上给用户提供 安全、稳定、高效、功能丰富的执行环境,让用户有一个好的体验,这就是操作系统存在的意义。

✈️总结
  •  管理者和被管理者不需要见面。
  •  管理的本质是 对被管理者的数据做管理
  •  管理的方法是:先描述,再组织

🚀系统调用

✈️理解系统调用

  我们前面所介绍的是从操作系统到硬件的过程,下面我们来谈谈从操作系统往上的部分:

在这里插入图片描述
  在操作系统往上的部分,是面向用户的,但是为什么在用户和操作系统之间却存在一个叫做 系统调用 的东西?

  这时候举一个例子来帮大家理解:

  大家在去银行取钱的时候,你去到跟前台说:“我要取100万”,难道这个时候前台就会乖乖的给你去金库里拿钱了?天知道你是不是真的有100万,而且就算有你该怎么证明?

在这里插入图片描述

  银行不能保证钱是你的钱,不能保证你是好人还是坏人,而我们前面也说了,这里的银行就是操作系统,而我们前面也说了,操作系统的目的是为了给用户 提供安全 高效的服务。这明显很不安全。

  这就好比银行直接让来的用户自己去金库里取钱,是一件很危险的事情,操作系统也是如此。也就是说,操作系统直接交给用户来操作是一件很危险的事情,于是在用户和操作系统之间出现了——系统调用

  系统调用就像是银行的柜台,如果你是来抢劫银行的,那柜台那头的小姐姐会毫不犹豫的按下报警按钮,防止金钱丢失。而系统调用正是如此。

在这里插入图片描述

  操作系统不知道你是好人坏人,干脆把大家都当为坏人,你只能通过我给你的接口来进行访问,内核数据结构的属性用户不能直接更改,需要通过系统调用接口来间接更改。

  其实将其抽象化,可以把操作系统看为一个巨大的类,而类中public部分是给用户展示的,用户可以直接操作,而private部分用户不可直接操作,可以调用接口来间接修改private内部的属性。

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

📒✏️本文小结

  •  大部分计算机都是冯诺依曼体系结构所组成的。
  •  冯诺依曼组成的各个部件都只与内存进行直接的交互.
  •  操作系统是一个对软硬件进行资源管理的软件。
  •  操作系统向下进行管理,方式是:先描述,再组织。向上提供安全、高效的服务。
  •  为了操作系统安全,需要有系统调用作为媒介让用户与操作系统进行交互。

在这里插入图片描述
  如果这篇文章对你有帮助的话,还望三连支持一下博主~~

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

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

相关文章

为什么深度学习神经网络可以学习任何东西

下图你所看到的,是著名的曼德尔布罗特集,我们可以见证这个集合呈现出的复杂形态: 要理解神经网络如何学习曼德尔布罗特集,我们首先需要从最基础的数学概念讲起:什么是函数?函数本质上是一个将输入转化为输出…

测试用例设计方法:正交试验冲锋

1 引言 上篇讲了因果图和判定表法,而这两种方法在变量值很多、排列组合数量极大的场景下,会生成非常庞大且冗余的测试用例,此时我们很难对所有组合场景进行全量测试用例覆盖,基于此短板,正交试验法应运而生。 2 概念及…

CSP CCF 201409-2 画图 C++满分题解

解题思路&#xff1a; 1.使用二维数组标记每一个方块是否被涂色。 2.注意坐标代表的是点&#xff0c;不是方块&#xff0c;交界处的坐标只能算一个方块。 3.可以看成&#xff1a;每一个坐标都对应它左上角的一个小方块&#xff0c;这样可以避免重复计算方块数 #include<i…

每日一题合集1

1038 从二叉搜索树到更大和树 1038. 从二叉搜索树到更大和树 - 力扣&#xff08;LeetCode&#xff09; 二叉树的中序遍历逆向思维 给定一个二叉搜索树 root (BST)&#xff0c;请将它的每个节点的值替换成树中大于或者等于该节点值的所有节点值之和。 提醒一下&#xff0c; …

轻量封装WebGPU渲染系统示例<55>- 顶点数据更新

当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/feature/material/src/voxgpu/sample/VertexUpdateTest.ts 当前示例运行效果: ​​​​​​​ 此示例基于此渲染系统实现&#xff0c;当前示例TypeScript源码如下: export class VertexUpdateTest {pr…

全新ui自动化测试框架教学——Cypress

前言 在现阶段自动化测试领域大规模普及的是selenium及appium等常规自动化测试工具&#xff0c;但在其中会有遇到很多影响因素导致测试结果不理想和不准确的情况发生。在经过Darren洋对自动化测试工具调研后&#xff0c;发现了Cypress这一款针对端到端的自动化测试工具&#xf…

从2023看2024前端发展趋势

前言 流光溯影&#xff0c;纵观2023全年&#xff0c;整个前端业界呈现出百业凋零之状&#xff0c;更不乏有“前端已死”等论调甚嚣尘上。从全局视角看IT行业&#xff0c;除了AI领域的大语言模型爆发外&#xff0c;整体都鲜有特别亮眼及突出的技术展现。故而&#xff0c;作为IT…

Linux下使用Wireshark抓包教程

在实际开发中&#xff0c;涉及网络传输的环节是非常多的。在这些过程中&#xff0c;我们经常有查看被传输的数据信息的需求&#xff0c;因此&#xff0c;抓包工具应运而生。Wireshark便是一款非常有名的抓包及分析软件&#xff0c;具有强大的协议解析能力。本文将介绍如何在Lin…

用通俗易懂的方式讲解大模型:ChatGLM3-6B 功能原理解析

上次我们介绍了 ChatGLM3-6B 的部署&#xff0c;虽然我们的大语言模型&#xff08;LLM&#xff09;部署起来了&#xff0c;新功能也试用了&#xff0c;但问题很多的小明就要问了&#xff0c;这其中的实现原理是什么呢&#xff1f;到底是怎么实现的呢&#xff1f; 那今天我们就…

第3课 使用FFmpeg获取并播放音频流

本课对应源文件下载链接&#xff1a; https://download.csdn.net/download/XiBuQiuChong/88680079 FFmpeg作为一套庞大的音视频处理开源工具&#xff0c;其源码有太多值得研究的地方。但对于大多数初学者而言&#xff0c;如何快速利用相关的API写出自己想要的东西才是迫切需要…

HTML+CSS+JAVASCRIPT实战项目——新年快乐特效

生成动态视频 <!doctype html> <html> <head><meta charset"utf-8" name"viewport" content"widthdevice-width, initial-scale1.0, maximum-scale1.0, minimum-scale1.0, user-scalableno"/><title>2024新年快乐…

LabVIEW开发智能火灾自动报警系统

LabVIEW开发智能火灾自动报警系统 系统基于LabVIEW虚拟仪器开发&#xff0c;由火灾报警控制器、感温感烟探测器、手动报警器、声光报警器、ZigBee无线通讯节点以及上位机电脑等组成&#xff0c;展示了LabVIEW在智能化火灾预警与控制方面的应用。该系统通过结合二总线协议和Zig…

kivy中的GridLayout

说明 GridLayout 是 Kivy 框架中的一个布局管理器&#xff0c;它允许你在网格中排列子控件。你可以指定网格的行数和列数&#xff0c;然后添加子控件到网格中。GridLayout 会自动调整子控件的位置和大小&#xff0c;以适应网格的单元格。 在 Kivy 框架中&#xff0c;size_hint…

详解维吉尼亚密码(附四种攻击策略)

目录 一. 介绍 二. 破解维吉尼亚密码 2.1 频率统计 2.2 提高型频率统计法 2.3 Kasiski攻击法 2.4 重合指数攻击法&#xff08;index of coincidence method&#xff09; 三. 小结 一. 介绍 我们知道英语字母的出现频率是有规律的&#xff0c;比如像下表&#xff1a; 掌…

深入解析泛型

一、泛型的诞生 在C#1 中我们还没有泛型的时候我们收集数据通常需要使用到数组&#xff0c;或者使用封装好的数组集合Hashtable ArrayList。 举个例子&#xff1a; 我们在读取文件的时候就会需要一个数组来储存读取的数据的内容 但我们并不知数据的具体长度也就无法在声明的…

小梅哥Xilinx FPGA学习笔记17——模块化设计基础之加减法计数器

目录 一&#xff1a; 章节导读 1.1 任务要求 1.2 模块功能划分 二&#xff1a; 代码设计 2.1 灯控制逻辑&#xff08;led_ctrl&#xff09; 2.2 按键消抖模块&#xff08;key_filter&#xff09; 2.3 顶层模块&#xff08;key_led&#xff09; 2.4 引脚绑定 一&#x…

报表控件FastReport VCL 中的新 S3 传输 (Amazon)

在本文中&#xff0c;我们将探讨新的 S3 传输。从功能上来说&#xff0c;S3 与大多数人习惯使用的有很大不同&#xff0c;因此在本文的开头&#xff0c;我们将详细介绍它的主要功能。 FastReport .NET 是适用于.NET Core 3&#xff0c;ASP.NET&#xff0c;MVC和Windows窗体的全…

java maven项目添加oracle jdbc的依赖

一般添加依赖是直接在pom.xml中添加配置即可&#xff0c;Maven会自动获取对应的jar包&#xff0c;但是oracle驱动依赖添加后会显示红色&#xff0c;代表找不到依赖项&#xff0c;是因为Oracle授权问题&#xff0c;Maven3不提供Oracle JDBC driver&#xff0c;为了在Maven项目中…

LinkSLA管家式运维:为企业打造定制化 IT 支持体系

引言 在数字化转型的浪潮中&#xff0c;企业信息系统繁多&#xff0c;涉及人员复杂&#xff0c;且企业经营管理活动对IT系统的依赖程度越来越高。传统的运维模式已经不能满足企业对运维工作全面性、灵活性、稳定性和安全性的需求。管家式运维作为一种新型服务模式&#xff0c;…

CUDA安装与Tensorflow1-gpu环境搭建(windows版)

一、前提说明 1.1 Tensorflow-gpu环境搭建基本步骤 (1)明确环境搭建资源需求与下载 (2)安装CUDA与cuDNN (3)用Anaconda搭建tensorflow-gpu环境 (4)tensorflow-gpu环境测试 1.2 个人说明 由于科研需要复现机器学习、深度学习某些经典实验&#xff0c;这…