【Linux】了解冯诺伊曼体系结构和操作系统

冯诺依曼体系结构概念

冯·诺依曼结构是现代计算机发展所遵循的基本结构形式之一,其特点是“程序存储,共享数据,顺序执行”。冯·诺依曼结构的处理器使用同一个存储器,经由同一个总线传输,具有必须有一个存储器、必须有一个控制器、必须有一个运算器、必须有输入和输出设备的特点。
在这里插入图片描述
常见的输入设备和输出设备:
 输入设备:键盘、鼠标、网卡、硬盘、话筒、摄像头、扫描仪等。
 输出设备:显示器、音响、网卡、硬盘、打印机等。
同种设备在不同场景下可能属于输入设备,也可能属于输出设备
强调一下:
(1)这里的存储器指的是内存。
(2)不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设(输入或输出设备)。
(3)外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取。

冯诺依曼体系结构为什么要这样设计

因为这个结构消除了原始计算机体系中只能依靠硬件控制程序的状况,将程序编码存储在存储器中,实现了可编程的计算机功能,实现了硬件设计和程序设计的分离,大大促进了计算机的发展。
之前的计算机内部都是cpu都是直接去和硬件打交道,所造成的问题就是读写速度太慢了,因为根据木桶原理,只能由硬件的读写速度取决于整机的效率,所以有了存储器(内存)提高效率。

那怎么提高的效率呢
在存储器的层次结构 中,越往上速度越快,外设 < 主存(内存)< 高速缓存 < CPU寄存器,我们可看到,CPU离寄存器最近,离高速缓存也很近,主存(存储器)次之,外设(输入输出设备)。所以 CPU 间接从主存中访问数据,效率更高。我们要知道的是内存和cpu都可以存储数据哦,所以输入数据时内存加载数据和CPU处理数据是可以同时进行的,这样下次CPU就可以直接从内存当中获取数据。输出数据的时候也一样,CPU处理完数据后直接将数据放到内存当中,当输出设备需要时再在内存当中获取即可。所以速度肯定是比cpu直接读取更快哦。

在这里插入图片描述
例如:我们访问当磁盘时,先把数据写入存储器(内存)当中,再让 CPU 一级一级的去访问,而且 CPU 运算的同时,输入 / 输出设备还可以继续将数据写入内存或从内存中读出,从而提升效率

在这里插入图片描述

理解冯诺依曼体系

对冯诺依曼的理解,不能停留在概念上,要深入到对软件数据流理解上,我们来试着解释一下从你登录上qq开始和某位朋友聊天开始,数据的流动过程。从你打开窗口,开始给他发消息,到他的到消息之后的数据流动过程。
要使用QQ,首先需要联网,而你和你的朋友的电脑都是冯诺依曼体系结构,在你向朋友发送消息这个过程中,你的电脑当中的键盘充当输入设备、显示器和网卡充当输出设备,你朋友的电脑当中的网卡充当输入设备、显示器充当输出设备。刚开始你在键盘当中输入消息,键盘将消息加载到内存,此时你的显示器就可以从内存获取消息进而显示在你自己的显示器上,此时你就能在你自己的电脑上看到你所发的消息了。在键盘将消息加载到内存后,CPU从内存获取到消息后对消息进行各种封装,然后再将其写回内存,此时你的网卡就可以从内存获取已经封装好的消息,然后在网络当中经过一系列处理(这里忽略网络处理细节),之后你朋友的网卡从网络当中获取到你所发的消息后,将该消息加载到内存当中,你朋友的CPU再从内存当中获取消息并对消息进行解包操作,然后将解包好的消息写回内存,最后你朋友的显示器从内存当中获取消息并显示在他的电脑上。

在这里插入图片描述

站在硬件角度或是数据层面上,CPU只和内存打交道,外设也只和内存打交道。到这里我们也可以说明一个问题:为什么程序运行之前必须先加载到内存?
因为可执行程序(文件)是在硬盘(外设)上的,而CPU只能从内存当中获取代码和数据,所以必须先将硬盘上的代码和数据加载到内存,也就是必须先将程序加载到内存。
还有一个要理解的是数据在计算机的体系结构中进行流动,流动过程中,进行数据的加工处理
从一个设备到另一个设备本质上是拷贝。数据设备之间的效率,决定了计算机整机的运行效率。
总之讲了这么多就一句话,所有设备都只能直接和内存打交道。

操作系统(Operator System)

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

狭义的操作系统指的是:操作系统内核 和一个 Shell(即命令行界面)。
广义的操作系统指的是 :操作系统内核 和 操作系统的外壳周边程序(给用户提供操作系统的方式)或者是操作系统框架。

总体来说,狭义操作系统指的是传统计算机系统中的系统软件,负责管理计算机资源和提供环境给应用程序运行;而广义操作系统则扩展到各种嵌入式系统和特定设备中的资源管理和控制系统。

为什么要有操作系统?
对软硬件资源进行管理(手段)
为用户提供一个良好(稳定的、安全的、高效的)的运行环境(目的)

计算机体系的层状划分结构

在这里插入图片描述
为什么要这么划分呢?

