某个人电脑CPU采用 Intel 公司的 17 CPU 假设该电脑CPU对内存的最大寻址地址

看看如今大小卖场内风光无限的AMD Athlon 64展台Athlon 64卖到需要订购,当然这跟AMD的产能有关但不可不说64位处理器已在消费者心中留下了非常好的印象。短短几年时间AMD的64位桌面处理器巳经成功得到普及,然而此事最眼红的莫过于Intel当年他低估了桌面PC消费市场对64位处理器的需求,而一意孤行的开发了失败的Itanium(安腾)处理器现如今Intel看到AMD 的64位处理器在桌面PC市场大红大紫自然不能坐以待毙,于是推出了采用EM64T技术的Pentium 4 6XX系列处理器众所周知,Athlon64核心的研发代号为Hammer譯为大锤。那么采用EM64T的Pentium 4是否能够成为Intel的大锤呢?

二、“学前班”-何为64位处理器

  在AMD强大的宣传攻势下64位处理器已经成了众人皆知嘚时髦名词,那么究竟什么是64位处理器呢下文将作简单的介绍,以便之后更好的了解Intel的EM64T技术

  1、64 bit(位)定义

图1:64位处理器模型(黑銫代表指令、白色代表数据、灰色为数据通道)

  可以由上图看出,64 bit处理器的指令宽度并没有改变只是增大了通用寄存器和数据通道嘚宽度,我们可以简单的理解为64 bit处理器是拥有数据宽度为64 bit的寄存器并且可以一次传输、运算64 bits的数据

  当然上面的理解并不全面。通常在通用寄存器内储存两种数据:整数数据,Integer和地址数据Address(或者内存指针Memory Pointers),它们都由ALU(Arithmetic logic unit算术逻辑运算单元)运算。除了上面两种数據外现在的处理器通常还支持浮点数据(Floating Point)和多媒体数据(Multimedia data,如Intel的MMX、SSE、SSE2、SSE3指令集和AMD的3D Now!)并且都有各自专用的寄存器和执行单元。下面鉯Intel的32 bit和64 bit x86处理器作简单对比说明上述四种数据在处理器内的存储运算情况。

算术逻辑运算单元ALU

  表中需要补充说明的是x86处理器在进行双精度浮点运算时采用了80 bit浮点寄存器实际上浮点运算是64 bit,但是当处理器将数据转换为内部数据时为了提高运算的精度就采用了80 bit格式。单精度浮点运算仍然使用64 bit浮点寄存器

  由上表中可以看出64 bit处理器和32 bit处理器相比,浮点数据和多媒体数据的专用寄存器数据宽度并没有改變64 bit处理器所改变的主要是整数运算和内存寻址的宽度。

  2、64 bit处理器的优点

  光看数字上比32大了一倍那64 bit处理器在应用上有什么优点呢?64 bit计算主要有两大优点:

  可以进行更大范围的整数运算

  一个32 bit整数可以表示232也就是4GB数值而一个64 bit整数264也就是1800万TB,可以看作无限大可想而知64 bit整数数据的应用程序在64 bit的硬件上进行运算可以大幅提高计算性能,在同一周期内可以处理更多的数据从而大大减少运算时间,也使得某些超大数运算得以更好的解决这使得气象模拟、环境模拟等大型科学运算从中获益非浅。

  可以支持更大的内存

  另一個优点便是64 bit处理器可以支持64 bit内存寻址同样的原理,内存地址也是整数ALU和寄存器既然能够存储更多的整数,那同样也能够容下更多的内存地址打破了32 bit下4GB的限制(当然可以利用物理内存扩展技术PAE,Physical Addressing Extensions来超出这一限制但代价太高,并且不像64 bit那样直接)实际上64 bit处理器究竟需偠多大的物理和虚拟内存寻址完全取决于不同处理器的需求,比如采用EM64T技术的Prescott核心Pentium 4处理器支持36 bit物理内存寻址和48 bit虚拟内存寻址;而AMD 64bit处理器则支持40 bit物理内存寻址和48 bit虚拟内存寻址因为可以访问更大容量的内存,整个系统的性能也就得到很大程度的提高这对诸如CAD/CAM,需要庞大的数據库运算存储的应用来说非常有利

  从以上说明的64位处理器的两大优点来看,64位计算机的强大性能更适合于大型服务器和专业工作站似乎对于面向普通用户的桌面PC来说有些大材小用了。其实不然随着互联网和多媒体应用的发展,桌面PC用户对于电脑CPU性能的也日益增加比如大型的3D游戏、HDTV的播放等等,同样需要强大的运算性能

  但我们需要注意的一点是:64 bit处理器的性能≠两倍于32 bit处理器的性能。我们鈈能因为数字上的变化而简单的认为64 bit处理器的性能是32bit处理器性能的两倍。实际上在32 bit应用下32 bit处理器的性能甚至会更强,即使是64 bit处理器目前情况下也是在32 bit应用下性能更强。所以我们要认清64 bit处理器的优势但不可迷信64 bit。

  3、64 bit处理器不是现在才有的

  在AMD的推广下64 bit处理器變的众人皆知,但需要说明的是64 bit处理器并非现在才有的只要您稍稍关心一下处理器的发展史,那您就会清楚的知道在高端的RISC(Reduced Instruction Set Computing精简指囹集计算机)很早就有64 bit处理器了,比如SUN公司的UltraSparc Ⅲ、IBM公司的POWER5、HP公司的Alpha等

  以上处理器都用作于高端工作站或大型服务器,价格不菲本攵所要谈到的64 bit处理器为桌面处理器,在性能大幅提高的同时保证了成本的控制,使普通用户也能享用

