操作系统——第三章 内存管理_计算机

操作系统——第三章 内存管理_计算机_02

操作系统——第三章 内存管理_计算机_03

操作系统——第三章 内存管理_计算机_04

操作系统——第三章 内存管理_装入模块_05

操作系统——第三章 内存管理_动态链接_06

(.exe)

操作系统——第三章 内存管理_静态链接_07

exe load 到内存里 转换为物理地址

操作系统——第三章 内存管理_静态链接_08

操作系统——第三章 内存管理_重定位_09

操作系统——第三章 内存管理_计算机_10

操作系统——第三章 内存管理_动态链接_11=

操作系统——第三章 内存管理_静态链接_12

操作系统——第三章 内存管理_装入模块_13

静态链接(就是静态的库) 比如printf

操作系统——第三章 内存管理_动态链接_14

(exe位于外存上)

 

 操作系统——第三章 内存管理_计算机_15

动态链接

 

操作系统——第三章 内存管理_静态链接_16

(在装入时动态链接 注意区别右边图不是exe 而是内存)

操作系统——第三章 内存管理_计算机_17

(dll

操作系统——第三章 内存管理_计算机_18

操作系统——第三章 内存管理_重定位_19

总结:

 

程序在系统中运行,必须经过以下几个步骤。 
(1)编译,由编译程序对用户源程序进行编译,形成若干个目标模块。 
(2)连接,由链接程序将编译后形成的一组目标模块以及他们所需要的库函数链接在一起,形成一个完整的装入模块。 
(3)装入,由装入程序(Loader)将装入模块装入内存。

程序的装入和连接

程序的装入

 

  1. 绝对装入方式

 

适用单道程序,因为可预测程序将驻留在内存什么位置。用户将程序编译后,将产生绝对地址(物理地址)的目标代码。

  • 可重定位装入方式

    适用于多道程序环境,编译程序不可能预知编译后的目标模块放在内存中何处。因此应采用可重定位装入方式,它可以根据内存的具体情况将装入模块装入到内存的适当位置。 
    可重定位装入程序将装入模块装入内存后,会使装入模块中的所有逻辑地址与实际装入内存的物理地址不同。又因为地址变化通常是在进程装入时一次完成的,后不变化,故称静态重定位。

  • 动态运行时的装入方式 

    动态运行时装入程序把装入模块装入内存后,并不立即把装入模块中的逻辑地址转换为物理地址,而是把这种地址转换推迟到程序真正要执行时才进行。为使地址转行不影响指令的执行速度,这种方式需要重定位寄存器的支持。

程序的链接

 

  1. 静态链接方式

程序运行前,将各目标模块及他们所需的库函数链接成一个完整的装配模块。以后不再拆开。我们把这种方式称为静态链接方式。 
eg:目标模块A,B,C,长度分别为L,M,N。 
(1)对相对地址进行修改。由编译程序产生的所以目标模块中,都是用的时相对地址,其起始地址都为0,每个模块中的地址都是相对于起始地址计算的。链接成装入模块后,原模块B和C在装入模块的起始地址不再是0。 
(2)变换外部调用符号,将每个模块中所用的外部调用符号也变为相对地址。

    • 装入时动态链接

      将用户源程序编译后得到的一组目标模块,在装入内存时,采用边装入边链接的方式。即在装入目标模块的时候,若发生了一个外部模块调用事件,将引起装入程序去找出相应的外部目标模块,并装入内存。 
      (1)便于修改和更新。对于静态链接装配到一起的装入模块,如果要修改或更新其中的某个模块必须重新打开装入模块。若采用动态链接方式,由于各目标模块时分开存放的,所以要修改各目标模块相对容易。 
      (2)便于实现对目标模块的共享。在采用静态链接的方式时,每个应用模块都必须含有其目标模块的拷贝,无法实现对目标模块的共享。但采用装入时动态链接的方式时,OS很容易将一个目标模块链接到几个应用模块上,实现多个应用程序对该模块的共享。

    • 运行时动态链接 

      将某些模块的链接推迟到程序执行时才进行。即在执行中,发现一个被调用模块尚未装入内存时,OS去找到该模块,并将之装入内存,将其链接到调用者模块上,凡在执行过程中未被调用的目标模块,都不会被调入内存和被链接到装入模块上。

 

操作系统——第三章 内存管理_动态链接_20

操作系统——第三章 内存管理_动态链接_21

 

 操作系统——第三章 内存管理_静态链接_22

操作系统——第三章 内存管理_重定位_23

操作系统——第三章 内存管理_计算机_24

 

 操作系统——第三章 内存管理_动态链接_25

操作系统——第三章 内存管理_动态链接_26

操作系统——第三章 内存管理_装入模块_27

操作系统——第三章 内存管理_静态链接_28

操作系统——第三章 内存管理_重定位_29

 

 操作系统——第三章 内存管理_装入模块_30

操作系统——第三章 内存管理_重定位_31

操作系统——第三章 内存管理_动态链接_32

 

 操作系统——第三章 内存管理_重定位_33

操作系统——第三章 内存管理_动态链接_34

操作系统——第三章 内存管理_动态链接_35

操作系统——第三章 内存管理_装入模块_36

操作系统——第三章 内存管理_计算机_37

操作系统——第三章 内存管理_静态链接_38

操作系统——第三章 内存管理_计算机_39

操作系统——第三章 内存管理_装入模块_40

 

 操作系统——第三章 内存管理_计算机_41

操作系统——第三章 内存管理_动态链接_42

操作系统——第三章 内存管理_装入模块_43

操作系统——第三章 内存管理_计算机_44

操作系统——第三章 内存管理_装入模块_45

操作系统——第三章 内存管理_装入模块_46

操作系统——第三章 内存管理_计算机_47

操作系统——第三章 内存管理_静态链接_48

操作系统——第三章 内存管理_装入模块_49

操作系统——第三章 内存管理_计算机_50

操作系统——第三章 内存管理_计算机_51

 

 操作系统——第三章 内存管理_动态链接_52

操作系统——第三章 内存管理_动态链接_53

操作系统——第三章 内存管理_重定位_54

操作系统——第三章 内存管理_计算机_55

操作系统——第三章 内存管理_静态链接_56

操作系统——第三章 内存管理_计算机_57

操作系统——第三章 内存管理_动态链接_58

操作系统——第三章 内存管理_重定位_59

操作系统——第三章 内存管理_动态链接_60

操作系统——第三章 内存管理_装入模块_61

 

 操作系统——第三章 内存管理_动态链接_62

操作系统——第三章 内存管理_重定位_63

 

 操作系统——第三章 内存管理_静态链接_64

操作系统——第三章 内存管理_静态链接_65

操作系统——第三章 内存管理_计算机_66

 

 操作系统——第三章 内存管理_重定位_67

操作系统——第三章 内存管理_装入模块_68

操作系统——第三章 内存管理_装入模块_69

操作系统——第三章 内存管理_重定位_70

操作系统——第三章 内存管理_动态链接_71

操作系统——第三章 内存管理_重定位_72

操作系统——第三章 内存管理_装入模块_73

操作系统——第三章 内存管理_装入模块_74

操作系统——第三章 内存管理_静态链接_75

操作系统——第三章 内存管理_重定位_76

操作系统——第三章 内存管理_静态链接_77

 

操作系统——第三章 内存管理_动态链接_78

 

 操作系统——第三章 内存管理_静态链接_79

操作系统——第三章 内存管理_静态链接_80

操作系统——第三章 内存管理_装入模块_81

操作系统——第三章 内存管理_动态链接_82

操作系统——第三章 内存管理_重定位_83

操作系统——第三章 内存管理_动态链接_84

 

 操作系统——第三章 内存管理_静态链接_85

页式存储:…动态存储…

段式存储:把程序分段存储…

段页式存储: 段加页的存储….

 

虚拟存储器:

操作系统——第三章 内存管理_动态链接_86

操作系统——第三章 内存管理_重定位_87

操作系统——第三章 内存管理_动态链接_88

操作系统——第三章 内存管理_装入模块_89

操作系统——第三章 内存管理_计算机_90

操作系统——第三章 内存管理_动态链接_91

操作系统——第三章 内存管理_静态链接_92

操作系统——第三章 内存管理_动态链接_93

操作系统——第三章 内存管理_装入模块_94

操作系统——第三章 内存管理_重定位_95

操作系统——第三章 内存管理_装入模块_96

操作系统——第三章 内存管理_静态链接_97

操作系统——第三章 内存管理_装入模块_98

操作系统——第三章 内存管理_计算机_99

操作系统——第三章 内存管理_重定位_100

操作系统——第三章 内存管理_装入模块_101

操作系统——第三章 内存管理_装入模块_102