用提问的方式来学习:冯·诺伊曼体系结构与操作系统OS

学习冯诺伊曼体系结构之前,我们要本着两个问题来学习:

  1. 什么是冯诺伊曼体系结构?
  2. 为什么要有冯诺伊曼体系结构?

一、冯·诺伊曼体系结构 

1. 什么是冯诺伊曼体系结构?

        那我们就先来回答一下什么是冯诺伊曼体系结构:

        首先我们要确定的是冯诺伊曼这个人发明了这个结构,这个结构是由CPU、输入设备、输出设备和存储器组成的;

        而且如今的计算机基本都是冯诺伊曼体系结构,这也就证实了这个结构的可行性和泛用性。我们先有对这个结构的简单的认识,之后再去学习这个结构具体解决了什么问题,具有什么价值。

首先就来看一下冯·诺伊曼体系结构的内容:

  1.  输入设备:话筒、摄像头、键盘、鼠标、磁盘、网卡等;
  2.  输出设备:显示器、声卡、网卡、显卡、磁盘、打印机等;
  3.  CPU(中央处理器):包括运算器(算术运算+-*/、逻辑运算&|^ ~);
  4.  存储器:内存(掉电易失

掉电易失:

        比如我们在编辑一个文档,我们只编辑没有保存,你的电脑关机了,此时我们重新开机的时候,是找不到这个文档里面的内容的;因为我们没有保存起来,没有保存的时候,文档是存储在内存中的,内存具有掉电易失的特性,所以关机之后就找不到了,而我们保存了之后,是将文档保存在磁盘中,此时关机再打开也能找到该文档;

        一句话概括:内存不具备永久存储的功能

2. 为什么要有冯诺伊曼体系结构?

        在弄清为什么要有冯诺伊曼体系结构之前,我们先看看这些设备之间是怎样来发挥作用的,因为在我们的认知里,对键盘设备的输入字符,一定是为了向显示器设备输出,比如我们通过微信给朋友发送信息,一定是将我们从键盘输入的信息,发送到朋友电脑的显示器上输出的,所以正因为这样的现象,我们可以看出设备之间一定是连接起来共同作用的,因为数据的传递不可能只是一个设备完成的;所以连接的目的其实就是让数据在不同设备之间进行流动

        那我们设立一个场景:在编辑文档的时候,我们先编辑一段文档,保存,关闭,再打开,我们会发现打开的文档依旧是之前写的文档,此时我们再进行编辑,但是不保存,直接关闭。这个时候磁盘的文档是修改之后的,还是修改之前的呢?毋庸置疑,一定是修改之前的,所以我们会发现一个事情:磁盘的文档和我们打开之后存在内存的文档是两个独立的文档,一个改变不会影响另外一个,除非再次保存;这就说明了一个事情,数据在不同设备之间的流动,本质上其实是在不同设备之间的拷贝,不同设备之间的数据相互独立,互不影响,除非进行了保存这类操作

        不同设备之间的拷贝,一定是需要花费时间的,所以拷贝一定也是有速度的,那计算机的速度其实就是设备之间整体拷贝的速度;众所周知的是CPU的速度是非常快的,而我们的外设(输入输出设备)的速度是很慢的,所以CPU如果和我们的外设之间传数据,速度就会被外设牵累,变慢;这很像木桶原理,不能以长处为标准,要以短板为准;那这时,怎么来提升计算机的速度呢?

首先我们先看这张图片:存储金字塔

        这个结构就是表明了各个设备的速度,我们可以看到外设是最底层的,速度最慢,但是价格却很便宜,大家要记住计算机之所以可以家喻户晓的原因就是因为造价不是很昂贵,家家都可以拥有;所以我们在解决计算机的速度的时候,完全可以让寄存器贯穿计算机的所有设备,因为这可以使计算机的速度变的飞快,但是价格也是十分的昂贵;所以这不利于计算机的广泛传播。基于这两个原因,既要提速,又要控制价格。就有了内存这个中间者,这也是冯诺伊曼体系结构的核心所在,正是这个结构有了内存,才会被计算机广泛应用

        在这里讲解一下内存是如何提高效率的:

        我们知道最开始效率低下是因为外设直接和CPU传数据,这就是计算机的速度以外设为标准,大大降低了整体的速度。而内存的引入,是完全有效地提高了整体的速度的,大家这里一定有了疑问,最开始是外设 —> CPU,而加入内存之后,外设 —> 内存 —> CPU,这看起来并没有提高速度,反而还降低了速度啊。其实并不是这样的,我们的内存提高效率的原因是在于,可以将数据预先加载到内存中,然后由内存直接和CPU对接,CPU操作完的也是先放到内存中的缓存里,等CPU闲置了,再一并发送给外设。这样的流程也就注定了计算机的速度是以内存为准了,大大提高了计算机的整体效率。

所以到了这里,我们也就不难去模拟一个数据传输的过程了

场景设立:我发送hello给小杨

所以总结一下:冯诺伊曼体系结构是一个以内存为核心的结构、外设和CPU传送数据必须要通过内存、这样既提高了计算机的效率,价格也不贵

二、操作系统(OS)

        想真正弄懂操作系统是一个过程,不是一篇博客可以解释清楚的,你需要在漫长的学习生活中去感受它,我们现在大多数学习的知识都是具有滞后性的,所以下面的内容,将会让你对操作系统有初步的认识,但不会让你秒懂。

学习之前,依旧是要提出两个问题:

  1. 什么是操作系统?
  2. 为什么要有操作系统?

1. 什么是操作系统?

操作系统是一个进行软硬件资源管理的软件

        既然是一个软件,那么它就是一个可执行的程序,既然是一个可执行的程序,那么就注定是必须要运行的,既然必须被运行,就一定会经过CPU的处理,一定会被加载到内存上。

        所以操作系统是第一个被加载到内存的软件。这个加载的现象大家是都看到过的,在我们电脑开机的那段时间,就是进行着对操作系统加载到内存的操作!

        那我们来分析一下什么叫对软硬件的资源做管理,重点要落在管理这个词上,管理的存在,就注定了有管理者和被管理者,如学校、公司、医院等,校长、董事长、院长这几个角色就是管理者,他们要分别对学生、员工、病人和医护人员进行管理,那他们会挨个人的管理吗?答案是肯定不会的,所以管理者是不会直接对被管理者本身做管理的,如果你是管理者,一定是希望去管理被管理者的信息,做成表格去管理。所以管理者是对信息做管理,那管理的本质就是对信息或者数据做管理

        思考这样一个问题,一个学校有上万个人,管理者对这些人的数据一定不会是一个一个看的,一定是要建立在某种数据结构之上的,并且要具备增删查改等操作。而每个人都是不一样的个体,有自己的姓名、年龄、喜好、住址等等,但是这些都是人人必备的元素,也是管理他们信息的必备的标识,所以我们可以建立一个结构体来记录他们的信息,之后组成顺序表、链表等数据结构,并且具有增删查改的功能。

        那么对人的管理,就是对数据的管理,最后就演变成对数据结构的增删查改!得到他们的信息之前必须的步骤就是先描述人的信息,再组织数据结构。总结就是先描述,再组织。所以管理,其实就是对数据进行先描述,再组织的过程。那回到操作系统这里,操作系统对软硬件资源的管理,其实就是对这些软硬件的信息的管理,也就是对存放软硬件信息的数据结构做管理!因为语言的本质就是对数据做管理,我们可以回想写代码的时候,无一不是对数据的管理,增删查改、输出输入、判断等等。

        操作系统是通过驱动程序来管理硬件的,而软件其实就是一个个可执行的程序,可执行程序是要加载到内存中的,因为要经过CPU的处理,所以必须到内存,而操作系统就是在内存里的,所以操作系统管理软件是在内存中去管理的。

2. 为什么要有操作系统?

        既然我们知道什么是操作系统了,也知道操作系统是管理软硬件信息的,那到底为什么要有操作系统呢?操作系统有什么作用呢?

先给结论:对下可以管理好软硬件资源,对上可以给用户提供稳定、高效和安全的运行环境

        管理好软硬件资源不用解释了,上面已经解释清楚了,那为什么可以给用户提供稳定、高效和安全的运行环境呢?

        比如一家银行、你能让取钱的直接去金库拿钱吗?肯定不能,因为怕偷钱。这换在计算机上就是更改计算机的底层数据,是不被允许的,所以银行才有银行窗口帮你办理,操作系统也是一个道理,为了让计算机安全,坚决不能让用户直接访问计算机底层的数据,否则带来的影响十分不好。那用户应该如何来访问数据呢?这时操作系统就提供了一个系统调用接口,我们要访问数据,必须通过系统调用接口来访问这就类似于类里面的public,而数据就是private但是用户直接使用系统调用接口的成本太高,不利于操作,就出现了指令、shell外壳和lib(库)这样的操作来供我们使用,我们只需要发送指令,调用库函数,他们就会自动匹配系统调用接口,但是我们依旧是可以直接使用系统调用接口的。

        比如printf和scanf函数,这两种函数是涉及到输入输出的,也就是涉及到了硬件的改变,硬件是属于操作系统内部的,用户不可以直接访问,就一定要通过系统调用接口,而printf和scanf其实就是对系统调用接口进行了封装,使用这两个函数之后,会自动匹配系统调用接口来完成操作;所以只要涉及对硬件信息的更改,就一定要通过系统调用接口

        大家可以思考这样的问题,现在市面上的操作系统有Unix、Linux、macOS、Windows等,这些操作系统的系统调用接口一定是不同的,我们一定听说过某个语言是具备可移植性和跨平台性的原因就是他们的lib(库)是可以实现对不同系统的系统调用接口的使用,实际就是对不同接口进行了封装。简单理解,条件编译,如果是Unix系统就用这个系统调用接口、Linux就用Linux的、Windows就用Windows的接口等等

综上所述,操作系统存在的意义就是两方面

  1. 对下可以管理好软硬件资源
  2. 对上提供良好的运行环境

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

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

相关文章

leetcode 1466

leetcode 1466 使用dfs 遍历图结构 如图 node 4 -> node 0 -> node 1 因为节点数是n, 边长数量是n-1。所以如果是从0出发的路线,都需要修改,反之,如果是通向0的节点,例如节点4,则把节点4当作父节点的节点&…

8. MySQL 触发器

目录 概述 定义 触发器特性: 基础操作 创建触发器 NEW和OLD 其他操作 查看触发器 删除触发器 注意事项 概述 定义 触发器,就是一种特殊的存储过程。触发器和存储过程一样是一个能够完成特定功能、存储在数据库服务器上的SQL片段,但是触…

访问NFS存储及自动挂载

本章主要介绍NFS客户端的使用 创建NFS服务器并通过NFS共享一个目录 在客户端上访问NFS共享的目录 自动挂载的配置和使用 1 访问NFS存储 前面介绍了本地存储,本章就来介绍如何使用网络上的存储设备。NFS即网络文件系统,所实现的是 Linux 和 Linux 之间的…

在springboot中引入参数校验

一、概要 一般我们判断前端传过来的参数&#xff0c;需要对某些值进行判断&#xff0c;是否满足条件。 而springboot相关的参数校验注解&#xff0c;可以解决我们这个问题。 二、快速开始 首先&#xff0c;我用的springboot版本是 3.1.5 引入参数校验相关依赖 <!--1…

Java - 线程间的通信方式

线程通信的方式 线程中通信是指多个线程之间通过某种机制进行协调和交互 线程通信主要可以分为三种方式&#xff0c;分别为共享内存、消息传递和管道流。每种方式有不同的方法来实现 共享内存&#xff1a;线程之间共享程序的公共状态&#xff0c;线程之间通过读-写内存中的公…

【ARM Coresight 系列 2 文章 -- Trace32 对 APBIC 地址的配置 介绍】

请阅读【ARM Coresight SoC-400/SoC-600 专栏导读】 文章目录 APBIC RomtableTrace32 RESBREAKTrace32 ENRESETAPBIC Romtable 图 1 APBIC 网络图 如上图所示,如果想通过Trace32/DS-5 去访问 AP, 这个时候需要怎么做呢?可以看到 APBIC 中ROMTABLE 中 APB-AP 的偏移是0x002000…

ECCV 2024 European Conference on Computer Vision

目录 DatesPeople 官网&#xff1a; https://eccv2024.ecva.net/ 链接 Dates Thursday, February 29, 2024 authors Abstract registration deadlineThursday, March 7, 2024 authors Submission deadlineThursday, March 14, 2024 authors Supplementary materials deadlineM…

数据驱动构建企业动态全面预算管理架构

在过去的20年里&#xff0c;电子表格一直是企业用于规划、预测、预算和管理报告的主要工具&#xff0c;尽管有的企业具备针对财务的系统&#xff0c;但其应用效率和规划技术仍然难以满足市场需求。并且&#xff0c;大部分企业对于财务管理的部署成本相对较低&#xff0c;其可访…

御剑工具学习

御剑 1.1 工具的下载路径1.2 工具的安装流程1.3 工具的详细使用 1.1 工具的下载路径 百度网盘 链接&#xff1a;https://pan.baidu.com/s/1Bn7GtWb7AStcjzVahFOjSQ 提取码&#xff1a;zkaq 1.2 工具的安装流程 御剑不用安装&#xff0c;直接下载下来解压&#xff0c;双击“御…

优化您的Mac电脑风扇控制体验 - 尝试Macs Fan Control Pro!

在日常使用Mac电脑过程中&#xff0c;我们经常会遇到电脑发热的问题&#xff0c;特别是在运行大型软件或进行高负载任务时。为了保护电脑硬件&#xff0c;一个高效且可靠的风扇控制软件是必不可少的。 Macs Fan Control Pro是一款专为Mac电脑设计的风扇控制软件&#xff0c;它…

SpringBoot自定义参数校验注解

为什么要自定义校验注解? 当现有的注解NotEmptyPatternNotNullURl等不能满足业务需求的时候,我们需要手动自定义一个注解 操作步骤 新建一个anno的包 单击右键添加注解 编写state注解 创建validation文件夹 编写校验规则 然后给上面的State注解指定这个校验规则 使用注解…

好用的网页内容转markdown工具

因为平时记录的笔记在不同的平台发布&#xff0c;后面需要保存成mrakdown的格式又找不到本地的文件记录&#xff0c;本地存储的好处很多&#xff0c;比如可以离线浏览阅读&#xff0c;对网页进行备份&#xff0c;也能借助其他工具同步数据而来满足自己的工作流程。这是这些工具…