保护模式内存管理

来源:互联网 发布:windows活动目录的功能 编辑:程序博客网 时间:2024/04/28 18:46
保护模式内存管理

1.内存寻址

保护模式下寻址由段地址+段内offset构成,其中段地址16b,其中的14b(16b的选择子中有2b用于特权级)可以选择214次方个段;段内偏移用32b来表示。程序中由上述48b构成的称为一个长地址或者一个长指针。 将要执行的指令的地址为CS[EIP],段间转移指令可以用于为CSEIP赋新值,从而可以将执行位置改变到其他的代码段中。这样,就实现了不同段中的程序的控制传递。 SS寻址的段称为当前堆栈段,栈顶由ESP寄存器指定,因此堆栈顶端的地址是SS[ESP].另外四个寄存器DSGS是通用寄存器。当指令中没有指定所操作数据段时,DS是默认的。 为了指定内存操作数的段内偏移地址,指令的偏移量是三部分相加而成:基地址寄存器、变址寄存器、偏移常量。偏移地址=基地址+(变址X比例因子)+偏移量

2.地址变换

内存管理系统包括两个部分:保护+地址变换。为了减少地址变换所需要的信息,变换或者映射需要用内存块作为操作单位,分页和分段是两种常见的地址变换技术。分页和分段机制都使用内存中的表来指定他们各自的变换信息,这些表只能被操作系统访问。下图,显示了虚拟地址到物理地址的变换过程。图1.虚拟地址到物理地址的变换过程下图,显示了逻辑地址、线性地址和物理地址之间的变换

3.保护

3.1任务之间的保护

每个任务都有自己的段表和页表,当处理器切换任务的时候,关键就是切换到新任务的变换表。通过在所有任务中安排具有相同的虚拟到物理地址的映射部分,并且包操作系统存储在公共的虚拟地址空间部分,操作系统可以被任务共享。这一部分相同的地址空间被称为全局地址空间。

3.2特权级保护

每个特权级都有自己的程序栈,避免使用共享堆栈带来的保护问题。程序的特权级别切换以后,堆栈段也切换到新级别的堆栈段中。
0 0