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

在这里插入图片描述
在这里插入图片描述

个人主页:🍝在肯德基吃麻辣烫
我的gitee:Linux仓库
个人专栏:Linux专栏
分享一句喜欢的话:热烈的火焰,冰封在最沉默的火山深处

文章目录

  • 前言
  • 一、先谈硬件——冯诺依曼体系结构
    • 1.什么是冯诺依曼体系结构?
    • 2.拆解冯诺依曼体系结构的硬件
    • 3.内存有多重要?
    • 4.数据在体系结构中的流动
  • 二、再谈软件——操作系统
    • 1.操作系统是什么
    • 2. 为什么操作系统要把资源管理好
    • 3.什么是系统调用接口?
  • 三、操作系统如何管理
    • 1. 管理的本质
    • 2.操作系统如何管理?
  • 总结


前言

本文进入Linux较为晦涩的概念——冯诺依曼体系结构和操作系统的理解。


一、先谈硬件——冯诺依曼体系结构

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

冯诺依曼体系结构是我们日常计算机都遵守的一个整体架构,计算机有很多硬件,比如硬盘,内存条,cpu等等。这些硬件通过冯诺依曼体系结构组装起来就是一台计算机。

在这里插入图片描述
这张图体现的就是冯诺依曼体系结构整体概览。

2.拆解冯诺依曼体系结构的硬件

  • (1)存储器指的是内存
  • 外设:
    • (2)输入设备:鼠标,键盘,摄像头,话筒,磁盘,网卡等等
    • (3)输出设备:显示器,播放器硬件,磁盘,网卡等等
  • CPU(中央处理器):
    • (4)运算器:对数据进行运算任务(算数运算,逻辑运算)
    • (5)控制器:对我们的计算硬件流程进行控制。

上面每一个硬件都是独立的个体。拆解任何一个硬件出来并不会影响其他硬件的正常运行。这些硬件具有独立性

但它们每个硬件直接都会用线连接起来。
CPU和内存之间交互的线叫做系统总线,内存和外设之间交互的线叫做IO总线

有些设备同时作为输入设备和输出设备:比如磁盘
假如我今天下载了一个抖音短视频并保存在磁盘上,这个过程相当于磁盘采集我的抖音数据,就是输入行为。
明天那个用户打开磁盘,播放他的抖音短视频,这个过程是磁盘将数据结果呈现给用户,就是输出行为。

像计算机的存储器,也是分有许多等级:
在这里插入图片描述
不同的等级造价不同,越往下造价越低,但是离CPU越来越远。
并且内存具有掉电易失性,也就是断电之后内存中的数据会丢失,反观磁盘则不会。

3.内存有多重要?


问题1:为什么冯诺依曼体系结构要有一个存储器(内存)?为什么不能让CPU和外设直接进行交互呢?

我们知道,CPU的运行速度是非常快的,是一个纳秒级别的硬件。而外设就显得非常慢,外设的运行速度通常只在毫秒级。你要知道,纳秒和毫秒是相差10的6次方,百万倍的差距。

这里有一个木桶原理:
在这里插入图片描述
一个木桶能盛水多少取决于木桶中最短的那块木板。

如果整机只采用CPU和外设进行交互的话,会极大拖慢CPU的运行效率,因为CPU实在
是太快了,只能等着输入设备缓慢地输入,CPU进行运算完成后,把数据交给输出设
备,输出设备又在缓慢地输出,CPU花费大量时间等待

这使得整机运行效率只取决于外设的运行速度。

这样的环境使得冯诺依曼想到了必须用一个内存来作为媒介,将输入的数据交给内存,CPU再从内存中读取数据运算后再交还给内存,内存再将数据输出到输出设备中。

由于内存的运行速度即不算快,也不算慢,在微秒级别。不至于让CPU过长时间等待,使得整机效率提升到以内存为核心的运行速度上


问题2:既然你说内存不算快,那不也得让CPU在干等着吗?

在实际计算机体系中,输入数据会有一个预加载的过程,也就是把输入的数据提前加载到内存,这样CPU从内存中拿数据时,实现了数据一边加载到内存,CPU一边从内存中拿数据的并行实现方式,让整个体系没有正在等待中的硬件,这样能实现高效地输入,存储,计算,输出的过程。

实际上,在冯诺依曼体系结构中,输入设备和输出设备并不会直接与CPU进行交互,而是通过内存来实现几个硬件交互。

既然内存叫做存储器,它本身是没有运算能力而只有存储能力的。既然内存比CPU慢,那为什么不将内存全部用寄存器来做?

