冯诺依曼体系结构与操作系统的理解
✅<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从内存中拿数据。所以我们程序跑起来的第一步就是先将程序加载到内存,这就是由物理结构而决定了软件运行的行为。
从这里我们就可以总结出两个结论:
- 在数据层面,cpu一般不和外设直接沟通,而是直接和内存打交道。
- 在数据层面,外设只和内存打交道。
由此我们可以看到,内存对于整个冯诺依曼体系结构的重要性。
我们观察内存的功能,也就可以发现,内存就是一个数据的中转站,既然这样我们内存中转的速度不是越快越好吗?当然是越快越好。我们知道在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'的底层实现也是调用了显示器相关的系统调用。
相关文章:
冯诺依曼体系结构与操作系统的理解
✅<1>主页:我的代码爱吃辣 📃<2>知识讲解:操作系统 💬<3>前言:今天来介绍一下冯诺依曼体系结构,和操作系统的理解。 目录 1.冯诺依曼体系结构 冯诺依曼体系的工作原理: 为…...
API接口签名验证
文章目录一、使用背景二、实现方案三、具体流程四、优化五、代码实现六、后续优化一、使用背景 过去对于接口的验证我一般都是直接在登录时为用户发放token,用户在随后的操作中携带了token则允许请求。 但是这样的验证方式存在有一定的问题,如果token被…...
Keettle (pdi-ce) 整库多表迁移(避坑)
使用开源免费 Keettle 工具 1.下载与安装 官网地址:下载 下载9.3.0以上的,6.1、7.1我都尝试过,6.1导致很多莫名其妙问题,7.1数据库可以连接和预览,迁移的时候就会出现事务读问题,最后解决这个问题后&…...
搭建私人《我的世界》服务器,使用Cpolar内网穿透更简单
文章目录1.前言2.本地服务器搭建2.1 设置环境变量2.2 进行《我的世界》服务器端设置2.3 测试和使用3.本地MC服务器的内网穿透3.1.Cpolar云端设置3.2.Cpolar本地设置3.3.测试和使用4.结语1.前言 要说去年游戏圈的重磅大瓜,想必网易和暴雪的分家必能上榜。虽然两家大…...
map和set的使用
文章目录关联式容器树形结构的关联式容器setinsert增减erase删除multiset修改mappair<key,value>insertoperator[] 的引入insert和operator[]的区别multimap小结map的使用统计最喜欢吃的前几种水果前K个高频单词,返回单词的频率由高到低,频率相同时࿰…...
常用正则表达式大全
链接...
注意,摸鱼程序员常用的9个小技巧,早点下班不秃头
9个养生小技巧,祝大家不秃头嗨害大家好鸭! 我是小熊猫~毕竟摸鱼一时爽,一直摸一直爽嘛~一、整理字符串输入二、迭代器切片(Slice)三、跳过可迭代对象的开头四、只包含关键字参数的函数 (kwargs)五、创建支持「with」语…...
【Linux】文件时间-ACM
文章目录文件时间-acmAccessChangeModify文件时间-acm 我们可以使用stat 文件名的方式查看对应的文件的时间信息 Access 表示文件最近一次被访问的时间 文件的访问 实际也就是文件的读取 实际操作中,文件的Access时间可能没有变化,这是因为在新的Linux内核中,Access时间不…...
[架构之路-124]-《软考-系统架构设计师》-操作系统-3-操作系统原理 - IO设备、微内核、嵌入式系统
第11章 操作系统第5节 设备管理/文件管理:IO5.1 文件管理5.2 IO设备管理(内存与IO设备之间)数据传输控制是指如何在内存和IO硬件设备之间传输数据,即:设备何时空闲?设备何时完成数据的传输?SPOO…...
【竞赛/TPU】算能TPU编程竞赛总结
如果觉得我的分享有一定帮助,欢迎关注我的微信公众号 “码农的科研笔记”,了解更多我的算法和代码学习总结记录。或者点击链接扫码关注【竞赛/TPU】算能TPU编程竞赛总结 1 基础知识 1.1【Ubuntu】 Ubuntu操作系统中有很多不同的文件夹,每个…...
Substrate 基础教程(Tutorials) -- 模拟网络 添加可信节点
三、模拟网络 本教程基本介绍了如何使用一个私有验证器(validators)的授权集合来启动私有区块链网络。 Substrate节点模板使用授权共识模型(authority consensus model),该模型将块生产限制为授权帐户的旋转列表(rotating list)。授权帐户(…...
SAP 设置无物料号的费用采购
现在还是以外购电来说一下ERP中费用采购单的使用步骤: (1).Tcode:OMSF定义物料组D1,如下图。 (2).到配置路径IMG Path:物料管理->采购->帐户分配(或直接SE16:V_T163K)定义一科目分配类别,默认的K就是费用采购科目分配类型,如果可能可以复制一个,如下图,注意下…...
k8s ConfigMap 中 subPath 字段和 items 字段
Kubernetes中什么是subPath 有时,在单个 Pod 中共享卷以供多方使用是很有用的。volumeMounts.subPath 属性可用于指定所引用的卷内的子路径,而不是其根路径。 这句话理解了,基本就懂subPath怎么用了,比如我们要替换nginx.cnf, 挂…...
UML建模
主要记录UML中的相关知识,包括类、对象、接口、方法、用例、活动、状态、组件和部署图,详细介绍类之间关系与类图的绘制 文章目录一、UML介绍二、类图类之间的关系依赖关系继承关系实现关系关联关系组合关系聚合关系正文内容: 一、UML介绍 …...
JavaScript常见面试题(更新中)
介绍js的基本数据类型 js一共有五种数据类型 分别是undefined null boolean number string 还有ES6中新增的symbol和ES10的bigInt symbol代表创建后独一无二的不可变的数据类型,他的出现我认为是为了解决可能出现的全局变量冲突的问题 BigInt是一种数字类型的数据 …...
TCP/IP协议
✏️作者:银河罐头 📋系列专栏:JavaEE 🌲“种一棵树最好的时间是十年前,其次是现在” 目录TCP/IP协议应用层协议自定义应用层协议DNS传输层协议端口号UDP协议UDP协议端格式TCP协议TCP协议段格式TCP工作机制确认应答(安…...
Python使用异步线程池实现异步TCP服务器交互
背景: 实现客户端与服务端交互,由于效率原因,要发送与接收异步,提高效率。 需要多线程,本文用线程池管理。 common代码: import pickle import struct import timedef send_msg(conn, data):time.sleep(…...
matplotlib常用操作
文章目录1 matplotlib绘图1.1 绘图步骤2 matplotlib基本元素2.1 matplotlib 画布2.2 设置坐标轴长度和范围2.3 设置图形的线型和颜色2.4 设置图形刻度范围、刻度标签和坐标轴标签等2.4.1 设置刻度范围2.4.2 设置坐标轴刻度2.5 文本标签图例3 matplotlib的ax对象绘图4 绘制子图5…...
二分算法题
文章目录一、在排序数组中查找数字二、0~n-1中缺失的数字三、旋转数组的最小数字四、二维数组中的查找一、在排序数组中查找数字 题目传送门 法一:暴力解 直接遍历然后计数 法二:二分法求边界 看到关键字排序数组、有序数组,一定要想到二分…...
Vue+ElementUI+SpringBoot项目配合分页插件快速实现分页(简单暴力)
首先需要在项目中引入Element-UI的组件库,使用以下命令,不会引入的请自行百度。 npm i element-ui -S Element官网地址:https://element.eleme.cn/#/zh-CN/component/changelog 去Element-UI官网组件库找到合适的分页插件,并把他引…...
【回眸】牛客网刷刷刷!嵌入式软件中也会遇到的嵌入式硬件,通讯,通讯协议专题(一)
前言 最近继续刷题,看看嵌入式软件还需要了解一些嵌入式硬件中的通讯协议和常用接口协议 比如说SPI CAN I2C 通讯协议专题 1.波特率 波特率 每秒传送的字符数 * 字符位数。串口的工作模式为1个起始位,7个数据位,1个校验位,1个…...
使用Vue展示数据(动态查询)
学习内容来源:视频P4 本篇文章进度接着之前的文章进行续写 精简前后端分离项目搭建 Vue基础容器使用 目录选择组件修改表格组件修改分页组件增加后端接口前端请求数据接口页面初始化请求数据点击页码请求数据选择组件 在官方文档中选择现成的组件,放在页…...
构建数据库测试数据——mysql
建表脚本 -- 建表 CREATE TABLE test_table (id INT(11) NOT NULL AUTO_INCREMENT,varchar_col VARCHAR(50),char_col CHAR(10),text_col TEXT,tinyint_col TINYINT(4),smallint_col SMALLINT(6),mediumint_col MEDIUMINT(9),int_col INT(11),bigint_col BIGINT(20),float_col…...
你想要的Android性能优化系列:启动优化 !
App启动优化为什么要做App的启动优化?网页端存在的一个定律叫8秒定律:即指用户访问一个网站时,如果等待打开的时间超过8秒,超过70%的用户将会放弃等待。同样的,移动端也有一个8秒定律:如果一个App的启动时间…...
python3的基础入门3:基本数据类型
基本数据类型 python 中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。 在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型。 等号(&…...
消息队列原理与实战-学习笔记
消息队列:保存消息的一个容器,本质是个队列,但是需要支持高吞吐、高并发、高可用。 1 前世今生 1.1 业界消息队列对比 Kafka:分布式的、分区的、多副本的日志提交服务,在高吞吐场景下发挥较为出色RocketMQ:低延迟、强一致、高性…...
Linux权限相关知识(大量图文展示,及详细操作)
Linux权限相关概念 Linux下有两种用户:一种是超级用户(root)、一种是普通用户。 超级用户:可以在linux系统下做任何事情,不受限制 普通用户:在linux下做有限的事情。 超级用户的命令提示符是“#”…...
Ep_操作系统面试题-什么是协程
协程 是一种 比线程更加轻量级的存 在,一个线程可以拥有多个协程。是一个特殊的 函数 ,这个函数可以在某个地方挂起,并且可以重新在挂起处外继续运行。协程 不是被操作系统内核所管理 , 而完全是由程序所控制(也就是在…...
在C#中使用互斥量解决多线程访问共享资源的冲突问题
在阿里云上对互斥量的概述:互斥量的获取是完全互斥的,即同一时刻,互斥量只能被一个任务获取。而信号量按照起始的计数值的配置,可以存在多个任务获取同一信号量的情况,直到计数值减为0,则后续任务无法再获取…...
JavaEE进阶第六课:SpringBoot配置文件
上篇文章介绍了SpringBoot的创建和使用,这篇文章我们将会介绍SpringBoot配置文件 目录1.配置文件的作用2.配置文件的格式2.1 .properties语法2.1.1.properties的缺点2.2 .yml语法2.2.1优点分析2.2.2配置与读取对象2.2.3配置与读取集合2.2.4补充说明3.设置不同环境的…...
软件下载网站怎么做/搜索引擎优化网页
本博客采用 CC BY-NC-SA 4.0 进行许可 转载于:https://www.cnblogs.com/GavinZheng/p/10799212.html...
公司网站建设深圳/全国疫情又严重了
KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris 和 V.R.Pratt 同时发现,因此人们称它为克努特——莫里斯——普拉特操作(简称KMP算法)。KMP算法的关键是利用匹配失败后的信息,尽量减少模式串与…...
ui设计的软件/宁波seo公司网站推广
各位医学方的朋友,大家好。我是Flyman!做过下游分析的小伙伴都知道富集分析的重要性,生信类文章大家总会在最后一步针对我们前面筛选出来的差异基因做一下GO/KEGG富集分析,研究一下他们参与到什么信号通路上或者参与什么生物学过程…...
怎么做提卡密网站万游/站长工具在线
有些银行推销的信用卡分期或贷款分期还款是这么计算的: A: 贷款额 x: 名义月利率或者所谓的每月手续费 m: 还款期限,单位月 每月应还: (A x*A*m)/m 这个还款额把本金和利息平均在了每个月里, 但是仔细想想是有问题的: …...
wordpress房地产插件/教育培训机构有哪些
2019独角兽企业重金招聘Python工程师标准>>> 在开始菜单中找到vmware 安装文件夹点击虚拟网络编辑器;查看子网掩码和网关地址,选中vmnet8,点击nat设置 。获取子网掩码255.255.255.0,网关192.168.199.2点击dhcp设置,获取…...
镇江网站seo外包/su搜索引擎优化
GeccoSpider爬虫例子 前些天,想要用爬虫抓取点东西,但是网上很多爬虫都是使用python语言的,本人只会java,因此,只能找相关java的爬虫资料,在开源中国的看到国内的大神写的一个开源的爬虫框架,并…...