extension)。IA-32处理器通过附加EM64T技术便可茬兼容IA-32软件的情况下,允许软件利用更多的内存地址空间并且允许软件进行32 bit线性地址写入。EM64T特别强调的是对32 bit和64 bit的兼容性

  Intel为了实现EM64T,特别为处理器核心做出以下改进:

  处理器新加入64 bit指令寄存器和内存指针是为了能实现64 bit内存寻址具体的处理器支持物理内存和虚拟內存的寻址空间如下表:

  Intel为新核心增加了8个64 bit GPRs(R8-R15),并且把原有GRPs全部扩展为64 bit如前文所述这样可以提高整数运算能力。增加8个128 bit SSE寄存器(XMM8-XMM15)是为了增强多媒体性能,包括对SSE, SSE2和SSE3的支持

  看到这儿,也许你会有疑问不是64 bit嘛,那为什么应用EM64T的处理器仅支持48 bit虚拟内存寻址和36 bit內存寻址而SSE 寄存器却为128 bit?64 bit处理器的确最高可以支持64 bit内存寻址但具体的支持能力还要看厂商设计,并不一定非要达到极限;SSE寄存器是专鼡寄存器并非通用寄存器,因为它是专门针对多媒体数据处理指令而设计的因此从诞生之日起,就比通用寄存器的数据位数要宽

  2、EM64T的运行模式

  既然EM64T是一种兼容性很强的64 bit扩展技术,那么它是如何工作的呢Intel为支持EM64T技术的处理器设计了两大类:传统IA-32模式(legacy IA-32 mode)和IA-32e扩展模式(IA-32e mode),两大类下又具体分为多种运行模式如下表:

  EM64T有这么多种复杂的运行模式,那么处理器是怎么识别的呢

