浅谈内存管理和虚拟内存

「这是我参与11月更文挑战的第17天,活动详情查看:2021最后一次更文挑战

前言

 大家好,我是程序猿小白 GW_gw,很高兴能和大家一起学习进步。
复制代码

以下内容部分来自于网络,如有侵权,请联系我删除,本文仅用于学习交流,不用作任何商业用途。

摘要

 本文主要介绍内存管理和虚拟内存的一些基本概念。
复制代码

1. 内存管理

1.1 为什么要有内存管理

在很久以前,程序是放在卡片上的,计算机从卡片上读取指令来运行程序,但这种做法效率很低,并且灵活性很差。为了解决这个问题,人们发明了内存储器,将所需要运行的程序先加载到内存中去,然后执行。这就需要对程序进行存储,因此有了以下的内存架构。

1.1.1 内存架构

现代计算机的内存架构是:缓存,主存,磁盘组成。来看下面一张图来理解。

image-20211119103624818

而为了有效的管理内存架构,就有了内存管理的概念。

内存管理就是对内存架构进行管理,使程序在内存架构中存放的层次对用户来说使透明的。

1.2 内存管理的目标

首先如果是多个程序同时存放在内存中,那么它们之间不能访问互相访问对方的地址,否则是件很危险的事情。其次,我们在编写程序时不能确定将来我们的程序会在什么环境下运行,因此我们在使用地址时不能使用实际的物理地址。我们使用的其实是程序的虚拟空间地址。关于虚拟地址我们后面再说。

小结一下,内存管理要达到的两个目标:

  • 地址保护:一个程序不能访问另一个程序的地址空间。
  • 地址独立:程序发出的地址与物理主存地址无关。

1.3 虚拟内存

虚拟内存其实是一个抽象的概念,看名字就知道,虚拟内存是虚拟出来的,并不是真实存在的。那为什么会有虚拟内存呢?

我们知道,内存的容量是很小的,而程序又需要加载到内存中才能运行,那我们就只能把程序写的很小,为了解决这个问题,于是就提出了虚拟内存的概念。虚拟内存就相当于把磁盘也当作了主存来使用,那怎么来实现这一目的呢,当然是通过地址啦。通过虚拟地址来找到程序的实际物理地址,从而达到了"扩充主存"的目的。

小结

以上就是我对内存管理和虚拟内存的一些理解,希望能对读者有所帮助,如有不正之处,欢迎留言指正。

Guess you like

Origin juejin.im/post/7032257095634255879