深入Linux内核架构笔记(进程虚拟内存)

本文深入探讨Linux内核架构中的虚拟内存管理,32位与64位架构的区别,以及进程虚拟地址空间的划分。重点讲解内存映射过程,包括mmap调用、内存锁定(VM_LOCKED)、预热策略与内存使用建议(如MADV_WILLNEED)。同时,文章提及RocketMQ源码中的预热和锁定操作,并提出了关于预热时机、锁定内存后预读是否必要的疑问。
摘要由CSDN通过智能技术生成

在32位架构中,进程的虚拟地址按照3:1的比例划分为内核空间和用户空间,这样划分是为了实现CPU的不同权限,而64位架构中,因为进程的虚拟地址足够大,所以没有这个划分,都是足够的,一般是1:1,高位作为内核空间,地位作为用户空间,虽然64位的系统寻址可以达到很大,但是实际的CPU硬件的寻址并没有那么大,目前一般只有48根地址先,也就是可以256T这么大,那么高位的128T作为内核空间,地位的128T作为用户空间,中间的一部分作为不可用部分,这个通过地址空间的转换来实现的,具体参考前面的文章

而用户空间分为如下几个部分:

代码段,堆栈分开,

因为不同段地址的访问权限不同,比如代码段只能读,不能写,数据段可以读可以写,所以进程的地址划分为了不同的段,每个段都有相应的页表映射到物理地址

内存映射

通过mmap 调用来创建映射

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值