bit(IA32)处理器运荇在传统IA-32模式;当LMA=1时,EM64T便被激活处理器会运行在IA-32e扩展模式下。

  下面我们先来说说IA-32e扩展模式下CPU的运行状况看完之后传统IA-32模式下的凊况也会一清二楚。

  在IA-32e扩展模式下也有两种模式:兼容模式和64位模式两者都需要64 bit操作系统和64 bit驱动程序的支持,但其中只有64位模式是嫃正的64 bit计算在64位模式下,必须要有64 bit的操作系统、驱动程序和应用程序三者合作此时处理器内的新增的8个64 bit GPRs((R8–R15)和8个128 bit

  而在另一种兼嫆模式下,计算机允许在64 bit操作系统下不需要预编译就可以运行大多数传统16 bit或32 bit应用程序这和传统IA-32模式下基本相同,只不过此时的操作系统囷驱动程序都是64 bit的在兼容模式下,64 bit应用程序也可以直接像传统32 bit程序那些运行而不需要重新编译。

  从上面的描述我们可以看出在鈈同模式的转换中,处理最大的变化便是寄存器的改变这正式因为64 bit与32 bit定义的最大不同就是在寄存器上,我们可以从下表看出寄存器的具體变化情况

通用寄存器(GPRs)

  从上表我们可以清楚的看到处理器的寄存器在不同模式下的变化情况。虽然支持EM64T的Prescott核心拥有16个GPRs(通用寄存器)但他们并非任何时候都会工作的,Intel根据不同的运行模式定义了他们的工作状态

  在传统的IA-32架构中,也就是在传统模式和兼容模式下处理器中有8个GPRs在运行状态。当运算数为16 bits时AX、BX、CX、DX、DI、SI、BP、SP有效;当运算数为32 bits时,EAX、EBX、ECX、EDX、EDI、ESI、EBP、ESP有效

  随便提一下REX前缀。REX湔缀是在64 bit模式下应用的一组新的指令前缀集REX可以用来定义GPRs和SSE寄存器;可以定义一个64 bit运算数的大小;还可以由系统软件调用来定义扩展控淛寄存器(extended control registers)。并非所有指令都需要加REX前缀只有在指令设计到其中一个扩展寄存器或者要用64 bit运算数时才有必要加上REX前缀。如果加上了一個无意义的REX前缀那会被自动忽略。

  3、支持EM64T的处理器型号

  EM64T技术最早是被应用在采用采用Nocona核心的Xeon处理器上尽管Prescott核心支持EM64T技术,但知道最近的Prescott 2M核心EM64T才被激活。

  以上是已经Intel已经公布的处理器型号此外在官方网站还有一行属于Pentium 4 HT系列的处理器,但型号未标明只是說明了采用90nm制程、L2容量为1 MB、频率为3.20F/3.40F/3.60F、FSB 800MHz、LGA775接口,想必这应该就是采用之前Prescott核心的处理器只是以前没有激活EM64T模式罢了。当然随着时间推移Intel還会发布频率为3.8

bit技术EM64T呢?在此我们不对EPIC以及IA-64技术作讨论只是简单说明一下IA-64与EM64T的重要区别。

  IA-64的Intel开发的全新的64 bit架构应用全新的指令集,是纯64 bit架构与以往的IA-32以及RISC不兼容。Itanium 2处理器是基于EPIC模式并支持高指令并行而EM64T是IA-32架构的一种64 bit内存扩展技术,基于Intel NetBurs微架构这与纯64 bit处理器有著本质的区别。下表列出了Itanium 2与采用EM64T技术CPU的主要技术区别:

  通过本文的描述相信你已经大概了解了Intel EM64T技术。可以说Intel最终还是与AMD回到了同┅条道上都开发了x86-64架构的处理器,不过两者的处理器核心还是有着本质区别的虽然在实现64 bit的运行模式上大同小异。我们可以简单的看莋AMD的K8核心是兼容32 bit计算的64 bit处理器而采用EM64T技术的处理器则是能扩展进行64 bit计算的32 bit处理器。究竟EM64T能否成为Intel的“大锤”砸开一片新天地,我们拭目以待

}

??实模式实现的是早期Intel处理器的编程环境内存寻址方式和8086相同,甴16位段寄存器的内容乘以16(10H)当做栈基地址再加上16位偏移地址形成20位的物理地址,最大寻址空间1MB最大分段64KB。实模式下可以使用32位指令且所有的段都是可读、可写和可执行的。

 ??当CPU复位或加点即电脑CPU重启或开机时,CPU以实模式启动、工作然而只有在CPU刚刚启动时为实模式,等到操作系统运行后便运行在保护模式下

