内存的基础知识(很重要,不跨考也得听)
内存在cpu和外存之间
用于缓和cpu和外存的速度矛盾
逻辑地址
相对地址
物理地址
绝对地址
把逻辑地址装入物理地址有三种装入策略
1.绝对装入
在编译时,如果知道程序将会存放到那个位置,编译程序就会产生绝对地址等目标代码,装入程序按照装入模块中的地址,将程序和数据装入内存
绝对装入只适用于单道程序环境
2.静态重定位
又称可重定位装入。编译、链接后的装入模块的地址都是从0开始的,指令中使用的地址、数据存放的地址都是相对于起始地址而言的逻辑地址。可根据内存的当前情况,将装入模块装入到内存的适当位置。装入时对地址进行“重定位”,将逻辑地址变换为物理地址(地址变换是在装入时一次完成的)。
静态重定位的特点是在一个作业装入内存的时候,必须分配其要求的全部内存空间,如果没有足够的内存,就不能装入该作业
作业一旦装入内存之后,就不能再移动了,也不能再申请内存空间
3.动态重定位
动态运行时装入,编译连接后装入模块的地址都是从0开始,装入程序把装入模块装入内存后,并不会立即把巡逻地址转化成物理地址,而是把地址转换推迟到程序真正要执行的时候才进行,因此装入内存后的地址依然是逻辑地址,这个方式需要重定位寄存器支持
动态重定位时 允许程序再内存中发生移动
编译:由编译程序将用户源代码编译成若干个目标模块(把高级语言翻译成机器语言)
连接:由连接程序将编译后形成的一组目标模块,以及所需的库函数连接在一起,形成一个完整的装入模块
装入:由装入程序将装入模块装入内存运行
静态连接
再程序运行之前,现将各目标模块以及他们所需的库函数连接成为一个完整的可执行文件,之后不再拆开
装入时动态连接
将各目标模块装入内存时,一边装入一边连接的连接方式
运行时动态连接
再程序执行中需要该目标模块时,才对他进行连接,其优点便是修改和更新,便于实现对目标模块的共享。