简介
内存位置是指程序装入内存时的位置,一般与装入方式有关。装入方式设计到内存位置的存储分配方式。在将一个装入模块装入内存时,可以有绝对装入方式、可重定位装入方式和动态运行时装入方式。不同装入方式决定内存位置是绝对的还是相对的,或者说是静态的还是动态的。
程序的装入方式绝对装入方式绝对装入方式(Absolute Loading Mode)在编译时,如果知道程序将驻留在内存的什么位置,那么,编译程序将产生绝对地址的目标代码。例如,事先已知用户程序(进程)驻留在从 R 处开始的位置,则编译程序所产生的目标模块(即装入模块)便从 R 处开始向上扩展。 绝对装入程序按照装入模块中的地址, 将程序和数据装入内存。装入模块被装入内存后,由于程序中的逻辑地址与实际内存地址完全相同,故不须对程序和数据的地址进行修改。
程序中所使用的绝对地址,既可在编译或汇编时给出,也可由程序员直接赋予。但在由程序员直接给出绝对地址时,不仅要求程序员熟悉内存的使用情况,而且一旦程序或数据被修改后,可能要改变程序中的所有地址。因此,通常是宁可在程序中采用符号地址,然后在编译或汇编时,再将这些符号地址转换为绝对地址。1
可重定位装入方式可重定位装入方式(RelocationLoadingMode),在多道程序中,不可能预知目标模块放在内存的何处,因此绝对装入方式只适于单道程序环境。采用可重定位装入方式可以根据内存当前的情况,将模块装入到内存适当的位置。当采用可重定位装入方式将模块装入到内存后,会使装入内存的所有逻辑地址与装入内存的物理地址不同。
动态运行时装入方式动态运行时装入方式(DenamleRun-timeLoading),动态运行时的装入程序,在把装入模块装入内存后,并不立即把装入模块中的相对地址转换为绝对地址,而是把这种地址转换推迟到程序真正要执行时才进行。因此,装入内存后的所有地址都仍是相对地址。
存储分配方式存储分配所要解决的问题是多道程序之间如何共享主存的存储空间。解决存储分配问题有三种方式:直接存储分配方式、静态存储分配方式、动态存储分配方式。
直接存储分配方式直接存储分配方式要求存储器的可用空间已经确定,且确保各程序所用的地址之间互不重叠。缺点是用户感到不方便,存储器的利用率也不高。
静态存储分配方式静态存储分配方式中。在程序被装入、连接时,才确定它们在主存中的相应位置(物理地址)。系统必须分配其要求的全部存储空间.否则不能装入该用户程序。程序将占据着分配给它的存储空间直到程序结束。该存储空间的位置固定不变,也不能动态地申请存储空间。这种方式无法实现用户对存储空间的动态扩展,而且也不能有效地实现存储器资源的共享。2
动态存储分配方式动态存储分配方式是不一次性将整个程序装入到主存中。可根据执行的需要,部分地动态装入。同时,在装入主存的程序不执行时,系统可以收回该程序所占据的主存空间。再者,用户程序装入主存后的位置,在运行期间可根据系统需要而发生改变。此外,用户程序在运行期间也可动态地申请存储空间以满足程序需求。由此可见,动态存储分配方式在存储空间的分配和释放上,表现得十分灵活,现代的操作系统常采用这种存储方式。