彻底搞懂虚拟内存,虚拟地址,虚拟地址空间

683 篇文章 145 订阅
订阅专栏

程序经过编译后,变成了可执行的文件,可执行文件主要包括代码和数据两部分,代码是只读的,数据则是可读可写的。

可执行文件由操作系统加载到内存中,交由CPU去执行,现在问题来了,CPU怎么去访问代码和数据?,访问的方式经历过四个阶段:

1.直接访问

2.段基址+段偏移地址

3.段选择子+段偏移地址

4.虚拟地址

现代操作系统采用的是虚拟地址,这也是本篇文章阐述的重点,但虚拟地址是由1~3阶段发展而来的,所以也有必要阐述1~3三种访问方式。

直接访问

直接访问很好理解,程序经过编译后,生成了可执行文件,编译器给每行数据和代码分配了一个唯一的地址,如下图

彻底搞懂虚拟内存,虚拟地址,虚拟地址空间

可执行文件

如上图可执行文件中1000~1024之间的地址,加载到内存后,内存的地址也是1000~1024,在可执行文件中分配的唯一地址就是内存中的物理地址,这就叫直接访问,直接定访问干脆直接,没有那些弯弯绕。

当时问题也不少,例如同一个可执行文件不能同时执行,它们的物理地址一样,冲突了,必须一个接一个,还有就是可执行文件的物理地址已经固定了,如果想在其它物理地址运行,必须地重新编译,生成新的物理地址。

可见直接定位是计算机发展早期的产物,早期没有那么多的程序要运行,程序都是一个接一个地去执行的,因此早期这种定位比较简单,直接高效。

段基址+段偏移地址

随着多任务需求的来临,现在内存中要并发运行多个程序,虽然采用直接定位把每个不同的程序放在不同的内存段中,勉强可以满足,但是一个可执行文件不能同时运行多个,另外程序必须在固定的物理地址运行,灵活性大大减弱,调度起来也是非常麻烦,因此CPU设计师和操作系统开发人员发明了段基址+段偏移地址。

Inter 8086处理器就是采用这种定位方式,我们知道可执行文件主要分为数据段和内存段,如下图

彻底搞懂虚拟内存,虚拟地址,虚拟地址空间

 

由上图红色部分可知,0,4,8就是相对于数据段的偏移地址,0,4,8,12是相对于代码段的偏移地址。

在可执行文件中,一个段的偏移地址是固定的,无论可执行文件加载到内存的什么位置,这个偏移地址是固定的。

当可执行文件加载到内存时,先在内存中分配一个数据段和代码段,这两个段理论上可以不挨着,一般情况下,代码段和数据段是挨着的,代码段和数据段在内存中都有一个起始地址,这个起始地址就叫做段基址,这个段基址是放在段寄存器里,例如代码段基址放在CS寄存器,数据段基址放在DS寄存器,当然还有其他的段例如栈段,栈段刚开始大小为0,随着程序的运行入栈,出栈,这个栈段在不断扩展,当然,咋们主要说的是数据段和代码段,栈段只是简单带过。

假设可执行文件被加载到了内存中,如下图

彻底搞懂虚拟内存,虚拟地址,虚拟地址空间

 

如上图所示,代码段被布局到以0x00600000为起始地址的内存中,数据段被布局到以0x00601000为起始地址的内存中。

当CPU开始执行代码段的第一条指令时,会将代码段的起始地址放入到段寄存器中,此时CS代码段寄存器中存储的就是0x00600000,然后开始从起始地址处开始执行第一条代码指令,此时把代码指令的偏移地址放入到IP寄存器中,IP寄存器存储的就是0,所以CPU要定位一条代码指令时通过CS:IP的方式定位的,如下图所示

彻底搞懂虚拟内存,虚拟地址,虚拟地址空间

定位指令