很简单,太贵了,寄存器虽然非常快,但同时它的造价非常高。我们现在用的笔记本内存通常是8G16G32G等等。如果一个8G的内存全部用装上寄存器,那它的造价会非常高,甚至几十万,几百万,这样的价格会让我们平民百姓难以用得起。

要知道,计算机能在这几十年飞速发展,一个很重要的原因在于计算机的价格不算特别贵,平民百姓有机会去接触计算机,大量的想象力和创造力才得以体现出来。


问题3:一个程序要运行,必须先加载到内存中运行,为什么?

程序中既有代码也有数据,既然有数据代码,就注定要进行运算,并且CPU和输入设备是不会直接交互的,那就注定代码和数据要加载到内存中,CPU才能从内存中拿数据进行计算,结果返回给内存,再输出到输出设备中。

所以,是冯诺依曼体系结构规定的!

4.数据在体系结构中的流动

假如今天我在qq上跟麻辣哥进行聊天。我通过qq对话框向麻辣哥发了一句在吗? 在这个过程数据是如何流动呢?

在这里插入图片描述

首先我会在键盘中输入在吗?,即我的输入设备是键盘,输入完成后,这个数据会被内存进行读取存储,由于计算机只认识二进制,不认识我们中华汉字,所以这个数据一定会被CPU读取进行计算转化等等操作,再将数据返回到内存中存储。这是一个对话框,当我点击发送后,信息会输出到网卡中。
在麻辣哥的冯诺依曼计算机里,我的那一句在吗? 会被麻辣哥的网卡进行读取,即麻辣哥的计算机的输入设备应该是网卡,然后这句话同样会被采集加载到内存中,CPU再拿走这句话进行解码读取等行为,再将数据返回到内存中,最后将在吗? 输出到显示器上。

所以这整个过程就是两台冯诺依曼计算机在进行交互!

关于冯诺依曼,总结几点:

  • 1.这里的存储器指的是内存
  • 2.不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设(输入或输出设备)
  • 3.外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取。

一句话,所有设备都只能直接和内存打交道

二、再谈软件——操作系统

1.操作系统是什么

我们知道,前面讲的冯诺依曼体系结构都是一大堆硬件,它们虽然提供许多功能,但是它们本身并不聪明,需要有人对它们进行工作分配和资源管理。

简单来说,就是要有人管理好一大批硬件和软件,而这个人就是操作系统

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

其中操作系统会对硬件和软件都进行管理。

操作系统由几大块组成:内存管理,进程管理,文件管理,驱动管理。

在操作系统之下,有一些驱动程序和底层的硬件。

在这里插入图片描述

其中底层硬件就是我们上面所讲的冯诺依曼体系结构。
驱动程序就是让硬件动起来的程序,每个硬件都必须有自己对应的驱动程序,我们新买的电脑,大部分都是厂商帮我们安装好了各种驱动程序,有些则是让我们自己去安装的。

2. 为什么操作系统要把资源管理好

我们知道,银行有各种工作人员,有大堂经理,有前台服务人员,有安保等等。
还有各种业务,借贷系统,预约系统等等。

操作系统就像是银行一样,可以帮助来银行办理业务的管理好各种工作。

  • 也就是操作系统可以帮助用户管理好下面的软硬件资源

假如一个银行的安保系统不行,或者我的卡里时不时就不见了几万块钱,或者我的银行每天又扣了点钱,这就是银行的管理没做好。

就相当于操作系统没有管理好它下面的软硬件资源。
所以我们在选择操作系统时,注重的是:

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

所以,操作系统通过管理好它底层的软硬件资源(手段),为用户提供一个良好的运行环境。(目的)

3.什么是系统调用接口?

我们知道,银行里面有大量资金,如果银行不将这些资金储存并封闭起来,这些资金对任何一个普通人来说无疑是巨大的诱惑。

此时这个银行就像是操作系统,里面有各种数据,可是操作系统,不相信任何用户!

操作系统为了保证数据安全,会把自己封闭起来。

那么,如果操作系统把数据封闭起来了,我又想访问这些数据,怎么办?
正如同银行把自己封闭起来,我又要去取钱,该怎么办?

我们只能通过银行开放的那几个小窗口来进行取存钱业务!
对操作系统也是这样,我们只能通过操作系统开放的接口,来获取内部的数据!

那么,什么是接口?

