Chinaunix首页 | 论坛 | 博客

分类: LINUX

2012-09-25 19:59:59

虚拟保护机制:

从虚拟地址到物理地址,需要经过分段机制和分页机制两极转化。第一级是使用分段机制,将虚拟地址转化为线性地址,第二级是分页机制,将线性地址转化为物理地址。

第一级是必要的,第二级是可以禁止启动的,但是一旦禁止启动,段机制得到的线性地址,直接作为物理地址。

80286保护虚拟地址只有分段管理机制:

无论是在实方式还是保护方式下,程序只与逻辑地址打交道,逻辑地址由段基址和偏移量组成。

在存储器中访问一个存储单元的过程:

首先是在段寄存器中,得到一个段基址,然后段基址加上存储单元的偏移量就得到在存储单元的物理地址。在保护方式下逻辑地址被成为虚拟地址,因为这个段可能不存在物理存储器上。


逻辑地址到线性地址的实现过成:

通过段选择符----> 得到该段的段描述符,从而得到段的32位基址。在加上3216)位的偏移地址就得到了32位的线性地址。









段选择符是一个指向操作系统定义的段信息的指针。

RPL)最低的两位规定了选择符请求特权的级别。00B 最高的特权,11B 最低特权

TI表示指示器。TI=0 全局描述符表。T1=1局部变量描述符。


段描述符表:

段描述符简称描述符表:在80386/80486CPU 下共有三个描述符表,全局描述符,局部描述符和中断描述符。对于全局描述符来说,系统只有一个全局描述符。

详细解说中断描述符:

存储了中断程序的入口的 段地址和段内的偏移地址。

中断描述表里面包含了中断描述符,陷阱门描述符和任务门描述符。中断门和陷阱门间接的提供了中断程序的入口段基地址。既由陷阱门或者中断门描述符索引出来一个段描述符。该段提供了中断程序的入口基地址。


在局部描述符表寄存器中,包含了一个选择器和不可见的高速缓存器。


线性地址到物理地址的转换:


分页机制将32位线性地址分为三个域,目录索引域(10位),表索引域(10位)和偏移量(12位)。

线性地址高10*412位) 就是在页目录项的偏移量。页目录项的起始基址由控制寄存器CR3的高20位加上12位的0组成。所以项的地址实际上就是基地址的高20位和12位偏移地址所组成。页表项的基地址就是在页目录项中的一个项的内容高20位加上120构成。偏移量=表索引地址(10)位*4 12位)得到。在页表项中的32位地址由页表基地址高20位和12位偏移量构成。页表中的一个项的内容的高20位加上12位全是0,所得到就是页帧的基地址和12位偏移量组成。


说的似乎不清楚,给大家举例来说明:

假设某存储单元的线性地址为25674890HCR3= 28345XXXH,求该存储单元单元的物理地址。


首先先将线性地址分成三个域:





0010010101           1001110100         100010010000

 目录索引域(10位) 表索引域 (10位) 偏移量(12位)


因为CR3= 28345XXXH ,所一目录索引域的基地址为28345000H,线性目录中所以的地址为0010010101B,故:

页目录表中所索引的物理地址= 目录表基地址+ 偏移量(目录地址*4

= 28345XXXH + 254H = 28345254H

如果设目录中寻址项的内容为00200021H ,这表明所寻址项的对应的页表项中的基地址为00200000H。线性地址中页表索引地址为1001110100B,故:

页表中所寻址的物理地址= 页表基地址+ 页表索引地址*4

= 00200000H+9D0H= 002009D0H

如果页表中所寻址的内容为34567021H,则页帧基地址为= 34567000H

最终要寻址寻找的单位的物理地址为=页帧地址+线性地址中的12位偏移量= 34567000H+890H = 34567890H

阅读(3370) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~