冯诺依曼体系和操作系统概念

news2024/11/15 23:38:24

Ⅰ. 冯诺依曼体系结构

我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Yb96uKEy-1670848714610)(../../img/image-20221106085902375.png)]

截至目前,我们所认识的计算机,都是有一个个的硬件组件组成

  • 输入单元:包括键盘, 鼠标,扫描仪, 写板等
  • 中央处理器(CPU):含有运算器和控制器等
  • 输出单元:显示器,打印机等

那为什么要有冯诺依曼体系结构呢?下面是我自己的理解:(注意接下来的讲解只关于上图中的红色箭头)

首先我们得先知道,这里的存储器指的是什么?这里的 存储器指的是内存!其特点是 掉电易失~

注意哦,虽然我们平时也把磁 盘叫做内存,但是其实 磁盘指的是外存,其特点是存储的东西是永久性,要将其与内存区分开!并且我们磁盘是属于外部设备的,外部设备分为输入设备输出设备,其中最典型的同时具备输入和输出功能就是磁盘网卡,而其他的外部设备都只是只有输入或者输出!注意这里的外部设备,是相当于内存和cpu来说的

接下来说一下,冯诺依曼体系中的 运算器和控制器,其实就是我们所说的 cpu!其实 cpu 还有其他的构成,只不过主要是这两大板块,这一点要注意!

这样子的话我们就能画出一小部分的思维导图:

接下来引入一个知识点,就是它们的计算速度:CPU > 内存 > 外设,而另一方面,我们需要明白的是 CPU 处理的时候是需要数据的!

这里先讲个知识点:CPU是怎么认识指令的呢?如中文、英文等指令?

💡 其实 CPU 是拥有自己的指令集的,指令集就是 CPU 中用来计算和控制计算机系统的一套指令的集合,分为 复杂指令集 和 精简指令集 两部分,而我们在写代码的时候,最后都要通过编译器去将源文件编译成 CPU 能够认识的二进制可执行程序,该程序中其实就包含着一堆 CPU 能够识别的指令!

我们来想一想,在没有冯诺依曼体系的情况下也就是不存在内存缓存的情况下,我们的 CPU 如果是从外部设备接受消息的,我们知道 CPU外部设备的速度完全不是一个级别的,这样子的话会出现的问题就是效率太低太低了,我们要知道 CPU 的空间大小其实是不大的,而如果外部设备中传输的信息过多的话,那速度是无法接受的~

所以冯诺依曼体系中强调了内存也就是存储器的重要性,其**目的就是为了提高效率,存储器会存储外部设备要预加载的信息**(比如说开机的时候将操作系统的信息加载到内存中、程序要运行时候加载到内存等),然后 CPU 再通过存储器来接收消息,这看起来本质就是多了个中介,但是我们要明白内存的速度可远远比外部设备的速度要快,起码是上千倍的~

相信大家都听过短板效应,一个东西的效率等属性,主要取决于一个东西的最短板处,那么一旦我们用了 CPU内存 打交道的方式,这样子是可以大大提高效率的!

而对于将外部设备的信息加载到内存中,以及内存中加载到 CPU 中的这些操作等,都是 操作系统 做的

另外,外部设备和内存之间的信息交换过程,也称为 IO的过程,也就是 INPUT/OUTPUT

👹 关于冯诺依曼,必须强调几点:

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

对冯诺依曼的理解,不能停留在概念上,要深入到对软件数据流理解上,请解释,从你登录上 qq **开始和某位朋友聊天开始,数据的流动过程。**从你打开窗口,开始给他发消息,到他的到消息之后的数据流动过程。如果是在qq上发送文件呢?

💡 如果是发消息的话,那么其实我是通过键盘输入,然后加载到内存(更准确的说法是加载到qq程序里)中进行一些运算,然后会显示到我们的显示器上面,并从我的网卡传输信息到我的朋友那边,朋友通过网卡接收信息后加载至内存进行一些运算,然后通过其显示器显示,达到效果!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OqdcXCnV-1670848714611)(../../img/image-20221106105552499.png)]

💡 如果是发文件的话,中间过程都是一样的,只不过我的输入设备变成了磁盘而已,因为文件存在磁盘中!

Ⅱ. 操作系统(Operator System)

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

  • 内核(进程管理,内存管理,文件管理,驱动管理)

  • 其他程序(例如函数库,shell程序等等)

