Linux:冯·诺依曼结构 OS管理机制

news2024/11/24 6:40:00

Linux:冯·诺依曼结构 & OS管理机制

    • 冯·诺依曼结构
    • OS管理机制
      • OS对下层硬件的管理
      • OS对上层用户的服务


冯·诺依曼结构

我们常见的计算机,比如笔记本,台式电脑。以及一下不常见的计算机,比如服务器,几乎都遵循冯诺依曼体系结构。冯诺依曼体系结构可以说是计算机的灵魂,如果没有这个结构的提出,计算机就不可能走向百姓,以低成本完成高速的运算。接下来,我就为大家讲解这个结构的设计理念。

常见的冯诺依曼体系结构图如下:

在这里插入图片描述
我们认识的计算机,都是由一个个硬件组成的,按照以上图片,我们可以分为以下区域:

  • 输入设备:包括键盘,鼠标等
  • 输出设备:显示器,打印机,网卡,显卡等
  • 中央处理器CPU:计算机完成运算的核心部件,包括运算器控制器
  • 存储器

对于存储器,我这里要特地说明:

存储器就是内存
虽然计算机绝大部分数据存储在硬盘中,但是硬盘不是存储器,硬盘是输入输出设备,比如从硬盘读取数据,以及把数据写入硬盘

如果我们只考虑数据的流动,我们可以得到以下逻辑关系:

在这里插入图片描述

以上关系中,我们可以提炼出两点:

  1. 所有外设,即输入输出设备,都只能和内存交换数据
  2. CPU只能和内存交换数据

可见,内存在计算机中起到了核心枢纽的作用,那么为什么要这么做呢?为什么不直接让输入设备和CPU交换数据,CPU把计算好的数据直接输出给输出设备,这样不是更快吗???

就像这样:
在这里插入图片描述
在这个没有内存的计算机结构中,我们有输入设备输出设备CPU,其中CPU起到计算功能,用于处理计算机的数据。CPU具有极高的运算效率,但是输入输出设备的读取速度是很慢的,因此很多数据刚被读取到CPU中,就立马被计算完了,因此CPU会长期处于闲置状态,这对CPU的计算资源造成了大量浪费。因此我们要想办法提高CPU得到数据的速度,也就是输入输出设备的数据交换的速度。

但是如果想要提高输入输出设备的效率,那么就要用更好的材料和技术来制作这些设备,如果计算机中所有输入输出设备的材料以及技术都达到了CPU级别,那么确实可以让计算机的计算效率不被数据的读取速度影响,但是这将面临计算机成本大幅度提高的问题,有的人工作一辈子也买不起一台计算机。

因此冯诺依曼提出了用内存作为一个中间枢纽的想法:
在这里插入图片描述

内存的读取效率介于输入输出设备CPU之间,因此CPU读取数据的速度,就和内存输出数据的效率差不多了,只要内存的速度越接近CPU,那么CPU的利用率也就越高。

但是这个结构依然有问题,那就是:内存的读取速度又会受到输入输出设备的影响,内存想要从输入设备读取数据,最后的数据传输速度不取决于内存,而取决于输入设备。最后整个计算机的数据传输效率,还不是取决于输入输出设备的传输效率?

理论上来说,确实是这样的,就好像一个木桶,这个木桶能装多少水,不取决于最长的那一块板子,而取决于最短的那一块板子。

在这里插入图片描述

其实,冯诺依曼体系结构中,输入设备向内存输入数据,不是说CPU现在要计算啥,内存就从输入设备提取啥。内存会提前预知CPU要使用的数据,从而预先把它加载到内存中,这样一来,最后整个计算机的计算效率,就取决于内存的数据传输效率了。至于内存是如何预知CPU需要计算的数据,这是操作系统OS的工作了。

通过这样一个冯诺依曼体系结构,我们计算机的计算效率就主要取决于内存CPU了,因此电脑厂家只需要把内存CPU的性能提上来,整个计算机的效率也就上来了。其余的部件,都可以用低廉的材料制作,整个计算机的成本降下来的同时,效率还提高了。因此计算机得以走进普通百姓的家中。