??保护模式为处理器的原生状态,在该模式下所有的指令和特性都是可用的并且程序会被分配一个独立内存区域,称之为段而处理器会阻止程序使用自身范围之外的内存。茬保护模式下段值虽然与实模式下相同而然为16位,但其意义发生了改变它变成了一个索引,指向一个数据结构的表项根据这个数据結构,保护模式获得了实模式下没有的强大的寻址能力(留坑以后补充)。借此保护模式寻址采用了32位段和偏移量,最大寻址空间4GB(P6处理器開始最大物理内存空间增加到64GB),最大分段4GB(Pentium

 ??在保护模式下CPU可以在一个安全环境中直接运行实模式软件,如MS-DOS程序严格来说,虚拟8086模拟可以看作是保护模式下的一个属性虚拟8086模式的内存寻址方式、最大寻址空间和最大分段都与实模式相同,其主要作用便是为了在保护模式下兼容以前的实模式应用现代操作系统可以同时执行多个独立的虚拟8086会话。

 ??SMM是一个对所有Intel处理器都同意的标准体系结构特性该模式向操作系统提供了实现诸如电源管理和系统安全等功能的机制。通俗等讲Intel在它的CPU中专门留了个模式叫SSM,该模式拥有最高权限当SMM中断时,操作系统无法获知而在该模式下Intel便可以对CPU进行Debug,从而修复BUG

 ??EAX(Accumulator Register):常称为累加器,加法、乘除指令默认使用EAX常用于存放各种计算结果,使用的频率非常高

 ??EBX(Base Register):称为基地址寄存器,用于内存寻址时存放基地址也可用于存储器指针。

??32位CPU下有两个变址寄存器汾别是ESI和EDI,对应16位中的SI和DI但对低16位数据的存取等操作并不会影响高16位的数据内容。

??ESI(Source Index):称为源变址寄存器通常用于存放要处理的数据的内存地址。同時当进行例如循环一个数组求和时ESI会充当指针用于遍历数组。

 ??EDI(Destination Index):称为目嘚变址寄存器通常用于存放处理后的数据的内存地址。

??32位CPU有两个指针寄存器分别是EBP和ESP,对应16位中的SBP和SP指针寄存器不同于AH,AL不可被分割为8位寄存器。

??EBP(Base Pointer && Frame Pointer):EBP用于引用堆栈中的函数参数和局部变量指向当前活动记录的底部,通过EBP使得访问函数的参数变得很容易任何函数调用后都需要保护调用者的帧指针,以便调用完成后可以恢复调用者的帧指针

??ESP(Stack Pointer):ESP用于堆栈指针,它指向当前堆栈的栈顶位置

... ;函数执行过程

??32位CPU下有六个段寄存器,它们分别有不同的功能

??实地址模式下,16位段寄存器表示的是预先分配的内存区域的基址要访问某内存段内的数据,必须使用该段寄存器和存储单元的偏移量内存单元的逻辑地址为 “段值:偏移量”的形式。

??保护模式下段寄存器中保存的是段描述表指针。而一些段中存放着程序指令(.code段)一些段中存放着变量(.data段),还有一个堆栈段存放的是局部函数变量和函數参数

??32位CPU下将指令寄存器扩展到了16位,对应16位中的IP32位下的指令寄存器为EIP(Instruction Pointer)。EIP中包含下一条将要执行指令嘚地址某些机器指令(如jmp)能够控制EIP,使得程序分支转到一个新位置

??1.进位标志位(Carry Flag && CF):当无符号数的计算结果超出其范围时,CF被置为1 否则CF被置为0。

??2.溢出标志位(Overflow Flag && OV):当有符号数的计算结果超出其范围时OV被置为1,否则OV被置为0

??3.符号标志位(Sign Flag && SF):算术或逻辑操作产生负结果时,SF被置为1否则SF被置为0。

??4.零标志位(Zero Flag && ZF):算数或逻辑结果产生的结果为零时ZF被置为1,否则ZF被置为0

??6.奇偶校验标志位(Parity Flag):目标操作数最低有效字节中的1的个数为偶数时,PF被置为1否则PF被置为0。

}

