(10)Linux冯诺依曼结构操作系统的再次理解

💭 前言:本章我们首先会明确冯诺依曼体系结构的概念,旨在帮助大家理解体系结构在硬件角度去理解数据流走向的问题。理解完之后我们再去谈操作系统、更多有关操作系统的细节,着重谈谈操作系统概念与定位、操作系统是如何去做管理的,引入 "先描述,再组织。

冯诺依曼架构(Von Neumann architecture)

 

冯诺依曼体系结构 (Von Neumann architecture) ,又称 "范纽曼型架构"。它是我们常见的计算机,如电脑、笔记本或服务器大部分都遵守的一个架构体系。

  • 输入设备: 键盘,话筒,摄像头,usb,鼠标,磁盘/ssd,网卡等等

  • 存储器: 存储器其实就是内存!

  • 中央处理器(CPU): CPU,寄存器,各级别缓存

  • 输出设备: 显示器,磁盘,扬声器,网卡等等

注意事项:

图中的存储器指的就是内存。
不考虑缓存情况,这里的 CPU 能且只能对内存进行读写,不能访问外设(输入或输出设备)
外设想要输入或输出数据,也只能写入内存或者从内存中读取。
所有设备都只能和内存打交道

 内存

??思考??:为什么冯诺依曼体系中要存在 "内存" 这样的东西?

  • memory 指内存,disk 指外设磁盘,cd 指光盘磁带 

有很多种存储,且存储的速度方面是有差别的、

站在我们刚刚展出的冯诺依曼体系结构来看,就是 "输入设备" 是最快的,"输出设备" 是最慢的。

存储器是适中的,如果我们此时不考虑内存的存在:

 

先让输入设备接收用户输入,如果用户不输入,或者输入设备在接受用户期间,

我们的 CPU 是属于闲置状态的,当 CPU 把数据拿到之后再进行计算还得写,写完后还得刷。

CPU 把数据计算完再交给输出设备,交给它时速度非常慢,可能还要给用户展示。

总体来说,就是输入设备非常快,运算器和输出是非常慢的,这里就引出了 "木桶效应" 问题。

" 木桶如求盛水多,决于短板短几何。"

CPU 把数据计算完再交给输出设备,交给它时速度非常慢,可能还要给用户展示。

总体来说,就是输入设备非常快,运算器和输出是非常慢的。

  因此,由此构建出的计算机效率是非常低下的!

所以我们就不能够只是裸地将外设和 CPU 直接粘合起来,构成所对应的计算机体系。

所以就有了冯诺依曼体系结构,在输入输出和运算, 控制器之间添加一个中间设备 —— 存储器

存储器最大的价值:输入设备在输入数据时不是把数据直接交给 CPU 的,而是把数据先从外设交给存储器,再将存储器当中的数据再被 CPU 读取,CPU 计算完后再将数据写回存储器,再由内存刷新回输出设备。因此在整个计算机体系当中,内存是属于数据层面上的核心地位。

数据角度:外设不和 CPU 直接交互,而是和内存交互。(CPU 也是如此)

内存在我们看来,就是体系结构的一个大的缓存,适配外设和 CPU 速度不均的问题的。

内存的意义:使用较低的钱的成本,能够获得较高的性能。 

" 我们自己写的软件,编译好之后,要运行,必须先加载到内存。"

 为什么?因为这是 体系结构 决定的!如果不加载到内存 CPU 没办法执行的。

所以我们自己编好的软件加载到内存,这是体系结构决定的,

当你在启动时,还没有执行程序时,你的数据其实已经预加载到内存当中了。

这就牵扯到 "局部性原理" 的概念了:局部性原理是指 CPU 访问存储器时,

无论是存取指令还是存取数据,所访问的存储单元都趋于聚集在一个较小的连续区域中。

比如正在执行第10行代码,你有理由推断你接下来要执行的代码一定是第10行代码附近的代码。

因为局部性原理的存在,你在访问某些数据时可以将数据的周边数据提前给你加载出来。

 这,就是操作系统预加载数据的根本理论基础。

运算器和控制器

我们先来看 运算器,运算器主要承担了运算的工作。

计算机的计算种类无非两种:① 算数计算    ② 逻辑计算

