计算机底层存储、CPU 运行与程序执行原理详解

存储层次与核心硬件组件

计算机主存由RAM和ROM两大硬件构成。RAM(随机存储器)可读可写,断电丢失数据,运行时存放程序和临时数据。ROM(只读存储器)出厂固化,只读,断电数据永存,存放BIOS开机初始化和硬件启动指令。

存储体切分为无数存储单元,每个存储单元绑定唯一二进制内存地址。存储单元是内存最小存储单位,用于存放单条二进制数据或机器指令。

CPU通过MAR(存储器地址寄存器)和MDR(存储器数据寄存器)与内存交互。MAR存放目标内存单元地址,决定读写位置;MDR临时缓存读写数据,寄存器位宽与单个存储单元容量一致。

内存数据存取流程

内存存取类比快递驿站存取包裹:

  • 取数流程:CPU将目标地址送入MAR,MAR寻址锁定对应存储单元,单元数据读出存入MDR,CPU从MDR取出数据。
  • 存数流程:CPU将存储地址送入MAR,待存数据送入MDR,硬件下发写入控制信号,MDR数据写入MAR指定存储单元。

CPU核心组件与指令执行周期

CPU分为运算器和控制器两大模块:

  • 运算器ALU:负责数据运算,包含ACC(累加器)、MQ(乘商寄存器)、X(通用寄存器)和ALU(算术逻辑单元)。
  • 控制器:负责指令调度,包含PC(程序计数器)、IR(指令寄存器)和CU(控制单元)。

指令周期分为取指阶段和执行阶段:

  • 取指阶段:PC内指令地址→MAR→寻址内存,内存读出指令存入IR,PC自动+1。
  • 执行阶段:CU拆分IR指令为操作码和地址码,操控运算器或内存完成计算、读写、跳转。

程序执行流程与函数调用底层栈原理

高级语言通过编译器转换为汇编语言,再通过汇编器转换为二进制机器语言。编译后,机器指令和运行数据存入内存,CPU通过PC→MAR→内存→IR循环取指和执行。

函数调用基于栈帧和栈空间:

  • 调用新函数:Push旧EBP和寄存器参数压栈,保存现场,开辟新栈帧,更新EBP/ESP,保存返回地址到栈,跳转新函数指令执行。
  • 函数返回:ESP出栈,弹出保存的返回地址,Pop恢复EBP与寄存器,还原上层现场,CPU回到上层函数断点继续执行。
相关推荐
CV工程师丁Sir2 小时前
ArkWeb 手记 04|DevTools 调试与缓存清理
java·spring·缓存·harmonyos
志尊宝9 小时前
Vue3 零基础每日笔记(073):keep-alive 页面缓存实战——列表页返回不丢状态
vue.js·笔记·缓存·#vue #前端 #前端开发·#javascript·#vue.js
禾小西10 小时前
Redis:从两大维度和三大主线建立知识体系
数据库·redis·缓存
进击的横打17 小时前
【人工智能】缓存命中率:从原理到业务场景的全面解读
人工智能·缓存
change_fate19 小时前
升级依赖后,vite会自动重建缓存吗
缓存
饺子大魔王的男人19 小时前
LitePan多网盘影音中枢:WebDAV挂载、STRM生成与缓存管理
缓存·dubbo
我不会起名字3221 天前
Redis 缓存与数据库一致性:先删缓存还是先更新库的 4 种方案
数据库·redis·缓存·一致性·延迟双删
@#¥&~是乱码鱼啦1 天前
ArkWeb开发手记02|权限、网络白名单与页面缓存控制
网络·缓存
拾贰_C2 天前
【English | conversation 】call | 抖音AI短句情景:打电话---come over
数据库·redis·缓存
ShineWinsu2 天前
对于Redis:缓存的解析
java·redis·缓存·缓存穿透·缓存击穿·缓存雪崩·缓存预热