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 挂在一棵红黑树上,算法每次只取最左边的节点。