操作系统是c语言实现的,这个接口只能由操作系统提供,一般来讲,这些接口不难猜到,就是普通的函数。然而,函数需要传递参数,有返回值,就像我们去银行取钱,需要提供身份证等个人信息一样,待银行工作人员验证后,才把我需要的钱给我。
操作系统对我传递的函数参数等验证后,会把我需要的数据返回给我。
这个就是接口

所以接口是操作系统提供的c函数实现的,这个通过调用接口的过程,叫做系统调用!

所有访问操作系统的行为,都只能通过系统调用来实现。

在这里插入图片描述
所以,传说中的shell外壳程序,就是因为系统开放了调用接口,程序员通过系统调用接口访问数据的同时进一步对这些数据进行封装,从而实现了给用户小白提供的用户操作接口,比如xshell

而对系统调用接口函数进行进一步的封装 ,就成了我们日常中所见到的库函数也是这样来的。这些也叫做用户调用接口,对这些shell外壳,库进行再封装,就可以实现门槛极低,小白都能使用的各种软件了。

所以,我们所有对底层硬件的各种操作,都必须经过操作系统,而访问操作系统的数据,则必须通过操作系统开放的系统调用来进行访问。

在这个计算机世界,操作系统是少有的不变的东西,尽管其他东西一直在变,但是操作系统是不变的。

三、操作系统如何管理

1. 管理的本质

在大学生活中,可能管理者不是人人都参与过,但是被管理,我们全都知道。

因为我们每个人都是被管理者。

校长是最典型的管理者。

一个学期过去了,有些同学成绩优异,学分绩点高,有些同学挂科无数,差的不行。而这些数据,都是我们的辅导员获取的,辅导员可以知道我们什么时候上下课,我们每个人的成绩如何。

所以,校长可以通过拿到辅导员手上的数据,也就是我们每个同学的数据,就可以知道我们哪个同学成绩好,发奖学金的时候,直接发给那些成绩好的同学就行,这个过程,并不需要管理者和被管理者见面!

你没有听错,管理者和被管理者不需要见面!
在这里插入图片描述
可是,管理者和被管理者不见面,如何管好?

再细想一下,管理者和被管理者需要见面吗?校长如果知道我的姓名,学号,身份证,籍贯,照片,家庭电话,成绩,课堂表现等各种他想要的数据,就可以通过这些数据,在未来进行管理决策

那么,辅导员是管理者吗?

实际上,事情就分为两种:

  • 1.决策
  • 2.执行

我们生活中的所有事情,就只有这两种,比如我和同学聊天:“你中午想吃点啥?” “中午吃个塔斯汀!” ——这个过程就是事情的决策过程
“好!现在就去!” ——这个过程就是执行过程

可以回答上面的问题了:辅导员也是被管理者,充当执行者

在这里插入图片描述
上面整个过程,就相当于校长是操作系统,辅导员是驱动程序,学生就是软硬件资源一样。

所以,这整个管理的过程,就体现出了管理的本质:

通过对数据的管理,达到对人的管理。

2.操作系统如何管理?

在学校虽然学生有很多,但是他们都有相同的属性:
姓名,年龄,性别,身份,籍贯,电话等等。假如我们的校长是一名程序员,这些各种信息不就可以被放在struct student结构体当中了吗?

上面说到,校长可以拿到辅导员手上我们这堆学生的数据,从而给成绩好的学生发奖学金,那校长怎么知道哪些学生成绩好呢?

很简单,我们需要通过排序,对每个学生的成绩都进行排序。而每个学生的信息那么多,校长又是一个程序员,此时校长有一个想法:把学生的各种数据看作是一个结构体。——这个过程就是描述的过程!

然后我们对这些结构体一一串联起来,就形成了我们熟悉的数据结构——链表

在这里插入图片描述

校长通过对链表按学分绩进行排序,就很容易知道哪些学生成绩最高,奖学金应该发给谁,哪些学生挂科,作弊等等,一目了然。

甚至新的学期来了,有同学从其他学校转学过来,校长从辅导员手里拿到学生信息后,就将该学生的信息定义成一个结构体,再将该结构体插入到链表即可!

如果哪个学生作弊,严重程度达到了勒令退学的程度,校长就将该学生的信息结构体从链表中删除,此后在学校的管理系统就不会再出现该同学了!

所以校长对学生数据的管理,转换成了对链表的增删查改

校长将每个学生的结构体串成一个链表,这个过程就是组织的过程!

从此以后,校长手里就拎着一个链表走天下!

至此我们知道,这整个管理的过程,总结起来就是:
先描述,再组织
同时,这句话将来会贯穿整个Linux,所以这里再提一遍。
如何进行管理?
先描述,再组织

