如何进入保护模式
这是个复杂的过程,其原因在于保护模式本身是复杂的。
相对于8086来说,386增加了很多新寄存器,用于支持多任务操作系统,或者说让CPU能工作在保护模式下。CR0就是其中之一。CR指Control Register,控制寄存器。CR0是CR中的一个。CR的最后一个bit是PE位,Protected-mode Enable,保护模式使能位。386开机后工作在实模式,可以通过16位指令置CR0的最后一个bit为1,从此CPU进入保护模式。
set PE操作虽然能让CPU进入保护模式,但这并不意味着进入保护模式的CPU可以正常工作。这是因为相对于实模式下的CPU,保护模式下的CPU需要依赖一些特殊的数据结构才能正常工作,除此之外,很多琐碎的问题也需要考虑在内。
首先,为了给存储器内的段提供独立性,386引入了一个数据结构GDT,Global Descriptor Table。386有32位的寄存器,32根地址线,不在依靠分段机制访问“超过寄存器长度的存储器地址(指段地址:偏移的寻址方式)”,但是出于兼容性与内存管理等方面的考虑,段的概念依然被保留在了386内。此时,段机制的意义只在与将存储器分割成了更小的部分。为了让这些段具有独立性,Intel引入了GDT,保存各个段在存储器中的位置与和段隔离有关的信息。该表可以很大,保存在RAM中,而386通过GDTR(GDT Register),一个32(base address) + 16(boundary)= 48位的寄存器,定位GDT的位置。从寄存上看,GDT可以存在于4GB RAM的任何位置,但实模式下,386只能寻址1MB。因此GDT往往在RAM的第一个1MB内。GDT是一个数据结构&
这是个复杂的过程,其原因在于保护模式本身是复杂的。
相对于8086来说,386增加了很多新寄存器,用于支持多任务操作系统,或者说让CPU能工作在保护模式下。CR0就是其中之一。CR指Control Register,控制寄存器。CR0是CR中的一个。CR的最后一个bit是PE位,Protected-mode Enable,保护模式使能位。386开机后工作在实模式,可以通过16位指令置CR0的最后一个bit为1,从此CPU进入保护模式。
set PE操作虽然能让CPU进入保护模式,但这并不意味着进入保护模式的CPU可以正常工作。这是因为相对于实模式下的CPU,保护模式下的CPU需要依赖一些特殊的数据结构才能正常工作,除此之外,很多琐碎的问题也需要考虑在内。
首先,为了给存储器内的段提供独立性,386引入了一个数据结构GDT,Global Descriptor Table。386有32位的寄存器,32根地址线,不在依靠分段机制访问“超过寄存器长度的存储器地址(指段地址:偏移的寻址方式)”,但是出于兼容性与内存管理等方面的考虑,段的概念依然被保留在了386内。此时,段机制的意义只在与将存储器分割成了更小的部分。为了让这些段具有独立性,Intel引入了GDT,保存各个段在存储器中的位置与和段隔离有关的信息。该表可以很大,保存在RAM中,而386通过GDTR(GDT Register),一个32(base address) + 16(boundary)= 48位的寄存器,定位GDT的位置。从寄存上看,GDT可以存在于4GB RAM的任何位置,但实模式下,386只能寻址1MB。因此GDT往往在RAM的第一个1MB内。GDT是一个数据结构&