一、冯·诺依曼体系计算机的“硬件骨架”1. 核心思想所有计算机的基石1945年冯·诺依曼提出核心理论程序和数据统一存储在内存中CPU从内存逐条取指令、解析、执行。这一理论彻底统一了现代计算机的工作模型。目前我们使用的所有电脑、手机、平板、服务器无一例外全部遵循这套架构。它是所有操作系统原理的硬件基础。2. 五大核心硬件部件冯·诺依曼体系定义了计算机五大核心部件分工明确、协同工作运算器 (ALU)CPU内部的核心组件专门负责算术运算加减乘除和逻辑运算与或非、判断真假是计算机的“计算器”。控制器 (CU)整个计算机系统的指挥中心。它负责统一硬件工作节拍控制什么时候取指令、什么时候解析指令、什么时候执行运算、什么时候读写数据。注现代计算机通常将运算器和控制器集成在CPU芯片中。存储器 (Memory)特指计算机内存RAM。它是唯一同时存放运行中程序代码和程序运行数据的硬件是整个硬件体系的核心中转站。实际上存储器是有层级的。CPU寄存器最快但最小L1/L2/L3 Cache次之主存DRAM较慢但容量大磁盘最慢但海量。操作系统的一大任务就是管理这些不同速度的存储器。输入设备负责向计算机传递外部信息。常见设备键盘、鼠标、网卡收数据、摄像头、麦克风。输出设备负责将计算机处理后的结果展示给用户。常见设备显示器、打印机、网卡发数据、扬声器。3. 重点拓展双向 I/O 设备高频考点大部分I/O设备是单向工作的如键盘只输入、显示器只输出但部分硬件属于双向I/O设备网卡接收数据包时是输入发送数据时是输出。硬盘读取数据到内存是输入保存内存数据到硬盘是输出。触摸屏触摸操作是输入屏幕显示是输出。4. 核心底层误区纠正重中之重这是初学者最容易混淆的地方必须死记硬背铁律 1I/O设备绝对不能直接和CPU通信除了中断信号。铁律 2设备和设备之间绝对不能直接传输数据。根本原因速度差异巨大。CPU运算是纳秒级I/O设备是毫秒级。如果直接传输CPU会被迫等待导致系统瘫痪。唯一解决方案内存作为全局中转站。所有数据必须先写入内存CPU再从内存读取或者CPU将数据写入内存外设再从内存读取DMA模式。标准固定流转链路I/O设备↔内存缓冲区↔CPU5. 数据流转详解输入设备数据流转以键盘打字为例用户操作敲击键盘产生电信号。写入内存键盘控制器将按键扫描码直接写入内存中的内核缓冲区注意不是直接给CPU。触发中断键盘控制器向CPU发送一个中断信号Interrupt告诉CPU“我有数据了”。CPU响应CPU暂停当前工作保存现场PC指针跳转到操作系统预设的中断处理程序。OS处理操作系统从内存缓冲区读取数据进行加工比如把扫描码变成字符 A然后放入应用程序的缓冲区。恢复现场CPU恢复之前的PC指针继续做刚才的事。输出设备数据流转以屏幕显示为例应用请求应用程序调用printf或write想要输出文字。系统调用应用没有权限直接操作显卡于是发起系统调用请求OS帮忙。写入显存/内存OS将待显示的字符数据写入显存一种特殊的内存或帧缓冲区。硬件读取显卡GPU按照刷新率自动从显存中读取数据并渲染到屏幕上。注这里不需要CPU一直盯着显卡自己会干活。二、用户、应用、操作系统三层协作模型结合我们可以清晰地看到计算机世界的层级关系。1. 为什么需要操作系统图4的概念引入如果没有操作系统裸机程序员必须直接写二进制代码去控制电压、控制磁头移动。这太难了狭义的操作系统Kernel仅仅指内核负责最底层的硬件管理进程、内存、驱动。广义的操作系统内核 Shell外壳 库函数libc 系统工具。这是我们日常使用的完整系统。2. 四层联动模型第一层用户 (User)角色需求发起者。行为点击鼠标、敲击键盘。用户不关心底层电路只关心“我要看视频”。第二层应用程序 (Application)角色用户的专属代理人。行为浏览器、微信、Word。核心限制应用程序运行在“用户态”权限极低。它不能直接碰硬件不能直接读写物理内存。它只能在自己的小圈子里玩。第三层操作系统 (Operating System / Kernel)角色资源大管家对应图3中的绿色部分。核心功能内存管理分配谁用哪块内存。进程管理决定谁先用CPU。文件管理管理硬盘上的数据。驱动管理指挥硬件干活。接口提供系统调用 (System Call)。这是应用程序通往内核的唯一大门对应图3中间的浅绿色条。第四层硬件 (Hardware)角色物理劳动者对应图3底部的蓝色部分。组成CPU、内存、网卡、硬盘等。3. 完整实操链路以键盘打字为例用户敲下 A 键。硬件键盘产生中断信号给CPU并将数据存入内存。操作系统内核捕获中断从内存读取数据识别出是 A。操作系统发现前台正在运行“记事本”于是把 A 拷贝给记事本的进程空间。应用程序记事本醒来发现自己收到了 A于是调用系统调用write()请求显示。操作系统接收请求指挥硬件显卡在屏幕上画出 A。用户看到了 A。三、操作系统诞生的核心意义并发如果只有裸机同一时间只能运行一个程序。 操作系统的核心解决方案CPU时间片轮转调度。原理操作系统把CPU的时间切成极短的片段例如10毫秒。效果让程序A跑10毫秒暂停让程序B跑10毫秒暂停再让A跑...错觉因为切换速度太快每秒几百次人类感觉所有程序都在“同时”运行。这就是并发。四、程序与进程静态文件 vs 动态灵魂1. 核心区别必考程序 (Program)躺在硬盘里的静态文件如.exe文件。它只是一堆代码指令不占用CPU不占用内存除了磁盘空间。就像一本菜谱。进程 (Process)跑在内存里的动态实例。当你双击程序操作系统把它加载到内存分配资源它才变成进程。就像照着菜谱做菜的过程。2. 进程的身份证task_struct (Linux)在Linux内核中每个进程都有一个结构体叫task_struct记录了它的一切PID身份证号。State状态运行中、睡眠中、僵尸状态。Priority优先级谁先抢CPU。Memory:它的内存用在哪了。Context:它的寄存器现场下文详解。五、寄存器与上下文切换操作系统的精髓1. 寄存器是什么寄存器是CPU肚子里的超高速临时存储区。PC (程序计数器)记录下一条要执行的指令地址。它是程序的“指路明灯”。通用寄存器存放正在计算的数据比如11两个1必须先放进寄存器才能算。2. 什么是上下文 (Context)上下文 CPU寄存器里所有数据的快照。当进程A被暂停时它寄存器里的数据代表了它当时的“工作状态”。如果不保存下次回来就忘了算到哪了。3. 上下文切换全过程进程并发的本质当CPU要从进程A切换到进程B时保存现场把进程A的寄存器数据PC值、数据值等保存到A的task_struct中。恢复现场把进程B之前保存在task_struct里的数据重新写入CPU的寄存器。跳转执行CPU根据B的PC值继续执行B的代码。结论进程切换是非常耗时的因为要读写内存来保存/恢复寄存器数据。所以操作系统不会频繁切换而是尽量让一个进程跑完一个时间片。六、Linux 实操看懂真实进程1. 查看进程 PID#include stdio.h #include unistd.h int main() { // getpid() 是系统调用向内核询问自己的ID printf(我的进程 PID 是: %d\n, getpid()); return 0; }实验结论每次运行这个程序打印的PID都不一样。证明每次都是一个新的进程。2. 命令查看系统进程终端输入ps axj | lessPID进程ID。PPID父进程ID谁生出了这个进程。STATR(Running)正在运行或在排队。S(Sleeping)在睡觉等待IO或事件。Z(Zombie)僵尸进程死了但没埋需修复。七、全文终极总结概念核心一句话总结冯·诺依曼程序数据存内存CPU取指执行五大部件协同。I/O 铁律设备不直连CPU设备间不互传内存是唯一中转站。操作系统承上启下的大管家向上提供API向下管理硬件。程序 vs 进程程序是死文件进程是活实例占用内存CPU。并发宏观并行微观串行。靠时间片轮转实现。上下文切换保存旧寄存器 - 载入新寄存器。是并发的代价。PC 寄存器永远指向下一条指令是程序运行的灵魂索引。从冯·诺依曼的硬件限制到操作系统的软件调度再到进程的动态生命周期这是一条完整的逻辑链。理解了这些你就拿到了通往高级技术如高并发服务器、嵌入式开发、内核源码分析的钥匙。