加减乘除取模这一些就算算数计算,逻辑与逻辑或逻辑反这些就是逻辑计算。

在人的计算世界中,计算其实就是算账、算数。

人会推理一些东西,这实际上就是逻辑。所以计算机的计算和人的计算,无外乎就是这两种。

总结:所有的外设在数据层面上不和 CPU 接轨,直接和内存处理。CPU 读数据直接从内存中读数据,处理完数据后的结果再刷新到内存。

对我们来说,实际上计算机为了提升整体性能,也加了许多其他的优化策略,比如寄存器和缓存,这些话题我们一言难尽,我们放到后面再去探讨。

为什么冯诺依曼系统如此流行?

其实计算机体系不止有冯诺依曼系统,还有哈佛架构和向量处理器系统
,还有流水线结构等等,为啥冯诺依曼系统被广泛使用呢? 

先给大家铺垫一下内存分级的知识:

 结论: 离CPU越近的设备,运行速度越快,造价也越贵!

在硬件层面上,CPU只能和内存交互而不能直接和磁盘外设交互!这是因为外设磁盘离CPU很远,处理速度很慢,相信大家都听说过短板效应,所以CPU为了总体的运行速度不被拉低,就不会直接和磁盘外设打交道,而是和内存打交道!

所以冯诺依曼的这种体系很巧妙将中央处理器进行复杂的数据处理,运算而离CPU远一点的设备用于存储数据或者接受数据后传给内存做分析。

这就得出了这样的结论:

冯诺依曼系统既有高价格的设备用于处理复杂的数据,又有低价格的设备用于存储数据或进行数据交互这使得冯诺依曼体系的计算机可以在价格不高的前提下,做到效率比较高!

正是这种能让老百姓买得起的价格
并且使用起来比较高效的模式
才让冯诺依曼系统到现在也如此流行! 

 理解操作系统(OS)

什么是操作系统?

我们之前也讲过,

操作系统是一款软件,用来进行对软硬件资源进行管理的软件。任何一款计算机系统都包含一个基本的程序集合,我们称之为操作系统。

 操作系统包括:

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

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

管理的目的:① 对上:提供一个良好稳定的运行环境    ② 对下:管理好软硬件资源。

而我们今天要重点谈论的就是 "管理",什么叫做管理?如何理解?

再次理解 "管理" 

虽然我们不懂什么是管理,但是我们肯定是被管过的。 

 管理的本质:不是对管理对象进行直接管理,而是只要拿到管理对象的所有的相关数据,我们队数据的管理,就可以体现对人的管理。

"在公司中,你之前负责的模块经你手自己处理了大半年,模块的效率比之前翻了十倍一百倍,领导就知道你一定是做出成绩来了,如果你在公司里什么都没写,什么有效数据都没有产出,所有管理最终都要落实到对数据做管理。" 

这是我又有一个问题了,如果你说它连我的面就不见,他又是如何拿到我的数据的呢? 

执行者可不是只拿数据,还可以落实对应的政策。 

先描述再组织 

对管理的进一步理解:人认识世界的方式 —— 人是通过属性认识世界的。 

 一切事物都可以通过抽取对象的属性,来达到描述对象的目的。 

class OBJ {// 成员属性
}

继续刚才的例子,如果你自己就个是个当过程序员的校长,你想管理学校的同学,

那么就可以抽取所有同学的属性,描述对应的同学,我们知道 Linux 内核代码是由C语言写的。

那么C语言中有没有一种数据类型,能够达到描述某种对象的功能?

那就是:struct

struct student {学生的基本信息(身高,姓名,年级,电话...)   在校基本信息(专业,班级,年级)考试成绩(平时成绩,期末成绩)学校活动(...学生会, 班长?)其他信息struct student* next;struct student* prev;
};

如此一来,对学生的管理,就变成了对链表的增删查改。然后我们在有头插、尾插的各种方法。

现在如过我想找到考试成绩最好的学生,只需要遍历整个链表,找到那个学生的结点即可。

再比如,学校的挂科率太高了,要整治一下这个问题,我们就执行一个排序算法,以绩点排序。

按升序排列,找到若干名排在前面的绩点低的学生,再通过自带的信息联系到辅导员,进行管理。
管理的本质:对数据做管理 对某种数据结构的管理,管理的核心理念 ——" 先描述,再组织。"