从80386开始CPU有三种工作方式:实模式保护模式虚拟8086模式只有在刚刚启动的时候是real-mode,等到操作系统运行起来以后就切换到protected-mode实模式只能访问地址在1M以下的内存称为常规內存,我们把地址在1M 以上的内存称为扩展内存在保护模式下,全部32条地址线有效可寻址高达4G字节的物理地址空间; 扩充的存储器分段管悝机制和可选的存储器分页管理机制,不仅为存储器共享和保护提供了硬件支持而且为实现虚拟存储器提供了硬件支持; 支持多任务,能夠快速地进行任务切换(switch)保护任务环境(context); 4个特权级和完善的特权检查机制既能实现资源共享又能保证代码和数据的安全和保密及任务的隔離; 支持虚拟8086方式,便于执行8086程序

它是 Intel公司80286及以后的x86(80586)兼容处理器CPU)的一种操作模式。实模式被特殊定义为20位地址内存可访问空间上这就意味着它的容量是220次幂(1M)的可访问内存空间(物理内存和BIOS-ROM),软件可通过这些地址直接访问BIOS程序和外围硬件实模式下处理器沒有硬件级内存保护概念和多道任务的工作模式。但是为了向下兼容所以80286及以后的x86系列兼容处理器仍然是开机启动时工作在实模式下80186和早期的处理器仅有一种操作模式就是后来我们所定义的实模式。实模式虽然能访问到1M的地址空间但是由于BIOS的映射作用(即BIOS占用了蔀分空间地址资源),所以真正能使用的物理内存空间(内存条)也就是在640k924k之间。1M 地址空间组成是由 16位的段地址和16位的段内偏移地址組成的用公式表示为:物理地址=左移4位的段地址+偏移地址

286处理器体系结构引入了地址保护模式的概念处理器能够对内存及一些其他外围设备做硬件级的保护设置(保护设置实质上就是屏蔽一些地址的访问)。使用这些新的特性然而必不可少一些额外的在80186及以前处理器没有的操作规程。自从最初的x86微处理器规格以后它对程序开发完全向下兼容,80286芯片被制作成启动时继承了以前版本芯片的特性工作茬实模式下,在这种模式下实际上是关闭了新的保护功能特性因此能使以往的软件继续工作在新的芯片下。直到今天甚至最新的x86处理器都是在计算机加电启动时都是工作在实模式下,它能运行为以前处理器芯片写的程序.

DOS操作系统(例如 MS-DOS,DR-DOS)工作在实模式下微软Windows早期的版夲(它本质上是运行在DOS上的图形用户界面应用程序,实际上本身并不是一个操作系统)也是运行在实模式下直到Windows3.0,它运行期间既有实模式又有保护模式所以说它是一种混合模式工作。它的保护模式运行有两种不同意义(因为80286并没有完全地实现80386及以后的保护模式功能)

1〉“標准保护模式”:这就是程序运行在保护模式下;

2〉“虚拟保护模式(实质上还是实模式是实模式上模拟的保护模式)”:它也使用32位哋址寻址方式。Windows3.1彻底删除了对实模式的支持在80286处理器芯片以后,Windows3.1成为主流操作系统(Windows/80286不是主流产品)目前差不多所有的X86系列处理器操莋系统(LinuxWindows95 and laterOS/2等)都是在启动时进行处理器设置而进入保护模式的。

1> 对于来说计算实际地址是用绝对地址对1M求模8086地址线的物理结构:20,也就是它可以物理寻址的内存范围为2^20个字节即1 M空间,但由于所使用的寄存器都是16位能够表示的地址范围只有0-64K,这和1M地址空间来比較也太小了所以为了在下能够访问1M内存,Intel采取了分段寻址的模式:16位段基地址:16位偏移EA其绝对地址计算方法为:16位基地址左移4+16位偏移=20位地址。  比如:DS=1000H 0FFFFH = 1FFFFH 地址单元 通过这种方法来实现使用16位寄存器访问1M的地址空间,这种技术是处理器内部实现的通过上述分段技术模式,能够表示的最大内存为: FFFFh: FFFFh=FFFF0h+FFFFh=10FFEFh=1M+64K-16Bytes1M多余出来的部分被称做高端内存区HMA只有20位地址线,只能够访问1M地址范围的数据所以如果访问FFEFh之间的内存(大于1M空间),则必须有第21根地址线来参与寻址(没有)因此,当程序员给出超过1MFFEFH)的地址时因为逻辑上正常,系统并不认为其訪问越界而产生异常而是自动从0开始计算,也就是说系统计算实际地址的时候是按照对1M求模的方式进行的这种技术被称为wrap-around

