二、理解 虚拟内存
1、虚拟内存存在的原因
计算机系统有两种地址:1、物理地址 2、虚拟地址
物理地址:是指真实的地址,是物理存在的,比如RAM、flash等
虚拟地址:是指抽象出来的地址,虚拟地址是由虚拟存储器管理的。
存在的原因:
由于我们在计算机系统上运行的进程常常不止一个,所以多个进程同时使用主存时,对进程的内存管理就比较复杂。为了解决这个问题,我们就像到将进程的内存独立出来,就比较方便管理了。但是事实上我们真的可以完完全全的将进程的内存完完全全独立吗?这坑定是不行的,比如C语言的库,一些全局变量等这些都是要共享的,所以,就将这个设想的内存抽象出来,并命名为虚拟内存。
(还有其他原因,具体去看《深入了解计算机系统》了解噜)
所以我们可以知道:每个进程都有一个独立的虚拟内存,每个虚拟内存都存在共享的部分。
2、物理地址和虚拟地址
前面我们介绍到虚拟内存是抽象出来的一个概念,那么总有使用到物理内存的时候,没有物理内存数据也没有办法存储了。那么我们如何通过虚拟内存的虚拟地址得到物理内存的物理地址呢?
计算机系统内有一个叫MMU(存储器管理单元)硬件,它的功能就是将虚拟地址翻译成物理地址。
3、植入 地址空间 概念
地址空间实际上是一个非负整数的地址的集合,如果一个地址空间是连续且线性的,那么就叫这个地址空间为 线性地址空间。
虚拟地址空间:存放虚拟地址的集合。虽然虚拟内存是一个抽象的概念,但是在它的大小、模型并不是随意的。
虚拟地址空间的大小:2n。当一个系统是8位系统时,它的虚拟地址空间最大就是28 = 256位。想我们平时使用的电脑都是32位或者64位的系统。
物理地址空间:存放物理地址的集合。
为什么要植入 地址空间 这个概念呢?
因为我们要将具体的数据的对象(字节)和属性(地址)这两个概念分开。《深入理解计算机系统》原话:允许每一个数据对象有多个地址,每个地址来自不同的地址空间,一个来自虚拟地址空间的虚拟地址,一个来自物理地址空间的物理地址。这就是虚拟存储器的基本思想。
4、虚拟存储器
上面已经介绍了虚拟存储器的基本思想,我们为什么要了解虚拟存储器呢?是因为在现在的计算机系统里,虚拟存储器已经作为一个重要的工具被使用,想要更透彻的了解虚拟内存,就要了解虚拟存储器。
虚拟存储器(Virtual Memory,简称VM)是一种内存管理技术,它使得计算机的操作系统能够将虚拟地址映射到物理地址,从而为程序提供比实际物理内存(RAM)更大的地址空间。
(1)虚拟存储器作为缓存的工具
因为它允许系统将最常访问的数据和程序代码保留在快速的物理内存中,而将不常用的部分暂时存储在较慢的磁盘上。当程序需要访问这些不常用的部分时,操作系统会将它们重新加载到物理内存中。例如计算机系统中主存的访问速度比磁盘的访问速度要快的多,那么VM就会将常用的数据缓存到主存中,将不常用的放在磁盘中,当需要用到放在磁盘这部分的数据时,计算机系统还是会先访问主存,当在主存中找不到这部分的数据才会访问磁盘,这运用到一种分页的机制。
(2)虚拟存储器作为存储器管理的工具
前面提过,计算机系统会为每一个进程分配一块虚拟内存,如果让进程能在这块虚拟内存上随意使用内存,那么管理起来将会非常的麻烦。所以分配给每一个进程的虚拟内存都有一个固定的结构:
像特定的数据就会存放在特定的区域,这样结构分明,计算机系统处理起来就会方便快速很多。
(3)虚拟存储器作为存储器保护的工具
前面提到,每个进程都有一个虚拟内存,部分虚拟内存已映射到物理内存上,如果进程能随意访问内存,那么就很可能一些特殊的数据被进程访问并操作,导致计算机系统出现故障。为了解决这个问题,应该限制住进程能访问的权限,将需要保护的数据保护起来。所以,在虚拟存储器的每个页表中(前面提到的分页机制),会加入该进程对该页表的访问权限标志(只读、只写、可读可写之类的),这样在进程访问页表时,先检查进程对页表的权限再对请求进行处理。
5、分页机制的简单介绍
虚拟页:虚拟存储器被组织在磁盘上由n个连续大小的内存单元组成的数组,每个单元都有一个唯一的虚拟地址。将虚拟存储器以p大小为单位,分割成P个空间,这些空间就叫虚拟页。
物理页:将物理存储器以p大小为单位,分割成P个空间,这些空间就叫物理页。
页表:记录着虚拟存储器和物理存储器的数据,例如下标为n的虚拟页的状态(未分配、未缓存、缓存),对应的物理页是什么、虚拟页的权限等。
页命中:当在一个存储区找到需要的数据时,就叫页命中。
缺页(页面异常):当在一个存储区找不到需要的数据时,就叫缺页。当缺页发生时,计算机系统会去下一级的存储区寻找,直到找到需要的数据。
页面置换:当物理内存不足以容纳当前所有活跃的页面时,操作系统会根据某种算法(如最近最少使用LRU算法)将一些不常用的页面从物理内存中移除,并将它们存储到磁盘上,这个过程称为“页面置换”
虚拟内存的其他介绍
继续更新中惹,如果觉得对侬U帮助就给我个赞满足一下我的虚荣心吧~~