当CPU执行到0x00600000处的代码指令时,该指令为MOV AX,[0],该指令的意思是把地址0处的数据存储到AX寄存器,这个0就是数据段的偏移地址,此时CPU会将数据段的起始地址加入到DS段寄存器中,然后将数据段寄存器的值+偏移地址即0x00601000+0=0x00601000定位到了数据123,然后将123存储到AX寄存器中。

彻底搞懂虚拟内存,虚拟地址,虚拟地址空间

定位数据

上述过程就是【段基址+段偏移地址】的定位方式,之所以把起始地址加入到寄存器中,也是为了后续再执行指令或者获取数据时,可以直接从寄存器获取,加快CPU执行的速度。

段选择子+段偏移地址

【段选择子+段偏移地址】与【段基址+段偏移地址】有些相似之处,之所以采用【段选择子+段偏移地址】主要是为了安全,原来的【段基址+段偏移地址】方式,程序员可以直接跳转到其他代码段和数据段,没有任何限制,安全性全依赖于程序员的职业操守和水平,因此CPU设计者就发明了【段选择子+段偏移地址】。

段选择子+段偏移地址】中的段选择子可以认为是一个索引,这个索引指向了全局段描述符表中的一项,全局段描述表存储在内存中,它的起始地址存储在全局段描述符寄存器中。

全局段描述符表有很多个段描述符,每个段描述占用8个字节,这个段描述符里面就包括了段基址,另外还有一些安全性相关的描述信息例如段的可读,可写,可执行,段的大小等。

段选择子存储在了段寄存器中,总共16位,其中高13位就是全局段描述表的索引。

当CPU开始执行代码段的第一条指令时,会将代码段的选择子放入到CS段寄存器中,然后CPU从段寄存器中的获取段选择子,然后截取选择子的高13位获取索引,然后根据全局描述符表寄存器的地址找到全局描述符表的起始地址,根据起始地址+索引*8找到段描述符,然后根据段描述符获取段的基址,段的基址加上ip寄存器中的偏移地址就是指令的物理地址,如下图所示1~6步骤所示

彻底搞懂虚拟内存,虚拟地址,虚拟地址空间

定位指令

当CPU执行到0x00600000处的代码指令时,该指令为MOV AX,[0],该指令的意思是把地址0处的数据存储到AX寄存器,这个0就是数据段的偏移地址,此时CPU会将数据段的选择子加入到DS段寄存器中,然后CPU获取段选择的高13位获取索引,然后根据全局描述符表寄存器的地址找到全局描述符表的起始地址,根据起始地址+索引*8找到段描述符,然后根据段描述符获取段的基址,段的基址加上数据段的偏移地址就是数据的物理地址,如下图1~6步骤所示

彻底搞懂虚拟内存,虚拟地址,虚拟地址空间

定位数据

上述过程就是【段选择子+段偏移地址】的定位方式。

虚拟地址

现代的操作系统和CPU未打开分页时采用的是【段选择子+段偏移地址】访问代码和数据,而一旦打开分页时,经过【段选择子+段偏移地址】得到的地址不再是物理地址了,而是叫做虚拟地址,默认则是打开分页的。

现代的操作系统和CPU采用的平坦模型,平坦模型就是整个内存就一个段,因此段基址就是0,段偏移地址就等于虚拟地址了。

下面将从以下几个方面来阐述虚拟地址相关的话题。

1.什么是虚拟地址,物理地址,虚拟地址空间,物理地址空间,虚拟内存,物理内存?

2.什么是进程虚拟地址空间?

3.什么是虚拟页,物理页?

4.什么是页表?

5.虚拟地址怎么样访问物理内存?

什么是虚拟地址,物理地址,虚拟地址空间,物理地址空间,虚拟内存,物理内存?

虚拟地址空间是虚拟地址的集合,假设虚拟地址空间是N位的,它的地址范围为{0~2的N次方-1}即它有2的N次方个虚拟地址,例如16位的虚拟地址空间,它的地址范围为{0~65535},这意味着16位的虚拟地址空间有65536个虚拟地址。

