存储单元
内存的几个基本概念
存储单元
内存地址从0开始,每个地址对应一个存储单元
存储单元大小根据计算机按照什么方式编址
- 按字节编址
则每个存储单元大小为一字节,即1B,即8个二进制位 - 按字编址
看这个计算的字长是多少位,如果是字长16位的,则每个存储单元大小为一个字,每个字的大小是16个二进制位,2字节
从写程序到程序运行
- 编译
由编译程序将用户源代码编译成若干个目标模块(编译就是把高级语言翻译成机器语言) - 链接
由链接程序将编译后形成的一组目标模块,以及所需库函数链接在一起,形成一个完整的装入模块(有逻辑地址) - 装入(装载)
由装入程序将装入模块装入内存运行(将数据、程序放到内存的指定地址中,以便于后面cpu能根据地址找到)
内存的三种装入方式
绝对装入
如果在编译时,如果知道程序将放到内存中的哪个位置,编译程序将产生绝对地址的目标代码,装入程序按照装入模块中的地址,将程序喝数据装入内存。
缺点: 适用于以前的单道程序环境
静态重定位
编译、链接后的装入模块的地址都是从0开始的,指令中使用的地址、数据存放的地址都是相对于起始地址(0)而言的逻辑地址。可根据内存的当前情况(即哪里有空闲地址),将装入模块装入到内存适当位置。装入时对地址进行“重定位”, 将逻辑地址变换位物理地址(地址的变换是在装入时一次完成的)
动态重定位方式
动态重定位:又称动态运行时装入。编译、链接后的装入模块的地址都是从0开始的(逻辑地址)。装入程序把装入模块装入内存后(装入程序会存放一个初始位置,重定位寄存器会记住这个位置),并不会立即把逻辑地址转换为物理地址,
而是 把地址转换推迟到程序真正要执行时才会进行。因此装入内存后所有的地址依然时逻辑地址。这种方式需要一个重定位寄存器的支持
运行过程
例如一个程序装入内存中,内部的指令地址都是逻辑地址,是从0开始的。比如一个指令是
将地址为80(逻辑地址)的存储单元写入1,那么当cpu要执行这个指令的时候,cpu会根
据重定位寄存器上显示该程序的起始位置,比如100(物理地址),加上逻辑地址,就是
这个指令真正在内存中存在的地址
优点:
1.允许程序在内存中发生移动(只需将重定位寄存器更新该程序新的起始位置即可)
2.并且可将程序分配到不连续的存储区中;在程序运行前只需装入它的部分代码即可投入允许,然后在程序运行期间,根据需要动态申请分配内容;便于程序段的共享
链接的三种方式
课后思维导图总结
内存保护
方法一:
在CPU中设置一对上、下限寄存器,存放进程的上下限地址。进程的指令要访问某个地址时,CPU检查是否越界
方法二:
采用重定位寄存器和界地址寄存器。界地址寄存器中存放的时进程的最大逻辑地址,重定位寄存器中存放的是进程的起始物理地址
课后思维导图总结
覆盖与交换
覆盖技术
交换技术
交换技术的设计思想:
内存空间紧张时,系统将内存中某些进程暂时换出外存,把外存中某些已具备运行条件的进程换入内存(进程在内存与磁盘间动态调度)
课后思维导图总结