Java并发编程:虚拟内存之内存分配原理

114 阅读2分钟

src=http___i0.hdslb.com_bfs_article_807aa46619617caf3a3ea976300b575abae0676c.png&refer=http___i0.hdslb.webp 本文已参与「新人创作礼」活动,一起开启掘金创作之路。

一、前言

       在上文《Java并发编程:虚拟内存详解(三)》,我们了解了虚拟内存怎样实现进程隔离,以及虚拟内存的容量。本文将接下来为大家讲解虚拟内存的内存分配原理。

二、内存管理单元(MMU)

       在讲虚拟内存分配原理之前,我们需要先了解一下MMU,这个是操作系统实现虚拟内存的一个核心原件,我们先来看下百度百科的定义:

       MMU是Memory Management Unit的缩写,中文名是内存管理单元,有时称作分页内存管理单元(英语:paged memory management unit,缩写为PMMU)。它是一种负责处理中央处理器(CPU)的内存访问请求计算机硬件。它的功能包括虚拟地址物理地址的转换(即虚拟内存管理)、内存保护、中央处理器高速缓存的控制,在较为简单的计算机体系结构中,负责总线的仲裁以及存储体切换(bank switching,尤其是在8位的系统上)。

       从上面的定义中可以看到,MMU的其中2个核心功能就是实现虚拟内存虚拟地址转换内存保护。而这两个功能,都是通过页表实现的,因此,其与物理内存交互非常频繁(因为页表是存储在物理内存中的)。

三、虚拟内存申请

       d76c59799eee16d6162f1c5f2fa3949d.jpeg        在应用程序要申请内存时,操作系统会先在磁盘(disk)给分配一块空间,例如上图的VP5,然后再将VP5登记到页表中。

四、缺页中断

       当应用程序开始运行时,就会要求操作系统将数据加载到物理内存中,以供CPU调度使用。
       这个时候,如果物理内存中没有存在CPU需要的数据页时,操作系统就会触发缺页中断,然后操作系统内核就会通过页表,找到对应的数据页,将之从磁盘(disk)加载到物理内存中。

       操作系统内核在触发缺页中断后,如果物理内存中已经没有多余空间可以存放新的数据页,操作系统就会根据淘汰策略去筛选要被淘汰的数据页,并将之从物理内存去除。
       被选中的要被淘汰的数据页如果是脏页(即还有数据未同步到磁盘),则操作系统会先进行刷脏,将数据同步到磁盘。

五、后言

       既然看到这里了,感觉有所收获的朋友,不妨来个大大的点赞吧~~~