赛迪网 > IT技术 Linux > 最新更新
  IT资讯搜索
 
IT产品搜索
[程序开发][网管世界][网络安全][数据库技术]
[操作系统][嘉宾聊天·在线访谈][活动集锦]
[精彩专题][Symantec专区][订阅IT技术周刊]
[开发论坛][网管论坛][安全论坛][数据库论坛]
[操作系统论坛][Sybase专区][IBM dW技术专区]
[病毒求助][病毒与漏洞播报][文档·源码下载]

Linux系统在X86上的虚拟内存管理详解 (1)

发布时间:2006.09.19 09:52     来源:赛迪网技术社区    作者:ken

前言

Linux支持很多硬件运行平台,常用的有:Intel X86,Alpha,Sparc等。对于不能够通用的一些功能,Linux必须依据硬件平台的特点来具体实现。本文的目的是简要探讨Linux在X86保护模式上如何实现虚拟内存管理功能。为简化和方便叙述,本文做如下限定:X86处理器为80486和其后的处理器,X86工作在保护模式,不采用物理内存扩展(使用32bits物理地址),不使用扩展页(页大小为4K)。凡是与限定模式无关的内容,本文都尽量略过。Linux的虚拟内存管理中与硬件平台无关的内容在本文中也被略过。本文所援引的Linux内核源代码版本为Linux 2.2.5。

X86的分段和分页机制

I. X86的分段机制和相应系统结构

X86的分段机制就是将X86的线性地址空间分成许多小空间--段(segment),利用这些段来存储(记录)代码和数据,通过对段的保护来提供一种对数据或代码的保护。根据每个段的作用和存储内容的不同,X86将段分为三类进程段(代码段、数据段和堆栈段)和两类系统段:任务状态段(TSS,Task-State Segment)和LDT段(由于GDT不是通过段描述符和段选择符来访问,所以X86没有认为存在一个GDT段;同理,也不存在IDT段)。

在分段机制,X86使用了如下几种主要数据结构:

• 全局描述符表(GDT,Global Describtor Table):存放系统用的段描述符和各项任务共用的段描述符,可以是上述的任何一类段的段描述符,最大表长64KB;

• 局部描述符表(LDT,Local Describtor Table):存放某个任务专用的各段的段描述符,只能是三类进程段的段描述符和调用门描述符,最大表长4GB;

• 段描述符(Segment Describtor):64bits,用来描述一个段的基地址(该地址是线性地址),该段的类型,对该段操作的限制;

• 门描述符(Gate Describtor):64bits,一种特殊的描述符,为处于不同特权级的系统调用或程序的调用或访问提供保护;分为四类:调用门描述符(Call Gate Describtor)、中断门描述符(Interrupt Gate Describtor)、陷阱门描述符(Trap Gate Describtor)、任务门描述符(Task Gate Describtor);

• 段选择符(Segment Selector):16bits,用于在GDT或LDT中索引相应的段描述符;

• 中断描述表(IDT,Interrupt Describer Table):存放门描述符,只能是中断门描述符,陷阱门描述符和任务门描述符,最大表长64KB;

同时,X86提供了如下几个用于支持分段机制的寄存器:

• 全局描述符表寄存器(GDTR,GDT Register):48bits,32bits为GDT的基地址(线性地址),16bits为GDT的表长;GDTR的初始值为:基地址0,表长0xFFFF;

• 局部描述符表寄存器(LDTR,LDT Register):80bits,16bits为LDT段选择符,64bits为该LDT段的段描述符;

• 中断描述符表寄存器(IDTR,IDT Register):48bits,32bits为IDT的基地址(线性地址),16bits为IDT的表长;IDTR的初始值为:基地址0,表长0xFFFF;

• 任务寄存器(TR,Task Register):80bits,16bits为任务状态段选择符,64bits为该任务状态段的段描述符;

• 六个段寄存器(Segment Register):分为可见部分和隐藏部分,可见部分为段选择符,隐藏部分为段描述符;六个段寄存器分别为CS、SS、DS、ES、FS、GS;关于这些段寄存器的作用参见[1]中3.4.2 'Segment Register';

86工作在保护模式时,进程使用的48bits逻辑地址(Logical address)。逻辑地址的高16bits为段选择符,低32bits是段内的偏移量。通过段选择符在GDT或LDT中索引相应的段描述符(得到该段的基地址),再加上偏移量得到逻辑地址对应的线性地址(Linear Address)。如果没有采用分叶管理,线性地址是直接映射物理地址(Physical Address),于是可以直接用线性地址访问内存;否则,还要通过X86的分页转换,将线性地址转换为物理地址。

以上是对X86分段相关内容的简要描述,对于各数据结构、寄存器的细节和逻辑地址转换为线性地址的细节。

1 2 3 4 下一页>>


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
· Linux盟友分道扬镳 直言开源模式软肋 (09-18) · OSDL和Linux桌面思考:前面的道路 (09-18)
· 深入探讨Linux与微软在桌面上的较量 (09-18) · 为你的Linux系统快速编译所需要的模块 (09-18)
· Linux内核编译菜单中相关选项的意义 (09-18) · 2006政府暨公共事业开源应用论坛在京召开 (09-18)
· Linux内核重编译常见故障及其解决方法 (09-18) · 精华分享:使用开源代码写Linux程序 (09-18)
· 给大家在Linux上文件系统选择上的建议 (09-18) · Linux十五年来的病毒发展史及分类 (09-18)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
  赛迪推荐  
  手机·资费 ·新品·导购·评测·手机资费·宽带
手机搜索  诺基亚 N73 MOTO Z6
  IT产品 ·笔记本·台式机·服务器·打印·投影
IT产品搜索 
  IT技术 ·开发·网管·安全·数据库·操作系统
  信息化 ·热点·专题·访谈·周刊·方案案例
[政务][电信][金融][农业][制造业][中小企业]
[CIO][ERP][协同][IT管理][中间件][电子商务]
[政策][地方][专家][评估][辞典][博客][社区]
· 专题:一路畅通构想曲——让出行不再遭遇堵车
· CIO工作亲历:企业ERP选型不能忽视"选人关"
· 综述:信息化建设给中国监狱带来的各种变化
· 金融业风险管理和法规遵从有五点需考虑的因素
· 保险业CIO关注:该如何建立统一高效的CRM体系
· 调查显示:多数CIO对IT规划仍存在困惑和误解
  博客·论坛 ·曾剑秋·项立刚·Java学习·网管