🦏 操作系统的本质其实就是一个管理软硬件资源的一个软件!

下面我们通过问题的引入,来一层一层的解析计算机的软硬件体系结构!

💡 为什么要管理呢因为要对下通过合理的管理软硬件资源(手段),对上为用户提供良好的(稳定、高效、安全)执行环境(目的)!

下面画一个简单的图概述一下操作系统与硬件和用户之间的关系

💡 怎么管理的呢? 其实管理的本质就是对数据做管理!比如说在学校的时候,你可能基本没见过校长,但是校长就是有办法管理到你,其实就是因为校长有了你的数据,并且是在不断的更新,这样子的话校长不用见到你,也可以对你进行管理,做出决策!

💡 那么操作系统怎么获得硬件的数据? 其实就是通过驱动!我们可以举个例子,比如在学校中,校长为了得到数据,会去收集学生的数据,但是如果学生太多的话那可不行,所以就有了辅导员,校长就是管理者,通过执行者也就是辅导员去拿到被管理者也就是学生的数据,而这里的校长就相当于是操作系统,而辅导员相当于驱动,而学生就相当于硬件!所以最后就是一句话,操作系统通过驱动去获取硬件的数据!(具体如何获取不是我们要关心的重点)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FsNXLbHI-1670848714611)(../../img/image-20221106230045723.png)]

🐲 我们这里先引入一个简单但是很重要的知识点:管理的方法是先描述 (语言),再组织 (数据结构)
我们要明白一个问题,就是如果学生太多的时候,校长要管理的数据量就越大,那么如果没有很好的管理的方法是不行的!所以校长此时想出了一个办法,对每个学生的数据,比如学号、姓名、班级等数据,用结构体或者类来描述起来,然后通过数据结构如链表、二叉树、堆等结构进行组织。这样子校长每次查找学生的信息或者删除学生的信息的时候,只需要根据对应数据结构的方法来操作即可!体现了管理的方法!

💡 上面我们说到操作系统管理硬件,那么操作系统是否也可以管理软件呢??答案是可以的
举个例子,在银行的分层中,最底层的硬件其实可以看做是金库、桌椅板凳、电脑设备、纸张等,而驱动可以看作是安保、后勤、IT人员和其他人,而我们的操作系统可以看作部门经理、行长与一些具有业务能力的人等。那么这个时候,我们看到行长他其实不只是要管理底层也就是金库这些的数据,他也得管理同层的部门经理等人,与此一致,操作系统也是如此,是可以管理软件的

💡 为什么操作系统上面需要一层系统接口调用呢?
我们还是举个例子,在银行中,为什么不让我们直接进入它的仓库,用他们的电脑…
很明显,因为银行系统不相信任何人,并且银行系统是非常容易收到伤害的,所以银行需要将自己保护起来,但是银行存在的意义是为人民服务,提供存取等服务,满足用户需求。既然这样子的话银行将自己保护起来,又得对外提供服务,银行就建设了服务窗口!客户不允许加入到窗口里面,只能通过小窗口与内部人员进行服务请求!
一样的道理,操作系统也不相信任何人,因为一个操作系统如果轻易就被修改,那么其就不稳定和安全了!但是操作系统又得向上为用户提供各种服务,这个时候为了保护自己,计算机就在操作系统的上一层提供了系统调用接口,目的其实是为了保护操作系统的同时让操作系统向上为用户提供服务(并且操作系统的接口一般都是用C语言写的,所以与C语言调用函数接口是类似的!)

​ 我们去银行办服务的时候通过小窗口给内部人员请求服务的,再由内部人员去完成服务,其实也就相当于是用户输入指令,然后通过系统去调用接口,再交给操作系统去完成操作!所以**用户是不能直接和操作系统打交道的,都是得通过系统调用接口**!

💡 那要是一些文化不足等人群也来申请服务,他们不懂如何申请,那该怎么办呢?计算机软硬件管理体系中又给出一层,叫做用户操作接口层
举个例子,当一个老人来到银行办服务比如存钱的时候,他们可能因为知识不够不懂如何去操作存储机器,那么这个时候大厅经理就能帮助他们了,只要老人将其需要的服务通过简洁的方式表达给大厅经理,经理就能将其服务转告给内部人员,让其帮忙完成服务!
这个过程其实就相当于当有人在调用接口的时候,由于接口很多并且使用很复杂,这个时候就需要用户操作接口,比如常见的shell外壳、lib库以及一些界面,这样子调用的人通过这些操作接口就能间接的调用系统调用接口完成操作系统的操作,而当用户的请求是错误的时候,其实用户操作接口就会做拦截,就不会去调用到下面的系统调用接口!
一句话,用户操作接口层的作用就是使调用的人使用的更加方便