物理地址空间是物理地址的集合,假设物理地址空间有M个字节,它的地址范围为{0~M-1},M不一定是2的多少次幂,例如M=100,表示物理地址空间大小为100个字节,它的地址范围为{0~99},通常情况下物理地址空间是2的幂次方,例如65536,这也是为了计算机方便处理而已,并不是强制要求的。

物理内存可以认为是一个的物理字节数组,每个物理地址指向这个物理字节数组中的一项。

虚拟内存也一样,它也可以认为是一个物理字节数组,不过这个字节数组是存储在磁盘上。

物理地址空间是物理内存的范围,虚拟地址空间是虚拟内存的范围,物理地址空间中的每个物理地址都是实打实地指向了具体的存储单元,虚拟地址空间中每个虚拟地址指向哪里有3种情况:

a.未分配,这个虚拟地址仅仅是个数字而已,没有任何指向。

b.未缓冲,这个虚拟地址指向了磁盘的某个字节存储单元,里面存储了指令或者数据。

c.已缓冲,这个虚拟地址指向了物理内存的某个字节存储单元,里面存储了指令或者数据。

2.什么是进程虚拟地址空间?

操作系统加载可执行文件后,创建了一个进程,这个进程就有了自己的虚拟地址空间,每个进程的虚拟地址空间都一样,如下图所示

彻底搞懂虚拟内存,虚拟地址,虚拟地址空间

进程虚拟地址空间

如上图所示,进程的虚拟地址空间被统一划分成了多个固定区域,例如代码区,数据区,堆区,共享区,栈区,内核区。

代码区和数据区域:来自于可执行文件,代码区和数据区挨着,代码区总是在0x0040000地址以上,0x0040000地址以下另有它用。

运行时堆区域:它初始化大小为0,随着动态分配内存(malloc),运行时堆不断往高地址方向扩展,有个指针brk指向了堆的最高地址。

共享库的内存映射区域:这个区域是一些标准的系统库,这个共享库在物理内存中只存储一份,每个进程将这个区域的虚拟地址映射到同一份共享库物理内存上。

用户栈区域:这个区域紧挨着内核区域,处于高地址处,随着用户栈的出栈,入栈,动态扩展,入栈向低地址方向扩展,出栈则向高地址方向收缩,栈顶指针存储在栈寄存器(ESP)中。

内核区域:这个区域是操作系统自己代码,数据,栈空间,内核在物理内存中只存储一份,每个进程将这个区域的虚拟地址映射到同一份内核物理内存上。

彻底搞懂虚拟内存,虚拟地址,虚拟地址空间

内核和共享库的映射

3.什么是虚拟页,物理页?

现代操作操作和CPU将物理内存按照固定的页大小分成很多份,每一份叫做物理页(PP),每一份有一个编号叫做物理页号(PPN),这个物理页大小通常是4KB,例如一个物理内存大小为20KB,这个物理内存可以分成5个物理页,那么物理页号(PPN)就是0,1,2,3,4。

虚拟内存也一样,它的页大小与物理内存的页大小相同,虚拟内存也被分成了很多份,每一份叫做虚拟页(VP),每一份的编号叫做虚拟页号(VPN),例如假设虚拟页大小为4KB,一个虚拟内存大小为10KB,这个虚拟内存可以分成2个虚拟页(VP),虚拟页号(VPN)就是0,1

每个物理页存储在物理内存上,每个虚拟页存储在磁盘上,如下图所示

彻底搞懂虚拟内存,虚拟地址,虚拟地址空间

虚拟内存和物理内存

上图的虚拟内存有8个虚拟页,物理内存有6个物理内存页,虚拟页存储在磁盘上,物理页则存储在DRARM上。

每个虚拟页可以有三种状态,未分配,已缓冲,未缓冲

