【Linux系统】冯诺依曼与操作系统

2024-03-26 09:20

本文主要是介绍【Linux系统】冯诺依曼与操作系统,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

什么是冯诺依曼体系结构?

如图即为冯诺依曼大致的体系结构图,  我们知道这些都是由我们的计算机硬件组成

输入设备:键盘, 鼠标, 摄像头, 话筒, 磁盘, 网卡...

输出设备:显示器, 声卡, 磁盘, 网卡...

CPU:运算器和控制器

存储器:内存

在上图冯诺依曼体系结构图中我们可以看到红色箭头都代表的是数据的流动,那我们就要研究数据在我们的计算机的冯诺依曼体系结构中是怎么流动的呢?

这里给出结论:数据流动从一个设备到另一个设备,本质是一种拷贝!!!

而CPU处理数据是非常快的,那我们又可以得出一个结论:设备间的拷贝效率决定了计算机整机的效率。

 在我们的冯诺依曼结构中我们的输入输出设备是不能直接与CPU打交道的, 原因在于CPU的速度实在是太快了, 而输入输出设备又相对比较慢,这样与CPU打交道,就像木桶效应版,会拖慢整机速度。

所以我们的祖师爷冯诺依曼就想出了这么个解决办法,这就引出了内存, 让内存与CPU直接打交道,这样输入输出设备都无需与CPU交互,直接面向内存就可完成任务。

如何理解冯诺依曼的体系结构带来的意义?

 

 上图为存储金字塔。

存储:距离CPU越近,效率越高, 容量越小, 成本越高。

故冯诺依曼体系的结构不就是能够使现在的我们,家家户户都可买得起电脑。这不是大大的使计算机得到了大范围的普及,所以冯诺依曼体系结构对于我们的社会现实意义确实是重大的!

也就是说, 没有祖师爷冯诺依曼就没有现在的我们!!!

 在硬件数据流动角度, 在数据层面:

  1. CPU不和外设直接打交道,只和内存打交道
  2. 外设(输入和输出)不是直接把数据给CPU的,而是先要放入内存中

 能干什么?

1.程序运行为什么要加载到内存?

程序 = 代码 + 数据 程序“数据”都需要被CPU访问      -》CPU只会在内存中读取代码和数据

程序没有被加载到内存时, 是什么?答案是:磁盘中的二进制文件,即在外设中。

-》CPU只会在内存中读取代码和数据

这些都是冯诺依曼体系结构决定的!!!

 一种场景

 假设我通过qq这款应用程序要给小明发个消息为“你好”,数据是怎么传输的呢?

我们按照冯诺依曼体系结构来说, 即我们将通过输入设备即键盘输入数据,然后再写入内存,内存交给CPU进行加密操作, CPU还给内存, 内存再把加密后的数据交给输出设备即网卡,原因我们是在网络中传输数据, 所以需要网卡, 然后中间是一系列网络传输,由于尚未学习,略去, 经过网络传输的数据就来到接收方小明的输入设备即网卡, 然后写入到内存中, 内存交给CPU进行解密, 解密完成, 返还给内存, 内存把 数据再交给输出设备即显示器,显示到屏幕上, 这样一个在冯诺依曼体系结构下的数据传输的过程就完成了!!!

 操作系统

1.概念

操作系统本质是一款软件。

进行软硬件 资源 管理的软件

广义的理解:操作系统的内核 + 操作系统的外壳周边程序(给用户提供使用操作系统的方式)

狭义:操作系统的内核

2.结构示意图(不完整)

 如上图为体系结构的层状划分结构

操作系统的内核实质上就是操作系统,进行着各种资源的管理。

 为什么要有操作系统?

对软硬件资源进行管理(手段)。

为用户提供一个良好(稳定的,高效的,安全的)的运行环境(目的)。

3.尝试理解操作系统

 理解操作系统之前我们先要理解

什么是“管理”?

我们生活中的所有事情都要经过两步:1.决策 2.执行

那么举个栗子:我们学校的校长要管理这个学校的学生,他要怎么做?

我们是不是到了大学,我们可能就开学,毕业见过两次,但平常是完全没有接触的。

校长要想管理一个学校这么多人,不可能一个一个去接触吧,人这么多,怎么管理的过来呢?

假如校长是个程序员!!!

可以写个结构体将我们的各项属性写入结构体中去。

但校长是如何进行管理,然后进行资源分配呢?

所以说,校长管理我们不需要与我们直接接触!!!

即管理者与被管理者无需直接接触!!!

校长管理我们实际上是拿取我们的各项数据进行管理的。

而我们的数据哪里来的呢?

这些数据是由辅导员来与我们进行统计打包发给校长,校长再进行数据的管理。

这样校长对于学生的管理就变为对链表的增删查改!!!

这里我们就可以认为校长是操作系统, 辅导员即是驱动程序, 学生与学校的各种设施就是各种软硬件资源。

这样就进行了我们的一个完整的管理流程。

结论就是  管理:先描述,在组织

描述就是封装为一个一个对象,即用一个类或者对象进行封装,而组织就是在操作系统中用我们的各种数据结构进行组织。

完整结构示意图

 如上图为一个完整的结构示意图

我们知道操作系统是一个对下进行软硬件资源管理(手段),对上提供一个良好(稳定的,高效的,安全的)的运行环境(目的)。