上面这张图片也就是完整的计算机软硬件体系结构

系统调用和库函数概念

  • 在开发角度,操作系统对外会表现为一个整体,但是会暴露自己的部分接口,供上层开发使用,这部分由操作系统提供的接口,叫做系统调用。
  • 系统调用在使用上,功能比较基础,对用户的要求相对也比较高,所以,有心的开发者可以对部分系统调用进行适度封装,从而形成库,有了库,就很有利于更上层用户或者开发者进行二次开发。

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

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

相关文章

太详细了,在 Windows 上安装 PySpark 保姆级教程

在本文中,我将和大家一起学习如何在 Windows 上安装和运行 PySpark,以及如何使用 Web UI 启动历史服务器和监控 Jobs。 安装 Python 或 Anaconda 发行版 https://www.python.org/downloads/windows/ 从 Python.org 或 Anaconda 发行版 下载并安装 Pyth…

在win10和docker下安装DVWA

win10安装 DVWA下载地址https://github.com/digininja/DvWA/archive/master.zip 在phpstudy软件包下的www文件夹中新建一个文件夹名为dvwa,把DVWA-master压缩包解压进去 删除/dvwa/config文件夹下的config.inc.php.dist文件的.dist后缀 打开config.inc.php&#x…

接口测试(四)—— Requests库发送请求、Cookie、Session、UnitTest管理测试用例

目录 一、Requests库 1、Requests库安装和简介 1.1 简介 1.2 安装 1.3 查验 2、设置http请求语法 2.1 案例1 2.2 案例2 2.3 案例3 2.4 案例4 2.5 案例5 3、Cookie 3.1 Cookie简介 3.2 CookieSession认证方式 3.3 案例 4、Session 4.1 Session简介 4.2 Sessi…

Flask从入门到放弃二(请求与相应、Session的使用与源码分析、Flash闪现、异步说明、请求拓展、BluePrint蓝图)

文章目录一、请求与响应1)请求对象2)响应对象3)前后端分离和混合二、Session的使用和原理1)Session的使用2)Session源码分析三、Flash闪现四、异步说明五、请求扩展六、BluePrint蓝图一、请求与响应 1)请求…

中国移动ZN-M160G光猫超级密码破解 | 河南移动兆能光猫超管密码获取 | 中国移动光猫如何开启UPnP功能

文章目录1. 按2. 重设光猫超管密码3. 开启UPnP功能1. 按 首先应确保设备型号是ZN-M160G,这点可以通过观察光猫底部的铭牌或者访问http://192.168.1.1/查看网页标题,因为本教程是基于兆能的这款ZN-M160G光猫进行操作的,其他的光猫&#xff08…

微信小程序框架(四)-全面详解(学习总结---从入门到深化)

目录 路由_navigateTo 页面跳转 携带参数 返回上一级页面 路由_redirectTo 页面跳转 路由_reLaunch 页面跳转 路由_switchTab 实现 tabbar 页面跳转 交互_消息提示框 基本弹出框 常用属性 icon详情 hideToast 交互_ loading 提示框 基本实现 常用属性 交互_模…

这次我把Redis数据类型写出了花✿❀~~~

1. String 字符串是 Redis 最基本的数据类型,不仅所有 key 都是字符串类型,其它几种数据类型构成的元素也是字符串。注意字符串的长度不能超过 512M。 1.1 编码方式(encoding) 字符串对象的编码可以是 int ,raw 或者…

1566_AURIX_TC275_电源管理_低功耗模式

全部学习汇总:GreyZhang/g_TC275: happy hacking for TC275! (github.com) Idle模式每一个核都可以单独进入,但是standby、sleep模式是会影响整个系统的。进入idle模式的几种方法:软件请求、其他的CPU进行软件请求、SMU因为报警等处理进行请求…

CSS -- 精灵图(sprites)的讲解及使用方法

