地址空间

百科
地址空间

地址空间

地址空间(address space)表示任何一个计算机实体所占用的记忆体大小。比如外设、档案、伺服器或者一个网路计算机。地址空间包括物理空间以及虚拟空间。

基本介绍

  • 中文名:地址空间
  • 外文名:address space
  • 表示:计算机实体所占用的记忆体大小
  • 地址空间:包括物理空间以及虚拟空间

导读

存储器抽象

在计算机中,每个设备以及进程都被分配了一个地址空间。处理器的地址空间由其地址汇流排以及暂存器决定。地址空间可以分为Flat——表示起始空间位置为0;或者Segmented——表示空间位置由偏移量决定。在一些系统中,可以进行地址空间的类型转换。至于IP位址空间,IPV4协定并没有预见到IP位址的需求量如此之大,32位的地址空间已经无法满足需求了。因此,开发了IPV6协定,支持128位的地址空间。

暴露问题

把物理地址暴露给进程会带来下面几个严重问题。第一,如果用户程式可以定址记忆体的每个位元组,它们就可以很容易地(故意地或偶然地)破坏作业系统,从而使系统慢慢地停止运行。即使在只有一个用户进程运行的情况下,这个问题也是存在的。第二,使用这种模型,想要同时(如果只有一个CPU就轮流执行)运行多个程式是很困难的。在个人计算机上,同时打开几个程式是很常见的(一个文字处理器,一个邮件程式,一个网路浏览器,其中一个当前正在工作,其余的在按下滑鼠的时候才会被激活)。在系统中没有对物理记忆体的抽象的情况下,很难做到上述情景,因此,我们需要其他办法。

概念

要保证多个应用程式同时处于记忆体中并且不互相影响,则需要解决两个问题:保护和重定位。我们来看一个原始的对前者的解决办法:给记忆体块标记上一个保护键,并且比较执行进程的键和其访问的每个记忆体字的保护键。然而,这种方法本身并没有解决后一个问题,虽然这个问题可以通过在程式被装载时重定位程式来解决,但这是一个缓慢且複杂的解决方法。
一个更好的办法是创造一个新的记忆体抽象:地址空间。就像进程的概念创造了一类抽象的CPU以运行程式一样,地址空间为程式创造了一种抽象的记忆体。地址空间是一个进程可用于定址记忆体的一套地址集合。每个进程都有一个自己的地址空间,并且这个地址空间独立于其他进程的地址空间(除了在一些特殊情况下进程需要共享它们的地址空间外)。
地址空间的概念非常通用,并且在很多场合中出现。随着数量的增长,空间变得越来越不够用了,从而导致需要使用更多位数。
地址空间可以不是数字的。网际网路域名也是地址空间。这个地址空间是由所有包含2~63个字元并且后面跟着字元串组成的,组成这些字元串的字元可以是字母、数字和连字元。

物理地址与虚拟地址

物理地址 (physical address): 放在定址汇流排上的地址。放在定址汇流排上,如果是读,电路根据这个地址每位的值就将相应地址的物理记忆体中的数据放到数据汇流排中传输。如果是写,电路根据这个地址每位的值就将相应地址的物理记忆体中放入数据汇流排上的内容。物理记忆体是以位元组(8位)为单位编址的。
虚拟地址 (virtual address): CPU启动保护模式后,程式运行在虚拟地址空间中。注意,并不是所有的“程式”都是运行在虚拟地址中。CPU在启动的时候是运行在实模式的,核心在初始化页表之前并不使用虚拟地址,而是直接使用物理地址的。

和地址空间

物理存储器和存储地址空间是两个不同的概念。但是由于这两者有十分密切的关係,而且两者都用B、KB、MB、GB来度量其容量大小,因此容易产生认识上的混淆,弄清这两个不同的概念,有助于进一步认识主存储器和用好主存储器。
物理存储器是指实际存在的具体存储器晶片。如主机板上装插的主存条和装载有系统的BIOS的ROM晶片,显示卡上的显示RAM晶片和装载显示BIOS的ROM晶片,以及各种适配卡上的RAM晶片和ROM晶片都是物理存储器。
存储地址空间是指对存储器编码(编码地址)的範围。所谓编码就是对每一个物理存储单元(一个位元组)分配一个号码,通常叫作“编址”。分配一个号码给一个存储单元的目的是为了便于找到它,完成数据的读写,这就是所谓的“定址”(所以,有人也把地址空间称为定址空间)。
CPU在操控物理存储器的时候,把物理存储器都当作记忆体来对待,把它们总的看作一个由若干存储单元组成的逻辑存储器,这个逻辑存储器就是我们所说的记忆体地址空间。
有的物理存储器被看作一个由若干存储单元组成的逻辑存储器,每个物理存储器在这个逻辑存储器中占有一个地址段,即一段地址空间。CPU在这段地址空间中读写数据,实际上就是在相对应的物理存储器中读写数据。
地址空间的大小和物理存储器的大小并不一定相等。举个例子来说明这个问题:某层楼共有17个房间,其编号为801~817。这17个房间是物理的,而其地址空间採用了三位编码,其範围是800~899共100个地址,可见地址空间是大于实际房间数量的。
对于386以上档次的微机,其地址汇流排为32位,因此地址空间可达2的32次方,即4GB。但实际上我们所配置的物理存储器通常只有1MB、2MB、4MB、8MB、16MB、32MB等,远小于地址空间所允许的範围。

IPv6地址空间

IPv6是下一代网际网路协定。现有的网际网路是在IPv4的基础上运行的,随着网际网路的迅速发展,IPv4定义的有限地址(IP位址)空间将被耗尽,必将影响网际网路的进一步发展。IPv4採用32位地址长度,只有大约43亿个地址,估计在2009~2010年间将被分配完毕。IPv6重新定义地址空间,採用128位地址长度,几乎可以不受限制地提供地址,保守估计IPv6实际可分配的地址,整个地球每平方米麵积上就可分配1000多个地址。
除了地址空间巨大之外,IPv6还具有这几方面的优势:无状态自动配置,网路更加安全,服务质量更好。

Linux进程的虚拟地址空间

在x86体系结构中分段机制是必选的,而分页机制则可由具体的作业系统而选择,Linux通过让段的基地址为0而巧妙的绕过了基地址。因此,对于Linux来说,虚地址和线性地址是一致的。在32位的平台上,线性地址的大小为固定的4GB。并且,由于採用了保护机制,Linux核心将这4GB分为两部分,虚地址较高的1GB(0xC0000000到0xFFFFFFFF)为共享的核心空间;而较低的3GB(0x00000000到0xBFFFFFFF)为每个进程的用户空间。由于每个进程都不能直接访问核心空间,而是通过系统调用间接进入核心,因此,所有的进程都共享核心空间。而每个进程都拥有各自的用户空间,各个进程之间不能互相访问彼此的用户空间。因此,对于每一个具体的进程而言,都拥有4GB的虚拟地址空间。
声明:此文信息来源于网络,登载此文只为提供信息参考,并不用于任何商业目的。如有侵权,请及时联系我们:ailianmeng11@163.com