抽象层
一、计算机抽象的两个视角
-
微观视角(状态机)
- 程序是一个状态机
- 可以精确描述每条指令的执行
-
宏观视角(抽象层)
- 计算机是多个抽象层的叠加
- 每层都封装了特定的功能
- 向上提供简化的接口
二、抽象层次的构成
从上到下分为以下几层:
TRM | 计算 | 内存申请 | 结束运行 | 打印信息 |
---|---|---|---|---|
运行环境 | - | malloc()/free() | - | printf() |
AM API | - | heap | halt() | putch() |
ISA接口 | 指令 | 物理内存地址空间 | nemu_trap指令 | I/O方式 |
硬件模块 | 处理器 | 物理内存 | Monitor | 串口 |
电路实现 | cpu_exec() | pmem[] | nemu_state | serial_io_handler() |
三、核心功能的抽象映射
- 计算功能
应用程序 -> 指令序列 -> CPU执行
- 内存管理
malloc/free -> heap API -> 物理地址空间 -> 物理内存 -> pmem[]
- 程序控制
程序结束 -> halt() -> nemu_trap指令 -> Monitor -> nemu_state
- 信息输出
printf() -> putch() -> I/O指令 -> 串口 -> serial_io_handler()
四、抽象层的意义
-
实现分离
- 同一功能可以有不同实现
- 例如处理器可以是:
- NEMU解释执行
- QEMU二进制翻译
- Verilog硬件实现
-
接口统一
- ISA统一硬件接口
- AM统一软件接口
- 运行环境提供标准库
-
细节屏蔽
- 上层不需要知道下层实现
- 便于跨平台开发
- 降低开发难度
五、抽象层的优势
-
模块化
- 每层功能清晰
- 接口定义明确
- 便于维护和更新
-
可移植性
- 只需修改底层实现
- 上层代码可以复用
- 跨平台开发更容易
-
开发效率
- 降低认知负担
- 提高代码重用
- 便于团队协作