计算机底层知识拾遗(一)理解虚拟内存机制

这个系列会总结计算机,网络相关的一些重要的底层原理。很多底层原理大家上学的时候都学过,但是在学校的时候大部分的同学都是为了应付考试而学习,过几天全忘了。随着工作的时间越久,越体会到这些基础知识的重要性。做技术和练武功一样,当你到了一定的阶段,也会遇到一个瓶颈,突破了你的眼界就会大不同,突破不了,只能困在原地无法成长。我自己深有体会,这些基础知识,底层原理是助你打破瓶颈的灵丹妙药。当理解了一些底层原理之后,会发现现在很多热门技术,原理,常见的设计都是在底层基础上发展而来的。


这篇总结一下单机系统的虚拟内存原理。在聊聊高并发(三十四)Java内存模型那些事(二)理解CPU高速缓存的工作原理 这篇中说了CPU高速缓存的一些原理,虚拟内存也是缓存原理的应用,它是单机系统管理内存的手段,很多设计非常经典,在分布式存储系统中可以看到这些原理和设计的应用。


虚拟内存是单机系统最重要的几个底层原理之一,它由底层硬件和操作系统两者软硬件结合来实现,是硬件异常,硬件地址翻译,主存,磁盘文件和内核的完美交互。它主要提供了3个能力:

1. 给所有进程提供一致的地址空间,每个进程都认为自己是在独占使用单机系统的存储资源

2. 保护每个进程的地址空间不被其他进程破坏,隔离了进程的地址访问

3. 根据缓存原理,上层存储是下层存储的缓存,虚拟内存把主存作为磁盘的高速缓存,在主存和磁盘之间根据需要来回传送数据,高效地使用了主存


包括几块内容

1. 虚拟地址和物理地址

2. 页表

3. 地址翻译

4. 虚拟内存相关的数据结构

5. 内存映射


虚拟地址和物理地址

对于每个进程来说,它使用到的都是虚拟地址,每个进程都看到一样的虚拟地址空间,对于32位计算机系统来说,它的虚拟地址空间是 0 - 2^32,也就是0 - 4G。对于64位的计算机系统来说,理论的虚拟地址空间是 0 - 2^64,远高于目前常见的物理内存空间。虚拟地址空间不需要和物理地址空间一样大小。

Linux内核把虚拟地址空间分为两部分: 用户进程空间和内核进程空间,两者的比例一般是3:1,比如4G的虚拟地址空间,3G用户用户进程,1G用于内核进程。

下图是一个典型的Linux进程的虚拟地址空间分布

在说CPU高速缓存的时候说过CPU只直接和寄存器和高速缓存打交道,CPU在执行进程的指令时要取一个实际的物理地址的值的时候主要有几步:

1. 把进程指令使用的虚拟地址通过MMU转换成物理地址

2. 把物理地址映射到高速缓存的缓存行

3. 如果高速缓存命中就返回

4. 如果不命中,就产生一个缓存缺失中断,从主存相应的物理地址取值,并加载到高速缓存中。CPU从中断中恢复,继续执行中断前的指令


所以高速缓存是和物理地址相映射的,进程指令中使用到的是虚拟地址。

操作系统内存管理

在缓存原理中,数据都是按块来进行逻辑划分的,一次换入/换出的数据都是以块为最小单位&

  • 31
    点赞
  • 134
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值