【Linux基础】冯诺依曼体系结构操作系统的理解

目录

  • 前言
  • 一,冯诺依曼体系
    • 1. 为什么有内存结构?
    • 2. 对硬件中数据流动的再理解
  • 二,操作系统(Operator System)
    • 1. 概念
    • 2. 操作系统结构的层状划分
    • 3. 操作系统对硬件管理的理解
    • 4. 用户与操作系统的关系的理解
    • 5. 系统调用和库函数的关系
    • 6. 为什么要有操作系统?

前言

本篇文章主要介绍计算机体系结构–冯诺依曼系统和操作系统是如何对数据/资源进行管理的,这也是我们后面学linux进程的重要基础铺垫。

一,冯诺依曼体系

我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系。

在这里插入图片描述

截至目前,我们所认识的计算机,都是有一个个的硬件组件组成,其中:
输入设备:键盘,鼠标,摄像头,话筒,磁盘,网卡…
输出设备:显示器,声卡,磁盘,网卡…
中央处理器(CPU):运算器,控制器,寄存器,各级别缓存…
存储器:就是内存!

对于没有了解过这一部分知识的同学,很难分清楚内存和磁盘的关系与区别:

内存和磁盘是计算机中主要的存储部件内存是利用了电效应实现了存储,一旦电脑断电它存储的数据就会丢失!
然而磁盘是外设,是永久存储介质!

数据是要在计算机的体系结构中进行流动的,流动过程中,进行数据的加工处理。
数据从一个设备到另一个设备,本质:是一种拷贝!

而计算机对数据进行处理无非就是两种操作:一是在整个体结构的设备之间进行数据的拷贝,二是CPU对数据进行运算。
而CPU是非常快的,所以数据在设备间的拷贝的效率,决定了计算机整机的基本效率!

1. 为什么有内存结构?

首先我们先来铺垫一个概念:
存储器金字塔结构
在这里插入图片描述

结论: 离CPU越近的设备,运行速度越快,造价也越贵!

那有同学就会觉得,既然离CPU越近的设备,运行速度越快,那为什么又要加一个存储器(内存)呢,直接从输入设备–>CPU–>输出设备,那计算机不是非常快吗?

解答:
在这里插入图片描述

所以冯诺依曼的这种体系很巧妙,将中央处理器进行复杂的数据处理,运算,而离CPU远一点的设备用于存储数据,或者接受数据后传给内存做分析。

这就得出了这样的结论:

冯诺依曼系统既有高价格的设备,用于处理复杂的数据,又有低价格的设备用于存储数据或进行数据交互,这使得冯诺依曼体系的计算机可以在价格不高的前提下,做到效率比较高!

正是这种能让老百姓买得起的价格,并且使用起来比较高效的模式,才让电脑等计算机设备变成一种高性价比的东西,才让冯诺依曼系统到现在也如此流行!

2. 对硬件中数据流动的再理解

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

1.中央处理器不和外设直接打交道、中央处理器只和内存打交道;
2.外设(输入和输出)的数据,不是直接给中央处理器的,而是先要放入内存中。

经常听见老师说,程序在运行之前,必须先加载到内存中,这是为什么?

解答:
首先,程序=代码+数据,然而只要是数据,最终都要CPU来处理,CPU只能从内存中读取数据,所以这些代码和数据要经过和内存的交互,处理完程序后会形成可执行程序.exe文件,此文件会被存储在外设磁盘中!
所以说,程序在运行之前,必须先加载到内存中,这是冯诺依曼体系结构规定这么做!!

注意:磁盘的内容怎样被传到内存,内存又怎样和CPU交互,在交互中出现问题怎么处理,这些工作由操作系统来完成

通过实际案例来进行理解数据流动的过程(注:目前还没有学习网络,所以网络部分忽略):

案例1:QQ发消息与收到消息的过程

很明显,在QQ上发送消息时发的不仅仅是消息,还有发送时间,发消息人的头像等所以在发送消息前,从键盘输入的数据要被加载到内存经过CPU处理后推送至输出设备:网卡(计算机中和网络打交道的硬件设备),经过网络后推送到收消息的人的输入设备:网卡,将网卡数据加载到内存后被CPU处理了交给显示器显示收到的消息!
在这里插入图片描述

