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

【Linux】冯诺依曼体系结构、操作系统

Linux

  • 1.冯诺依曼体系结构
    • 1.是什么?
    • 2.为什么设计成这样?
    • 3.数据的流动?
  • 2.操作系统
    • 1.是什么?
    • 2.为什么设计操作系统?
    • 3.核心功能
    • 4.如何理解 "管理"
    • 5.系统调用和库函数概念

1.冯诺依曼体系结构

1.是什么?

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

在这里插入图片描述

  1. 输入设备:键盘、鼠标、话筒、摄像头、网卡、磁盘等。
  2. 输出设备:显示器、打印机、网卡、磁盘等。
  3. 中央处理器(CPU):运算器 + 控制器。
  4. 存储器:内存。
  1. 所有的输入设备输出设备都叫做"外设"。磁盘叫做外部存储设备,简称 "外存"
  2. 读文件:将磁盘中的数据读取到内存中;写文件:将内存中的数据写入到磁盘中。将这种读写的动作称为 “Input/Output”,简称 "I/O"
  3. 站在内存的角度理解 I/O:输入设备将数据交给内存,叫做 Input;内存将数据交给输出设备,叫做 Output。

知识点:

  1. 已知软件运行,必须先加载到内存中(Input)。程序运行之前在哪里?答案:由于程序就是二进制的可执行文件,所以在磁盘中。
  2. 为什么程序运行之前要加载到内存中?答案:由于冯诺依曼体系结构规定,CPU 只能从内存中读取数据,无法直接从输入设备直接读取。总结:数据必须从输入设备加载到内存,再由内存加载到 CPU 中。
  3. 执行 printf 函数时:并不是直接将数据放入输入设备。而是先将数据放入缓冲区中,需要的时候将数据刷新到输出设备。之所以由缓冲区,这也是冯诺依曼体系结构规定的。
  4. 冯诺依曼体系结构数据流动的方向:输入设备先将数据移动到内存,内存再将数据移动到 CPU,CPU 将计算后的数据再移动到内存,最后内存将数据移动到输出设备。数据流动的本质:数据从一个设备 "拷贝" 到另一个设备冯诺依曼体系结构的效率:由设备的 "拷贝" 效率决定
  5. 在数据层面上:CPU 只和内存打交道,而外设之和内存打交道。内存充当类似 “桥梁”。
  6. 在网络中接收和传输数据是网卡起的作用。网卡先获得网络中的数据,再将网卡中的数据加载到内存中,再将内存中的数据加载到 CPU 中,经过计算后,重新加载到内存中,数据又从内存加载到网卡,最后将网卡中的数据传输到网络中。
  7. 执行 scanf 函数时:由于软件已经加载到内存中了,所以内存可以获取数据。

关于冯诺依曼体系结构,必须强调4点:

  1. 这里的存储器指的是内存。
  2. 不考虑缓存情况,这里的 CPU 能且只能对内存进行读写,不能访问外设(输入/输出设备)
  3. 外设(输入/输出设备)要输入/输出数据,也只能写入内存或者从内存中读取。
  4. 一句话,所有设备都只能直接和内存打交道。

2.为什么设计成这样?

在这里插入图片描述

以上是存储分级:

  1. CPU 由寄存器和三级高速缓存组成。
  2. 离 CPU 越近:存储容量越小,存储速率越快,但是价格更贵。

问题一:为什么中间需要一个存储器?可以去掉?

  1. 若去掉存储器时:由于输入/输出设备的运算速度相较于 CPU 非常的慢,这就导致整个体系结构的效率由 “外设” 决定非常低(木桶效应)。
  2. 那么可以将外设更改为 “寄存器” ?答案是:可以,但是计算机的价格会相当的贵。
  3. 为了解决 “外设” 和 “CPU” 之间的速度不匹配问题,存储器作为 “桥梁”,既可以节省成本,又可以提升效率。当代计算机是性价比的产物。
  4. 冯诺依曼体系结构的历史意义:普通人都可以买得起计算机,网民多了,才构成了当今的互联网。可以说是:构成互联网的必要条件。

问题二:为什么中间加了一个存储器整个体系结构效率就变高了呢?效率不是由最低的 “外设” 决定的?

  1. 存在操作系统,将操作系统加载到内存中,操作系统可以提前将外设加载到内存中,CPU 就可以直接从内存中读取数据。“局部性” 原理,可以发挥内存最大的效果。
  2. 体系结构的效率:由设备的 “拷贝” 效率决定。数据从外设拷贝到内存,在从内存拷贝到 CPU,这样效率有所提高。

3.数据的流动?

注意:对冯诺依曼的理解,不能只停留在概念上,要深入到对软件数据流理解上。请解释,从你登录上qq开始和某位朋友聊天开始,数据的流动过程。从你打开窗口,开始给他发消息,到他的到消息之后的数据流动过程。

在这里插入图片描述
问题一:用户之间的聊天?

  • 数据流动过程:用户之间聊天的前提是先登入qq,也就是qq已经加载到内存了。从硬件方面:内存从键盘读取数据。从软件方面:通过键盘将数据交给qq,而qq就在内存中,所以输入数据就流动到了内存中。数据由 CPU 经过加密、封包后,重新写回到内存中,数据又从内存拷贝到输出设备 “网卡” 中,数据通过网卡传输到网络中,通过网络交付给对方的输入设备 “网卡”,数据又加载到内存(前提:对方qq启动),数据由 CPU 经过解密、解包后,重新写回到内存中,最后数据刷新到了对方的显示器中。

问题二:如果是在qq上发送文件呢?

  • 数据流动过程:文件在发送之前在磁盘中,先将文件拷贝到qq中,而qq已经在内存中,等价于将qq拷贝到了内存中,然后内存中的数据经过 CPU 的加密、封包,重新拷贝到内存,再到网卡,传输到网络由对方网卡接收,再加载到内存,内存中的数据经过 CPU 的解密、解包重新拷贝到内存,最后文件到了对方磁盘中。