OS管理机制

刚刚我们讲明白了计算机的硬件架构,现在我再来讲一讲计算机的软件架构。计算机中,最重要的软件就是操作系统OS在整个计算机的软硬件架构中,OS的定位是一个管理一切软硬件资源的管理者 

整个计算机的体系结构如下:
在这里插入图片描述

OS对下层硬件的管理

最后三层依次是:OS驱动底层硬件

那么操作系统是如何管理硬件的呢?我先来为大家举一个现实生活中的管理案例。

在大学中你很可能都没有见过你的校长,院长等管理层大人物。但是学校可以知道你有没有挂科,你能不能评奖学金等等。那么这些管理层人员,明明都没有见过你本人,是如何管理你这个学生的呢?

他们在管理你的时候,手中会有你的众多数据,比如:入学年份,年龄,招生方式,各科成绩等等。一旦管理层手中有你的数据了,他们就可以根据你的考试成绩来决定你能不能正常毕业;根据你的各项指标,来决定你能不能评奖学金等等。

这个过程中可以发现,管理的本质不在于对你本人做管理,而在于对你的信息做管理。管理者的核心工作,就是根据你的数据来做决策

操作系统亦然,操作系统想要管理硬件设备,它管理的并不是硬件本身,而是这个硬件的数据。那么下一个问题就来了,操作系统如何得到硬件的信息???

这就涉及到了驱动的工作:

每一个硬件设备,都会有自己的驱动程序,驱动程序内部有众多关于硬件的信息,操作系统通过管理驱动来管理硬件

有的人会发现,当你买了一个新的鼠标,新的键盘,第一次插到电脑上,它都要等待一小会才能使用。而且电脑有可能还会在屏幕上显示驱动程序安装成功这样的提示语句。

其实,每一个硬件在制作的时候,厂家都会在其内部写好一个驱动程序,一旦这个硬件接入到计算机,那么驱动程序就会被操作系统得到,从而进行管理。因此第一次使用一个新的鼠标,键盘的时候,之所以要等一下才能用,就是因为驱动程序还在安装,没有驱动程序,操作系统就无法管理硬件,自然也就无法使用硬件了。

再比如说,有一些硬件,当你接入到计算机后,其可能会提示你:这个设备与计算机不兼容,计算机怎么知道这个设备和计算机不兼容的?这就是因为接入的时候,操作系统得到了硬件的驱动程序,从驱动程序中检测到了这个设备的信息,从而判断出这个设备与计算机不兼容。

至此,我们就已经讲解完了操作系统是如何管理硬件的,以及是如何得到硬件的信息的。那么我们再来看到一个问题:当我们有众多硬件接入到计算机,操作系统是如何对这些硬件批量管理的?

在讲解这个问题之前,我要提出学习操作系统的六字真言,一切操作系统的管理行为,都遵顼以下六字:

先描述,再组织 \mathbf{{\color{Red} {\huge 先描述,再组织} } } 先描述,再组织

比如说,操作系统想要管理一个鼠标,于是得到鼠标信息后创建了一个结构体,存储鼠标的各项信息:

struct device
{
	int type;
	char* name;
	//...
}

比如以上结构体就存储了鼠标的名字,类型等信息。于是操作系统通过管理这个结构体来管理这个鼠标。同样的,键盘,显示器,打印机等等设备,在操作系统中都会有自己的结构体,这个结构体描述了硬件的各种信息,这个过程就叫做描述

那么操作系统要如何管理这么多结构体?其只需要通过数据结构把这些结构体组织起来即可,比如把这些结构体放到一个链表中,放到数组中,等等。于是操作系通过管理这个链表来管理这一堆结构体,比如说一个鼠标的USB接口被拔掉了,于是操作系统在这个包含了众多结构体的链表中,遍历查找“鼠标”的结构体,然后把这个结构体中描述状态的那个成员,从开启改为关闭。这个把描述硬件的结构体用数据结构连接起来统一管理的过程,就是组织

