每个段描述符对应着一个内存段。很显然,在一个任务的全局地址空间上,可以划分出2^13个段,也就是8192个段。又因为段内偏移是32位的,段的最大长度可以达到4GB,因此,一个任务的全局地址空间,其总大小为2^13×2^32=2^45字节,即32TB。同样的道理,局部描述符表LDT可以定义2^13个,也就是8192个描述符,每个段的最大长度也是4GB,所以一个任务的局部地址空间最大也是32TB。
这样一来,每个任务的总地址空间为64TB。在一个只有32根地址线的处理器上,无论如何也不可能提供这样巨大的存储空间,但是不要紧张,这只是虚假的,或者说虚拟的地址空间。操作系统允许程序的编写者使用该地址空间来写程序,即,使用虚拟地址或者逻辑地址来访问内存,就像他真的拥有这么巨大的地址空间一样。
编译器不考虑处理器可寻址空间的大小,也不考虑物理内存的大小,它只是负责编译程序。当程序编译时,编译器允许生成非常巨大的程序。但是,当程序超出了物理内存的大小时,或者操作系统无法分配这么大的物理内存空间时,怎么办呢?
同一块物理内存,可以让多个任务,或者每个任务的不同段来使用。当执行或者访问一个新的段时,如果它不在物理内存中,而且也没有空闲的物理内存空间来加载它,那么,操作系统将挑出一个暂时用不到的段,把它换出到磁盘中,并把那个腾出来的空间分配给马上要访问的段,并修改段的描述符,使之指向这段内存空间。下一次,当被换出的那个段马上又要用到时,再按相同的办法换回到物理内存。所有这一切,任务(如果它有思维的话)和程序的编写者是不必关心的,这就是虚拟内存管理的一般方法。