内存管理之概念

程序装入和链接

程序在经过编译成目标模块(.obj)文件,链接程序链接之后,需要将对应的模块装入内存,有三种方式:

(1)绝对装入,绝对装入程序按照装入模块中的地址,将程序和数据装入内存。由于程序中的逻辑地址与实际地址完全相同,不需要对程序和数据的地址进行修改。

——只适用于单道程序环境(也就是说,基本上接触不到了)

(2)可重定位装入,在多道程序环境中,多个目标模块的起始地址通常都是从0开始的,装入时对目标程序中的指令和数据的修改过程称为重定位。地址变换通常是在装入时一次完成的,又称为静态重定位。最大特点是一个作业装入内存时必须分配其要求的全部内存空间,如果没有足够内存,就无法装入。作业一旦进入内存,整个运行期间不能在内存中移动,也不能再申请内存空间(C语言的mallocC++new怎么办。。。)

(3)动态运行时装入,即动态重定位,需要一个重定位寄存器的支持。最大特点就是可以将程序分配到不连续的存储区中。运行之前装入部分代码即可运行,运行期间可以根据需要动态申请内存,可以用用户提供一个比存储空间大的多的地址空间

 

逻辑地址与物理地址的关系:

编译后,每个目标模块都是从0号单元开始编址,称为该目标模块的相对地址(或逻辑地址)。当链接程序将各个模块链接成一个完整的可执行目标程序时,链接程序依次按各个模块的相对地址构成统一的从0号单元开始编址的逻辑地址空间

当装入程序将可执行代码装入内存时,必须通过地址转换将逻辑地址转换成物理地址,这个过程称为地址重定位

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux 内存管理主要包括内存节点、分区、页框和虚拟内存概念。 1. 内存节点 Linux 根据 CPU 访问代价的不同将内存划分为不同的分区,即内存节点。内核以 struct zone 来描述内存分区。通常一个节点分为 DMA、Normal 和 High Memory 内存区。其中,DMA 内存区为直接内存访问分区,通常为物理内存的起始16M,供外设使用,外设和内存直接访问数据而无需 CPU 参与;Normal 内存区为从 16M 到 896M 的内存区;HighMemory 内存区为 896M 以后的内存区。 2. 分区 内存节点中的分区是内存管理的基本单位,每个分区都有自己的页框列表和空闲页框列表。页框是内存管理的最小单位,通常为 4KB。内核通过页框来管理内存,将内存分为多个页框,每个页框都有自己的状态,包括已分配、未分配、已使用等。 3. 页框 页框是内存管理的最小单位,通常为 4KB。内核通过页框来管理内存,将内存分为多个页框,每个页框都有自己的状态,包括已分配、未分配、已使用等。内核通过页表来映射虚拟地址和物理地址,将虚拟地址转换为物理地址。 4. 虚拟内存 虚拟内存是一种将硬盘中划出一段 swap 分区当作虚拟的内存,用来存放内存中暂时用不到的内存页,等到需要的时候再从 swap 分区中将对应的内存页调入到内存中的技术。硬盘此时相当于一个虚拟的内存。Linux 通过虚拟内存技术来扩展内存,使得进程可以使用比物理内存更大的内存空间。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值