首先,我们肉眼可见的就是计算机实物,也就是计算机底层的硬件。这些硬件看似是一个个罗列出来的,但实际在底层都遵守冯诺依曼的组织形式。
而单单只有这些硬件是不够的,还需要有一个软件来对这些硬件进行管理。1. 描述起来,用struct结构体 2. 组织起来,用链表或其他高效的数据结构这些都是由软件进行管理的,而这个软件就是操作系统(Operator System)。此时这里有一个问题:难道操作系统直接和底层硬件打交道吗?
举个例子,如果操作系统自己来完成键盘的读取操作,那么只要你的键盘读取方式进行了改变,那么操作系统的内核源代码就需要进行重新编译,这对操作系统来说维护成本太高了。
于是我们又在操作系统与底层硬件之间增加了一层驱动层,驱动层的主要工作就是单独去控制底层硬件的。例如,键盘有键盘驱动,网卡有网卡驱动,硬盘有硬盘驱动,磁盘有磁盘驱动。驱动简单来说就是去访问某个硬件,访问这个硬件的读、写以及硬件当前的状态等等,驱动层就是直接和硬件打交道的。而驱动一般是由硬件制造厂商提供的,或是由操作系统相关的模块进行开发的(例如网卡)。
此时操作系统就只需关心何时读取数据,而不用关心数据是如何读取的了,也就是完成了操作系统那操作系统究竟管理些什么呢?操作系统主要进行以下四项管理:
内存管理:内存分配、内存共享、内存保护以及内存扩张等等。
驱动管理:对计算机设备驱动驱动程序的分类、更新、删除等操作。
文件管理:文件存储空间的管理、目录管理、文件操作管理以及文件保护等等。
进程管理:其工作主要是进程的调度。
而操作系统再往上就是我们所处的位置,在这里我们就可以用命令行或是图形化界面进行各种操作,这一层被称为用户层。但操作系统为了保护自己,对上只暴露了一些接口,而不会让用户直接访问操作系统,这一系列接口被称为系统调用接口。但这些系统调用接口对我们普通用户来说使用成本又太高了,因为要使用系统调用前提条件是你得对系统有一定了解。所以在系统调用接口之上又构建出了一批库,例如libc和libc++。实际上在语言级别上使用的各种库,就是封装了系统调用接口的,我们就是通过调用这些库当中的各种函数(例如printf和scanf)进行各种程序的编写。(在开发角度,操作系统对外会表现为一个整体,但是会暴露自己的部分接口,供上层开发使用,这部分由操作系统提供的接口,叫做系统调用。系统调用在使用上,功能比较基础,对用户的要求相对也比较高,所以,有心的开发者可以对部分系统调用进行适度封装,从而形成库,有了库,就很有利于更上层用户或者开发者进行二次开发)

理解操作系统

要理解好操作系统,那么就必须正确理解到底什么是管理?
管理的核心理念:先描述,再组织(先定义结构,再用数据结构进行管理)

这里我们举一个实际的例子来谈谈管理,现在给出三个角色:学生、辅导员和校长。很明显,校长在这三个人当中是管理者,学生是被管理者,那么辅导员充当什么角色呢?
仔细想想,实际上完成任何一件事都要经过两个过程,首先是决定要不要做这件事或是如何做这件事(决策),然后就是去做这件事情(执行)。校长作为管理者来管理学生,校长实际上就是那个做决策的人,但是校长作出决策后并不需要自己来执行,而是让辅导员去执行,所以辅导员的主要任务就是执行管理者的决策,我们通常将其称为执行者。

虽然说校长是管理学生的,但是我们在学校一般情况下是看不到校长本人的,那么校长是如何做到在不看到我们的情况下对我们进行管理的呢?
举个例子,现在校长要求辅导员将计算机成绩排名前十的学生的各科资料以及平时表现记录拿过来,他将从这十名同学之中选出三名学生参加本次的编程大赛,当辅导员将资料拿来后校长选出三名学生说:“就这三个了,你找个老师对这三名学生进行一下强化训练,然后参加本次的编程大赛。”然后校长就什么也不管了。

在这个过程中,校长根本没有见过这三名同学,就对其进行了管理,他根据的是什么?
没错,他根据的是数据。实际上,学校将我们每个学生的各种信息都进行了管理,基本信息、成绩信息以及健康信息等等。
每这么一套信息就描述了一名学生,校长通过对这些信息的管理就能做到对学生的管理。这么一套信息在C语言当中我们称之为抽象结构体,而在C++当中又叫做面向对象。
当学生的数量多起来了,校长就可以将全部学生的信息组织起来,当然组织的方式有很多种(链表、顺序表、树),而每种组织方式都有其自己的优势,于是就有了一门课程专门教我们管理数据的方式,那就是数据结构。这里我们假设校长以双链表的形式将学生的信息组织起来。
此时校长对各个学生的管理,实际上就变成了对这个双链表的增删查改。当有新生时直接向该双链表加入一个结点,当学生毕业后直接将学生信息从该双链表当中移除即可。
管理者管理被管理者,实际上是先将被管理者的各种信息进行描述,然后再将多个被管理者的描述信息根据某种数据结构组织起来,最后管理者管理被管理者实际上就是对数据结构的管理。

最终的结论:操作系统是一款搞管理的系统软件,管理的本质就是对数据进行管理

  • 13
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值