保护模式内存管理1.内存寻址
保护模式下寻址由段地址+段内offset构成,其中段地址16b,其中的14b(16b的选择子中有2b用于特权级)可以选择2的14次方个段;段内偏移用32b来表示。程序中由上述48b构成的称为一个长地址或者一个长指针。 将要执行的指令的地址为CS:[EIP],段间转移指令可以用于为CS和EIP赋新值,从而可以将执行位置改变到其他的代码段中。这样,就实现了不同段中的程序的控制传递。 由SS寻址的段称为当前堆栈段,栈顶由ESP寄存器指定,因此堆栈顶端的地址是SS:[ESP].另外四个寄存器DS~GS是通用寄存器。当指令中没有指定所操作数据段时,DS是默认的。 为了指定内存操作数的段内偏移地址,指令的偏移量是三部分相加而成:基地址寄存器、变址寄存器、偏移常量。偏移地址=基地址+(变址X比例因子)+偏移量2.地址变换
内存管理系统包括两个部分:保护+地址变换。 为了减少地址变换所需要的信息,变换或者映射需要用内存块作为操作单位,分页和分段是两种常见的地址变换技术。分页和分段机制都使用内存中的表来指定他们各自的变换信息,这些表只能被操作系统访问。 下图,显示了虚拟地址到物理地址的变换过程。 图1.虚拟地址到物理地址的变换过程 下图,显示了逻辑地址、线性地址和物理地址之间的变换3.保护
3.1任务之间的保护
每个任务都有自己的段表和页表,当处理器切换任务的时候,关键就是切换到新任务的变换表。通过在所有任务中安排具有相同的虚拟到物理地址的映射部分,并且包操作系统存储在公共的虚拟地址空间部分,操作系统可以被任务共享。这一部分相同的地址空间被称为全局地址空间。3.2特权级保护
每个特权级都有自己的程序栈,避免使用共享堆栈带来的保护问题。程序的特权级别切换以后,堆栈段也切换到新级别的堆栈段中。
保护模式内存管理
最新推荐文章于 2018-08-30 00:59:34 发布