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

🌎冯诺依曼体系结构


文章目录

冯诺依曼体系结构

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

    关于内存

    对冯诺依曼体系的理解

    操作系统

    操作系统概念

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

    系统调用

      理解系统调用
      总结

    本文小结


前言:

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

在这里插入图片描述


🚀认识冯诺依曼体系结构

在这里插入图片描述

✈️硬件分类

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

  • 输入单元:包括键盘、鼠标、扫描仪等设备。
  • 输出单元:显示器,打印机等。
  • 中央处理单元:简称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.mzph.cn/news/587927.shtml

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

相关文章

野火霸道-V2+3.2寸屏+FreeRTOS+LVGL移植

摘要 基于野火霸道-V23.2寸屏的开发板,下载器为STLINK分为两个版本,FreeRTOS和裸机版本 裸机 裸机准备 lvgl v8.2版本的源码野火的《触摸画板-3.2寸》与《基本定时器》的代码例程 移植 将基本定时器代码移植到触摸画板-3.2寸的例程中,…

【python高级用法】迭代器、生成器、装饰器、闭包

迭代器 可迭代对象:可以使用for循环来遍历的,可以使用isinstance()来测试。 迭代器:同时实现了__iter__()方法和__next__()方法,可以使用isinstance()方法来测试是否是迭代器对象 from collections.abc import Iterable, Iterat…

驾驶人类未来:Apollo自动驾驶系统的影响力

前言 「作者主页」:雪碧有白泡泡 「个人网站」:雪碧的个人网站 ChatGPT体验地址 文章目录 前言1. 什么是自定义指令?2. Apollo中的自定义指令2.1 查询中的自定义指令2.2 变更操作中的自定义指令 3. 自定义指令的实现结论 文章目录 前言1. 什…

中职网络安全Server2002——Web隐藏信息获取

B-2:Web隐藏信息获取 任务环境说明: 服务器场景名:Server2002(关闭链接)服务器场景用户名:未知 有问题需要环境加q 通过本地PC中渗透测试平台Kali使用Nmap扫描目标靶机HTTP服务子目录,将扫描子…

2023-12-19 LeetCode每日一题(寻找峰值 II)

2023-12-19每日一题 一、题目编号 1901. 寻找峰值 II二、题目链接 点击跳转到题目位置 三、题目描述 一个 2D 网格中的 峰值 是指那些 严格大于 其相邻格子(上、下、左、右)的元素。 给你一个 从 0 开始编号 的 m x n 矩阵 mat ,其中任意两个相邻格子的值都 不…

详解数组的轮转

𝙉𝙞𝙘𝙚!!👏🏻‧✧̣̥̇‧✦👏🏻‧✧̣̥̇‧✦ 👏🏻‧✧̣̥̇:Solitary-walk ⸝⋆ ━━━┓ - 个性标签 - :来于“云”的“羽球人”。…

C语言——扫雷

扫雷是一款经典的小游戏,那如何使用C语言实现一个扫雷游戏呢? 一、全部源码 直接把全部源码放在开头,如有需要,直接拿走。 源码分为三个文件: test.cpp/c 主函数的位置 #include "game.h"int main() {…

[设计模式 Go实现] 创建型~抽象工厂模式

抽象工厂模式用于生成产品族的工厂,所生成的对象是有关联的。 如果抽象工厂退化成生成的对象无关联则成为工厂函数模式。 比如本例子中使用RDB和XML存储订单信息,抽象工厂分别能生成相关的主订单信息和订单详情信息。 如果业务逻辑中需要替换使用的时候…

Python开源项目月排行 2023年12月

Python 趋势月报,按月浏览往期 GitHub,Gitee 等最热门的Python开源项目,入选的项目主要参考GitHub Trending,部分参考了Gitee和其他。排名不分先后,都是当前月份内相对热门的项目。 入选公式=70%GitHub Trending20%Gitee10%其他 …

LFW人脸数据库的简介

