【Linux笔记】冯诺依曼体系结构

1.冯诺依曼体系结构

冯诺依曼体系结构图

1.1 五大核心组件说明

A. 输入设备:键盘、磁盘、鼠标、摄像头、网卡 ... ...

B. 输出设备:磁盘、显示器、网卡、打印机

外设 = 输入设备 + 输出设备

C. 存储器:本质是内存,用来存放程序指令和数据

D. 运算器:执行算术运算(加减乘除)和逻辑运算(与或非比较)

E. 控制器:指挥协调各部件工作,取指令、译码、发出控制信号

CPU = 运算器 + 控制器

1.2 如何通过冯诺依曼体系理解软件运行之前加载到内存?

核心原因:因为CPU 只能直接访问内存

具体原因:

①硬件的"物理限制":

软件作为.exe执行文件存储在磁盘当中,在冯诺依曼架构中,CPU 的电路总线是直接连着内存的。

它根本没有设计直接去硬盘里"抓取"指令的功能,内存是 CPU 唯一能直接寻址和交互的工作区。

②弥补"速度鸿沟":

CPU 的运算速度极快(纳秒级),而硬盘的读取速度相对极慢(微秒/毫秒级)。

如果让 CPU 直接等硬盘,整个系统会卡死,内存作为中高速媒介,起到了至关重要的缓冲作用。

1.3 如何理解冯诺依曼体系结构的局限?

① 算力与传输 的局限(冯诺依曼瓶颈):

CPU 的极速运算与内存的缓慢传输严重脱节。

CPU 就像一台没有供油的超级引擎,绝大部分时间都在"被迫发呆"等待数据。

② 指令/数据共享总线 的局限:

指令和代码被存放在一起并共用一条通道。

CPU 每次只能拿一个,无法同时抓取,形成了硬件底层的"强制排队"。

③ 不适应高并发 的局限:

CPU的底层逻辑是严格的"读一条、做一条"顺序执行。

面对当今(如 AI 矩阵运算)需要同时处理海量数据的场景,显得力不从心。

1.4 如何通过冯诺依曼体系结构来理解数据流动?

复制代码
以 a + b 为例看数据流动

步骤 1: 输入 → 内存
       输入设备 → 总线 → 内存
       键盘输入 a=3, b=5,存入内存地址 M[100] 和 M[104]

步骤 2: 内存 → CPU (取指)
       控制器发出"取指"命令
       内存 M[PC] → 数据总线 → 指令寄存器(IR)
       指令: LOAD R1, M[100]


步骤 3: 内存 → CPU (取数)
       内存 M[100] → 数据总线 → 寄存器 R1  (R1 = 3)
       内存 M[104] → 数据总线 → 寄存器 R2  (R2 = 5)


步骤 4: CPU 内部运算
       R1 + R2 → ALU → 结果存入 R3  (R3 = 8)

2.操作系统

2.1 操作系统的核心概念

操作系统的本质:操作系统(OS)是一款进行对 硬件资源 和 软件资源 进行管理的条软件

操作系统的核心:向下封装硬件底层的丑陋、碎片与复杂,向上为软件代码的运行提供一个安全、纯粹且资源无限的虚拟环境。

操作系统包括:

  • 内核: 进程管理、内存管理、文件管理、设备管理

  • 其他程序:函数库、shell程序等

操作系统概括图:

2.2 操作系统设计的目的

操作系统设计的核心目的:

①向上:方便用户使用(方便性)

②向下: 高效管理硬件(有效性)

操作系统设计四大设计目的:

方便性 : 降低用户使用计算机的难度 ,不用直接写汇编操作硬件,敲命令或点鼠标就行

有效性 : 提高系统资源的利用率 ,多道程序设计让 CPU 不空闲,内存不浪费

可扩充性 :方便添加新功能和新硬件,模块化设计,新设备加入只需加驱动程序

开放性 : 遵循标准,兼容不同软硬件, 不同厂商的设备都能用同一套接口

操作系统设计的根本目的:让用户更方便地使用计算机,同时让硬件资源被更高效地利用。

操作系统设计展开图:

2.3 操作系统如何管理资源

管理 = 描述 + 组织

操作系统并不"亲自动手"使用资源,而是通过数据结构来描述资源的状态,再通过算法来组织资源的分配与回收。

A.描述

硬件是物理世界里的硅片、电容和磁道,代码根本无法直接触碰它们,通过"结构体 或 类"在虚拟世界里对硬件进行描述。

内存管理:

复制代码
内存管理:物理内存只是无数个电容。

OS 用一个 struct page 结构体去代表每 4KB 的物理内存,用链表或位图把它们连起来。

struct page
{
    int ref_count;
    int flags;
    ...
};

进程管理:

复制代码
进程管理:进程是动态的。

OS 用一个大结构体 task_struct (Linux 中的 PCB) 把进程的名字、优先级、占用的内存、打开的文件死死记录下来。


struct task_struct
{
    pid_t pid;
    int priority;
    long state;
    ...
};

B.组织

通过对资源进行描述,有了各种结构体,OS通过合适的"策略/算法 与 数组结构" 对资源进行组织。

示例:

复制代码
怎么在几千个空闲内存块里找到最合适的一个?

伙伴系统算法
复制代码
怎么在几百个的进程里找出下一个该用 CPU 的?

Linux CFS 调度器把所有进程的 PCB 挂在一棵红黑树上,算法每次只取最左边的节点。
相关推荐
墨家句子1 小时前
AnythingLLM 搭本地知识库:文档问答不准怎么调
linux·后端
筑梦之路1 小时前
Alibaba Cloud Linux 4 IPXE全自动安装(直连官方源)——筑梦之路
linux·运维·服务器·国产化·阿里云操作系统
encoderlee2 小时前
ubuntu server 如何播放视频显示网页
linux·ubuntu·音视频·树莓派·ubuntu server·arm嵌入式
云计算练习生2 小时前
什么是 Linux?从 Unix 到开源生态的完整脉络
linux·开源·操作系统·unix
lcj25112 小时前
【C++】set和map——详细使用说明
开发语言·c++·笔记·面试
Pointer Pursuit2 小时前
make / Makefile
linux·运维·服务器
ZhangJun952 小时前
Linux常用命令笔记,中高级运维高频指令,并附上vim常见操作
linux·运维·centos·云计算·vim
逐流人2 小时前
Ceph对象存储与文件系统存储管理:从RADOS网关、S3与Swift到CephFS快照同步
linux·运维·ceph·云原生·云计算·swift·rados
分布式存储与RustFS2 小时前
日志目录的预算是 2 GiB:轮转、保留和压缩这三件事
运维·云原生·开源·对象存储·分布式存储·s3·性能基准