您的位置:首页 > 理论基础

南大Mooc计算机体系基础--IA_32地址转换

2017-10-27 22:54 363 查看

IA_32地址转换

逻辑地址 –> 线性地址 –> 物理地址

|-虚拟地址的两种表示-|

分段:逻辑地址到线性地址

逻辑地址=段选择符+有效地址

有效地址=基址+比例变址+位移量

段选择符:由指令显示或隐式给出,存在段寄存器中(CS,SS,DS,ES等)

段选择符=13位段表索引+全局/局部段标志+访问级别(0最高,3最低)

由段表索引去段表查到相应的段基址

段表:段描述符8B,每一项描述段的段基址,长度,权限等

项分两类:

1. 普通段描述符(用户内核的代码段,数据段)
2. 系统控制段描述符(特殊系统控制段LDT,TSS,控制转移段)


表分三种类型:

1. GDT:全局段表,所有任务共有的段,包括用户内核数据段代码段TSS(任务状态段)等
2. LDT:某个任务专有的段
3. IDT:中断描述符表


不可见寄存器:

1. 段描述符cache:
段表是存在主存里的,为了加快速度,在第一次使用后把段表加入到cache
2. TSS/LDT寄存器:存放段选择符,其描述符在GDT中
3. GDT/IDT寄存器:给出段表的主存首地址,界限


线性地址=段基址+段偏移(有效地址)

根据逻辑地址的段选择符,去查(cache/主存)段表得到段基址,相加得到线性地址


linux对段表的简化:

所有的段基址都是0,也就是逻辑地址=线性地址
MMU:地址转换部件,实现地址转换的硬件


分页:线性地址到物理地址

页目录:整个4GB都要分页,一张页表太大,所以分成1K(页目录) * 1K(页表) * 4KB形式

页目录:1k项,每项对应一张页表

页表:1k项,每项对应一页4KB

线性地址通过查二级页表+页内偏移的方式访问主存
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: