冯诺依曼体系结构与操作系统的理解

news2024/10/1 21:40:36

✅<1>主页:我的代码爱吃辣
📃<2>知识讲解:操作系统
💬<3>前言:今天来介绍一下冯诺依曼体系结构,和操作系统的理解。

目录

1.冯诺依曼体系结构

冯诺依曼体系的工作原理:

为什么会有内存

生活中的冯诺依曼体系

 2.操作系统(Operator System)

概念

设计OS的目的

操作系统是如何做管理的

系统调用


1.冯诺依曼体系结构

冯·诺依曼结构也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构。程序指令存储地址和数据存储地址指向同一个存储器的不同物理位置,因此程序指令和数据的宽度相同,如英特尔公司的8086中央处理器的程序指令和数据都是16位宽。

数学家冯·诺依曼提出了计算机制造的三个基本原则,即采用二进制逻辑、程序存储执行以及计算机由五个部分组成(运算器、控制器、存储器、输入设备、输出设备),这套理论被称为冯·诺依曼体系结构。

  • 运算器:用于实现算术运算,(如加减乘除)逻辑运算等。
  • 控制器:存储当前的指令,存储下一条指令的地址,分析指令。。(现代的诺伊曼机将运算器控制器集成到了一起,统称为"中央处理器(cpu)")。
  • 存储器:又叫做(内存),用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据
  • 输出设备:用于接收计算机数据的输出显示、打印、声音、控制外围设备操作等,例如我们的显示器,声卡,网卡,磁盘。
  • 输入设备:向计算机输入数据和信息的设备(我们将输入设备和输出设备统称为外围设备,简称外设),例如键盘,鼠标,麦克风,磁盘。

冯诺依曼体系的工作原理:

早期的冯诺依曼机:由输入设备输入数据,经过运算器转移给存储器,当数据需要计算时,在存储器中区取数据,经过运算器和控制器处理的数据,也要通过运算器的传送给存储器,由存储器传送给输出设备,进行输出。

早期的冯诺依曼机,最显著的特点就是:以运算器为中心进行工作。

现代冯诺依曼机器:

 早期的冯诺依曼机,输入输出设备要想与存储器交换数据,都必须经过运算器,这显然就是比较繁琐的了。现在的冯诺依曼机,当输入设备输入后,直接可以加载到存储器中,由cpu去存储器中取数据和程序。将处理好的数据和程序再交给存储器,由存储器输送给输出设备。

现在冯诺依曼机的特点就是:以存储器为中心。

为什么会有内存

我们知道,冯诺依曼机,工作的本质时,将数据通过输入设备进行传输,然后通过cpu进行处理,将处理的数据,通过输出设备输出给用户。

那么既然计算机只要拿到数据处理,再将数据输出就可以了,那么内存的意义又是什么呢?像冯诺依曼机器的那样先将数据和程序加载到内存,cpu在向内存中拿数据和程序,这样不多了一道程序,效率不会变慢吗?难道不可以将输入设备的数据直接给cpu处理,这样不是更直接没更好吗?

可不可以设计成这样呢?

这里我们需要普及一个概念:cpu的处理数据的速度是非常快的,而外设的速度一般是比较慢的。如果像上述一样设计就会出现木桶效应。

 木桶效应:木桶盛水的多少不是取决于最长的那块木板,而是取决于那块最短的木板长度。

 换做在计算机中,如果舍弃内存,将输入输出设备直接与cpu连接,就会引发虽然cpu的速度很快,但是还是整体速度还是会被外设给拉慢下来。

所以冯诺依曼就想着引入内存,将cpu即将处理的数据,提前加载到内存中,这样我们的cpu就不需要每次都向我们的输入设备在要数据和程序了,而且内存和cpu的整体交互速率还是很快的,这样整体的计算机工作速度也就变快了。

一个程序实际上就是一个可执行文件,在windows里面就是一个.exe文件,像这样的文件在我们的电脑里都是存储在磁盘里面的,磁盘也就是我们的外部设备,而我们常说的,我们想将一个程序跑起来为什么说需要先将程序加载到内存,原因正是冯诺依曼体系结构决定的,冯诺依曼体系结构决定cpu从内存中拿数据。所以我们程序跑起来的第一步就是先将程序加载到内存,这就是由物理结构而决定了软件运行的行为。

从这里我们就可以总结出两个结论:

  1. 在数据层面,cpu一般不和外设直接沟通,而是直接和内存打交道。
  2. 在数据层面,外设只和内存打交道。

由此我们可以看到,内存对于整个冯诺依曼体系结构的重要性。

我们观察内存的功能,也就可以发现,内存就是一个数据的中转站,既然这样我们内存中转的速度不是越快越好吗?当然是越快越好。我们知道在cpu上还集成了寄存器,寄存器的速度是非常快的,那我们可不可以用寄存器来作为内存的存储单元呢。答案是:不可以。

因为:寄存器的造价非常的昂贵,在整个计算机中,现在的x86_64计算机中一共也就才有16个64bit通用寄存器。算起来才只有0.125kb大小。如果内存采用这样的配置来制造,恐怕全球也就没几个人能使用得起计算机了吧。

生活中的冯诺依曼体系

我们所使用的个人pc,移动端手机,或者是服务器设备,都是一台冯诺依曼机器。

现在我们了解了冯诺依曼体系结构的基本结构,我们通过一个小例子来演示一下,数据是如何在两个冯诺依曼机器上流动的。

假如:你用你的手机给你的女朋友发了一条QQ信息,你的女朋友手机上就能收到你发得信息,这实际上就是两台冯诺依曼机在交互。首先你打开QQ就是将磁盘中QQ的可执行程序加载到内存中,通过键盘等输入设备将数据加载到内存,经过cpu得处理返回给内存,在通过网卡等输出设备,传递给你女朋友的手机,你女朋友同样将QQ打开,将磁盘中QQ的可执行程序加载到内存中,并且将网卡里面你发送的数据加载到内存,通过cpu的处理,传送到内存中,最终内存将他传输给显示器,显示到显示器上。

 2.操作系统(Operator System)

我们在介绍冯诺依曼体系结构里面,花了很多的功夫介绍了内存的重要性,其中一条就是说内存可以将cpu将访问的数据预加载到内存中,那么问题来了,将外设的数据预加载到内存里面是有谁来做的?内存?外设?还是cpu呢?答案都不是,将数据预加载内存,这已经不是由硬件能做的事情了,此时就需要一款软件来完成这件事,这款软件就是操作系统。

概念

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

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

设计OS的目的

如果仅仅给我们一台冯诺依曼裸机,仅仅将冯诺依曼组件组装好的情况下,就给我们使用,这显然我们是不会使用的。冯诺依曼体系结构,就相当于是计算机的物理组件,那操作系统就是计算机的灵魂。在整个计算机软硬件架构中,操作系统的定位是:一款纯正的“搞管理”的软件。我们之前也提过这样的一个概念:操作系统是一个款做软硬件资源管理的软件,为了是给用户提供(安全 高效 功能丰富)的体验。

其中有一个非常重要的词就是"管理"。如何理解操作系统对软硬件做管理?

举一个例子:医院是用来给病人治病的,避免不了有很多的非常先进的医疗器具,但是仅仅有这些医疗器具就可以给病人治病了吗?显然是不可以的,想要给病人治病还得需要医生来对医疗机器进行使用和操作才可以,这其中有很多的问题是考光靠机器解决不了的,比如科室的划分,医生的人员调配,等等。而现在的医院能解决这些问题,是因为他们有自己的一套管理机制。

这个时候也就说明了管理的重要性。

操作系统是如何做管理的

既然谈到管理必然由管理者和被管理者,我们以学校为例:

假如某一天我们学校的校长做了一个决定,要求每一个学生必需写一份学期总结,这个决定下发给校长手下的每一个辅导员,再有辅导员来收取自己班级的每一个班级的学期总结。这里的校长就是决策者,而辅导员是传达校长决策的人,最终决策的执行者是我们学生。

那么如果校长想管理我们的每一个学生,需要跟在每一个学生的后面,去管理吗?显然不是的。校长想管理我们只需要,拿到我们每一个学生的数据就可以了,如果这个校长编程,就可以用一个结构体来描述一个学生,然后将每一个学生的结构体用顺序表存起来,我们想将每一个学生的成绩从小到大排序,就可以直接将顺序表排序,如果我们想将成绩最差的开除了,可以直接将顺序表里面,成绩最小的那个人,从顺序表里面删除。这样校长对学生的管理就变成了对数据结构的管理了。而管理的本质就是对被管理者的数据做管理。对学生用结构体进行描述,实际上就是一个建模的过程,所以为了更好的管理,需要的前提就是,先对对象描述,再做组织。

对对象的描述,就是我们学习编程语言的目的,使用面向对象的思想将对象进行描述,在使用合适的数据结构对数据进行组织。

那么校长,辅导员和学生在我们计算机中,有匹配什么样的角色呢?

所以操作系统对下通过对软硬件资源的管理,对上为用户提供安全,稳定高效的功能丰富的执行环境,让用户有一个更好的使用体验。

系统调用

上面我们说了,操作系统通过对软硬件的资源管理,给上层用户提供良好的环境体验。那么有一个问题就是,操作系统对我们用户充分信任吗?答案是不信任。

举个例子:

银行为了让更多的人去存钱,而提供各种优质的服务,但是银行对我们确实不信任的,当我们想存钱的时候,银行不会让我们直接进入金库将钱放进去,因为银行不信任我们。但是银行又必须为我们提供这样的服务,怎么办呢?很简单就是银行不直接为我们见到金库存钱,而是提供了可以存钱的窗口服务。那么取钱,贷款,办理理财也是如此,银行会提供,相应的窗口服务,既能提供服务,又能保证安全。

换做是操作系统,操作系统也是不信任我们,那么操作系统又想给用户提供好的服务,但是又相信任何人,如果操作系统为你提供服务但是,又不想让你接触操作系统的核心。操作系统也会加上一层封装,并且为你提供窗口试的服务,对于操作系统而言这个窗口式的服务,就是"系统调用"。你想调用什么操作功能就可以直接调用,操作系统提供给你的系统调用接口。

但是,系统调用的使用成本非常高,所以在此之上又开发出来了一些适合普通普通用户使用的开发层应用,比如:shell程序,图形化界面,函数库等。

 虽然我们是第一次说这个系统调用,但是其实我们已经使用过非常多了,就比如我们梦开始的地方:

printf("hello world");

 为什么一个printf函数就可以使得字符串打印到我们的显示器上,实际上在printf'的底层实现也是调用了显示器相关的系统调用。

 

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

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

相关文章

注意力机制详解系列(四):混合注意力机制

👨‍💻作者简介: 大数据专业硕士在读,CSDN人工智能领域博客专家,阿里云专家博主,专注大数据与人工智能知识分享。 🎉专栏推荐: 目前在写CV方向专栏,更新不限于目标检测、OCR、图像分类、图像分割等方向,目前活动仅19.9,虽然付费但会长期更新,感兴趣的小伙伴可以…

超详细Eclipse配置JDK

在此附上Eclipse安装教程 超详细Eclipse安装教程 在此附上JDK1.8安装配置教程 超详细JDK1.8安装与配置 ①打开Eclipse–>点击Window–>点击Preferences ②找到Java–>找到Installed JREs–>点击Add… ③选中Standard VM–>之后点击Next ④点击Directory找…

Substrate 基础教程(Tutorials) -- 模拟网络 添加可信节点

三、模拟网络 本教程基本介绍了如何使用一个私有验证器&#xff08;validators&#xff09;的授权集合来启动私有区块链网络。 Substrate节点模板使用授权共识模型(authority consensus model)&#xff0c;该模型将块生产限制为授权帐户的旋转列表(rotating list)。授权帐户(…

活动目录(Active Directory)批量用户管理

在大型复杂的 Windows 网络中&#xff0c;批量管理 AD 用户可能是一项挑战。此外&#xff0c;使用本机工具和 PowerShell 脚本需要深入了解 AD 和脚本&#xff0c;才能在 AD 中完成批量用户管理。 ADManager Plus是一款AD管理和报告软件&#xff0c;允许您使用CSV创建和管理多…

visual studio 2022 社区版 c# 环境搭建及安装使用【图文解析-小白版】

visual studio 2022 社区版 c# 环境搭建及安装使用【图文解析-小白版】visual studio 安装 C# 环境安装流程创建c#窗体应用程序visual studio 安装 C# 环境 首先&#xff0c;进入其官网下载对应的visual studio社区版本&#xff0c;官网链接: https://visualstudio.microsoft…

【操作系统】内存管理

虚拟内存 虚拟内存的目的是为了让物理内存扩充成更大的逻辑内存&#xff0c;从而让程序获得更多的可用内存。 为了更好的管理内存&#xff0c;操作系统将内存抽象成地址空间。每个程序拥有自己的地址空间&#xff0c;这个地址空间被分割成多个块&#xff0c;每一块称为一页。…

网络安全入门教程(非常详细)从零基础入门到精通,看完这一篇就够了。

学前感言: 1.这是一条坚持的道路,三分钟的热情可以放弃往下看了 2.多练多想,不要离开了教程什么都不会了.最好看完教程自己独立完成技术方面的开发. 3.有时多google,baidu,我们往往都遇不到好心的大神,谁会无聊天天给你做解答. 4.遇到实在搞不懂的,可以先放放,以后再来解决…

Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)

文章目录1 JDBC&#xff08;Java Database Connectivity&#xff09;1.1 什么是 JDBC&#xff1f;1.2 JDBC 核心思想2 JDBC开发步骤【重点】2.0 环境准备2.1 注册数据库驱动2.2 获取数据库的连接2.3 获取数据库操作对象Statement2.4 通过Statement对象执行SQL语句2.5 处理返回结…

第51章 初识第3方阿里云短信验证发送服务