所谓的管理,其实就是 "先描述,再组织。"

  • 描述:用 struct 结构体
  • 组织:用链表或其他高效的数据结构

操作系统对硬件的管理

和校长管理学生一样,操作系统也不是直接管理硬件,而是管理硬件映射出来的信息和校长创建的结构体类似,操作系统也会对各个硬件创建一个结构体,结构体中存放硬件的各种信息和健康状态等等,再通过链表或者其他数据结构将这些结构体一一链接起来统一管理!

操作系统将软件硬件管理好并不是它的目的,它的目的是给用户提供良好得,稳定,高效,安全得使用环境,而管理只是一种手段

 

每一个硬件都有对应的驱动程序来做管理像键盘,鼠标,U盘等等都有对应的驱动程序,然后操作系统再通过这一整套成熟的驱动程序来管理下层的硬件!并且在此基础上衍生出各种软件业务,和用户服务! 

 总结

本篇文章的内容大家要有一个基本的认识,然而虽然说操作系统是为用户提供服务的,但是它并不相信用户,因为群众中可能有坏人,就像银行一样,为你提供服务但是不信任你,于是在操作系统和用户之间还有系统调用窗口和shell外壳来阻止群众中的坏人直接获取Linux内核中的各种信息!

系统调用说白了就是操作系统给用户提供了一个又一个的函数用户通过调用函数来获取操作系统内的各种数据,然而函数是操作系统内部写的,所以你只能看到有限部分的数据。
 

 

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

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

相关文章

智能优化算法应用:基于沙猫群算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于沙猫群算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于沙猫群算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.沙猫群算法4.实验参数设定5.算法结果6.参考文…

【python】python课设 天气预测数据分析及可视化(完整源码)

目录 1. 前言2. 项目结构3. 详细介绍3.1 main.py3.2 GetModel.py3.3 GetData.py3.4 ProcessData.py3.5天气网.html 4. 成果展示 1. 前言 本文介绍了天气预测数据分析及可视化的实现过程使用joblib导入模型和自定义模块GetModel获取模型,输出模型的MAE。使用pyechart…

yolo实现数据增强(数据集不够,快速增加数据集)

目录结构 附上数据增强的全部代码 # -*- codingutf-8 -*-import time import random import copy import cv2 import os import math import numpy as np from skimage.util import random_noise from lxml import etree, objectify import xml.etree.ElementTree as ET imp…

双端队列、优先级队列、阻塞队列

双端队列、优先级队列、阻塞队列 文章目录 双端队列、优先级队列、阻塞队列1 双端队列1.1 概述1.2 应用实例1.2.1 双端链表实现1.2.2 数组实现1.2.3 测试代码 1.3 课后作业- LeeTCode103 2. 优先级队列2.1 概述2.2 基于无序数组实现2.3 基于有序数组实现2.3 堆实现优先级队列2.…

注意力机制(数学公式)

人类视觉注意力机制极大地提高了视觉信息处理的效率与准确性 计算机注意力机制是为了让卷积神经网络注意到他更加需要注意的地方 ,而不是什么都关注 。 分为三种注意力机制,空间注意力机制,通道注意力机制,以及两者的结合。 …

HTTP 原理

HTTP 原理 HTTP 是一个无状态的协议。无状态是指客户机(Web 浏览器)和服务器之间不需要建立持久的连接,这意味着当一个客户端向服务器端发出请求,然后服务器返回响应(response),连接就被关闭了,在服务器端…

算法基础之最长公共子序列

最长公共子序列 核心思想: 线性dp 集合定义 : f[i][j]存 a[1 ~ i] 和 b[1 ~ j] 的最长公共子序列长度 状态计算: 分为取/不取a[i]/b[j] 共四种情况 其中 中间两种会包含两个都不取的情况(去掉) 但是因为取最大值 有重复也没事用f[i-1][j] 和 f[i][j-1]表…

案例分析:西门子智能工厂

西门子全球首家原生数字化工厂,以其独特的数字化技术,在虚拟世界中构建了工厂的数字孪生,从而实现了从需求分析、规划设计、施工实施到生产运营全过程的数字化。这一原生数字化工厂的创新之处在于,它开创性地运用了原生数字孪生理…

2023年12月25日:串口发出控制命令