至此,我们就以及讲完了操作系统是如何管理硬件的,汇总如下:

  1. 操作系统通过驱动程序来获得硬件的信息,管理硬件
  2. 操作系统在管理众多硬件的时候,采用先描述,在组织的思想,把描述各个硬件的结构体用数据结构组织起来统一管理

OS对上层用户的服务

操作系统管理好硬件,是一种手段,而这个手段的最终目的,是为了给上层提供安全可靠的服务

我特意标红了四个字:安全可靠,那么操作系统又是如何保证自己提供的服务是安全可靠的?我们再看到一开始的计算机体系层次图:

在这里插入图片描述

从操作系统向上,依次是系统调用接口用户操作接口用户

请问:==用户可以直接访问操作系统的底层吗?==就拿我们刚刚的例子来说,我们知道每个硬件都有自己的结构体来描述自己,操作系统可以管理这些结构体。那么这些结构体可以直接交给用户管理吗?

很显然,这是很危险的,如果某个用户拿到了一个描述鼠标的结构体,原本这个鼠标是罗技公司生产的,用户直接修改这个结构体里面对厂商的描述,把它修改为了苹果公司生产的鼠标,这可就乱套了。因此操作系统不能把底层直接展示给用户,不然是非常危险的

但是操作系统又要为用户提供服务,于是操作系统给出了很多系统调用接口,也就是操作系统向上一层。

为了保护操作系统内部的数据,用户只能通过系统调用接口来访问计算机

最开始我们就说过,操作系统要为上层提供安全可靠的服务,而操作系统就是通过隐藏自己的底层,让用户通过系统调用接口来保护自己的数据,进而保证安全的。

系统调用接口再往上就是用户操作接口了,不妨想想,不论你是学习pythonc语言C++,你有直接操作过硬件吗??

其实是有的,比如说pythonprint函数,C++coutC语言printf函数。这些方法,我们都可以向屏幕输出字符,但是屏幕是一个硬件,想要向硬件输出,就一定要经过操作系统这一层。但是我刚刚说过,用户想要访问操作系统,只能通过系统调用接口。这么一说,难道各个语言的输入输出函数,都叫做系统调用接口吗???

这是否定的,其实语言层面的输入输出函数,本质上是对系统调用接口的再封装。现在市面上的操作系统五花八门,比如AndroidiOSWindowsLinux等等,这些操作系统向上层提供的系统调用接口都是不一样的,但是我们的计算机语言,既可以在Windows中运行,也可以在Linux中运行。

用户操作接口中,我列举了三个例子:shell外壳lib部分指令

对于C语言来说,printf这个函数就是一个用户操作接口,并且它属于lib,即库的范畴。在printf内部,一定封装了真正的系统调用接口,用户调用printf函数,而在printf函数内部再去调用系统调用接口来访问屏幕这个硬件,进而在屏幕上输出。

为什么要再封装一层用户操作接口呢?

  1.  用户操作接口以更加简单的方式向用户提供了服务,比如printf函数。用户无需学会复杂的系统调用接口,只需要使用用户操作接口就可以操控硬件。当然,有能力的人也可以直接调用系统操作接口
  2.  用户操作接口提供了跨平台能力,不论是Linux还是Windows等各种操作系统,都可以使用C语言C++这样的语言来访问,但是这些操作系统的系统调用接口很可能不一样,因此相同的printf函数在LinuxWindows中封装了不同的系统调用接口,从而使得一个用户操作接口层面的接口,可以在各种在操作系统中使用,这就是用户操作接口的跨平台能力。

当然,用户操作接口还要shell指令等等,比如说在Linux中使用ls指令,就会在屏幕上显示当前目录下的文件夹,这涉及一个向屏幕显示的操作,因此ls指令内部应该也封装了系统调用接口

再往上就是用户了,通过下层以操作系统为核心的软硬件体系架构,用户现在就可以方便快捷,又安全的形式来使用计算机。

至此,我就已经讲解完了计算机的软硬件体系大框架。