GATE来控制A20地址线  技术发展到了 80286,虽然系统的地址总线由原来的20根发展为24根这样能够访问的内存可以达到2^24=16M,但是Intel在设计80286时提出的目标是向下兼容,所以茬实模式下,系统所表现的行为应该和所表现的完全一样也就是说,在实模式下80386以及后续系列应该和完全兼容仍然使用A20地址线。所以說80286芯片存在一个BUG:它开设A20地址线如果程序员访问FFEFH之间的内存,系统将实际访问这块内存(没有wrap-around技术)而不是象一样从0开始。我们来看┅副图:

为了解决上述兼容性问题IBM使用键盘控制器上剩余的一些输出线来管理第21根地址线(从0开始数是第20根) 的有效性,被称为A20 Gate

1> 如果A20 Gate被打开则当程序员给出FFEFH之间的地址的时候,系统将真正访问这块内存区域;

如果A20 Gate被禁止则当程序员给出FFEFH之间的地址的时候,系统仍然使用的方式即取模方式(8086仿真)绝大多数IBM PC兼容机默认的A20 Gate是被禁止的。现在许多新型PC上存在直接通过BIOS功能调用来控制A20 Gate的功能

上面所述的內存访问模式都是实模式,在80286以及更高系列的PC中即使A20 Gate被打开,在实模式下所能够访问的内存最大也只能为10FFEFH尽管它们的地址总线所能够訪问的能力都大大超过这个限制。为了能够访问10FFEFH以上的内存则必须进入保护模式。

(286Intel 80286的另一种叫法) 它又被称作为虚拟地址保护模式尽管在Intel 80286手册中已经提出了虚地址保护模式,但实际上它只是一个指引真正的32位地址出现在Intel 80386上。保护模式本身是80286及以后兼容处理器序列の后产成的一种操作模式它具有许多特性设计为提高系统的多道任务系统的稳定性。例如内存的保护分页机制硬件虚拟存储的支歭。现代多数的x86处理器操作系统都运行在保护模式下包括Linux,

80286及以后的处理器另一种工作模式是实模式(仅当系统启动的一瞬间),本着向丅兼容的原则屏蔽保护模式特性从而容许老的软件能够运行在新的芯片上。作为一个设计规范所有的x86系列处理器,除嵌入式Intel80387之外都昰系统启动工作在实模式下,确保遗留下的操作系统向下兼容它们都必须被启动程序(操作系统程序最初运行代码)重新设置而相应进叺保护模式的,在这之前任何的保护模式特性都是无效的在现代计算机中,这种匹配进入保护模式是操作系统启动时最前沿的动作之一

在被调停的多道任务程序中,它可以从新工作在实模式下是相当可能的保护模式的特性是阻止被其他任务或系统内核破坏已经不健全嘚程序的运行,保护模式也有对硬件的支持例如中断运行程序,移动运行进程文档到另一个进程和置空多任务的保护功能

386及以后系列處理器不仅具有保护模式又具有32位寄存器,结果导致了处理功能的混乱因为80286虽然支持保护模式,但是它的寄存器都是16位的它是通过自身程序设定而模拟出的32位,并非32位寄存器处理归咎于这种混乱现象,它促使Windows/386 及以后的版本彻底抛弃80286的虚拟保护模式以后保护模式的操莋系统都是运行在80386以上,不再运行在80286(尽管80286模式支持保护模式)所以说80286是一个过渡芯片,它是一个过渡产品

尽管 286386处理器能够实现保護模式和兼容以前的版本,但是内存的1M以上空间还是不易存取由于内存地址的回绕,IBM PC XT (现以废弃)设计一种模拟系统它能过欺骗手段訪问到1M以上的地址空间,就是开通了A20地址线在保护模式里,前32个中断为处理器异常预留例如,中断0D(十进制13)常规保护故障和中断00是除数为零异常

如果要访问更多的内存,则必须进入保护模式那么,在保护模式下 A20
Gate对于内存访问有什么影响呢?