代码 uart4.c #include "uart4.h"void uart4_config() {//*****************************************//使能GPIOB|GPIOG|UART4外设时钟RCC->MP_AHB4ENSETR |(0x1<<6);RCC->MP_AHB4ENSETR |(0x1<<1);RCC->MP_APB1ENSETR |(0x1<<16);RCC…

27 redis 的 sentinel 集群

前言 redis 的哨兵的相关业务功能的实现 哨兵的主要作用是 检测 redis 主从集群中的 master 是否挂掉, 单个哨兵节点识别 master 下线为主管下线, 超过 quorum 个 哨兵节点 认为 master 挂掉, 识别为 客观下线 然后做 failover 的相关处理, 重新选举 master 节点 我们这里…

平衡二叉树的构建(递归

目录 1.概念&#xff1a;2.特点&#xff1a;3.构建方法&#xff1a;4.代码&#xff1a;小结&#xff1a; 1.概念&#xff1a; 平衡二叉树&#xff08;Balanced Binary Tree&#xff09;&#xff0c;也称为AVL树&#xff0c;是一种二叉树&#xff0c;它满足每个节点的左子树和右…

异常和智能指针

智能指针的认识 智能指针是一种C语言中用于管理动态内存的工具&#xff0c;它们可以自动管理内存的分配和释放&#xff0c;从而避免内存泄漏和悬空指针等问题。智能指针可以跟踪指向的对象的引用次数&#xff0c;并在需要时自动释放被引用的内存&#xff0c;这极大地提高了内存…

openGauss学习笔记-173 openGauss 数据库运维-备份与恢复-导入数据-对表执行VACUUM

文章目录 openGauss学习笔记-173 openGauss 数据库运维-备份与恢复-导入数据-对表执行VACUUM openGauss学习笔记-173 openGauss 数据库运维-备份与恢复-导入数据-对表执行VACUUM 如果导入过程中&#xff0c;进行了大量的更新或删除行时&#xff0c;应运行VACUUM FULL命令&…

关于合同能源管理

合同能源管理模式&#xff1a;我投资、你节能、收益共享 合同能源管理&#xff08;EPC——Energy Performance Contracting&#xff09;&#xff1a;节能服务公司与用能单位以契约形式约定节能项目的节能目标&#xff0c;节能服务公司为实现节能目标向用能单位提供必要的服务&…

Python 直方图的绘制-`hist()`方法(Matplotlib篇-第7讲)

Python 直方图的绘制-hist()方法(Matplotlib篇-第7讲)         🍹博主 侯小啾 感谢您的支持与信赖。☀️ 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹…

什么是制造业的数字化车间

什么是制造业的数字化车间&#xff0c;在企业数字化转型中&#xff0c;数字化车间的存在至关重要&#xff0c;其意思就是将制造业车间里所有的工作流程数字化&#xff0c;实现设备、生产流程、工人等各环节之间的数字化管理与协同&#xff0c;全面提升制造业企业的生产效率和产…

data选项声明-vite项目

新建App.vue,内容如下 <script>export default{//data选项声明响应式状态&#xff0c;必须是返回一个对象的函数data(){return{//声明状态属性&#xff0c;属性名不能以$和_开头&#xff0c;内置使用保留&#xff0c;不让我们声明使用msg:我是谁,age:18,salary:99.99,st…

「Verilog学习笔记」并串转换

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 串并转换操作是非常灵活的操作&#xff0c;核心思想就是移位。串转并就是把1位的输入放到N位reg的最低位&#xff0c;然后N位reg左移一位&#xff0c;在把1位输入放到左移后…

如何做好接口测试?资深测试老鸟总结,一篇带你打通...

前言 1、接口测试 1&#xff09;什么是接口测试&#xff1f; 接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。 测试的重点是要检查数据的交换&#xff0c;传递和控制管理过程&#xff0c;以及系统间的相…

TCP协议工作原理及实战(一)

实战项目目标&#xff1a; ui搭建&#xff1a;clientconnect 客户端连接 clientdisconnect 客户端断开 socketreaddate 使用套接字传输数据 newconnection新的连接 获取本机的IP地址&#xff1a; 获取本机的ip地址可以参考前面的QT网络编程协议 将得到的ip地址放入combox中…