【Linux】冯诺依曼体系结构与操作系统概念理解

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

如果无聊的话就来逛逛 我的博客栈 吧! 🌹

一、前言

小伙伴们新年好距离上次创作已经过去半个月了 a n d u i n anduin anduin 最近也去学习了一些新知识但是目前还在整理笔记所以估计得等到三月份才能逐渐写出博客来。

但是 a n d u i n anduin anduin 也不能闲着于是今天我就为大家带来一篇干货文章。本篇文章对于冯诺依曼体系结构作出了详细讲解特别是对于内存、数据流动另一部分则是 a n d u i n anduin anduin 对于操作系统的一些理解对于其中的管理我也做出了剖析相信看完一定会有所收获。

话不多说让我们赶快开始学习吧

二、冯诺依曼体系结构

1、体系简述

学习过计算机组成原理的小伙伴们应该对冯诺依曼体系结构并不陌生。冯诺依曼体系结构是一种将程序指令存储器和数据存储器合并在一起的存储器结构。

我们常见的计算机如笔记本或是不常见的服务器基本都遵守冯诺依曼体系。

image-20230126134442839

目前的计算机单靠计算机本身是无法完成交互工作的所以需要 人将数据“喂”计算机 说白了就是 输入设备 同样的 计算机也需要把处理数据的结果呈现给用户 说白了就是 输出设备

而这一过程中依赖的两个设备就是体系结构中的输入输出设备两种常见的设备如下

  • 输入设备键盘、话筒、摄像头、网卡、磁盘、鼠标…
  • 输出设备显示器、磁盘、网卡、声卡、音箱…

对于同一个设备而言可以同时充当输入设备和输出设备例如 磁盘

磁盘上的文件就是用户保存的文件。用户保存就说明 采集了用户的数据 再将文件进行运行如计算机计算、加密等… 这一过程就是 输入

同样的用户在磁盘上下载了一个文件例如一部电影那么磁盘上的文件需要被用户观看这就相当于把 结果呈现给用户 这一过程为 输出

而对于结构中的 存储器、运算器、控制器 我们也需要拎一下概念

  • 存储器不是磁盘而是 内存
  • 计算机的本质工作是计算所以一定需要运算器和控制器它们被合称为 cpu

输入、输出设备被称为外围设备即外设

外设包含输入输出所以外设一般都会比较慢比如磁盘。而内存则在磁盘的基准上高了许多量级。

但是外设比较便宜比如买电脑时电脑磁盘动不动 512g, 1t 但是内存只有 8, 16g

对于它们两个都可以存储数据但是对于内存存储数据是有时效性的。内存属于掉电易失介质 若突然关机内存数据就会丢失但是对于磁盘则不会。

但是内存储存数据的时效性短为什么价格还是比外设贵因为一个字

2、内存的重要性

可能大家会有疑惑计算机中内存并不是最快的cpu速度是最快的 那么既然这样为什么要有内存呢直接舍弃内存让输入设备直接连到 cpu 不行吗比如这样

image-20230126150538080

我让输入设备通过 cpu 计算后直接输出这样岂不是更快

方案确实可以但是会有代价。 因为外设是极其慢的而 cpu 太快了。

这就涉及到一个理论 —— 木桶原理

木桶原理一只木桶盛水的多少并不取决于木桶壁上最高的那块木板而是取决于最短的那块。

对于体系结构来说也是这样。如果对应的输入很慢但是 cpu 很快整体表现出来的整体效率就以外设为主。

所以这时冯诺依曼大神就引入了 内存 。内存比外设快的多但是比 cpu 慢。

举个例子外设可以理解为毫秒级内存是微秒级cpu 是纳秒级。这中间的差距都很大但是可以互补。

内存可以临时存储数据并且不慢。而在 cpu 计算数据的同时DMA又可以把外设的数据搬到内存等 cpu 把数据执行完毕后再直接执行刚刚搬进来的数据。

因为内存的存在就可以大大缓解木桶原理带来的效率下降。

所以这里得出一个结论在数据层面一般 cpu 不和外设直接沟通而是直接和内存打交道由此看出内存的重要性。

那么有没有可以代替内存的存储设备

