当前位置:首页 > 生活 >

虚拟内存是什么地方的内存(虚拟内存和内存有区别吗)

来源:原点资讯(www.yd166.com)时间:2024-12-02 09:51:22作者:YD166手机阅读>>

定位指令

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

虚拟内存是什么地方的内存,虚拟内存和内存有区别吗(5)

定位数据

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

段选择子 段偏移地址

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

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

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

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

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

虚拟内存是什么地方的内存,虚拟内存和内存有区别吗(6)

定位指令

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

虚拟内存是什么地方的内存,虚拟内存和内存有区别吗(7)

定位数据

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

虚拟地址

现代的操作系统和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.什么是进程虚拟地址空间?

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

虚拟内存是什么地方的内存,虚拟内存和内存有区别吗(8)

栏目热文

虚拟内存从哪来的(虚拟内存什么时候出现的)

虚拟内存从哪来的(虚拟内存什么时候出现的)

前言:存为了更加高效并且少出错,现代操作系统提供了一种对主存的抽象概念,叫做虚拟内存。虚拟内存是硬件异常,硬件地址翻译,...

2024-12-02 09:48:56查看全文 >>

虚拟内存怎么设置游戏运行流畅(虚拟内存能提高游戏流畅度吗)

虚拟内存怎么设置游戏运行流畅(虚拟内存能提高游戏流畅度吗)

生活中我们经常听到电脑有虚拟内存一说,很多人对电脑虚拟内存有种神秘的感觉,因为他们根本没有弄明白虚拟内存到底是什么意思,...

2024-12-02 10:02:43查看全文 >>

什么情况下会用虚拟内存(有必要打开虚拟内存吗)

什么情况下会用虚拟内存(有必要打开虚拟内存吗)

虚拟内存这个词,估计新生代里听说过的人不多。但如果你是电脑老鸟,或者经常玩大型游戏的话,虚拟内存应该或多或少还有些印象。...

2024-12-02 10:14:52查看全文 >>

同轴度与位置度(同轴度和位置度区别示意图)

同轴度与位置度(同轴度和位置度区别示意图)

位置度是GD&T中最有用且最复杂的几何公差符号,没有之一。位置度太重要且调用方法多样,为了不像裹脚布,下面仅讨论RFS(...

2024-12-02 09:45:45查看全文 >>

同心度的最简单测法(圆同心度测量的正确方法)

同心度的最简单测法(圆同心度测量的正确方法)

内外两个圆分别使用圆形拟合,找出圆心,再使用点间距测两个圆心的距离,看一遍就会,就是时这么简单。马克拉伯Moo...

2024-12-02 09:48:07查看全文 >>

虚拟内存通俗解释(虚拟内存一定要是物理的1.5倍吗)

虚拟内存通俗解释(虚拟内存一定要是物理的1.5倍吗)

一、前言在Windows XP时代以前,老鸟装机或者重装系统之后有一项必做的性能优化工作,那就是手动调整系统默认的虚拟内...

2024-12-02 10:23:44查看全文 >>

虚拟内存的作用(虚拟内存设置在d盘有什么好处)

虚拟内存的作用(虚拟内存设置在d盘有什么好处)

随着内存拓展技术的普及,目前从百元入门到万元旗舰基本都搭载了这项技术,旨在通过扩展手机的可用运行内存来提升多任务处理能力...

2024-12-02 09:57:57查看全文 >>

虚拟内存d盘有什么用(虚拟内存有什么用利与弊)

虚拟内存d盘有什么用(虚拟内存有什么用利与弊)

一、什么是虚拟内存?虚拟内存有什么用处?操作系统中所运行所有的程序全部都是经过内存提交给CPU然后才执行的,不过若是执行...

2024-12-02 09:57:27查看全文 >>

建盏的作用和功效(长期喝建盏水的危害)

建盏的作用和功效(长期喝建盏水的危害)

随着生活水平的不断提高,越来越多的朋友,都会选择用建盏喝茶。很多人也有些疑惑,一只小小的黑碗怎么能让这么多人喜欢? 有人...

2024-12-02 10:21:08查看全文 >>

建盏图片(上等茶盏主人杯)

建盏图片(上等茶盏主人杯)

油滴建盏是建盏中很常见的,也是很多建盏爱好者都非常喜欢的。  看似只是黑黑的建盏的上加上了一些密集的斑纹,实际上却拥有不...

2024-12-02 10:28:02查看全文 >>

文档排行