文章目录精灵图(sprites)1 为什么使用精灵图2 精灵图的使用精灵图(sprites) 1 为什么使用精灵图 一个网页中往往会应用很多小的背景图像作为修饰,当网页中的图像过多时,服务器就会频繁地接收和发送请求图片,造成服务器请求压力过大&#xff…

ja3指纹 笔记

通过给openssl和nginx打补丁获取ja3指纹: https://github.com/phuslu/nginx-ssl-fingerprint 这个项目算出来的ja3指纹和wireshark的不完全一致,wireshark后面的是“-21,29-23-24,0”, 小小不同,👀。。 通过wireshark查看ja3指…

Selenium Grid 分布式 | 介绍与实战

一. 介绍 Selenium 包含 3 大组件,分别是:Selenium IDE、Selenium WebDriver、Selenium Grid 其中,Selenium IDE 负责录制、回放脚本,模拟用户对页面的真实操作 Selenium WebDriver 提供 API 来操作浏览器,比如&…

vue面试考察知识点全梳理

一、简介 vue几个核心思想: 数据驱动组件化虚拟dom、diff局部最优更新 源码目录介绍 Vue.js 的源码在 src 目录下,其目录结构如下。 src ├── compiler # 编译相关 ├── core # 核心代码 ├── platforms # 不同平台…

速度百倍提升,高性能 Python 编译器 Codon 火了

众所周知,Python 是一门简单易学、具有强大功能的编程语言,在各种用户使用统计榜单中总是名列前茅。相应地,围绕 Python,研究者开发了各种便捷工具,以更好的服务于这门语言。 编译器充当着高级语言与机器之间的翻译官…

4.19 Cadence Allegro软件中应该如何按照系统模板去创建PCB封装?异形表贴焊盘应该如何创建?

笔者电子信息专业硕士毕业,获得过多次电子设计大赛、大学生智能车、数学建模国奖,现就职于南京某半导体芯片公司,从事硬件研发,电路设计研究。对于学电子的小伙伴,深知入门的不易,特开次博客交流分享经验&a…

js常用函数

一、特常用函数以及功能解释(建议掌握) 1、alert()函数:显示一个警告对话,如: alert(1111) 2、eval()函数:计算表达式的结果,如: alert(eval(11)) 3、confirm()函数:显…

3 面蚂蚁,一路过关斩将 成功拿到 offer 定级 P6,大厂面试雀食有点难

线上服务 CPU 很高该怎么做&#xff1f;有哪些措施可以找到问题 JDK 中有哪几个线程池&#xff1f;顺带把线程池讲了个遍 应尽量避免在 where 子句中使用!或<>操作符&#xff0c;否则将引擎放弃使用索引而进行全表扫描 SQL 索引的顺序&#xff0c;字段的顺序 查看 SQ…

缓存一致性解决方案

文章目录常见的缓存一致性解决方案双写模式失效模式两种模式的总结上述模式的改进常见的缓存一致性解决方案 这里的缓存一致性其实就是缓存中的数据和数据库中的数据如何保持一致. 这个问题根据具体的业务场景和需要解决起来略有差异,但是总体看以分为两类,双写模式和失效模…

C-Frost安装及Cassie计算样例

本文运行环境为&#xff1a;Matlab2021b/Mathematic 13/Ubuntu18.04 matlab安装mathematic安装 一、 C-Frost安装 1、安装ipopt 安装参考 2、执行NLP例子验证是否安装成功 官方步骤 1&#xff09;修改create_problem.m文件中的 FROST_PATH路径 2&#xff09;修改CMakeL…

写代码时记录的小技巧

本文是记录自己写代码时候遇到的一些感觉比较有用/有意思的技巧&#xff0c;怕自己忘了记录一下。如果有想要分享的思路/纠正改进的地方欢迎交流。 如何输出结果 (Verbose Trick) 有关类的输出 1. 如果想在**模型的 forward 中输出相关变量**&#xff0c;但又不希望反复输出影…

Oracle如何删除归档日志文件?

Oracle如何删除归档日志文件&#xff1f; Oracle启用归档日志的状态下&#xff0c;会在指定的归档日志目录生成大量的日志文件&#xff0c;而且这些日志文件默认是不会定期清理。长时间运行下&#xff0c;会占用大量的存储空间&#xff0c;最终可能导致Oracle没有足够的空间维持…