通过上面的了解我们发现内存是没有制造数据的能力的它就像一个驿站用来中转数据。但是既然是一个中转站的功能如果谈到速度和功能cpu 中还有个 寄存器 它的速度是极快的那么 为什么不拿寄存器作为存储单元来缓解木桶效应

一个字 寄存器在 cpu 中只有极小部分。我们当前的计算机实际上是通过技术手段打造的一个性价比产品因为一些存储设备太贵了。所以就用内存来平衡内设和 cpu 之间的速度不均衡。从而达到既能完成工作并且效率均衡且便宜的特点。

3、硬件方案解释软件行为

说到这儿我们其实可以理解之前一些难以解答的问题

为什么一个程序必须要选加载到内存才能执行

我们自己写的 c 代码生成的可执行程序就是一个文件是文件就在磁盘中保存而磁盘属于外设。

而当可执行程序运行时需要 cpu 帮忙执行而现在的计算机符合冯诺依曼体系结构所以 cpu 访问你的代码和数据时就必须问内存要所以数据需要被加载到内存以便让 cpu 读取数据

而程序加载到内存在 windows 上是双击在 linux 上则是 ./ 运行。

而这一切的一切就是因为体系结构这就是用 硬件方案解释软件行为

4、体系结构中的数据流动

学习了冯诺依曼体系结构我们再来谈谈数据之间的流向。

假设你和你的朋友在聊天当你向你朋友发送 “吃了吗” 信息时数据时在体系结构中如何流动的

假设你和你的朋友的点电脑都符合冯诺依曼体系结构且不考虑中间网络层的传输假定发送出去就能被接收

image-20230126173311605

对于 a n d u i n anduin anduin 也就是我我通过输入设备键盘输入“吃了吗”从硬件层面上数据被输入到内存软件层面上数据被输入到 qq 。

这里我们 只考虑硬件层面 当数据输入后数据被加载到内存这时数据就要进行计算(例如加密)这时 cpu 就需要从内存中拿数据再计算完毕之后将数据返回内存数据再被显示到输出设备。

而这里有 两个刷新动作 一个是数据当被发送时显示在自己电脑的显示框这种很简单。

第二个刷新动作就是把数据刷新到 G u l d a n Guldan Guldan 的电脑上 这其中的流动规则如下

a n d u i n anduin anduin 的数据输出后输出到输出设备网卡上网卡再刷新到网络。 G u l d a n Guldan Guldan 通过输入设备网卡将数据加载到内存中cpu计算(解密操作)再写回内存再次刷新数据到输出设备对方显示屏上。

而这过程实际上是符合体系结构的并不是说当信息发送出去后就直接一步到位到 G u l d a n Guldan Guldan 的显示屏。

而对于一些加密解密以及将数据从外设读到内存这些都是软件提供的这些我们暂时不要考虑。

讲到这里再提一嘴其实从外设获取数据我们也天天在用比如 c 语言的 scanf 就是从外设读数据的。所以这里就不难理解为啥软件可以获得外设的输入。

至此我们就得出结论数据在流动的时候必须从外设到达内存并不能直接到达目标地点完全遵守冯诺依曼体系结构。说白了就是 外设只和内存打交道

5、拓展

实际上对于外设只和内存打交道在之前是有歧义的

因为早期芯片集成数据的能力较差。会把输入设备的数据直接打给 cpu 读取的时候再通过 cpu 把数据放到内存里。再把数据缓存起来需要使用的时候再把数据拿出来。

而现在 cpu 里面通常还带了 dma 芯片就是专门把外设数据搬到内存的这样外设和 cpu 和外设之间就无需直接沟通了所以咱们当前认为 cpu 不直接和外设沟通。

还有一点需要补充的是

外设和cpu虽然数据层面不直接交互但是对于一些控制信号它们之间是要交涉的比如外设要给cpu发控制信号需要让cpu帮外设做事情。但是当前我们还不考虑这点还是考虑数据层面上cpu和外设不直接沟通。

而冯诺依曼我们就聊到这儿。

三、操作系统简述

我们知道 Linux 是一个操作系统但是什么是操作系统对于这个概念我们了解起来也许模棱两可所以今天的另一个话题就是谈谈操作系统。

首先看一下计算机体系图接下来的内容会涉及到体系中的内容

image-20230126210433221

1、概念

