将逻辑程序放入系统中的步骤通常包括编译、链接和装入。以下是详细步骤:
编译
编译器(Compiler)将用户源代码编译成若干目标模块(Object Module),这些模块通常是`.obj`文件。
链接
链接器(Linker)将编译后形成的一组目标模块以及它们所需要的库函数链接在一起,形成一个完整的装入模块(Load Module),例如`.exe`文件。链接过程中可能会进行符号解析,将符号地址转换为物理地址。
装入
装入程序(Loader)将装入模块装入主存。装入模块可以以三种方式装入主存:
绝对装入方式:在编译时已知程序驻留在主存的具体位置,编译器会生成物理地址的目标代码。装入后,程序和数据使用物理地址,不需要修改。
静态重定位装入方式:在装入时,链接器将相对地址转换为物理地址。装入后,程序中的逻辑地址和实际主存地址仍然不同,但在运行时不需要修改。
动态重定位装入方式:在装入时,装入程序将相对地址保留在装入模块中,在程序执行时由动态重定位机制将相对地址转换为物理地址。这种方式允许程序在多个内存区域中运行,具有更好的灵活性。
注意事项:
符号地址:在程序中使用符号地址,在编译或汇编时将其转换为物理地址。这样可以简化地址管理,减少修改程序时的工作量。
库函数:链接时需要确保所有依赖的库函数都已正确链接,否则可能导致程序运行时出错。
内存管理:根据应用需求选择合适的装入方式,以确保程序的高效运行和内存的有效利用。
通过以上步骤,逻辑程序可以被成功放入系统中并执行。