冯诺依曼体系结构以及回答操作系统(是什么,为什么,怎么办)问题

目录

  • 一、硬件
    • 冯诺依曼体系结构
  • 二、软件
    • 2.1 计算机的层状结构
    • 2.2 操作系统的概念
    • 2.3 操作系统是什么?
    • 2.4 为什么要有操作系统?
    • 2.5 操作系统是怎么管理底层的软硬件资源的呢?

一、硬件

冯诺依曼体系结构

我们常见的计算机,如笔记本。或者我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系。
什么是冯诺依曼体系结构?如下图:
在这里插入图片描述
输入设备:鼠标,键盘,摄像头,话筒,磁盘,网卡等等。
输出设备:显示器,磁盘,播放器,网卡,磁盘等等。
输入设备和输出设备统称为外设(外部设备)。
有的的设备是纯的输入或者输出设备,有的设备可以既是输入设备,又是输出设备。
运算器:对我们的数据进行计算任务(算数计算,逻辑计算)。
控制器:对我们的硬件的计算流程进行一定的控制。例如:输入设备的数据好了没,什么时候从内存里拿数据进行计算。
运算器和控制器合成CPU。

由上述可知,计算机的各个硬件都是独立的个体,而计算机在工作的时候各个硬件之间一定要进行数据交互,所以各个单元必须用“线”连接起来,即在物理上是连通的,才能使各个硬件之间的数据进行交互,这个“线”分为系统总线和IO总线,连接CPU与存储器(内存)的线是系统总线,连接存储器(内存)与输入输出设备的线是IO总线。

冯诺依曼体系结构规定,输入设备的数据只能输入给内存,然后内存把数据交给CPU执行计算功能,计算后得到的结果再交给内存,内存再输出给输出设备。不能CPU直接从输入设备拿数据进行计算,然后把结果写到输出设备上。这是冯诺依曼体系结构的规定。为什么呢?原因是CPU的速度太快了,而输入和输出设备属于外设,速度特别慢,如果CPU直接从输入输出设备拿数据和输出数据,就会出现CPU总是在等待输入设备的数据就绪,而计算好结果的数据也要总是等输出设备来拿,两者的速度差距太大就注定是串行工作的,这样的话,整机的速度就取决于输入和输出设备的速度,即会变得很慢,不利于整机效率的提高。而在CPU和外设之间加入存储器(内存),内存的速度比输入输出设备的速度要快很多,但是要比CPU的速度慢,并且内存的空间是比CPU大很多的,所以内存可以事先缓存着准备要执行的代码和数据,即在CPU进行着其它计算的时候,内存也同时在加载着数据,即可以并行工作,等到CPU再去内存中拿数据进行计算的时候,需要计算的代码和数据已经完全加载到了内存中了,这时CPU就能快速地从内存中拿到数据进行计算,由此可以大大地提高了整机效率。
所以存储器(内存)在冯诺依曼体系结构中是居于核心地位的,存储器是硬件级别的缓存空间,类似于C语言的缓冲区。

回答两个问题:
问题一:一个程序要运行,为什么一定要先加载到内存中呢?
程序是文件,文件是放在磁盘上的,程序中的代码和数据是要通过CPU运行和计算的,而CPU只会在内存中拿数据,所以程序要想运行就必须要先加载到内存的根本原因是冯诺依曼体系结构规定的!!!!所有的软件的设计都必须遵守底层的硬件结构!!
问题二:为什么我们在写printf打印函数的时候,不加\n,打印的数据会先缓存在缓冲区中,原因是CPU运行后的结果本来就是要写回内存的,即写回到缓冲区中,然后等到特定的场景下再刷新到显示器,而不是CPU直接和输出设备交互的,所以打印时缓存是正常现象。
值得注意的是,CPU与输入输出设备只是在交互数据上没有联系,但是在控制信号上是有一定的联系的。

在这里插入图片描述
关于冯诺依曼,必须强调几点:
第一、这里的存储器指的就是内存。
第二、不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设(输入或输出设备)
第三、外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取。

一句话总结就是,所有设备都只能直接和内存打交道。

二、软件

2.1 计算机的层状结构

在这里插入图片描述

2.2 操作系统的概念

任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。笼统地理解,操作系统包括:
内核(进程管理,内存管理,文件管理,驱动管理)
其他程序(例如函数库,shell程序等等)
由内核加上其它程序的统称的操作系统是广义上的操作系统,但是我们平时在谈操作系统的时候,其实是特指操作系统的内核,即狭义层面上的操作系统指的就是操作系统的内核。