1 第3方阿里云短信验证发送服务准备工作 2 其它第3方短信发送服务平台 当前常用第3方短信发送服务平台还有容联云和凯信通过&#xff0c;在配置上来说阿里云和容联云配置都比较复杂&#xff0c;网上程序集成示例完善&#xff0c;资费灵活。凯信通配置十分简单只要在程序中指定其…

主机状态(查看资源占用情况、查看网络占用情况)

1. 查看资源占用情况 【1】可以通过top命令查看cpu、内存的使用情况&#xff0c;类似windows的任务管理器 默认5s刷新一次 语法&#xff1a;top 可 Ctrl c 退出 2.磁盘信息监控 【1】使用df命令&#xff0c;查看磁盘信息占用情况 语法&#xff1a;df [ -h ] 以更加人性化…

客厅窗帘最实用的色彩组合搭配,大气稳重-窗帘十大品牌江南爱

客厅窗布什么颜色大气&#xff0c;其实这个问题还不能干脆的答复&#xff0c;具体情况需要具体分析。想要大气一点的作用&#xff0c;多数人会采用冷色系的窗布&#xff0c;给人稳重高雅之感。窗布想要大气&#xff0c;必定要有深浅调配的颜色&#xff0c;别的还要和客厅的其他…

三天Golang快速入门—Slice切片

三天Golang快速入门—Slice切片Slice切片切片原理切片遍历append函数操作切片append添加append追加多个切片中删除元素切片合并string和slice的联系Slice切片 切片原理 由三个部分构成&#xff0c;指针、长度、容量指针&#xff1a;指向slice第一个元素对应的数组元素的地址长…

【数据聚类|深度聚类】Unsupervised Deep Embedding for Clustering Analysis(DEC)论文研读

DEC算法由两部分组成 第一部分会预训练一个SDAE模型;第二部分选取SDAE模型中的Encoder部分,加入聚类层,然后最小化KL散度进行训练聚类Absratct 提出了一种利用深度神经网络同时进行表征学习和聚类分配的方法,称之为深度嵌入聚类。该方法学习从数据空间到低纬空间的映射,并…

开发运维工具推荐 --- 解决远程访问局域网服务的问题。开发调试推荐

一、FastNat 可为您解决的问题1. 没公网服务器&#xff0c;需要发布本地的站点或网络程序到公网上&#xff0c;供他人访问&#xff1b;此项功能大大方面开发人员进行远程调试&#xff0c;微信小程序等开发工作进行。2. 需要远程到在其他网络中的设备&#xff0c;但两处的网络不…

Keettle (pdi-ce) 整库多表迁移(避坑)

使用开源免费 Keettle 工具 1.下载与安装 官网地址&#xff1a;下载 下载9.3.0以上的&#xff0c;6.1、7.1我都尝试过&#xff0c;6.1导致很多莫名其妙问题&#xff0c;7.1数据库可以连接和预览&#xff0c;迁移的时候就会出现事务读问题&#xff0c;最后解决这个问题后&…

探针台简介

探针台&#xff0c;是我们半导体实验室电学性能测试的常用设备&#xff0c;也是各大实验室以及芯片设计、封装测试的熟客。设备具备各项优势&#xff0c;高性能低成本&#xff0c;用途广&#xff0c;操作方便&#xff0c;在不同测试环境下&#xff0c;测试结果稳定&#xff0c;…

CV——day80 读论文:DLT-Net:可行驶区域、车道线和交通对象的联合检测

DLT-Net:可行驶区域、车道线和交通对象的联合检测I. INTRODUCTIONII. ANALYSIS OF PERCEPTIONIV. DLT-NETA. EncoderB. Decoder1) Drivable Area Branch(可行驶区域分支)2) Context Tensor(上下文张量)3) Lane Line Branch(车道线分支)4) Traffic Object Branch(目标检测对象分…

三天吃透Redis面试八股文

本文已经收录到Github仓库&#xff0c;该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点&#xff0c;欢迎star~ Github地址&#xff1a;https://github.com/…

Canvas入门-01

导读&#xff1a; 读完全文需要2min。通过这篇文章&#xff0c;你可以了解到以下内容&#xff1a; Canvas标签基本属性如何使用Canvas画矩形、圆形、线条、曲线、笑脸&#x1f60a; 如果你曾经了解过Canvas&#xff0c;可以对照目录回忆一下能否回答上来 毕竟带着问题学习最有效…

数据湖架构Hudi(三)Hudi核心概念

三、Apache Hudi核心概念 3.1 基本概念 Hudi 提供了Hudi 表的概念&#xff0c; 这些表支持CRUD操作&#xff0c; 可以利用现有的大数据集群比如HDFS做数据文件存储&#xff0c; 然后使用SparkSQL或Hive等分析引擎进行数据分析查询。 Hudi表的三个主要组件&#xff1a; 有序的…