·ChinaUnix首页 ·论坛 ·博客 
Linux首页 | Linux新闻 | Linux文档 | Linux论坛 | Linux下载 | Linux博客 | Linux搜索
新手入门 | 安装启动 | 管理员指南 | 开发手册 | 桌面应用 | 程序开发 | 数据库 | 网络技术| CentOS | Fedora | MySQL | Apache | Ubuntu | Gentoo| OSCON08
  Linux时代 >> 技术文档 >> 安装启动
 
Linux硬件-386的段页式寻址
来源: ChinaUnix博客  日期: 2008.04.10 18:07 (共有条评论) 我要评论
 

说起来已经上过微机原理和计算机组成原理的课程了,可是知道现在才明白386体系中段页式内存寻址的具体过程,惭愧啊!
一、页目录表和页表
每个进程都有多个页表,里面存储的是线性地址和物理地址的对应关系,而页目录表是操作系统维护的,只有一张,里面存储的是各个进程的各个页表的地址。
二、全局描述符表和局部描述符表
局部描述符表是各个进程拥有的,里面存放的是其进程的各个段(代码段,数据段等)的段描述符。
全局描述符表在系统中只有一个,里面存放了三种内容:操作系统的各个段(代码段,数据段等)的段描述符,各个进程的局部描述符表(LDT)的段描述符,各个进程的进程状态表(TSS)的描述符。
也就是说,LDT存储着其进程的各个段的信息,而LDT本身的信息存在GDT中,恩,是这样的。
三、CR3,GDTR,LDTR.
CPU中为段页式管理设置了三个重要寄存器:CR3,GDTR,LDTR。其中,CR3保存的是页目录表的基地址,GDTR保存的是全局描述符表(GDT)的基地址,表长等GDT的信息,LDTR保存的是某个进程的局部描述符表的描述符的选择子(有点绕,也就是指向GDT中的某个LDT描述符)和对应描述符的内容(此内容不可见)。
四、虚拟地址向线性地址转换:
虚拟地址由16位的段选择子和32位的段内偏移地址组成的,其中16位的段选择子在程序装入的时候,被装在了六个段寄存器(cs,ds,ss等)中,cpu先通过GDTR找到GDT的基地址。如果该段描述符在GDT中(可以根据段寄存器的低位判断),则根据段寄存器中段选择子找到对应的段描述符,从而得到段的基地址;如果该段描述符在LDT中,则先根据LDTR在GDT中找到相应进程的LDT描述符,再在LDT中,根据段寄存器中的段选择子找到段描述符,从而得到段的基地址。找到段的基地址后,再和逻辑地址(虚拟地址)的低32位段内便宜地址相加的到32位线性地址。
五、线性地址向物理地址转换:
32位的线性地址中,高10位是页表号,中间10位是页号,最后12位是页内便宜地址。Cpu先根据CR3的到页目录表项表的基地址,然后在页目录项表中根据页表号找到页表的基地址,再在页表中根据页号找到页地址,最后在页中根据页内便宜地址找到对应的物理地址。
Ok!齐活了!但还要做一下说明,各个段寄存器中不光有16位的段选择子,还有隐藏不可见部分,这部分保存的是此段寄存器对应的段的基地址、段长等信息,其实就是一个缓冲的作用,在访问段的第一次的时候加载进去的,以后再寻址的时候,就不用再经过几次转换才能查到段基地址,可以从段寄存器中直接得到。同样的道理,LDTR中也不只是有局部描述符表的描述符选择子,还有对应的描述符表的基地址,表长的信息,同样也是在第一次访问某进程的局部描述符表时候加载进去的,起到缓冲作用,以后访问局部描述符表就不用再到GDT中找了。




本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/63273/showart_525875.html
  发表评论 查看评论(共有条评论) 我要提问
 
 


最新资讯更多>> 
· BSD发行版发布:NetBSD 4.0.1
· 开发者发行版:Magic Linux rc3
· OpenOffice 3.0威胁微软Office..
· 开源不适合VMware
· 永中集成OFFICE 2009个人版 Li..
· Mozilla发布火狐3.1公测版 增加..
· Linux操作系统进入家用电脑成为..
· Bugs过多推迟Debian Lenny的发布
· linux上网本 VS iphone
· 金融危机 开源软件行业逆市火
论坛热点更多>> 
· 关于秋日里的一场梦。。。。。。
· 那些常常见到又叫不出名字的花
· 这几道题会做就可直接找LINU..
· 跟媳妇吵架了……
· 一个菜鸟的自白!   我为..
· 家里花盆上的蜂窝
· 咋最近不见团长了?
· 在线等待,2块scsi 硬盘。
· 倒!同事一个比一个住的远
· 我装不了RPM包是什么原因大家..
文档更新更多>> 
· Linux服务优化详解
· linux at 命令详解
· autofs服务动态自动挂载各种文件..
· NIS服务器(三)
· NIS服务器(二)
· NIS服务器(一)
· Gentoo 升级有关操作
· GTK+中状态栏(Status Bar)使用..
· vi使用笔记
· BusyBox(转载)
 
关于我们 | 联系方式 | 广告合作 | 诚聘英才 | 网站地图 | 友情链接 | 免费注册

Copyright © 2001-2008 ChinaUnix.net All Rights Reserved

感谢所有关心和支持过ChinaUnix的朋友们

京ICP证041476号