存储器的层次结构
存储器的层次如下图:
上图中,寄存器和主存储器称为可执行存储器。高速缓存的作用是缓和CPU与内存之间的速度差异,主要由硬件实现。磁盘缓存的出现是由于内存容量不够,需要引入磁盘,然而磁盘的I/O速度远低于主存的访问速度,为了缓和两者之间在速度上的差异,设置了磁盘缓存。磁盘缓存与高速缓存不同,它本身并不是实际存在的存储器,是利用主存中的部分空间暂时存放从磁盘中读出写入的信息。
程序的装入与链接
用户程序需要运行,必须先将它装入内存,然后再将其转变为一个可以执行的程序,通常要经历一下几个步骤:
- 编译:由编译程序对用户源程序进行编译,形成若干个目标模块。
- 链接:有链接程序将编译后形成的一组目标模块以及他们所需要的库函数链接在一起,形成一个完整的装入模块。
- 装入:由装入程序将装入模块装入内存。具体过程如下图:
1. 程序的装入
1) 地址空间
- 程序编译时还没有装入主存,还不能确定它在主存中的实际位置,所以都是从0开始。
- 相对于0位置开始的地址称为逻辑地址,也称为相对地址。地址空间是指逻辑地址的集合。
2) 存储空间
- 一个程序在主存中的实际位置称为物理地址。物理地址的集合就是存储空间。
程序的装入有三种方式:
1) 绝对装入方式
- 在编译时,如果知道程序将驻留在内存的什么位置,那么,编译程序将产生绝对地址的目标代码。绝对装入程序按照装入模块中的地址,将程序和数据装入内存。
- 装入模块被装入内存后,由于程序中的逻辑地址与实际内存中的地址完全相同,故不需对程序和数据的地址进行修改。
2) 可重定位装入方式
- 地址变换是在装入时一次完成的,以后不再改变(静态重定位)。
3) 动态运行时的装入方式
- 把装入模块装入内存后,并不立即把装入模块中的相对地址转换为绝对地址,而是把