未分配:虚拟页还没有分配磁盘空间

已缓冲:虚拟页缓冲或者映射在了物理页上。

未缓冲:虚拟页分配了磁盘空间,但没有在物理页上缓冲。

通常操作系统加载可执行文件后,创建了一个进程,这个进程就有了虚拟地址空间,这并不意味着可执行文件已经从磁盘加载到内存中了,操作系统只是为了进程虚拟地址空间的每个区域分配了虚拟页。

代码和数据区域的虚拟页被分配到了可执行文件的适当位置,此时虚拟页状态为未缓冲,虚拟页指向了磁盘地址。

操作系统和共享库的虚拟页被映射到了物理内存,因为操作系统和共享库已经在物理内存了,这些虚拟页的状态为已缓冲。

用户栈,运行时堆的虚拟页没有任何分配,不占用任何空间,这些虚拟页的状态为未分配。

那么进程虚拟地址空间的代码和数据,用户栈,运行时堆的物理内存什么时候分配呢,答案就是处理器用虚拟地址执行代码,读取数据时,这个下一章阐述。

虚拟地址访问物理内存

先普及几个概念:

VPO即虚拟页偏移量:

虚拟地址由虚拟页号+虚拟页偏移量组成,虚拟页偏移量是相对某个虚拟页的偏移量。

PPO即物理页偏移量:

物理地址由物理页号+物理页偏移量组成,物理页偏移量是相对某个物理页的偏移量,

VPO等于PPO

页表(Page Table)PT:

页表是建立虚拟页号和物理页号映射关系的表结构,每个页表项(PTE)包括了有效位,物理页号,磁盘地址等信息,如下图:

彻底搞懂虚拟内存,虚拟地址,虚拟地址空间

页表与物理内存,虚拟内存的关系

由上图可以得知,操作系统可以根据页表项的有效位和地址信息判断出虚拟页目前所处的状态即未分配,已缓冲,未缓冲

如上图所示,页表有8个页表项,每个页表项里包含一个有效位和地址信息。

当页表项 PTE n的页表项有效位为0时,表示虚拟页 n没有缓冲在物理内存,可能在磁盘或者未分配,例如PTE 0页表项里存储的是null,表明虚拟页0即VP0是未分配状态,PTE 3里存储的是磁盘地址,表明虚拟页 3即VP3在磁盘里,但没有缓冲,VP3状态为未缓冲。

当页表项PTE n的页表项的有效位为1时,表示虚拟页n缓冲在物理内存,PTE n存储了物理页号,虚拟页 n的状态为已缓冲,例如PTE 1的页表项,有效位为1,则虚拟页VP1缓冲在了物理页中。

页表基址寄存器(PTBR):

每个进程都有自己的页表,CPU执行某个进程时,会先把该进程的一级页表起始地址存储到页表基址寄存器,这样CPU查找一级页表起始地址可以直接从寄存器查找,加快了查找效率。

好了,概念介绍到这里,先来看看虚拟地址翻译物理地址的过程,按照一级页表来演示,如下图所示:

彻底搞懂虚拟内存,虚拟地址,虚拟地址空间

虚拟地址翻译物理地址

上图为虚拟地址翻译物理地址的示意图,可以看出VPO等于PPO。

下面看看计算机各个部件是怎么通过虚拟地址访问物理内存的。

处理器根据虚拟地址访问物理内存的分为页表项命中和页表项未命中两种情况,页表项命中意味着页表项的有效位为1,页表项存储的是物理页号,虚拟页缓冲在物理页中,未命中意味着页表项有效位为0,此时需要发送缺页中断。

页表项命中的步骤如下图:

彻底搞懂虚拟内存,虚拟地址,虚拟地址空间

页表项命中翻译步骤

1.CPU将虚拟地址(VA)送入MMU,MMU根据页表基址寄存器中页表的起始地址加上虚拟页号,找到了页表项的物理地址PTEA。