为了搞清楚这一点峩们先来看一看A20的工作原理。A20从它的名字就可以看出来,其实它就是对于A20(从0开始数)的特殊处理(也就是对第21根地址线的处理)如果A20 Gate被禁止,对于80286来说其地址为24根地址线,其地址表示为EFFFFF;对于80386极其随后的32根地址线芯片来说其地址表示为FFEFFFFF。这种表示的意思是:


Gate被禁止則其第A20CPU做地址访问的时候是无效的,永远只能被作为0所以,在保护模式下如果A20

2如果A20 Gate被打开。则其第20-bit是有效的其值既可以是0,又可鉯是1那么就可以使A20线传递实际的地址信号。如果A20 Gate被打开则可以访问的内存则是连续的。

实模式和保护模式的区别

从表面上看保护模式和实模式并没有太大的区别,二者都使用了内存段、中断和设备驱动来处理硬件但二者有很多不同之处。我们知道在实模式中内存被划分成段,每个段的大小为 64KB 而这样的段地址可以用 16 位来表示。内存段的处理是通过和段寄存器相关联的内部机制来处理的这些段寄存器( CS  DS  SS ES )的内容形成了物理地址的一部分。具体来说最终的物理地址是由 16 位的段地址和 16 位的段内偏移地址组成的。用公式表示为:物理地址 = 左移 4 位的段地址 + 偏移地址

在保护模式下,段是通过一系列被称之为  描述符表  的表所定义的段寄存器存储的是指向这些表的指针。用于定义内存段的表有两种:全局描述符表 (GDT) 局部描述符表 (LDT)  GDT 是一个段描述符数组,其中包含所有应用程序都可以使用的基本描述符在实模式中,段长是固定的 (  64KB) 而在保护模式中,段长是可变的其最大可达 4GB LDT 也是段描述符的一个数组与 GDT 不同, LDT 是一个段其中存放的是局部的、不需要全局共享的段描述符。每一个操作系统都必须定义一个 GDT 而每一个正在运行的任务都会有一个相应的 LDT 。每一個描述符的长度是 8 个字节格式如图 3 所示。当段寄存器被加载的时候段基地址就会从相应的表入口获得。描述符的内容会被存储在一个程序员不可见的影像寄存器 (shadow register) 之中以便下一次同一个段可以使用该信息而不用每次都到表中提取。物理地址由 16 位或者 32 位的偏移加上影像寄存器中的基址组成实模式和保护模式的不同可以从下图很清楚地看出来。

保护模式同实模式的根本区别是进程内存受保护与否可寻址涳间的区别只是这一原因的果。实模式将整个物理内存看成分段的区域,程序代码和数据位于不同区域系统程序和用户程序没有区别对待,而且每一个指针都是指向"实在"的物理地址这样一来,用户程序的一个指针如果指向了系统程序区域或其他用户程序 区域并改变了值,那么对于这个被修改的系统程序或用户程序其后果就很可能是灾难性的。为了克服这种低劣的内存管理方式处理器厂商开发出保护模式。这 样物理内存地址不能直接被程序访问,程序内部的地址(虚拟地址)要由操作系统转化为物理地址去访问程序对此一无所知。

至此进程有了严格的边界,任何其他进程根本没有办法访问不属于自己的物理内存区域甚至在自己的虚拟地址范围内也不是可以任意访问的,因为有一些虚拟区域已经被放进一些公共系统运行库这些区域也不能随便修改,若修改就会有: SIGSEGV(linux 段错误);非法内存访问对话框(windows 对话框)

CPU启动环境为16位实模式,之后可以切换到保护模式但从保护模式无法切换回实模式 。


对于80X86处理器来说从80386处理器开始,除叻以前的实模式外还增添了 

  内存寻址方式为:支持内存分页和虚拟内存       支持多任务,可依靠硬件用一条指令即可实现任务切换不同任務可工作在 不同的优先级下,操作系统工作在最高优先级0上,应用程序则运行       但每个任务都是实模式的工作方式 另外,中断和异常等的处悝对于不同的工作模式都是不同的具体的可以去 参看一些相关书籍。 


}

我要回帖

更多关于 CPU 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信