案例2:微信发文件与接受文件

与发消息不同,发送文件是从自己的磁盘中将文件拷贝一份后加载到内存,经过CPU处理后推送到输出设备网卡上,要接受文件的人在经过网络后在网卡上,收到此文件,最终将文件存储至自己的磁盘上。

结论:

以上案例只是想让大家更深一步了解硬件,之间的关系,并且输入输出设备不止有,键盘和显示器,还有其他的硬件也能传递信息。

二,操作系统(Operator System)

1. 概念

操作系统是一款软件,是计算机启动的第一款软件,在我们的手机/电脑开机时加载的就是操作系统。它是一款进行软硬件资源管理的软件

1. 广义的认识:操作系统的内核+操作系统的外壳周边程序(给用户提供使用操作系统的方式)。
2. 狭义的认识:只是操作系统的内核。

2. 操作系统结构的层状划分

这里主要把下图的后三个阶段讲明白:

在这里插入图片描述

那么,操作系统是怎样管理软硬件的呢?
现在给大家讲一个小故事:

在公司里有人员管理系统,而在学校里有教务系统,就是用于管理学生的系统。假如陶大的吕校长是一个程序员,最开始学校只有100人,吕校长一个人就可以管理好它们的生活起居和学习运动,但是有一天陶大扩招了,现在有5万个学生,吕校长一想这样不行,我得写一段代码让计算机帮我管理陶大的学生,写了一个结构体:

struct student
{int age;int height;int grade;string name;......
}

学生太多了又不易保存和查找
于是校长将学生以链表得方式链接在一起

struct student
{struct student* next;int age;int height;int grade;string name;......
}

在这里插入图片描述

如果李四或者赵六有一门挂科了,那么校长就打开代码编译器,找到李四和赵六将他们的状态改为挂科!

结论:
1. 校长管理学生不是真正的人,而是在管理学生对应的数据!
2. 校长对学生的管理工作,变成了对链表的增删查改!

3. 操作系统对硬件管理的理解

和校长管理学生一样,操作系统也不是直接管理硬件,而是管理硬件映射出来的信息和校长创建的结构体类似,操作系统也会对各个硬件创建一个结构体,结构体中存放硬件的各种信息和健康状态等等,再通过链表或者其他数据结构将这些结构体一一链接起来统一管理!

管理这些硬件或学生需要做到
先描述,再管理!

操作系统的管理核心有:

1.进程管理
2.内存管理
3.文件/IO管理
4.驱动管理

这里管理都要遵循一个原则,那就是:先描述,再管理!

要管理进程得先描述进程得性质,内存管理管理得是内存,首先要描述内存,C/C++得结构体正好可实现这功能。

操作系统将软件硬件管理好并不是它的目的,它得目的是给用户提供良好的(稳定,高效,安全得)使用环境,而管理只是一种手段!!

再看此图:
在这里插入图片描述

操作系统管理底层硬件并不是直接管理的,它要通过驱动程序,而驱动程序是厂商自定义的。每一个硬件都有对应的驱动程序来做管理,像键盘,鼠标,U盘等等都有对应的驱动程序,然后操作系统再通过这一整套成熟的驱动程序来管理下层的硬件!并且在此基础上衍生出各种软件业务,和用户服务!

4. 用户与操作系统的关系的理解

这里主要是涉及层状结构的前三部分:
在这里插入图片描述

然而虽然说操作系统是为用户提供服务的,但是它并不相信用户,计算机不允许用户直接访问底层硬件,而是要经过操作系统,用户要访问操作系统,必须使用系统调用的方式,使用操作系统。因为用户中可能有坏人,就像银行一样,为你提供服务但是不信任你,于是在操作系统和用户之间还有系统调用窗口和shell外壳来阻止群众中的坏人直接获取Linux内核中的各种信息!

系统调用说白了就是操作系统给用户提供了一个又一个的函数用户通过调用函数来获取操作系统内的各种数据,然而函数是操作系统内部写的,所以你只能看到有限部分的数据!

5. 系统调用和库函数的关系

(1) 在开发角度,操作系统对外会表现为一个整体,但是会暴露自己的部分接口,供上层开发使用,这部分由操作系统提供的接口,叫做系统调用。
(2) 系统调用在使用上,功能比较基础,对用户的要求相对也比较高,所以,有心的开发者可以对部分系统调用进行适度封装,从而形成库,有了库,就很有利于更上层用户或者开发者进行二次开发。