任何计算机系统都包含一个基本的程序集合称为操作系统也就是 OS 。如果笼统的理解操作系统它就包含两部分

  • 内核进程管理内存管理文件管理驱动管理
  • 其他程序例如函数库shell 程序等

2、重要性

当讲冯诺依曼的时候我们说过数据是被加载到内存中再供 cpu 进行内存读取的。

但是中间涉及了一大堆工作例如预加载的数据是哪一部分数据内存如果不够了这时候怎么办

随便抛出一个数据可能我们都说不出来而这些工作其实都是软件做的这个软件就是操作系统。

打个比方硬件就好比是医院里的检测仪器输出仪器。但是只有机器能看病吗肯定不行还得需要医生而这其中面临很多问题比如症状的分流人员的分配病人找到医生的方式这么些抽象的问题仅仅依靠仪器是不能处理的。

这就说明软件是必须的而这些繁杂的工作都由操作系统来处理。

3、定位

接下来我们看看 OS 的定位。其实 OS 定位很简单它就是一款软件。

所有程序想要运行都必须加载到内存中而在开机加载的时候操作系统就被加载到了内存中这样软件就可以被 cpu 跑了。

操作系统本身是一款对软硬件资源进行管理的软件。

4、如何管理

对于管理一共有 三个结论 我们通过例子中间穿插着概念来感性理解它们

首先明确一下管理者和被管理者

日常生活中我们需要进行各种决策想干什么和执行做什么。

而在一个组织结构中真正的管理者做的就是决策。其实这么说还不够详细应该说管理者不是完全不做执行但是管理者大部分时间都在决策。

若当前背景是一个学校我们就将学校抽象成三部分校长、辅导员、学生如下

image-20230126200615005

而辅导员和校长都可以进行管理但是他们谁是真正的管理者校长 因为校长本身的工作大部分都在决策。

举个例子

比如学校举办一个运动会。对于运动会场地经费都是校长来决策而剩下的就是学生执行。

那么辅导员再干什么辅导员就是把校长的决策落地部分决策让学生去干什么部分执行去执行校长的决策。

也就是校长把决策给辅导员辅导员执行嚣张的决策。相当于辅导员做的就是 伪决策

所以辅导员不是一个真正的管理者辅导员只是对校长的决策做落地的角色而学生就是纯粹的执行者。

所以校长才是真正的执行者

通过这一过程角色就划分成了三块

image-20230126202140991

而这一过程校长管理者和被管理者学生见过面了吗很明显没有。可能在大学中学生见到校长也就是开学典礼的时候只是一面之缘。

到这里我们得出第一个结论管理者和被管理者是不需要直接沟通的。

问题来了既然管理者和被管理者没有直接沟通它是如何管理我的

再来举个例子

比如说你的父母在高中可能可以天天看着你属于直接管理。但是上了大学父母不能进行直接管理但是可以通过别人例如你的室友你的辅导员获得你最近的行动这样也可以进行管理。

而这一行为不就是管理者父母和被管理者我没有直接沟通但是依然管理了。而管理方式就是通过数据。

至此我们得出了第二个结论管理的本质是对被管理对象的数据做管理。

通过这个结论又衍生出了两个问题

1管理者是如何拿到被管理者的数据的

这就好比校长从没见过我但是它是如何管理到我的怎么拿到我的数据

这个过程就需要辅导员来进行辅导员拿到数据然后把数据给校长。

2如果被管理者基数庞大管理者是如何处理海量数据筛选出特定数据

虽然学生的数据不一样但是学生的属性信息类型是一样的比如姓名、年级、电话、成绩、紧急联系人 …

而如果我是说如果校长一看这个就想起了结构体那么完全可以 把信息抽象成一个结构体 s t r u c t   s t u struct\ stu struct stu 。而对于信息管理可以将其抽象成一个链表这时每个学生的信息就是一个节点

image-20230126203722780

这时如果要筛选出数据就只需要根据关键值筛选就可以从而将管理行为转换成对链表的管理。

而如果需要对学生进行信息删除就只需要找到节点然后释放之后这个节点就被移除了这个节点也消失不需要再管理了。

这时决策就转换成对链表的增删查改。

而一个决策被转换为对数据结构的管理这就相当于完成了一个建模的过程把具体场景转换为计算机语言就是建模的过程。