2.MMU将PTEA送入到高速缓冲或者内存。

3.从高速缓冲或者内存中找到页表项(PTE),返回页表项(PTE)给MMU。

4.MMU根据PTE找出物理页号,然后加上虚拟页偏移量形成物理地址(PA),送入到高速缓冲或者内存。

5.高速缓冲或者内存获取数据,返回数据给处理器。

页表项未命中的步骤如下图:

彻底搞懂虚拟内存,虚拟地址,虚拟地址空间

页表项未命中翻译步骤

1.CPU将虚拟地址(VA)送入MMU,MMU根据页表基址寄存器中页表的起始地址加上虚拟页号,找到了页表项的物理地址PTEA。

2.MMU将PTEA送入到高速缓冲或者内存。

3.从高速缓冲或者内存中找到页表项(PTE),返回页表项(PTE)给MMU。

4.MMU根据PTE,发现页不在内存中,未命中,因此MMU发送一个缺页中断,交由缺页异常处理程序处理。

5.缺页异常处理程序根据页置换算法,选择出一个牺牲页,如果这个页面已经被修改了,则写出到磁盘上,最后将这个牺牲页的页表项有效位设置为0,存入磁盘地址。

6.缺页异常程序处理程序调入新的页面,如果该虚拟页尚未分配磁盘空间,则分配磁盘空间,然后磁盘空间的页数据拷贝到空闲的物理页上,并更新PTE的有效位为1,更新物理页号,缺页异常处理程序返回后,再回到发生缺页中断的指令处,重新按照页表项命中的步骤执行。

虚拟地址翻译物理地址的过程介绍完了,另外要说的是现代的CPU和操作系统为了加快虚拟地址翻译物理地址的过程,做了以下两点优化:

1.建立了虚拟号(VPN)和页表项(PTE)的映射关系,存储在TLB中,当MMU根据虚拟地址获取页表项时,先查询TLB,在TLB找到了页表项后,就不需要从高速缓冲或者内存中获取了,找不到了才会计算页表项地址PTEA,然后再从高速缓冲或者内存中获取页表项(PTE)。

2.某些热点物理地址对应的数据,存储在L1缓冲中,MMU根据物理地址获取页表项或者代码数据时,先从L1缓冲中获取,找不到再从内存中获取。

上述的翻译过程是通过一级页表来翻译,现在操作系统支持多级页表,多级页表与一级页表比较类似,如下图所示:

彻底搞懂虚拟内存,虚拟地址,虚拟地址空间

K页表

上图为K级页表,页表基址寄存器存储的是一级页表的地址,1到K-1的页表的每一项存储的下一级页表的起始地址,K级页表的每一项存储的是物理页号或者磁盘地址。

好了,关于虚拟地址,虚拟内存,虚拟地址空间的话题就介绍到这里了。

 

原文链接:https://www.toutiao.com/i6952760982372385317/

