一、计算机体系结构
(1)CPU:程序执行控制
(2)内存:存放代码和数据
(3)设备:硬盘、键盘、鼠标等外设
二、地址空间和地址生成
1、地址空间定义
- 物理地址空间:硬件支持的地址空间
- 逻辑地址空间:一个运行的程序所拥有的内存范围
2、逻辑地址生成
- C语言:编译、汇编、链接、载入(程序重定位,经过这步程序从磁盘到内存中)
- 编译:将基于符号的地址变为逻辑地址
- 操作系统:逻辑地址、物理地址之间的映射
3、物理地址生成
(1)cpu
- 运算器需要在逻辑地址的内存内容
- 内存管理单元 MMU 寻找在逻辑地址和物理地址之间的映射
- 控制器从总线发送在物理地址的内存内容的请求
(2)内存
- 内存发送物理地址内存的内容给 CPU
(3)操作系统
- 建立逻辑地址和物理地址之间的映射
三、连续内存分配
1、内存碎片问题
- 空闲内存不能被利用
- 外部碎片
- 内部碎片
2、分区的动态分配
(1)什么时候需要内存分配
当一个程序准许运行在内存中时,分配一个连续的区间;
分配一个连续的内存区间给运行的程序以访问数据
(2)分配策略
- 首次适配
- 最优适配
- 最差适配
3、碎片整理
a. 压缩式碎片整理:把运行程序在内存中移动
b. 交换式碎片整理:主存——>磁盘(虚拟内存)
四、非连续内存分配
1、分段
(1)作用:更好的分离和共享
(2)实现:逻辑地址空间分散到多个物理地址空间
(3)分段寻址方案 —— 段访问机制
- 段号、段内偏移
- 操作系统设置段表
2、分页
(1)实现
- 划分物理内存至固定大小的帧 Frame
- 划分逻辑地址空间至相同大小的页 Page
(2)帧Frame
- 帧号、帧内偏移
- 可以得出物理地址
(3)页page
- 页号、页内偏移
- 可以得出逻辑地址
(4)页寻址方案——页寻址机制
- 页号、页表基址
- 操作系统建立页表
- 页表保存了逻辑地址–物理地址之间的映射关系
- CPU——>逻辑地址——>页表——>物理地址——>物理内存空间
3、页表
(1)页表结构
每个运行的程序都有一个页表
(2)TLB
- 关联内存实现、具备快速访问性能,缓存及其访问的页帧转换表项、节省空间
- 如果 TLB 命中,物理页号可以很快被获取
- 未命中,对应的表项被更新到 TLB 中
(3)二级页表
- pageNumber 分为两块 p1、p2
- 节省空间、开销大、时间换空间
(4)多级页表
(5)反向页表
- 基于页寄存器的方案
- 基于关联内存的方案
- 基于哈希查找的方案
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现