[OS复习]程序装入技术、简单存储管理技术

1.可执行程序的生成步骤


如何装入待执行的程序及其所需的数据?
何时将程序的逻辑地址转换为物理地址?
3种装入方式:绝对装入、重定位装入和运行时动态装入。 

1.1绝对装入

程序运行之前,按照程序的逻辑地址,将程序和数据装入内存指定的地方。实现简单,无须进行逻辑地址到物理地址的变换。

缺点:
程序每次必须装入同一内存区;
程序员必须事先了解内存的使用情况,根据内存情况确定程序的逻辑地址;
程序的修改(增加或删除指令)将引起整个程序中指令地址的变动;
程序中的所有存储引用,例如函数调用或过程调用等,在装入之前都必须转换为物理地址,这不利于存储共享。

1.2重定位装入

允许将程序装入与逻辑地址不同的物理内存空间。即程序可以装入到内存的任何位置,其逻辑地址与装入内存后的物理地址无直接关系。但是,必须进行地址映射,将逻辑地址转换为物理地址。
静态重定位技术:地址映射在程序装入时进行,以后不再更改程序地址。
有利于程序代码和数据的共享。因为装入程序时,可以将其中的某些存储引用的逻辑地址映射为内存中已有的共享区的物理地址。但是,静态重定位不允许程序在内存中移动。这不便于进程交换和紧凑拼接操作,也很难实现多道程序环境下,多个程序同时装入内存的要求。故,重定位装入方式只适合于单道程序环境。
运行时动态装入:程序的地址转换不是在装入时进行,而是在程序运行时动态进行。运行时动态装入需要硬件支持,即重定位寄存器,用于保存程序在内存中的起始地址。程序被执行时,通过重定位寄存器内的起始物理地址和指令或数据的逻辑地址计算其物理地址。运行时动态装入有利于多道程序环境下,进程的换进/换出及实现紧凑技术。 

2.可执行程序的链接形成 

目标模块如何链接成装入模块呢?静态链接,动态链接(装入时动态链接和运行时动态链接 )

2.1静态链接

程序被装入内存之前,必须完全链接成一个装入模块,将其中的存储引用全部转换为相对地址跳转语句。并将多个目标模块链接成为一个模块,使装入模块中的每一条指令具有相对于整个模块的第一条语句的逻辑地址。静态链接生成的装入模块可以采用重定位装入或运行时动态装入方式。静态链接需要花费大量的处理机时间。而其中的很多模块将不会运行,浪费存储空间和处理机时间。

2.2 动态链接

不用事先链接所有目标模块形成一个完备的装入模块,而是生成一个含有未被链接的外部模块引用的装入模块,这些外部模块可以在装入时链接,或运行时链接。
装入时动态链接(如为真为假两种情况都要装入,而实际上只用到了一种情况):
当系统装入含有未链接的外部模块引用的装入模块时,每当遇到一个外部模块引用,则查找相应的目标模块。将其装入内存,并将模块内的指令地址转换为相对于整个装入模块起始地址的相对地址。
优点:有利于目标模块的更新与升级;有利于代码共享;有利于扩充软件的功能,可以将扩充部分作为动态链接模块。
缺点:可能链接一些不会执行的模块,浪费存储空间和处理机时间。
运行时动态链接:
外部模块引用直至程序执行时才装入内存,并链接到装入模块中,进行地址转换。可以解决静态链接和
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值