2.3 操作系统是什么?

操作系统是一款进行软硬件管理的软件。

2.4 为什么要有操作系统?


1、操作系统帮助用户管理好下面的软硬件资源。
2、为了给用户提供一个良好(安全、稳定、高效)的运行环境。
总的来说就是:操作系统通过管理好底层的软硬件资源(手段),给用户提供良好的执行环境(目的)。

这里的用户指的是谁?
这里的用户指的不是普通的老百姓用户,因为我们平时在使用的app是程序员开发出来的软件,例如各种游戏,抖音;我们不是在使用直接使用操作系统,而是使用搭建在操作系统之上的软件,所以这里的用户其实是指程序员,是程序员在使用操作系统,在操作系统之上开发出各种各样的应用软件,才能提供给普通老百姓使用。

因为操作系统是软硬件资源的管理者,底层的硬件资源的信息是不能被随意修改的,所以用户是不能绕过操作系统直接访问底层的硬件的,但是我们知道,我们所有在上层的操作最终都会转换成对底层硬件的操作的,比如我们在写C语言printf函数的时候,把内容打印到了显示器上,我们给别人发信息的时候,信息是要放到网卡里发送的,这些都是操作都是要访问底层的硬件资源的,但是操作系统是不相信任何人的,所以操作系统为了保证自己数据的安全,同时也能给用户提供服务,它以接口的方式给用户提供调用的入口,让用户获取操作系统内部的数据。所谓的接口就是操作系统提供的,用C语言实现的对自己内部函数的调用,简称系统调用,所有访问操作系统内部数据的行为,都必须要通过系统调用来完成。

因为系统调用接口使用起来非常的麻烦,普通用户使用系统调用接口成本比较高,所以有很多程序员就基于系统调用接口之上写了C语言C++的各种库,所以我们平时在写C语言C++程序的时候,调用的库函数接口底层一定是封装了某种系统调用接口的,因为只能通过系统调用接口访问操作系统。

2.5 操作系统是怎么管理底层的软硬件资源的呢?


管理的本质是:通过对数据的管理,达到对底层软硬件资源的管理。

管理有时候是隔层的,就好比在大公司的老板和员工,老板并不是直接对员工进行管理,而是通过主管拿到员工的数据,进而对员工进行管理。操作系统也一样,并不是直接对底层的硬件资源进行管理,而是通过驱动程序拿到底层硬件资源的数据,进而达到管理的目的。这里的操作系统相当于决策者,驱动程序属于执行者。那么底层的硬件资源的数据那么多,并且底层有那么多的软硬件资源,操作系统需要怎么管理呢?

首先,硬件的属性是非常多的,并且是分散的,直接管理肯定是不行的,虽然底层的各个硬件的各种属性肯定是不同的,但是它们都是有这些属性的,而操作系统又是通过C语言写的,在C语言中要对一种多属性的对象进行描述的话,毫无疑问是需要用到结构体的,所以要把底层的硬件资源描述清楚的方法就是按照硬件的属性信息,声明对应的结构体,然后再定义一个一个的对象,把每一个硬件的属性信息填入到结构体中,这一个个的结构体对象就是描述底层硬件资源的数据,这个过程是描述的过程。

但是把这一个个的对象描述清楚就行吗?当然不是,我们想要更好地管理这些数据,肯定是要把这些数据以某种数据结构的形式组织起来的。所以这些关于软硬件资源的数据可以用双向链表的方式连接起来,如此一来,操作系统对底层软硬件资源的管理就转换成了对这个双向链表的增删查改了。例如,现在多了一个硬件,操作系统只需要再定义一个对象,填写相关的属性信息,然后把这个对象链接到这个双向链表中就可以了。如果某个硬件坏了,需要拆除,那就是在这个双向链表中找到对应的节点并删除它即可。这个过程是组织的过程。

所以简单来说,操作系统管理底层软硬件资源的核心思想可以用六个字来总结,那就是:“先描述,再组织”。

以上就是今天想要跟大家分享的全部内容了,你学会了吗?如果这篇文章对你有所帮助,那么点亮一下小心心,外加点点关注呗,后期还会持续更新有关Linux操作系统的相关内容哦,我们下期见啦!!!!!!!

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

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

相关文章

Es存储和查询

