当前位置: 首页 > news >正文

【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. 为什么要有操作系统?

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

相关文章:

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

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

算法题解:斐波那契数列(C语言)

斐波那契数列 斐波那契数列是一个经典的数学序列,其中每一项的值是前两项的和。数列的前两项通常定义为0和1,即: F(0) 0 F(1) 1 F(n) F(n-1) F(n-2) (n ≥ 2)输入一个正整数n,求斐波那契数列的第n项。 样例 假设输入 n …...

SSM 框架 个人使用习惯 详细

SpringMVC主要是controller、service、dao(mapper)层交互 controller:处理数据请求的接口 service:处理请求的数据 dao(mapper):对数据进行持久化 下面我将对controller和service.impl进行讲…...

[羊城杯 2020]Blackcat1

知识点:数组加密绕过 进入页面熟悉的web三部曲(url地址,web源代码,web目录扫描) url地址没有什么东西去看看源代码. 这有一个mp3文件点一下看看. 在最后面发现了 PHP源码. if(empty($_POST[Black-Cat-Sheriff]) || em…...

腾讯云Ubuntu系统安装宝塔,配置Java环境,运行spring boot项目

致谢 本次学习宝塔部署spring boot项目,参考如下资料 https://www.cnblogs.com/daen/p/15997872.html 系统安装宝塔 直接用的腾讯云云服务器面板上的登录,你可以换成 xshell 进入宝塔官网: https://www.bt.cn/new/download.html 我们采…...

双亲委派机制知识点

类加载器 双亲委派模型 为什么采用双亲委派模型 打破双亲委派机制的场景 Tomcat 打破双亲委派机制:目的是可以加载不同版本的jar包 实现类隔离:在Tomcat中,每个Web应用使用独立的类加载器加载类文件,这样做的好处在于,当在同一T…...

vue part 11

vuex的模块化与namespace 115_尚硅谷Vue技术_vuex模块化namespace_1_哔哩哔哩_bilibili 116_尚硅谷Vue技术_vuex模块化namespace_2_哔哩哔哩_bilibili vue-router路由 很常见的很重要的应用:Ajax请求,将响应的数据替换掉原先的代码从而实现不跳转页面…...

【QT】常用类

欢迎来到Cefler的博客😁 🕌博客主页:折纸花满衣 🏠个人专栏:QT 目录 👉🏻QMediaPlayer👉🏻QMediaPlaylistsetPlaybackMode 👉🏻QDir👉…...

从index_put出发全面学习cuda和pytorch技术

一 前言 深感目前对于cuda和pytorch所涉及知识的广度和深度,但一时又不知道该如何去学习,经过多日的考虑,还是决定管中窥豹,从一个算子出发,抽丝剥茧,慢慢学习,把学习中碰到的问题都记录下来,希望可以坚持下去。 二 函数功能描述 【torch算子】torch.index_put和tor…...

浅谈住房城乡建设部科技创新平台布局重点方向

最近住房建设部组织开展住房城乡建设部科技创新平台(以下简称部科技创新平台)申报工作。详细内容见住房城乡建设部科技创新平台开始申报了 (qq.com)。在这里有4大方向共15个课题。内容见下图: 虽然我是做技术的,但是如何体现创新还…...

调用 write()函数后,如何知道数据是否已经写入磁盘?

在 Linux 中调用 write() 函数后,可以通过以下几种方式来确定数据是否已经写入磁盘: 一、使用同步函数 1. fsync() 函数: - 这个函数会强制将与文件描述符相关的所有修改过的内核缓冲区写入磁盘,并等待直到磁盘 I/O 操作完…...

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

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

从底层原理上理解ClickHouse 中的稀疏索引

稀疏索引(Sparse Indexes)是 ClickHouse 中一个重要的加速查询机制。与传统数据库使用的 B-Tree 或哈希索引不同,ClickHouse 的稀疏索引并不是为每一行数据构建索引,而是为数据存储的块或部分数据生成索引。这种索引的核心思想是通…...

xtu oj 锐角三角形

锐角三角形 题目描述 n条边,任选3条边,能组成多少个锐角三角形(选的边不同就认为是不同的三角形)? 输入 第一个是一个整数T(1≤T≤1000),表示样例的个数。 每个样例占2行,第一行是一…...

MATLAB系列04:循环结构

MATLAB系列04:循环结构 4. 循环结构4.1 while循环4.2 for循环4.2.1 运算的细节4.2.2 break语句和continue语句4.2.3 嵌套循环 4.3 逻辑数组和向量化4.3.1 逻辑数组的重要性4.3.2 用 if/else 结构和逻辑数组创建等式 4.4 总结 4. 循环结构 循环(loop)是一种 MATLAB …...

虹科方案 | 精准零部件测试!多路汽车开关按键功能检测系统

欢迎关注虹科,为您提供最新资讯! #LIN/CAN总线 #零部件测试 #CAN数据 导读 在汽车制造业中,零部件的安全性、功能性和可靠性是确保车辆整体性能的关键。虹科针对车辆零部件的LIN/CAN总线仿真测试,提出了基于虹科Baby-LIN系列产…...

【加密算法基础——AES CBC模式代码解密实践】

AES 解密实践之代码实现 AES 解密使用python脚本比较灵活,但是一定要保证脚本是调试过的,才能在找到正确的密文,密钥,初始向量的情况下,解出正确的明文。但是对于AES解密,命令行无法处理key截断的问题。 实…...

【ViT+Dis】Deepfake Detection Scheme Based on Vision Transformer and Distillation

文章目录 Deepfake Detection Scheme Based on Vision Transformer and Distillationkey points深伪检测检测算法蒸馏法与教师网络实验训练:参数总结Deepfake Detection Scheme Based on Vision Transformer and Distillation 会议:2021 作者: key points 以往基于CNN结…...

maya-vray渲染蒙版

要用一个叫vrayMulWrapper的材质球,把alpha Conterbution调到-1,勾选matte surface启用蒙版物体。...

计网简简单单复习一下

文章目录 基础体系结构(分层模型)为什么要分层?OSI 七层模型?每一层的作用?TCP/IP 四层模型是什么?每一层的作用是什么?五层体系结构以及对应的协议每一层常见协议有哪些?从输入 URL 到页面展示到底发生了什么?URI和URL的区别;forward和redirect的区别DNS作用是什么?D…...

华为云AI开发平台ModelArts

华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望

文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...

渲染学进阶内容——模型

最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异&#xff…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes&#xff0…...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

Selenium常用函数介绍

目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...

Linux nano命令的基本使用

参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...