本文已参与「新人创作礼」活动,一起开启掘金创作之路。
前言
在上文《【千字长文】带你了解操作系统内核》,我们了解了操作系统内核的概念以及分类。也知道了应用程序要与硬件交互,需要通过操作系统内核才行。接下来,就为大家讲解下操作系统中另外一个核心模块:虚拟内存。
虚拟内存是什么?
我们知道,在计算机硬件中,有一个非常重要的模块:物理内存。而在现在的大部分操作系统中,也同样存在一个类似的模块,虚拟内存。它是什么东西?
对于虚拟内存,这里引用下百度百科
的定义:
虚拟内存是
计算机系统内存管理
的一种技术。它使得应用程序
认为它拥有连续的可用的内存
(一个连续完整的地址空间
),而实际上,它通常是被分隔成多个物理内存
碎片,还有部分暂时存储在外部磁盘存储器
上,在需要时进行数据交换
。大多数操作系统
都使用了虚拟内存,如Windows家族的“虚拟内存”;Linux的“交换空间”等。
从上面的定义中可以看出,虚拟内存是一种将内存管理技术
,它通过整合物理内存
和磁盘存储器
,在物理内存
和应用程序
中间构建了一层中间层。对应用程序来说,没有物理内存
的概念,它直接接触的就是虚拟内存
。
虚拟内存
会为应用程序提供简洁和易用的接口,以及一些更复杂的功能,方便应用程序的内存使用
。具体的可以参考下图:
为什么需要虚拟内存?
我们先假设没有虚拟内存的存在,应用程序可以直接访问物理内存,这样的话,会存在以下这些问题:
1、应用程序可以随意操作其它应用程序,甚至是操作系统的内存,此问题已经在《【千字长文】带你了解操作系统内核》中描述过,此处不再赘述。而虚拟内存
的一个基本功能就是会将应用程序所属内存隔离,虚拟内存
会为每个应用程序分配独立内存空间。每个应用程序只能操作其所拥有的内存空间,没办法操作其它应用程序的内存空间。提供了系统的安全性。
2、应用程序如果直接访问物理内存的话,应用程序在操作物理内存的时候,需要明确的知道每个数据所存储的物理内存地址
,而且,在多进程的环境下,我们还要注意变量不能使用同一个地址,否则将会出现地址冲突
。而虚拟内存
自带了一套地址转换机制,能够通过操作系统内核将虚拟内存地址
转换为物理内存地址
,应用程序不用进行任何相关处理。
3、其它复杂逻辑处理,例如:如果物理内存空间不足,应用程序需要提供内存淘汰逻辑处理;进程启动或者其它需要申请内存空间的时候,需要计算向物理内存
申请多少空间......而虚拟内存
还已经帮我们完成了所有这些功能。
后言
既然看到这里了,感觉有所收获的朋友,不妨来个大大的点赞吧~~~