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

news2025/1/18 6:58:53

目录

  • 一、硬件
    • 冯诺依曼体系结构
  • 二、软件
    • 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.coloradmin.cn/o/755262.html

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

相关文章

HTML+CSS+JavaScript:九九乘法表

一、需求如图 二、思路及代码 1、JavaScript代码 稍微刷过一点算法题的小伙伴就很容易想到这题需要利用双层for循环来实现&#xff0c;思路也是比较简单的&#xff0c;我在这里就直接放代码了 不添加CSS渲染的代码如下 <!DOCTYPE html> <html lang"en"&…

JVM学习笔记(三)垃圾回收

相关文章&#xff1a; JVM中的新生代和老年代&#xff08;Eden空间、两个Survior空间&#xff09;_jvm eden_样young的博客-CSDN博客JAVA命令行工具&#xff08;一&#xff09;--JAVA - 简书JAVA命令行工具&#xff08;二&#xff09;-jps - 简书JAVA命令行工具&#xff08;三&…

AttributeError: module ‘torch.nn‘ has no attribute ‘module‘

import torch import torch.nn as nnclass LinearModel(nn.Module):def _init_(self,ndim):super(LinearModel,self)._init_()self.ndimndimself.weightnn.Parameter(torch.randn(ndim,1))#定义权重self.biasnn.Parameter(torch.randn(1)) #定义偏置def forward(self,x):# y …

【离散数学实验报告】最小生成树的生成

实验四&#xff1a;最小生成树 一、实验目的&#xff1a; 理解最小生成树的画法。提高学生编写实验报告&#xff0c;总结实验结果的能力&#xff0c;培养学生的逻辑思维能力和算法设计思想。能够独立完成简单的算法设计和分析&#xff0c;进一步用他们来解决实际问题&#xf…

谁能成为首个RedCap规模商用的厂商?

RedCap在“降本、小尺寸、低功耗”的呼声中逐渐成为后5G时代的宠儿&#xff0c;随着相关技术的成熟&#xff0c;RedCap如何进一步商用成为行业关注的焦点。RedCap的发展&#xff0c;离不开运营商、芯片厂商、终端厂商、模组厂商等产业关键节点的通力合作。那RedCap离正式商用还…

关于hessian2的一些疑点(0CTF来分析)

目录 前言&#xff1a;csdn很久不用了&#xff0c;打算最近拾起来&#xff0c;主要是监督自己。 非常可疑的点 另一种方法通过JNDI注入来 构造完整的链子 这里&#xff0c;希望佬们解答解答&#xff0c;非常感谢&#xff01;&#xff01;&#xff01; 前言&#xff1a;csdn很…

【C++】开源:cpp-tbox百宝箱组件库

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍cpp-tbox百宝箱组件库。 无专精则不能成&#xff0c;无涉猎则不能通。。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;…

ingress之503问题

ingress之503问题 背景&#xff1a; 部署好应用服务(nsyai-test名称空间下)后&#xff0c;通过ingress做七层反代&#xff0c;浏览器访问域名一直出现503的错误&#xff0c;其中30086端口为ingress-controller控制器nodeport型service端口 问题&#xff1a; 网上查看发现是不…

【http-server】http-server的安装、前端使用http-server启动本地dist文件服务:

文章目录 一、http-server 简介:二、安装node.js:[https://nodejs.org/en](https://nodejs.org/en)三、安装http-server:[https://www.npmjs.com/package/http-server](https://www.npmjs.com/package/http-server)四、开启服务&#xff1a;五、http-server参数&#xff1a;【1…

OpenMMLab MMTracking目标跟踪官方文档学习(一)

介绍 MMTracking 是PyTorch的开源视频感知工具箱。它是OpenMMLab项目的一部分。 它支持 4 个视频任务&#xff1a; 视频对象检测 (VID) 单目标跟踪 (SOT) 多目标跟踪 (MOT) 视频实例分割 (VIS) 主要特点 第一个统一视频感知平台 我们是第一个统一多功能视频感知任务的开源工…

自建DNSlog服务器

DNSlog简介 在某些情况下&#xff0c;无法利用漏洞获得回显。但是&#xff0c;如果目标可以发送DNS请求&#xff0c;则可以通过DNS log方式将想获得的数据外带出来。 DNS log常用于以下情况&#xff1a; SQL盲注无回显的命令执行无回显的SSRF 网上公开提供dnslog服务有很多…

windows 搭建ssh服务

1、官网下载安装包&#xff1a;mls-software.com 2、点击安装&#xff08;一直默认即可&#xff09; 3、配置 opensshServer 4、成功登录

云数据库MySQL相关帮助

1.为什么创建数据库后在数据库列表中不显示&#xff1f; 因为列表读取的是information_schema&#xff0c;刚创建的数据库是空库&#xff0c;没有数据写入&#xff0c;不会写入缓存表&#xff0c;所以不会显示&#xff0c;但不影响正常使用&#xff0c;可以直接对新建的数据库进…

2.数据结构面试题--消失的数字

面试题:消失的数字 数组nums包含从0到n的所有整数,但是其中缺了一个,请编写代码找出那个缺失的整数,你有办法O(N)时间内完成吗? 方法1.排序:依次查找 如果下一个数不是上一个数1,那么上一个数字1就是消失的数字 冒泡排序的话时间复杂度是O(n^2) qsort排序的话是O(NlogN) 需…

Python爬虫——urllib_get请求的quote方法和urlencode方法

quote方法&#xff1a; 将字符转换为对应Unicode编码 import urllib.request import urllib.parse# 获取 https://www.baidu.com/s?wd周杰伦 网页源码 url "https://www.baidu.com/s?wd" headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKi…

stm32 报错 dev_target_not_halted

烧录stm32H743&#xff0c;在cubeprogrammer里面点击connect&#xff0c;报错dev_target_not_halted 解决方法&#xff1a;先把H743的boot0引脚接到高电平上&#xff0c;然后少上电&#xff0c;此时会停止内核的运行&#xff0c;再点击connect即可 H743管脚&#xff1a; 在芯…

windows系统 安装 InfluxDB

一、InfluxDB下载 InfluxDB的windows&#xff08;64-bit&#xff09;下载地址为&#xff1a;https://dl.influxdata.com/influxdb/releases/influxdb-1.7.7_windows_amd64.zip 二、安装 influxDB是不需要安装的&#xff0c;只需要将压缩文件解压到相应的目录即可&#xff1b;…

STM32CubeMX+Eclipse+gcc+Jlink 实现STM32开发环境搭建

本节记录通过STM32CubeMXEclipsegccJlink 进行STM32环境搭建的过程&#xff1b; 文章目录 一、环境确认二、Eclipse建立工程三、指定编译路径四、选择gcc路径五、选择make路径六、 选择Device 参考&#xff1a; https://blog.csdn.net/qq_35787848/article/details/124395509 h…

OPPO手机便签怎么上传录音文件?

相信很多网友对OPPO这个手机品牌并不陌生&#xff0c;因为它凭借时尚轻薄的外观设计、流畅简约的系统、清晰的拍照摄影以及高中低不同的价位选择&#xff0c;赢得了不少年轻消费者的青睐。不过在使用OPPO手机的过程中&#xff0c;也有不少用户表示自己遇到了各种各样的问题&…

mycat设置sql隔离级别的问题

问题 General log中出现大量SQL “SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ”。 该语句会引起两个问题&#xff0c; 1: "REPEATABLE READ"不是我们预期的事物隔离级别。 2: 大量无效的SQL影响性能。 注&#xff1a; MySql的可重复读会带来怎样…