但是呢,系统调用是有操作系统提供的,有些系统调用的接口比较复杂,也不适合用户直接操作,所以我们在系统调用之上又封装了一个软件层(各种库,比如我们常用的C/C++标准库) – 用户操作接口。就像在银行存钱取钱时,可能要带身份证/户口本等资料。但是有些老年人连这些最基础的可能都不懂,所以银行有提供了专属窗口服务老年人。

6. 为什么要有操作系统?

操作系统对下层(手段)进行软硬件管理工作,对上层提供良好(高效,稳定,安全)的运行环境(目的)。

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

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

相关文章

策略路由与路由策略的区别

🐣个人主页 可惜已不在 🐤这篇在这个专栏 华为_可惜已不在的博客-CSDN博客 🐥有用的话就留下一个三连吧😼 目录 一、主体不同 二、方式不同 三、规则不同 四、定义和基本概念 一、主体不同 1、路由策略:是为了改…

android 删除系统原有的debug.keystore,系统运行的时候,重新生成新的debug.keystore,来完成App的运行。

1、先上一个图:这个是keystore无效的原因 之前在安装这个旧版本android studio的时候呢,安装过一版最新的android studio,然后通过模拟器跑过测试的demo。 2、运行旧的项目到模拟器的时候,就报错了: Execution failed…

后台数据管理系统 - 项目架构设计-Vue3+axios+Element-plus(0916)

接口文档: https://apifox.com/apidoc/shared-26c67aee-0233-4d23-aab7-08448fdf95ff/api-93850835 接口根路径: http://big-event-vue-api-t.itheima.net 本项目的技术栈 本项目技术栈基于 ES6、vue3、pinia、vue-router 、vite 、axios 和 element-plus http:/…

RabbitMQ(高阶使用)死信队列

文章内容是学习过程中的知识总结,如有纰漏,欢迎指正 文章目录 一、什么是死信队列? 二、死信队列使用场景 三、死信队列如何使用 四、打车超时处理 1.打车超时实现 以下是本篇文章正文内容 一、什么是死信队列? 先从概念解释上搞…

idea插件推荐之Cool Request

Cool Request是一款基于IDEA的HTTP调试工具,可以看成是轻量版的postman,它会自动扫描项目代码中所有API路径,按项目分组管理。一个类被定义为Controller且其中的方法被RequestMapping或者XXXMapping注解标注以后就会被扫描到。 对应方法左侧会…

智能硬件从零开始的设计生产流程

文章目录 市场分析团队组建ID设计结构设计pcba设计软件开发手板EVT开模DVTPVTMP 智能硬件研发是一个复杂的过程, 当然一件事要发出萌芽必须得有人, 有一天,几个合伙人凑在一起,说一起开发个智能硬件产品吧,于是故事开始了. 市场分析 合伙人: 万物互联的时代, 智能音箱已经成为…

LDR6020,单C口OTG,充放一体新潮流!

PD(Power Delivery)芯片实现单Type-C接口输入和输出OTG(On-The-Go)功能,主要是通过支持USB Power Delivery规范和OTG功能的特定硬件和软件设计来实现的。以下是对这一过程的具体解释: 一、PD芯片基础功能 …

Chainlit集成Langchain并使用通义千问实现和数据库交互的网页对话应用增强扩展(text2sql)

前言 我在上一篇文章中《Chainlit集成Langchain并使用通义千问实现和数据库交互的网页对话应用(text2sql)》 利用langchain 中create_sql_agent 创建一个数据库代理智能体,但是实测中发现,使用 create_sql_agent 在对话中&#x…

Qt控制开发板的LED

Qt控制开发板的LED 使用开发板的IO接口进行控制是嵌入式中非常重要的一点,就像冯诺依曼原理说的一样,一个计算机最起码要有输入输出吧,我们有了信息的接收和处理,那我们就要有输出。 我们在开发板上一般都是使用开发板的GPIO接口…

七、垃圾收集器ParNewCMS与底层三色标记算法详解