LFW人脸数据库的简介 ​ LFW (Labled Faces in the Wild)人脸数据集:是目前人脸识别的常用测试集,其中提供的人脸图片均来源于生活中的自然场景,因此识别难度会增大,尤其由于多姿态、光照、表情、年龄、遮挡等因素影响导致即使同…

每日一练(编程题-C/C++)

目录 CSDN每日一练1. 2023/2/27- 一维数组的最大子数组和(类型:数组 难度:中等)2. 2023/4/7 - 小艺照镜子(类型:字符串 难度:困难)3. 2023/4/14 - 最近的回文数(难度:中等)4. 2023/2/1-蛇形矩阵(难度:困难)…

算法基础之整数划分

整数划分 核心思想: 计数类dp 背包做法 f[i][j] 表示 取 1 – i 的物品 总容量为j的选法数量 f[i][j] f[i-1][j] f[i-1][j-v[i]] f[i-1][j-2v[i]] f[i-1][j-3v[i]] ……f[i-1][j-kv[i]] f[i][j-v[i]] f[i-1][j-v[i]] f[i-1][j-2v[i]] f[i-1][j-3v[i]] ……f[i…

万字长文谈自动驾驶occupancy感知

文章目录 prologuepaper listVision-based occupancy :1. [MonoScene: Monocular 3D Semantic Scene Completion [CVPR 2022]](https://arxiv.org/pdf/2112.00726.pdf)2. [Tri-Perspective View for Vision-Based 3D Semantic Occupancy Prediction [CVPR 2023]](https://arxiv…

QString设置小数点精度位数

QString设置小数点精度位数 Chapter1 QString设置小数点精度位数Chapter2 Qt中QString.toDouble有效位数6位问题以及数据小数点有效位数的处理问题一:QString.toDouble有效位只有6位问题二:小数点有效位数的问题 Chapter3 qt QString转Double只显示6位数字的问题(精…

docker的安装的详细教程,以及出现错的解决办法(阿里云)

docker的安装与使用 1.安装dnf sudo yum -y install dnf Repository extras is listed more than once in the configuration 错误:无法为仓库 appstream 找到一个有效的 baseurl 出现这个错误这是由于阿里云的版本导致的 在阿里云开发者社区有答案&#xff01…

【Google】关于Google Analytics埋点及API获取数据

本文是在实际操作中踩到的一些坑,并不是操作手册。具体的还是需要仔细按照官方文档操作。 参考文档:https://developers.google.com/analytics/ 重点看标红的文档即可 普通事件埋点 各端需要跟产品端确定好统一的事件名称和参数,否则数据混…

Python:日期和时间类型学习

背景 在非开发环境经常需要做一下日期计算,就准备使用Python,顺便记下来学习的痕迹。 代码 1 1 # coding utf-82 2 3 3 from datetime import *4 4 5 5 ########################## 日期 ##########################6 6 date_now date.today()…

如何实现WinApp的UI自动化测试?

WinApp(WindowsAPP)是运行在Windows操作系统上的应用程序,通常会提供一个可视的界面,用于和用户交互。例如运行在Windows系统上的Microsoft Office、PyCharm、Visual Studio Code、Chrome,都属于WinApp。常见的WinApp&…

使用内网穿透轻松实现在外远程访问本地威联通QNAP NAS

文章目录 前言1. 威联通安装cpolar内网穿透2. 内网穿透2.1 创建隧道2.2 测试公网远程访问 3. 配置固定二级子域名3.1 保留二级子域名3.2 配置二级子域名 4. 使用固定二级子域名远程访问 前言 购入威联通NAS后,很多用户对于如何在外在公网环境下的远程访问威联通NAS…

学习使用echats实现双刻度echarts双Y轴,左右Y轴数据的方法

学习使用echats实现双刻度echarts双Y轴&#xff0c;左右Y轴数据的方法 代码效果图 代码 <!--此示例下载自 https://echarts.apache.org/examples/zh/editor.html?cline-stack&langjs --> <!DOCTYPE html> <html lang"en" style"height: 10…