基本概念 Cluster 集群,一个ES集群是由多个节点(Node)组成的,每个集群都有一个cluster name 作为标识, 在同一网段下的Es实例会通过cluster name 决定加入哪个集群下。 node 节点,一个ES实例就是一个node,一个机器可以…

ELK-日志服务【kafka-配置使用】

kafka-01 10.0.0.21 kafka-02 10.0.0.22 kafka-03 10.0.0.23 【1】安装zk集群、配置 [rootes-01 ~]# yum -y install java maven [rootes-01 ~]# tar xf apache-zookeeper-3.5.9-bin.tar.gz -C /opt/[rootes-01 ~]# cd /opt/apache-zookeeper-3.5.9-bin/conf/ [rootes-…

MongoDB初体验-安装使用教程2023.7

前言:博主第一次接触MongoDB,看了一圈网上现有的教程,不是缺少细节就是有问题没交代清楚,特整理了一下自己安装运行的过程,从下载安装到开机自启,全程细节齐全、图文并茂、简单易懂。 目录 1. 从官网下载2…

入门开发教程之网站品质教程

目录 网站品质 教程 网站品质教程 背景 要素 可访问性 可用性 可靠性 可维护性 提升网站品质 针对性调整 优化网页速度 提供多种访问方法 结论 网站品质教程 背景 在今天这个数字化时代,网站已经成为了各个行业展示产品和服务的重要媒介。而网站品质是…

【分布式任务调度】XXL-JOB执行器配置及定时任务的创建(二)

文章目录 1. 前言2. 调度器配置2.1.依赖及配置2.2.任务实例2.3.调度中心管理配置 3. 总结 1. 前言 在上一篇《XXL-JOB调度中心集群部署配置》 中,我们已经得到了一个调度中心的集群,接下来需要了解如何配置调度器及创建定时任务。 本文的主要内容包括&a…

声音生成项目(6)——在矢量量化变分编码器上使用自回归模型PixelCNN模型生成新的样本

文章目录 引言PixelCNN论文简读模型介绍自回归模型PixelCNN模型结构 基础知识回顾 代码实现PixelConvLayer具体运行过程卷积模块整体网络结构 模型执行效果问题解决训练好的模型在生成新的图片时,为什么要逐个元素进行生成?掩码卷积仅仅是考虑了一部分的…

DAY47:动态规划(十)零钱兑换Ⅱ+组合总和Ⅳ(完全背包求方案总数类型,排列+组合)

文章目录 518.零钱兑换Ⅱ(装满背包方案数,本题是组合方案数)思路DP数组含义递推公式DP数组初始化遍历顺序(重要,不能颠倒)外层物品内层背包的情况外层背包内层物品的情况完全背包求排列数和组合数 完整版总…

产品流程图

流程图设计 1.什么是流程图2.流程图元素定义3.几种常见的产品流程图 3.1业务流程图 | 泳道图(给产品经理看)3.2任务流程图(给程序员看)3.3页面流程图(给UI设计人员看) 4.如何绘制流程图 4.1调查研究4.2梳理…

S32K系列MCU介绍和资料搜集

1. S32K系列微控制器概述 S32K系列微控制器,是NXP推出的专门面向汽车电子和工业应用场合的微控制器。基于ArmCortex-M系列的可扩展、低功耗微控制器,获得了AEC-Q100认证,具有高级功能安全、信息安全和软件支持,适用于工业和汽车A…

身份证读卡器安卓SDK在安卓12版本targetSdkVersion=32报错解决办法

之前的东信智能的EST-100身份证读卡器安卓SDK版本V1.0.40在安卓12版本,targetSdkVersion32的时候会出现以下错误: Targeting S (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingInten…

利用缓存模拟进度条(c实现)

代码如下&#xff1a; #include <stdio.h> #include <Windows.h>int main() {int total 100;int progress 0;char progressBar[101] {};while (progress < total) {progressBar[progress] #;printf("[%-100s] %d%%", progressBar, progress);ffl…

【UE4】在控件蓝图上播放视频

UE版本&#xff1a;4.26 在上一篇文章中&#xff08;【UE】场景内播放视频、音频&#xff09;介绍了如何在场景中播放视频&#xff0c;本篇文章将介绍如何在UI上播放视频 效果 步骤 1. 首先在“Content”文件夹中新建一个名为“Movies”的文件夹 2. 在文件夹中随便添加一个.…