总结:

  1. 聊天的本质:把数据从用户键盘,通过体系结构,转发到对方显示器的过程。
  2. 发送文件的本质:把文件从本地磁盘,通过体系结构,拷贝到对方磁盘的过程。

2.操作系统

1.是什么?

操作系统是一款进行软硬件管理"软件"

任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。笼统的理解,操作系统包括:

  1. 内核(进程管理,内存管理,文件管理,驱动管理)
  2. 其他程序(例如函数库,shell程序等等)

在这里插入图片描述

若操作系统只有内核,作为应用者而言是无法使用的。

  1. 为了在操作系统上进行开发:操作系统会配上自己函数库(系统调用、C标准库)。
  2. 用户无法直接跟操作系统打交道,为了用上操作系统:操作系统会提供命令行、图形化界面等。

小知识:安卓手机的低层是 Linux 内核,只需要将一些库,就可以基于安卓做开发。

2.为什么设计操作系统?

  1. 对下:与硬件交互,管理所有的软硬件资源。
  2. 对上:为用户提供⼀个良好的执行环境。

在这里插入图片描述

驱动程序的作用:为了读取不同设备中的数据,需要不同的驱动程序。

  1. 软硬件体系结构(就是上图中从硬件到用户):层状结构。
  • 层状结构:高内聚,低耦合。高内聚:将相同功能、逻辑的数据或代码,放在同一层内部。低耦合:层与层之间只使用接口的方式进行互相调用,在数据和逻辑层面上的依赖关系尽可能少。方便代码的可维护性:一个模块的修改不影响开一个模块。
  • 计算机在硬件也满足高内聚,低耦合的层状结构。哪个硬件坏了,换哪一个即可。
  1. 不能直接访问操作系统,必须使用系统调用(系统提供的函数)
  • 操作系统不允许用户直接访问内存,直接读取进程,直接访问文件,直接读取驱动,必须要求用户通过操作系统自己提供的(系统调用:C封装的接口),来访问操作系统。
  • printf 函数的本质:将数据写到硬件(显示器)中。但不是直接写到硬件中,整个计算机体系是层状结构,不可能绕过操作系统直接写到硬件中,printf 函数的低层封装了系统调用,通过操作系统对驱动管理进行访问,访问对应的驱动程序,最后将数据写到显示器中。
  1. 我们的程序,只要判断出它访问了硬件,那么它必须贯穿整个软硬件体系结构。
  2. 库可能在底层封装了系统调用。

3.核心功能

在整个计算机软硬件架构中,操作系统的定位是:一款纯正的"搞管理"的软件。

4.如何理解 “管理”

如何理解 "管理"?

管理的例子:学生、辅导员、校长。

  1. 描述被管理对象。
  2. 组织被管理对象。

在这里插入图片描述

  1. 通过先描述,再组织:对任何 “管理” 场景进行建模。
  2. C++提供类解决:先描述的问题;提供STL解决:再组织的问题。
  3. 操作系统对软硬件的管理都基于:先描述,再组织

5.系统调用和库函数概念

问题:操作系统要向上提供对应的服务,但是操作系统不相信任何用户(例如:银行),那么如何为用户提供服务?答案:系统调用

  1. 在开发角度,操作系统对外会表现为一个整体,但是会暴露自己的部分接⼝,供上层开发使用,这部分由操作系统提供的接口,叫做系统调用
  2. 系统调用在使用上,功能比较基础,对用户的要求相对也比较高。所以,有心的开发者可以对部
    分系统调用进行适度封装,从而形成,有了库,就很有利于更上层用户或者开发者进行⼆次开发。
  3. 库函数和系统调用属于上下层的关系。库函数在上层,系统调用在下层。
  4. 如何判断库函数内含有系统调用?只要库函数访问了硬件,那么一定含有系统调用。

http://www.kler.cn/a/404283.html

相关文章:

  • css:感觉稍微高级一点的布局
  • H.264/H.265播放器EasyPlayer.js视频流媒体播放器关于websocket1006的异常断连
  • uniapp页面样式和布局和nvue教程详解
  • C++中的移动语义
  • HTML5实现剪刀石头布小游戏(附源码)
  • python: generator model using sql server 2019
  • 11.21Pytorch_属性常见转换操作
  • Github 2024-11-18 开源项目周报 Top15
  • shell脚本之while循环和until循环
  • 【ChatGPT】ChatGPT在多领域知识整合中的应用
  • OSG开发笔记(三十三):同时观察物体不同角度的多视图从相机技术
  • 线性回归 - 最小二乘法
  • 适用于资源受限IoT系统的非对称语义图像压缩技术
  • 【正则表达式 PYTHON】
  • 视觉顶会论文 | 基于Swin Transformer的轴承故障诊断
  • 每日一题 LCR 079. 子集
  • 【Linux】<共享内存应用>——模拟实现不同进程把hello字符对<共享内存文件对象>的放入和取出操作
  • Seatunnel运行时报错Caused by: java.lang.NoClassDefFoundError: com/mysql/cj/MysqlType
  • 2024年亚太地区数学建模大赛C题-宠物行业及相关行业的发展分析与策略
  • 如何查看 Android 项目的依赖结构树
  • 集成学习的起源与哲学
  • Qt添加外部库:静态库和动态库,批量添加头文件
  • 【XSS】payload#1
  • 利用oss进行数据库和网站图片备份
  • Flowable第三篇、Flowable之任务分配(任务分配、流程变量、候选人和候选人组)
  • 【Lucene】搜索引擎和文档相关性评分 BM25 算法的工作原理