总结管理的以下几点:

1.管理的本质是:先描述,再组织
2.事情分为两种:1)决策 2)组织
3.如何进行管理:先描述,再组织

总结

本篇文章讲述了两大概念:冯诺依曼体系结构和操作系统。

  • 冯诺依曼体系结构是每一台计算机都必须遵守的体系结构,再冯诺依曼体系结构中尤为重要的是存储器(内存),有了内存的存在,整机效率得到大幅度提升,核心效率转变成内存的运行效率。
  • 操作系统是少有的不变的东西,操作系统存在的意义是通过对软硬件资源进行管理,从而给用户提供一个良好的运行环境。操作系统之下管理者各种驱动程序和软硬件资源,对上来说,只开放一个系统调用接口来供外部访问数据,因为操作系统要保证安全性,必须要把自己封闭起来。程序员通过系统的接口进一步封装,实现了我们程序员常用的shell外壳程序,对函数进一步封装,实现了我们常见的库和库函数,而对这些shell外壳和库进一步封装,就可以给普通的小白用户使用了。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Spring AOP】什么是AOP

文章目录 1、AOP思想2、AOP入门案例3、AOP工作流程4、AOP切入点表达式5、AOP的五种通知类型6、AOP通知获取数据7、案例:百度网盘密码数据兼容处理8、AOP总结 1、AOP思想 AOP,即Aspect Oriented Programming,面向切面编程。是一种编程范式&am…

Spring中的事务

一、为什么需要事务? 事务定义 将一组操作封装成一个执行单元(封装到一起),要么全部成功,要么全部失败。 为什么要用事务? 比如转账分为两个操作: 第一步操作: A 账户 -100 元…

int[]数组转Integer[]、List、Map「结合leetcode:第414题 第三大的数、第169题 多数元素 介绍」