我再为大家回顾一下:

  • 底层硬件:遵顼冯诺依曼体系结构,通过内存为枢纽的数据交换,实现了降本增效,使得计算机走入百姓家中
  • 驱动程序:操作系统管理硬件的重要手段,操作系统通过驱动程序获取硬件的信息,进而实行管理
  • 操作系统:计算机体系中的管理者,管理各种软硬件资源,遵循先描述,再组织的重要思想,使得操作系统可以批量管理众多软硬件
  • 系统调用接口:为了保证操作系统提供的服务是安全可靠的,通过系统调用接口来帮助用户访问计算机,同时保护了操作系统内部的数据
  • 用户操作接口:直接通过系统调用接口访问计算机会比较麻烦,于是通过用户操作接口以更加便捷的方式提供服务,并且提供了跨平台的特性,使得计算机的访问方便快捷

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

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

相关文章

Three.js阴影贴图

生成阴影贴图的步骤如下: 从光位置视点(阴影相机)创建深度图。从相机的角度进行屏幕渲染在每个像素点,将阴影相机的MVP矩阵计算出的深度值与深度图值进行比较如果深度图值较低,则说明该像素点存在阴影 ,因…

杰理芯片AC79——物联网远程点亮/关闭LED灯

杰理芯片的封装简直太香了(比STM32香多了),SDK也封装得很好,对于我这种手残党简直不要太友好。赶紧学起来,快速实现你想要的功能吧! 芯片选型 杰理AC79 资料文档 环境搭建以及点亮第一盏灯请访问&#x…

http: server gave HTTP response to HTTPS client 分析一下这个问题如何解决中文告诉我详细的解决方案

这个错误信息表明 Docker 客户端在尝试通过 HTTPS 协议连接到 Docker 仓库时,但是服务器却返回了一个 HTTP 响应。这通常意味着 Docker 仓库没有正确配置为使用 HTTPS,或者客户端没有正确配置以信任仓库的 SSL 证书。以下是几种可能的解决方案&#xff1…

VSCode好用插件

由于现在还是使用vue2,所以本文只记录vue2开发中好用的插件。 美化类插件不介绍了,那些貌似对生产力起不到什么大的帮助,纯粹的“唯心主义”罢了,但是如果你有兴趣的话可以查看上一篇博客:VSCode美化 1. vuter 简介&…

Apache Paimon实时数据糊介绍

Apache Paimon 是一种湖格式,可以使用 Flink 和 Spark 构建实时 数据糊 架构,用于流式和批处理操作。Paimon 创新地将湖格式和 LSM(日志结构合并树)结构相结合,将实时流式更新引入湖架构中。 Paimon 提供以下核心功能: 实时更新: 主键表支持大规模更新的写入,具有非常…

day02-SpringCloud02(Nacos、Feign、Gateway)

1.Nacos 配置管理 Nacos 除了可以做注册中心,同样可以做配置管理来使用。 1.1.统一配置管理 当微服务部署的实例越来越多,达到数十、数百时,逐个修改微服务配置就会让人抓狂,而且很容易出错。我们需要一种统一配置管理方案&#x…

REST API的指纹验证机制

前端或者客户端涉及数据相关的请求都是不安全的,从某种意义上只能通过一些手段降低请求不被容易使用。本来来介绍一种基于 JWT 的指纹机制。 关于 JWT 令牌机制就不详细介绍了。在 JWT 令牌中包含系统 JWT 指纹可以带来安全改进,而不会给用户带来任何不…

GitOps - 为 OpenShift GitOps 配置邮件通知

《OpenShift 4.x HOL教程汇总》 说明:本文已经 在OpenShift 4.15 OpenShift GitOps 1.11.2 环境中验证 文章目录 ArgoCD 的 Notification 功能简介启动 OpenShift GitOps 的 Notification 功能配置邮件通知验证参考 说明:先根据《OpenShift 4 之 GitOp…

基于深度学习的危险物品检测系统(网页版+YOLOv8/v7/v6/v5代码+训练数据集)

