本文已参与「新人创作礼」活动,一起开启掘金创作之路。
一、前言
在上文《Java并发编程:虚拟内存详解(三)》,我们了解了虚拟内存怎样实现进程隔离,以及虚拟内存的容量。本文将接下来为大家讲解虚拟内存的内存分配原理。
二、内存管理单元(MMU)
在讲虚拟内存分配原理之前,我们需要先了解一下MMU,这个是操作系统实现虚拟内存的一个核心原件,我们先来看下百度百科的定义:
MMU是Memory Management Unit的缩写,中文名是
内存管理单元
,有时称作分页内存管理单元(英语:paged memory management unit,缩写为PMMU)。它是一种负责处理中央处理器
(CPU)的内存访问请求
的计算机硬件
。它的功能包括虚拟地址
到物理地址
的转换(即虚拟内存管理
)、内存保护、中央处理器高速缓存的控制,在较为简单的计算机体系结构中,负责总线的仲裁以及存储体切换(bank switching,尤其是在8位的系统上)。
从上面的定义中可以看到,MMU的其中2个核心功能就是实现虚拟内存
的虚拟地址转换
和内存保护
。而这两个功能,都是通过页表
实现的,因此,其与物理内存
交互非常频繁(因为页表
是存储在物理内存中的)。
三、虚拟内存申请
在应用程序要申请内存时,操作系统会先在磁盘(disk)给分配一块空间,例如上图的VP5,然后再将VP5登记到
页表
中。
四、缺页中断
当应用程序开始运行时,就会要求操作系统将数据加载到物理内存
中,以供CPU调度使用。
这个时候,如果物理内存
中没有存在CPU需要的数据页
时,操作系统就会触发缺页中断
,然后操作系统内核就会通过页表
,找到对应的数据页
,将之从磁盘
(disk)加载到物理内存
中。
操作系统内核在触发
缺页中断
后,如果物理内存
中已经没有多余空间可以存放新的数据页
,操作系统就会根据淘汰策略
去筛选要被淘汰的数据页
,并将之从物理内存
去除。
被选中的要被淘汰的数据页
如果是脏页
(即还有数据未同步到磁盘),则操作系统会先进行刷脏
,将数据同步到磁盘。
五、后言
既然看到这里了,感觉有所收获的朋友,不妨来个大大的点赞吧~~~