c++跨进程获取模块基地址_虚拟化(5):地址翻译

本文介绍了C++中实现跨进程获取模块基地址的虚拟化技术,涉及地址翻译原理。通过硬件的基址和界限寄存器以及MMU(内存管理单元)进行地址转换,确保每个进程看到独立的地址空间。操作系统负责物理内存管理和进程切换时的地址更新,同时处理异常情况。
摘要由CSDN通过智能技术生成

首先先回顾了下cpu的LDE模式的思路,主要就是在大多数时间让程序直接在硬件上运行,但是在一些关键功能上,比如硬件访问,进程调度上能够让os得到控制,从而实现了高效运行的同时也能保证对系统的控制

这一章要说的内存控制也是一样的思路,我们需要一些基本的硬件的支持,在这之上让os能够高效的实现vm.并且我们实现的vm也是需要有很好的扩展性,因为对程序来说,内存的变化是非常频繁的。

为了实现vm,我们会使用到地址翻译,也就是说程序看到的内存地址都是虚拟的,而实际的物理地址是由os来掌握的,当然单凭硬件是无法虚拟的,硬件只是提供了实现的基本支持,需要os会运用物理硬件的功能,加上软件的管理来记录实际物理地址的使用情况,提供对应的分配和回收内存的功能,从而实现在对内存加以控制的情况下的高效的虚拟化。

再次强调,我们要做的是实现一个美好的假象:让每个进程都能看到自己独立的,并且大小一致的地址空间。在这之下的各种盘根错节的处理都由os来进行。

首先从最基本的说起,我们先做几个简单的假设:

1.用户的地址空间在物理内存中是连续存储的

2.地址空间的大小不会大于物理内存

3.假设地址空间都是相等大小的

首先我们来介绍一种动态分配地址空间的方式:

比如这段代码

128: movl 0x0(%ebx), %eax ; load 0+ebx into eax

132: addl $0x03, %eax ; add 3 to eax register

135: movl %eax, 0x0(%ebx) ; store eax back to mem

如果要运行这个程序,首先

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值