内存使用(分段、分区、分页、多级页表、快表)--OS

本文介绍了内存管理的基本原理,包括分段、内存分区(固定分区与可变分区)、分页机制以及多级页表。分段允许对程序的不同部分进行独立管理,内存分区解决了内存分配的灵活性问题。分页通过页表进行地址翻译,减少了内存浪费。多级页表进一步优化了空间占用,但增加了访存次数。快表(TLB)作为高速缓存,提高了地址翻译的效率,利用程序地址访问的局部性提高系统性能。
摘要由CSDN通过智能技术生成

内存使用

内存使用:将程序放在内存中,PC指向内存地址

首先,我们需要让程序进入内存

举个例子

int main(int argc, char *argv[])
{
    ...
}
.text
_entry: //入口地址
    call _main
    call _exit
_main:
    ...
    ret

_entry: //入口地址
    call 40
    call xx
_main: //偏移是40
    ...

我们需要把上面这段程序放入内存中,因为里边有条指令call 40,这意味着在物理内存中,main函数就必须放在内存地址为40的地方,这样程序才能执行

//物理内存中
40: _main: mov[300], 0
...
call x
call 40

上面的方法理论上是可行的,代码确实能够在内存中运行,但是程序必须放在0地址处,main函数必须放在40处,如果有多个程序同时需要用到40处的内存,那么就会发生冲突,因此,我们需要修改程序中的地址,也就是将程序中的地址加上偏移,比如说把程序开始地址放在1000处

1040: _main: mov[300], 0
...
call x
call 40  --> ip=1000

重定位:修改程序中的地址(是相对地址)

找一段空闲的内存,将程序放入内存中,重定位程序中的逻辑地址

什么时候完成重定位?编译时,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值