但我们用户需要使用操作系统来管理软硬件,我们能直接接触操作系统吗?

答案是,不能,操作系统不允许你这样做,我们应该都去过银行取钱吧,我们去银行取钱,我们能自行到仓库去取钱吗?不能吧,那不是全乱套了,想取多少就取多少!!!

所以就有前台服务,只开一个小窗口与内部交互。

这在操作系统就叫做系统调用接口,操作系统为我们提供了一系列系统调用接口,

我们可以拿来用,但又有个问题发生了!!!

操作系统是由不同厂商进行生产的,系统调用接口就会有一些不同,那怎么办,这样就出现了跨平台问题,这就为上层又出现了一个外壳,各种库,即一些c/c++标准库的内容,这些库能够很好的解决跨平台问题!!!

所以我们在下载编译器实际是下载的什么? 对应的标准库和编译器

如我们之前学习的c语言就有printf/scanf都与硬件进行了交互,这些都是标准库提供的函数接口用到调用系统调用接口,因为不同厂商他们提供的操作系统的接口不同!!!

所以总的来说:还是下面两句话!!!

对软硬件资源进行管理(手段)。

为用户提供一个良好(稳定的,高效的,安全的)的运行环境(目的)。

这篇关于【Linux系统】冯诺依曼与操作系统的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/848015

相关文章

VScode连接远程Linux服务器环境配置图文教程

《VScode连接远程Linux服务器环境配置图文教程》:本文主要介绍如何安装和配置VSCode,包括安装步骤、环境配置(如汉化包、远程SSH连接)、语言包安装(如C/C++插件)等,文中给出了详... 目录一、安装vscode二、环境配置1.中文汉化包2.安装remote-ssh,用于远程连接2.1安装2

C#实现系统信息监控与获取功能

《C#实现系统信息监控与获取功能》在C#开发的众多应用场景中,获取系统信息以及监控用户操作有着广泛的用途,比如在系统性能优化工具中,需要实时读取CPU、GPU资源信息,本文将详细介绍如何使用C#来实现... 目录前言一、C# 监控键盘1. 原理与实现思路2. 代码实现二、读取 CPU、GPU 资源信息1.

Linux中shell解析脚本的通配符、元字符、转义符说明

《Linux中shell解析脚本的通配符、元字符、转义符说明》:本文主要介绍shell通配符、元字符、转义符以及shell解析脚本的过程,通配符用于路径扩展,元字符用于多命令分割,转义符用于将特殊... 目录一、linux shell通配符(wildcard)二、shell元字符(特殊字符 Meta)三、s

Linux之软件包管理器yum详解

《Linux之软件包管理器yum详解》文章介绍了现代类Unix操作系统中软件包管理和包存储库的工作原理,以及如何使用包管理器如yum来安装、更新和卸载软件,文章还介绍了如何配置yum源,更新系统软件包... 目录软件包yumyum语法yum常用命令yum源配置文件介绍更新yum源查看已经安装软件的方法总结软

linux报错INFO:task xxxxxx:634 blocked for more than 120 seconds.三种解决方式

《linux报错INFO:taskxxxxxx:634blockedformorethan120seconds.三种解决方式》文章描述了一个Linux最小系统运行时出现的“hung_ta... 目录1.问题描述2.解决办法2.1 缩小文件系统缓存大小2.2 修改系统IO调度策略2.3 取消120秒时间限制3

Linux alias的三种使用场景方式

《Linuxalias的三种使用场景方式》文章介绍了Linux中`alias`命令的三种使用场景:临时别名、用户级别别名和系统级别别名,临时别名仅在当前终端有效,用户级别别名在当前用户下所有终端有效... 目录linux alias三种使用场景一次性适用于当前用户全局生效,所有用户都可调用删除总结Linux

Linux:alias如何设置永久生效

《Linux:alias如何设置永久生效》在Linux中设置别名永久生效的步骤包括:在/root/.bashrc文件中配置别名,保存并退出,然后使用source命令(或点命令)使配置立即生效,这样,别... 目录linux:alias设置永久生效步骤保存退出后功能总结Linux:alias设置永久生效步骤

在C#中获取端口号与系统信息的高效实践

《在C#中获取端口号与系统信息的高效实践》在现代软件开发中,尤其是系统管理、运维、监控和性能优化等场景中,了解计算机硬件和网络的状态至关重要,C#作为一种广泛应用的编程语言,提供了丰富的API来帮助开... 目录引言1. 获取端口号信息1.1 获取活动的 TCP 和 UDP 连接说明:应用场景:2. 获取硬

Linux使用fdisk进行磁盘的相关操作

《Linux使用fdisk进行磁盘的相关操作》fdisk命令是Linux中用于管理磁盘分区的强大文本实用程序,这篇文章主要为大家详细介绍了如何使用fdisk进行磁盘的相关操作,需要的可以了解下... 目录简介基本语法示例用法列出所有分区查看指定磁盘的区分管理指定的磁盘进入交互式模式创建一个新的分区删除一个存

JAVA系统中Spring Boot应用程序的配置文件application.yml使用详解

《JAVA系统中SpringBoot应用程序的配置文件application.yml使用详解》:本文主要介绍JAVA系统中SpringBoot应用程序的配置文件application.yml的... 目录文件路径文件内容解释1. Server 配置2. Spring 配置3. Logging 配置4. Ma