存储器管理
自己的理解,仅供诸位参考
1 .存储器类型
1.1 引用寄存器原因
寄存器的速度与CPU速度相同,而CPU的处理速度远高于主存储器访问速度,
通常:CPU会从主存储器取得数据与指令,指令放入指令寄存器,数据放入数据寄存器
1.2 引用高速缓存原因
备份主存中常用数据,减少访问主存次数
通常: 进程的指令和数据在主存中,要访问时,复制入高速缓存CPU访问时,先检查缓存中有没有,没有在主存中找
通常:会有指令高速缓存,防止CPU将会空等指令来,也可能有多级缓存
1.3 引入磁盘缓存原因
访问I/O低可执行存储器的三个数量级,磁盘缓存利用主存一部分用于存储频繁使用的磁盘数据与信息
2 程序装入与链接
2.1一般过程
-
编译:.cpp(源文件)=> .obj(目标文件) (目标模块)
注:由编译程序[Compiler]完成
-
链接:若干.obj与库以及其他连接在一起
注:由链接程序[Linker]完成
-
装入:把装入模块装入内存
注:由装入程序[Loader]完成
2.2 链接的方式
①为静态链接
②为 装入时动态链接 和运行时动态链接 只是图在内存是装入链接与运行链接无法体现
程序链接方式 | 优点 | 缺点 |
---|---|---|
静态链接 | / | 全部载入,不便于修改与更新 |
装入时动态链接 | 便于修改与更新 | 全部载入 |
运行时动态链接 | 需要时载入 | / |
2.3 程序的装入
要装入内存都需要变成装入模块,只是链接的时间不同(一开始,装入时,执行时),那么怎么装入?
程序装入方式 | 特点 | 用处 | 需求 |
---|---|---|---|
绝对装入 | 装入内存特定位置 | 系统小且单道 | 装入内存时要知道绝对地址 |
静态可重定位装入 | 装入内存任意位置 | 单多道 | 装入内存时指令与数据地址修改 |
静态可重定位(动态运行时)装入 | 装入内存任意位置且可以移动 | 单多道 | 执行时需要地址转换寄存器 |
注:动态运行时装入方式装入的时候是逻辑地址,运行时转换物理地址