内存概述
内存是存放进程的存储器,可以按字节编址或按字编址。内存种存放进程的地址是物理地址,但一般不会在程序种使用物理地址,而是使用逻辑地址,在把进程装入内存时,需要把逻辑地址转化成物理地址。
地址:逻辑地址(相对地址),物理地址(绝对地址)
从源代码到变成进程运行:
编译:由源代码生成目标模块,把高级语言翻译成机器语言。
链接:由目标模块生成装入模块,形成完整的逻辑地址。
装入:把装入模块装入内存, 形成物理地址。
装入方式:
- 绝对装入:编译器负责地址转换,产生绝对地址。;装入程序按装入模块中的地址存储代码和数据。只适用于单道程序。
- 静态重定位:又称可重定位装入,装入程序负责地址转换。装入模块的地址是从0开始的逻辑地址,由装入程序“重定位”,转化为物理地址,将模块存入到内存中合适的位置。用于早期的多道程序计算机。
- 动态重定位:又称动态运行时装入,运行后才进行地址转换。装入内存后仍然是逻辑地址,运行时才转化为物理地址,需要设置一个重定位寄存器,存放存放装入模块的起始地址。这样,程序就可以靠部分代码运行起来,运行时可以动态申请内存。应用于现代操作系统。
链接方式:
- 静态链接:把整个模块装入内存。
- 装入时动态链接:边装入边链接。
- 运行时动态链接:在需要时才链接模块。
内存保护:
设置上、下限寄存器,比如逻辑