虚拟内存
首先,什么是虚拟内存呢?
回答这个问题要从另外一个问题入手,也就是为什么有虚拟内存这个概念,我们知道一个程序要被执行,就要将他全部放入内存中,这样cpu才能访问到,一般情况下我们的物理内存也就是插在主板上的条子,比如说我的物理内存是512M,我现在要执行一个大小为 1G 的程序,按照我们前面说的,要运行这个程序就需要把这个程序全部放入内存,但是现在我们的内存只有512M,很显然放不下,简单点说就是不能执行,为了让我们的程序能执行,很显然我们就要想办法构造一个大于1G或者更大的内存出来,将我们的程序全部放进去,然后执行,怎么来构造这个内存呢?大家想想,我们的硬件系统中能作为存储器并且有很大空间的就只有硬盘,因此我们在硬盘上找到一个足够大的空间再加上我们的物理内存就构造出了这个大于1G的内存,那么我们就把这个内存叫做虚拟内存。现在应该知道什么是虚拟内存了吧,也就是物理内存加上硬盘上的一部分空间,从我个人的观点看,其实构造虚拟内存的目的就只有一个,那就是为了运行比实际的物理内存更大的程序!
虚拟地址空间:
操作系统为每个进程都分配4GB的虚拟地址空间,在分配之初,这4GB 的虚拟地址空间是没有任何实际意义的,也就是说只有4GB范围内的地址,就好比我现在有100个盒子,而我给每个人分配100个盒子的编号0~~~99,你现在只有盒子的编号,而没有盒子,所以你不能往盒子里面放东西,所以0~99的盒子编号是没有实际意义的,要想往盒子里放东西,我们就要用我们的盒子去具体化这0~~99的编号,比如说现在想要编号80的盒子能放东西,那么我们就要找到一个盒子放到编号为80的地方,这样的话80号盒子就能放东西了;同理,我们的4GB地址空间也是一样,如果想要这4GB的地址上能放上代码或则数据,那我们就要让这4GB的地址对应某个实际的物理存储器,这个物理存储器可以是虚拟内存或则存储在硬盘上的可执行文件本身;
任何时候,计算机上都存在一个程序能够产生的地址集合,我们称之为地址范围。这个范围的大小由CPU的位数决定,例如一个32位的CPU,它的地址范围是 0~0xFFFFFFFF (4G),而对于一个64位的CPU,它的地址范围为0~0xFFFFFFFFFFFFFFFF (64T).这个范围就是我们的程序能够产生的地址范围,我们把这个地址范围称为虚拟地址空间,该空间中的某一个地址我们称之为虚拟地址。与虚拟地址空间和虚拟地址相对应的则是物理地址空间和物理地址,大多数时候我们的系统所具备的物理地址空间只是虚拟地址空间的一个子集。这里举一个最简单的例子直观地说明这两者,对于一台内存为256M的32bit x86主机来说,它的虚拟地址空间范围是0~0xFFFFFFFF(4G),而物理地址空间范围是 0x000000000~0x0FFFFFFF(256M)。
在没有使用虚拟存储器的机器上,虚拟地址被直接送到内存总线上,使具有相同地址的物理存储器被读写;而在使用了虚拟存储器的情况下,虚拟地址不是被直接送到内存地址总线上,而是送到存储器管理单元MMU,把虚拟地址映射为物理地址。
大多数使用虚拟存储器的系统都使用一种称为分页(paging)机制。虚拟地址空间划分成称为页(page)的单位,而相应的物理地址空间也被进行划分,单位是页桢(frame).页和页桢的大小必须相同。在这个例子中我们有一台可以生成32位地址的机器,它的虚拟地址范围从 0~0xFFFFFFFF(4G),而这台机器只有256M的物理地址,因此他可以运行4G的程序,但该程序不能一次性调入内存运行。这台机器必须有一个达到可以存放4G程序的外部存储器(例如磁盘或是FLASH),以保证程序片段在需要时可以被调用。在这个例子中,页的大小为4K,页桢大小与页相同—— 这点是必须保证的,因为内存和外围存储器之间的传输总是以页为单位的。对应4G的虚拟地址和256M的物理存储器,他们分别包含了1M个页和64K个页桢。
在linux0.11内核中给每个程序都划分了容量为64mb的虚拟内存空间(摘自Linux内核完全剖析—基于0.12内核)也就是说4gb的虚拟内存不是每个程序单独使用的,而是各个程序共享的
分享到:
相关推荐
Linux虚拟内存管理是操作系统设计中的核心部分,它允许程序访问比实际物理内存更大的地址空间,同时优化了内存的使用效率。这一系统通过映射技术,将进程的虚拟地址转换为实际物理地址,使得多个进程可以共享同一...
"Linux虚拟内存管理" Linux操作系统中,虚拟内存管理是指使用磁盘作为RAM的扩展,以增大可用的内存大小。内核会将暂时不用的内存块的内容写到硬盘上,以便释放出内存空间供其他进程使用。当需要用到原始的内容时,...
把文件扔进该放置的位置再使用本软件 本工具仅为添加服务器虚拟内存使用(修复版) 工具分为10档,1~10分别为虚拟内存大小 > 99 删除虚拟内存,请在内存够用的情况下使用 > 1 1G虚拟内存 > 2 2G虚拟内存 &...
虚拟内存设置详解 虚拟内存是计算机系统中的一种重要组件,它可以帮助系统在内存不足的情况下继续运行。但是,虚拟内存的设置却经常被忽视,许多人认为系统默认的设置就是最好的。实际上,虚拟内存的设置对系统的...
在安卓系统中,虚拟内存(也称为RAM扩展或交换空间)是一种技术,它允许设备使用部分存储空间(如内部存储或SD卡)作为临时的RAM,以缓解物理RAM不足的问题,提升系统的运行效率和响应速度。这个“安卓机提速助手之...
Linux 内核的内存管理探秘之四 虚拟内存的管理 Linux 操作系统中,内存管理是非常重要的一部分。虚拟内存技术是现代操作系统中的一个关键技术,它克服了旧有的内存管理的限制,允许系统运行比物理内存大的应用程序...
虚拟内存配置与优化 虚拟内存是一种重要的计算机概念,它可以在物理内存不足时,充当内存使用,避免系统崩溃的情况。然而,虚拟内存太低或配置不当将会导致系统性能下降、程序崩溃等问题。因此,了解如何设置虚拟...
闲来无事,考虑到以前遇到的一个问题,使用std::vector进行数据的存储,如果存储的数据量多大或者是没有足够的内存时该何如处理,联想到学习OS时虚拟内存的概念,感觉是一个好的解决方法,于是动手写了一个小的程序...
虚拟内存是计算机操作系统中一个重要的概念,它实际上是一种内存管理技术,通过在硬盘上划分一部分空间来模拟RAM(随机存取内存),以扩大系统可用的内存容量。当物理内存不足以运行程序时,虚拟内存就起到了缓冲的...
手机虚拟内存软件是一种技术,它允许手机操作系统使用存储空间作为临时RAM(随机存取存储器)的扩展,以提升设备的性能和运行速度。在现代智能手机中,由于硬件限制,物理RAM容量可能不足以应对日益复杂的应用程序和...
虚拟内存的设置方法 虚拟内存是计算机系统中的一种技术,通过将部分内存空间转移到硬盘上,以释放物理内存,使计算机系统运行更加流畅。虚拟内存的设置方法可以根据不同的操作系统和硬件配置来选择。 第一步:了解...
### Linux设置虚拟内存详解 虚拟内存是现代操作系统中一项关键技术,它允许系统将部分物理内存(RAM)的页面暂时转移到硬盘上,从而为运行更多或更大的程序腾出空间。在Linux系统中,这一功能同样存在,对于那些...
"电脑虚拟内存设置详解" 在计算机系统中,虚拟内存(Virtual Memory)是一种重要的技术,它可以缓解 CPU 运行的压力,提高系统的性能。虚拟内存是指将一部分硬盘空间分配出来作为内存使用,弥补物理内存的不足。接...
虚拟内存是计算机系统中一种重要的资源管理机制,它允许操作系统使用硬盘空间来模拟RAM(随机存取内存),以此扩展物理内存的容量。当系统需要更多内存但物理内存不足时,虚拟内存便发挥作用,将暂时不活跃的数据从...
对于电脑新手来说,面对虚拟内存不足的状况时,往往束手无策。虚拟内存是电脑内存管理中一个重要的概念,它让系统能够使用硬盘空间来模拟物理内存,当实际物理内存不足时,操作系统会利用虚拟内存来临时存放数据。但...
本课程设计旨在通过C++语言实现虚拟内存的模拟,帮助学生深入理解虚拟内存的工作原理及其在实际操作中的应用。 虚拟内存的基本思想是将物理内存与硬盘空间相结合,创建一个比实际物理内存大得多的逻辑地址空间。...
虚拟内存是计算机操作系统中的一种重要机制,用于缓解物理内存不足的问题。当计算机的物理内存不足以运行所有应用程序和服务时,操作系统会使用硬盘空间作为临时存储,这部分硬盘空间就被称为虚拟内存或页面文件。...
### 设置虚拟内存:深入解析与优化策略 #### 核心概念理解 虚拟内存是计算机操作系统中的一个重要特性,它允许系统将部分硬盘空间用作内存来使用,从而在物理内存(RAM)不足时,提供额外的存储空间。在Windows...
虚拟内存是计算机操作系统中的一种重要概念,它是一种内存管理技术,允许程序使用超过物理内存容量的地址空间。在本文中,我们将深入探讨虚拟内存分配的原理、作用以及如何在实际应用中进行分配。 虚拟内存的核心...
### 虚拟内存的基本概念 虚拟内存是现代操作系统中一项关键的技术,它通过将一部分硬盘空间模拟为内存使用,从而扩展了计算机物理内存的大小。这种方法不仅提高了系统的可用内存容量,还增强了程序运行时的灵活性与...