所以这里体现出语法和数据结构的重要性

这里就是先用结构体进行描述再采集信息构建对象再形成某种结构再把节点组织起来并根据某种特性进行特殊化构建。

这其中就涉及到了面向对象和数据结构。

好了现在也就引出了第三个结论管理的方法是先描述再组织。 而这句话也会被贯穿到之后 Linux 的学习中一定要记好了。

管理的方法我们说完了那么校长辅导员和学生都代表着计算机里的什么角色

  • 学生硬件软件这里的软件包括应用层和操作系统内的软件
  • 辅导员硬件驱动
  • 校长操作系统

image-20230126205311543

而硬件驱动实际上就是驱动程序它和硬件交互拿到硬件传输的数据。操作系统发布决策给驱动而操作系统是真正的管理者。

管理到这就讲完了总结一下管理的特性和本质

  • 管理者和被管理者是不需要直接沟通的
  • 管理的本质是对被管理对象的数据做管理
  • 管理的方法是先描述再组织

5、管理目的

上面说了这么多管理的方法但是操作系统为什么要对软硬件资源进行管理呢它图啥呢

为了更好地给用户提供服务不让软件老是出 bug 。

要知道一款操作系统能否生存就是依赖于生态链和用户人数。不妨设想一下如果操作系统动不动就蓝屏打着打着游戏就关机了还有人用吗

肯定没有这样子用户人数急剧减少操作系统的生存问题就会出现了。而人们挑选操作系统的依据就是 是否好用 所以操作系统必须优化体验。

所以操作系统通过对下管理好软硬件资源对上(用户层)给用户提供 安全、稳定、高效、功能丰富 的执行环境让用户有一个最佳体验这就是目的

四、系统调用

刚说完管理目的操作系统也为我们提供者服务但是有一个问题操作系统相信我吗

这个问题可能很无厘头是什么意思提供服务不就完了什么是相信

同样的我们举一个例子

好比现在我们把银行当做一个操作系统当我们去银行存钱的时候。银行人员看到你会说“先生往直走转弯就是金库你把钱放在那边不要拿走里面的钱你就自己去存钱吧”

这显然是不可能的这也就反映了虽然操作系统给我们提供了很好的服务但是OS不相信我们不相信任何人。

相反操作系统会进行一些措施进行自我保护比如银行配备了保安操作系统也有对应的封装。

而生活中银行是通过柜台来通过工作人员的操作帮助我们存钱就比如

img

通过柜台窗口把需求给员工让员工完成操作对于银行为了提供服务和保证自身安全提供的是窗口式服务。

而对于操作系统这个窗口式服务就是系统调用而说到这边我们就可以画出计算机软硬件体系结构图

image-20230126213825889

操作系统选择将对应的功能以接口的形式让别人访问这一批接口就被称为操作系统的系统调用。

而这一操作既帮助我们完成了功能又保护了操作系统本身。

其实我们也都用过系统调用接口但是它是以一种更简单的方式提供给我们使用了。

因为系统调用接口的使用成本很高于是就有相关人员对系统接口进行二次的软件开发例如图形化界面 s h e l l shell shell 和工具集

而通过 shell 工具我们就可以通过操作系统对硬件或软件进行交互例如 touch 这就是通过指令依靠封装后的系统调用从而贯穿体系结构往磁盘硬件写入从而生成文件。

同理对于语言也就是库函数也调用了系统调用

例如 printf 显示的设备是硬件而向硬件写入的就是通过操作系统进行软硬件资源管理。printf 就是 C 语言通过包含头文件而它的底层就调用了系统调用接口。

而我们当前的开发还在系统调用二次开发的上层也就是用户层

五、结语

到这里本篇博客就到此结束了。

相信看完文章大家应该都对冯诺依曼体系结构和操作系统以及系统调用有了一定的了解。尤其是在管理部分一定要记住先描述、再组织 这句话可以说是本篇文章的核心之一。

由于本篇是纯概念所以建议看完可以好好消化一下毕竟没有代码那么好记。

如果觉得 a n d u i n anduin anduin 写的不错的话可以 点赞 + 收藏 + 评论 支持一下哦我们下期见~

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: linux

“【Linux】冯诺依曼体系结构与操作系统概念理解” 的相关文章