虚拟内存虚拟地址空间
12-05 1370
第一部分: 摘自:百度百科 虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。目前,大多数操作系统都使用了虚拟内存,如Windows家族的“虚拟内存”;Linux的“交换空间”等。 虚拟内存是Windows 为作为内存使用的一部分
[嵌入式系统-8]:逻辑地址、虚拟地址、物理地址以及地址映射
文火冰糖(王文兵)的博客
02-15 2626
在计算机系统中,无论是程序,还是数据,都是按照地址存放的,然而,物理地址空间是有限的,应用程序是无限的,如何使用有限的物理地址空间,容纳无限的应用程序呢?本文探讨常见的三种类型的地址,看看他们是如何复用有限的物理地址空间?逻辑地址、虚拟地址、物理地址。在计算机系统中,逻辑地址是指程序中使用的地址,它是相对于程序自身的地址空间而言的。逻辑地址是由程序生成和使用的,它不直接映射到物理硬件上的存储单元,而是需要经过地址转换才能最终映射到物理地址上。在运行时,当程序访问内存中的数据或指令时,使用的是逻辑地址。
虚拟地址的设置与应用全攻略
最新发布
hgdlip的博客
04-08 651
在计算机网络和操作系统中,虚拟地址是一个核心概念,它允许程序在逻辑上拥有连续的内存空间,而无需关心实际的物理内存布局。虚拟地址的引入极大地简化了程序的开发和内存管理,提高了系统的灵活性和安全性。虎观代理将详细解析虚拟地址的概念、工作原理、设置方法以及在实际应用中的重要性。
虚拟地址和物理地址
ChaseHeart的博客
09-28 1万+
1、地址概念 物理地址:物理内存就是真实的内存,CPU的地址线可以直接进行寻址的内存空间大小。比如在32位平台下,寻址的范围是2^32也就是4G,并且这是固定的。 在实际的应用中,很多的应用程序都比较大,计算机实际所配置的内存空间无法满足。所以出现了虚拟内存技术。经过不断有目的的换入和换出,处理器似乎是拥有了一个大于实际物理内存的内存空间。于是,这个存储空间叫做虚拟内存空间,而把真正的内存叫做实际物理内存,或简称为物理内存。 对32位处理器,虚拟内存空间为4G,每个进程都认为自己拥有4G的空间;实际上,
逻辑地址、物理地址、虚拟地址
热门推荐
TYUTyansheng的博客
08-21 1万+
文章目录物理地址(physical address)虚拟地址(virtual memory)逻辑地址(logical address)线性地址(linear address)或也叫虚拟地址(virtual address)地址转换 物理地址(physical address) 用于内存芯片级的单元寻址,与处理器和CPU连接的地址总线相对应。 虽然可以直接把物理地址理解成插在机器上那根内存本身,把内存看成一个从0字节一直到最大空量逐字节的编号的大数组,然后把这个数组叫做物理地址,但是事实上,这只是一个硬件提供
虚拟地址虚拟内存
keke_zkt的专栏
08-13 1089
地址 http://blog.sina.com.cn/s/blog_6cc1c52d0100sgqt.html 学生不才,这个虚拟地址虚拟内存的问题困惑的我很长的时间,现在写一下最近看过一些资料后的理解吧,肯定存在不完整或者不正确的地方,希望大家可以纠正,如果能给你带来一些新知识,或者帮您复习了一下旧知识,我感到非常荣幸,下面开始,以32位的i386 CPU看。     
虚拟地址空间、虚拟内存
stay_focused的博客
07-21 682
最近老是被这两个概念搞的很晕,现在梳理一下吧。 我们都知道计算机有三条总线,控制、数据、地址。其中数据总线用于cpu和内存之间的数据传输,地址总线用于在内存上定位数据。 打个比方,如果我们要去送快递,将包裹a送到A家里去,我们必须要知道A的地址,也就是说,我们通过地址来定位A。 我们说一个32位的计算机,意味着它的地址总线是32位。已知地址总线的位数,我们可以知道它的地址的表示范围是0~(2^
虚拟内存地址空间
u012391423的博客
05-26 2183
目录 一、物理内存vs虚拟内存 二、物理内存空间和虚拟内存空间 三、32bit的地址空间 四、cpu位宽和cpu地址总线宽 五、虚拟内存地址空间划分 六、虚拟地址和物理地址的映射 早期的计算机程序都是直接跑在物理内存上的,这就要求程序大小不能超过物理内存的上限; 现代计算机为提高CPU使用率、并发执行多个程序、隔离程序间内存地址、打破物理内存上限,采用虚拟内存机制来运行程序 一、物理内存vs虚拟内存 物理内存就是实实在在的内存条。 虚拟内存是一个概念,对于一个程序来说,..
内存的虚拟硬盘怎么用.docx
09-27
2. **临时存储与数据安全**:内存断电后数据会自动清除,这使得内存虚拟硬盘可以用于存放不需要保存的TMP文件,或者在需要保障数据安全的工作中,确保数据一旦断电即被彻底删除,且无法恢复。 3. **服务器高速缓存*...
如何彻底清理C盘空间.mp4
03-23
2.虚拟内存 改到别的盘 占用别的盘空间 C盘的空间就节省下来了 3.各种聊天软件的聊天记录 接收的文件 全部从C盘迁移到别的盘 我只是演示 微信 QQ 淘宝 三个聊天软件 其他的聊天软件按照这个方法去清理 举一反三就行...
C语言内存精讲,让你彻底明白C语言的运行机制!
09-12
2. 虚拟内存到底是什么?为什么我们在C语言中看到的地址是假的? 3. 虚拟地址空间以及编译模式 4. C语言内存对齐,提高寻址效率 5. 内存分页机制,完成虚拟地址的映射 6. 分页机制究竟是如何实现的? 7. MMU部件以及...
虚拟内存地址
09-12
虚拟内存地址必须映射到物理内存/硬盘文件空间上 才能存储数据
70个功能小技巧 彻底搞定Windows7
04-27
12. **合并任务栏图标**:如果任务栏空间不足,可以右键点击开始按钮,进入属性设置,选择“在任务栏满时分组”,以实现类似XP或Vista的任务栏图标合并。 13. **多线程文件复制**:Windows 7内置了Robocopy命令,...
C++程序设计彻底研究(是code不是书)
02-07
8.1 内存地址与指针 8.2 指针与引用 8.3 数组与指针的代数计算 8.4 指针参数 8.5 函数指针 8.6 动态内存分配 8.7 常犯的错误 8.8 本章重点 8.9 本章练习 第9章 字符串 9.1 字符串的基本概念 9.2 字符串的...
linux c 定义的数组 虚拟地址 &,C语言的内存储器区域(虚拟地址)探索
weixin_30505255的博客
05-12 104
C语言的内存区域(虚拟地址)探索学习C语言对C语言的内存区域进行了探索首先我们知道:对于以下代码进行实验:/*********************************************************************** * Copyright (c)2015,WK Studios* * Filename: str.h* * Compiler: vc ...
虚拟地址
大象
08-09 2442
http://blog.sina.com.cn/s/blog_a46817ff0101hjzp.html概念 每个程序拥有自己的地址空间,这个地址空间被分割成多个块,每一块称作一页或页面。每一页有连续的地址范围。这些页被映射到物理内存,但并不是所有的地址空间必须在内存中才能运行程序。当程序引用一部分在物理内存中的地址空间时,有硬件立刻执行必要的映射。当程序引用的到一部分不在物理内存中的地址空间
虚拟地址虚拟内存区别
03-08 1491
程序访问存储器所使用的逻辑地址称为虚拟地址虚拟地址 (virtual address): 4G虚拟地址空间中的地址,程序中使用的都是虚拟地址。每一个进程分配有一个4G的虚拟地址。通过虚拟地址访问内存的形式称为保护模式,因为它不允许直接访问内核空间,而对应的直接访问物理内存的方式称为实模式,现在已经很少使用。   比如 mov eax,004227b8h ,这是把地址004227b8h
虚拟存储器--虚拟地址与物理地址
Just To Be
09-03 7360
计算机在运行程序时,需将代码加载入内存中,CPU读取内存中的代码并执行。早期的计算机在没有引入 虚拟存储器之前,需将整个待运行的程序加载到内存中,因为内存空间有限,当待加载的程序过大时就会出现问题(多进程,则需要占用更多的内存空间)。现代计算机引入虚拟存储器的概念,通过将对内存进行抽象,将其作为存储在硬盘上数据的高速缓存,只将当前进程部分代码缓存到主存中(当前进程的程序较少时,可以全部缓存在主存中
python虚拟内存
11-30
Python虚拟内存是指Python程序在运行时使用的内存空间,包括代码数据等。Python使用虚拟内存来管理内存,使得程序员不需要手动管理内存,从而减少了内存泄漏和内存溢出的风险。 Python的虚拟内存由操作系统管理,Python程序只需要向操作系统请求所需的内存空间即可。Python使用了一种称为“引用计数”的技术来管理内存,即每个对象都有一个引用计数器,当对象被引用时计数器加1,当对象不再被引用时计数器减1,当计数器为0时,对象被自动回收。 除了引用计数,Python还使用了垃圾回收机制来处理循环引用等情况。垃圾回收机制会定期扫描内存中的对象,找出不再被引用的对象并将其回收。 总之,Python虚拟内存是一种自动管理内存的机制,使得程序员不需要手动管理内存,从而减少了内存泄漏和内存溢出的风险。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • Linux iptables命令详解 153050
  • shell脚本中$0 $1 $# $@ $* $? $$ 的各种符号意义详解 76233
  • 华为交换机查看端口相关信息常用命令,排查故障法宝,转发收藏 64733
  • 小灵通为什么会退市? 42443
  • 千年虫”是什么东西?一个在计算机诞生之初,遗留下的巨大BUG 39504

分类专栏

  • 物联网 4篇
  • 瑞芯微 29篇
  • 从0学arm 37篇
  • zigbee 1篇
  • 鸿蒙 5篇
  • 前端 1篇
  • Linux驱动 55篇
  • 笔记 683篇
  • 粉丝问答 24篇
  • C语言 31篇
  • Linux操作 125篇
  • 待修改 31篇
  • 面试 6篇
  • 原创 112篇
  • uboot 26篇
  • 娱乐 47篇
  • BLE 8篇
  • 从0学linux驱动 5篇
  • linux系统应用 25篇
  • 网络 30篇
  • USB 18篇
  • ARM指令集 10篇
  • shell 16篇
  • exynos4412 29篇
  • arm 9篇

最新评论

  • Camera | 8.让rk3568支持前后置摄像头

    xnfh1996: 引用「rxw」 rxw,博主帮忙提供下xml、两个摄像头驱动文件,谢谢

  • 手把手教你ubuntu下移植MJPG-streamer

    boki_education: mjpg-streamer那个git似乎已经失效了

  • 如何使用4G模块通过MQTT协议传输温湿度数据到onenet

    m0_71300969: mqtt

  • 18. SPI协议,spi转can,MCP2515裸机驱动详解

    初学者m-: 你好 soft_reset这个函数 软件复位 是指的什么? 是控制MCP2515的reset引脚拉低一段吗?

  • dmidecode详解

    zhaodaola: Linux服务器基准性能测试常用工具 https://bjzhanghao.com/p/3366

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • 记一次解决OTA死机重启bug,如何分析与解决措施?!
  • 有的人为什么宁愿做员工也不愿做领导?网友的回答让我恍然大悟
  • 软件开发者如何保护自己的知识产权?
2024年14篇
2023年43篇
2022年93篇
2021年827篇
2020年105篇

目录

目录

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一口Linux

众筹植发

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

PHP网站源码石岩百度爱采购吉祥模板网站建设坂田网页设计吉祥英文网站建设福田百度网站优化排名木棉湾阿里店铺托管大芬高端网站设计龙岗seo网站优化丹竹头百度网站优化排名爱联关键词按天计费西乡网站优化推广西乡网站开发龙华百度标王南联百度标王坂田百姓网标王推广坑梓关键词按天计费大芬百度关键词包年推广大浪seo网站推广沙井百度关键词包年推广坂田百度标王大鹏建设网站广州企业网站设计福永网站推广方案福田seo排名南山seo木棉湾网站优化推广大浪营销网站广州网站seo优化南山网页设计荷坳关键词按天扣费歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

PHP网站源码 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化