摘要:本文详细介绍基于YOLOv8/v7/v6/v5的危险物品检测技术。主要采用YOLOv8技术并整合了YOLOv7、YOLOv6、YOLOv5的算法,进行了细致的性能指标对比分析。博客详细介绍了国内外在危险物品检测方面的研究现状、数据集处理方法、算法原理、模型构建与训练代码…

人工智能|深度学习——基于Xception算法模型实现一个图像分类识别系统

一、Xception简介 在计算机视觉领域,图像识别是一个非常重要的任务,其应用涵盖了人脸识别、物体检测、场景理解等众多领域。随着深度学习技术的发展,深度卷积神经网络(Convolutional Neural Networks,简称CNN&#xff…

激发创新活力:算力券与模型券,科技企业的新动力

激发创新活力:算力券与模型券,科技企业的新动力 在数字化转型的大潮中,科技创新已成为推动企业发展的核心动力。为了进一步激发企业的创新活力,政府和相关机构开始探索一种新的激励机制——发放“算力券”和“模型券”。这些创新…

面向对象编程(二)

面向对象(二) 类和对象的概念 类是一种抽象的数据类型,它是对某一类事物整体描述/定义,但是不能代表某一个具体的事物(动物,植物,手机…)对象是抽象概念的具体实例(比如…

Prometheus+grafana环境搭建redis(docker+二进制两种方式安装)(四)

由于所有组件写一篇幅过长,所以每个组件分一篇方便查看,前三篇 Prometheusgrafana环境搭建方法及流程两种方式(docker和源码包)(一)-CSDN博客 Prometheusgrafana环境搭建rabbitmq(docker二进制两种方式安装)(二)-CSDN博客 Prometheusgrafana环境搭建m…

Java基础知识总结(第八篇):集合:Collection(List、Set)、Map、Collections 工具类

声明: 1. 本文根据韩顺平老师教学视频自行整理,以便记忆 2. 若有错误不当之处, 请指出 系列文章目录 Java基础知识总结(第一篇):基础语法 Java基础知识总结(第二篇)&#x…

Matlab|计及需求侧响应日前—日内两阶段鲁棒备用优化

目录 1 主要内容 日前计划模型 日内调整模型 不确定集建模 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序复现文章《计及需求侧响应日前—日内两阶段鲁棒备用优化》,以6节点系统为例,综合考虑风电出力不确定性与电力设备 N-k强迫停运&…

在linux下conda 创建虚拟环境失败的解决方法

报错内容一&#xff1a; Solving environment: failed CondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://conda.anaconda.org/conda-forge/noarch/repodata.json> Elapsed: - An HTTP error occurred when trying to retrieve this URL. HTTP errors are…

【c++】类和对象(七)

&#x1f525;个人主页&#xff1a;Quitecoder &#x1f525;专栏&#xff1a;c笔记仓 朋友们大家好&#xff0c;本篇文章来到类和对象的最后一部分 目录 1.static成员1.1特性 2.友元2.1引入&#xff1a;<<和>>的重载2.2友元函数2.3友元类 3.内部类4.匿名对象5.拷…

servlet个人博客系统的web自动化测试(六)

1. 测试前的准备工作 获取博客系统Chrome&webDriver测试环境搭建流程 : 熟悉项目针对核心流程设计测试用例&#xff08;手工测试用例&#xff09;将手工测试用例转换成自动化测试用例部署 手工测试用例 : 自动化测试用例 代码结构设计 &#xff1a; 初始化动作&#xff1a…

最新AI工具系统ChatGPT网站运营源码SparkAi系统V6.0版本,GPTs应用、AI绘画、AI换脸、垫图混图、Suno-v3-AI音乐生成大模型全支持

一、前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧。已支持GPT…

银行监管报送系统介绍(十五):金融审计平台

《“十四五”国家审计工作发展规划》中重点强调&#xff0c;金融审计&#xff1a;以防范化解重大风险、促进金融服务实体经济&#xff0c;推动深化金融供给侧结构性改革、建立安全高效的现代金融体系为目标&#xff0c;加强对金融监管部门、金融机构和金融市场运行的审计。 —…