文章目录 垃圾收集算法分代收集理论标记-复制算法标记-清除算法标记-整理算法 垃圾收集器1.1 Serial收集器(-XX:UseSerialGC -XX:UseSerialOldGC)1.2 Parallel Scavenge收集器(-XX:UseParallelGC(年轻代),-XX:UseParallelOldGC(老年代))1.3 ParNew收集器(-XX:UseParNewGC)1.4 C…

MATLAB 可视化基础:绘图命令与应用

目录 1. 绘制子图1.1基本绘图命令1.2. 使用 subplot 函数1.3. 绘图类型 2.MATLAB 可视化进阶(以下代码均居于以上代码的数据定义上实现)2.1. 极坐标图2.3. 隐函数的绘制 3.总结 在数据分析和科学计算中,数据可视化是理解和解释结果的关键工具。今天,我将…

Text2vec -文本转向量

文章目录 一、关于 Text2vec1、Text2vec 是什么2、Features3、Demo4、News5、Evaluation英文匹配数据集的评测结果:中文匹配数据集的评测结果: 6、Release Models 二、Install三、使用1、文本向量表征1.2 Usage (HuggingFace Transformers)1.3 Usage (se…

标准库标头 <barrier>(C++20)学习

此头文件是线程支持库的一部分。 类模板 std::barrier 提供一种线程协调机制,阻塞已知大小的线程组直至该组中的所有线程到达该屏障。不同于 std::latch,屏障是可重用的:一旦到达的线程组被解除阻塞,即可重用同一屏障。与 std::l…

深度学习之微积分预备知识点

极限(Limit) 定义:表示某一点处函数趋近于某一特定值的过程,一般记为 极限是一种变化状态的描述,核心思想是无限靠近而永远不能到达 公式: 表示 x 趋向 a 时 f(x) 的极限。 知识点口诀解释极限的存在左…

C语言 | Leetcode C语言题解之第412题Fizz Buzz

题目&#xff1a; 题解&#xff1a; /*** Note: The returned array must be malloced, assume caller calls free().*/ char ** fizzBuzz(int n, int* returnSize) {/*定义字符串数组*/char **answer (char**)malloc(sizeof(char*)*n);for(int i 1;i<n;i){/*分配单个字符串…

React学习day06-异步操作、ReactRouter的概念及简单使用

13、续 &#xff08;8&#xff09;异步状态操作 1&#xff09;在子仓库中 ①创建仓库 ②解构需要的方法 ③安装axios ④封装并导出请求 ⑤在reducer中为newsList赋值 ⑥获取并导出reducer函数 2&#xff09;在入口文件index.js中&#xff0c;注入 3&#xff09;在App.js中&a…

根据NVeloDocx Word模板引擎生成Word(六-结束)

前面几篇已经把E6开发平台配套的Word模版隐藏NVeloDocx的基础用法介绍了一遍&#xff0c;这些基础用法基本上可以完全覆盖实际业务的绝大部分需求。所以我们这一篇就介绍一些边边角角的内容&#xff0c;给本系列来一个首尾。 本篇的主要内容有&#xff1a; 1、汇总计算&#…

【四】k8s部署 TDengine集群

k8s部署 TDengine集群 目录 k8s部署 TDengine集群 一、在 Kubernetes 上部署 TDengine 集群 第一步&#xff1a;创建命名空间 第二步&#xff1a;从yaml创建有状态服务 StatefulSet 第三步&#xff1a;配置 Service 服务 二、集群测试 一、在 Kubernetes 上部署 TDengine…

实习期间git的分枝管理以及最常用的命令

各位找工作实习的友友在工作之前一定要把git的相关知识掌握呀&#xff0c;我实现期间被leader说过关于git规范的相关问题了 目前已更新系列&#xff1a; 当前&#xff1a;:实习期间git的分枝管理以及最常用的命令 Redis高级-----持久化AOF、RDB原理 Redis高级---面试总结5种…

Android SPN/PLMN 显示逻辑简介

功能描述 当设备驻网后(运营商网络),会在状态栏、锁屏界面、下拉控制中心显示运营商的名称。 此名称来源有两种: 1、SPN(Service Provider Name) 2、PLMN (Public Land Mobile Name) 功能AOSP默认逻辑SPN提供SIM卡的运营商名称预置在SIM EF中,SIM卡发行运营商名称…