文章目录 1、int[ ] 转 Integer[ ]:2、两道leetcode题遇到的场景:2.1、int[ ] 转 List<Integer> :2.2、int[ ] 转 Map: 1、int[ ] 转 Integer[ ]: public static void main(String[] args) {int[] nums {1, 2, 3}; Integer[] array Arrays.stream(nums).boxed().to…

Qt 6. 其他类调用Ui中的控件

1. 把主类指针this传给其他类&#xff0c;tcpClientSocket new TcpClient(this); //ex2.cpp #include "ex2.h" #include "ui_ex2.h"Ex2::Ex2(QWidget *parent): QDialog(parent), ui(new Ui::Ex2) {ui->setupUi(this);tcpClientSocket new TcpClient…

51单片机(普中HC6800-EM3 V3.0)实验例程软件分析 实验二 LED闪烁

目录 前言 一、原理图及知识点介绍 二、代码分析 知识点四&#xff1a;delay(u16 i)这个函数为什么i1时&#xff0c;大约延时10us&#xff1f; 前言 已经是第二个实验了&#xff0c;上一个实验是点亮第一个LED灯&#xff0c;这个实验是LED的闪烁。 一、原理图及知识点介绍…

嵌入式开发学习(STC51-11-中断系统)

内容 外部中断-使用独立按键K3控制LED亮灭&#xff1b; 定时器中断-通过定时器0中断控制D1指示灯间隔1秒闪烁&#xff1b; 串口通信&#xff08;中断&#xff09;-通过串口&#xff08;UART&#xff09;实现与PC机对话&#xff0c;51单片机的串口收到PC机发来的数据后原封不动…

Cat.1如何成为物联网业务加速器?

随着Cat.1芯片及模组在功耗和成本上的不断优化&#xff0c;在窄带物联网领域&#xff0c;越来越多的终端客户把Cat.1当做与NB-IoT相比较的第二选择。越来越多的表计、烟感、市政等行业终端将Cat.1模组应用于非集中化部署的上报类终端业务中&#xff0c;Cat.1这只“网红猫”仍保…

动手学深度学习—深度学习计算(层和块、参数管理、自定义层和读写文件)

目录 1. 层和块1.1 自定义块1.2 顺序块1.3 在前向传播函数中执行代码 2. 参数管理2.1 参数访问2.1.1 目标参数2.1.2 一次性访问所有参数2.1.3 从嵌套块收集参数 2.2 参数初始化2.2.1 内置初始化2.2.2 自定义初始化 2.3 参数绑定 3. 自定义层3.1 不带参数的层3.2 带参数的层 4. …

数据安全治理实施办法

随着《数据安全法》和《个人信息保护法》陆续出台&#xff0c;各行业数据安全监管力度持续增强&#xff0c;数据安全合规成为企业数据安全治理体系建设的第一推动力。同时&#xff0c;企业普遍面临数据安全治理成本过高&#xff0c;对业务影响过大&#xff0c;实施路径不清晰等…

【雕爷学编程】Arduino动手做(186)---WeMos ESP32开发板14

37款传感器与模块的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&#x…

SQL从三个表中根据时间分别查询并汇总数量一行展示

需求&#xff1a;如果您要从三个表中根据时间分别查询并汇总数量&#xff0c;然后将结果以时间和数量一行展示&#xff0c;可以使用子查询和条件聚合。 入库主表 入库明细表 出库主表 出库明细表 退货主表 退货明细表 SQL代码 SELECT time,sum(a.inQty) as inQty,sum(a.outQty…

FFmpeg中硬解码后深度学习模型的图像处理dnn_processing(一)

ffmpeg 硬件解码 ffmpeg硬件解码可以使用最新的vulkan来做&#xff0c;基本上来说&#xff0c;不挑操作系统是比较重要的&#xff0c;如果直接使用cuda也是非常好的选择。 AVPixelFormat sourcepf AV_PIX_FMT_NV12;// AV_PIX_FMT_NV12;// AV_PIX_FMT_YUV420P;AVPixelFormat d…

O3DE的Pass

Pass介绍 Pass是具有输入和输出的渲染过程。 在最终渲染帧中看到的每个细节都是通过一系列Pass&#xff08;前一个Pass的输出是下一个Pass的输入&#xff09;计算出来的。Pass可以生成图像&#xff08;作为纹理、缓冲区或渲染目标&#xff09;。每个图像都包含关于场景的特定…

云曦暑期学习第四周——流量、日志分析

1 日志分析 1.1 What is 日志 日志&#xff0c;是作为记录系统与服务最直接有效的方法。在日志中&#xff0c;可以发现访问记录以及发现攻击线索。日志分析也是最常用的分析安全 事件所采用的途径。系统日志和 web 日志分别记录了不同内容&#xff0c;为分析攻击提供了有效证…

【敏捷开发】测试驱动开发(TDD)

测试驱动开发&#xff08;Test-Driven Development&#xff0c;简称TDD&#xff09;是敏捷开发模式中的一项核心实践和技术&#xff0c;也是一种设计方法论。TDD有别于以往的“先编码&#xff0c;后测试”的开发模式&#xff0c;要求在设计与编码之前&#xff0c;先编写测试脚本…

java+python企业会议在线办公微信小程序 ia505

一、小程序端功能 该部分内容提供员工注册、员工资料修改、通知公告、部门信息、会议记录等等功能。 二、管理员管理功能 该部分内容包含了首页、个人中心、通知公告管理、员工管理、部门信息管理、职位信息管理、会议记录管理、待办事项管理、工资信息管理、留言板管理、系统管…

Spring Boot 单元测试

目录 1.什么是单元测试&#xff1f; 2.单元测试的优点 3.Spring Boot 单元测试使用 3.1 生成单元测试的类 3.2 添加 Spring Boot 框架测试注解&#xff1a;SpringBootTest 3.3 添加单元测试业务逻辑 3.4 注解 Transactional 4. 断言 1.什么是单元测试&#xff1f; 单元…

Flink开发环境准备: centos-jdk8

linux-jdk8 - Flink开发环境准备 一、基本介绍二、环境准备1.1 JDK环境1.2 开发工具1.3 Maven环境 三、flink下载安装配置3.1 Flink下载3.2 flink本地模式安装 - linux3.3 常用配置3.4 日志的查看和配置 四、单机 Standalone 的方式运行 Flink 一、基本介绍 Flink底层源码是基于…

Open3D (C++) 计算矩阵的广义逆

目录 一、算法原理1、广义逆2、计算过程二、代码实现三、结果展示四、参考链接本文由CSDN点云侠原创,原文链接。爬虫网站自重,把自己当个人,爬些不完整的误导别人有意思吗???? 一、算法原理 1、广义逆 非方阵不存在逆,但是存在广义逆(伪逆)。对于一个矩阵

【大数据】-- docker 启动 mysql 5.7,开启 binlog

1.说明 mysql binlog&#xff1a;二进制日志文件。它有两个作用&#xff0c;一是增量备份&#xff0c;即只备份新增的内容&#xff0c;可以用于恢复数据&#xff1b;二是用于主从复制等&#xff0c;即主节点维护了一个binlog日志文件&#xff0c;从节点从binlog中同步数据。 …