`
kongweile
  • 浏览: 517327 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Linux内核学习之分段机制

 
阅读更多

转:http://www.linuxidc.com/linux/2008-10/16740.htm

X86分段机制

    这里讲的分段指的保护模式(protected mode)下的段机制。与保护模式相对的一个概念是实模式(real mode),实模式的地址由“段基址:偏移量”组成,段基址是个16位的寄存器(CS,DS等),这样显然限制了系统的寻址空间。保护模式的地址由“段选择子+偏移量组成”,段选择子(Segment Selector)仍然由16位寄存器(CS,DS等)指定,但是其意义也不再是段基址,而是指定了一个下标,用于从描述符表(X86把所有的段信息都存在这个表中)中提取对应的段信息。 

 

    段选择子格式:高12位作为下标从段描述符表选择对应段信息,第2位指示从哪个描述符表寻找(TI=0是取GDT),在X86中共有两个,一个是全局描述符表GDT(Global Descriptor Table),另一个是局部描述符表LDT(Local Descriptor Table),低2位用于指示优先级RPL(Request Privilege Level)。X86共有4中优先级(也叫4个ring),不过linux仅仅使用0和3。

 

    段描述符格式:段描述符中的BASE(32位)指定了该段的基址,LIMIT(26位)指定了段的范围,具体数值要根据G Bit来看,因为给定的是一个“粒度”,相当于一个单位,一般情况下是4K,所以总共就是2^26 * 4K = 2 ^ 32。另外TYPE指明该段的属性,比如是否代码、可执行等,而DPL是与优先级相关的属性。

 

    分段机制(逻辑地址 -- 线性地址)

 

Linux对分段机制的应用

    Linux对段机制的应用效果是等价于几乎绕过了段基址。在Linux中仅有4个段,用户代码段、数据段和内核代码段、数据段。

 

Segment Base G Limit S Type DPL D/B P
user code 0x00000000 1 0xfffff 1 10 3 1 1
user data 0x00000000 1 0xfffff 1 2 3 1 1
kernel code 0x00000000 1 0xfffff 1 10 0 1 1
kernel data 0x00000000 1 0xfffff 1 2 0 1 1

 

    不难看到,由于Base都为0,经分段机制后“线性地址=逻辑地址”,并且G=1(4K粒度)Limit=2^20,因此最大寻址空间为2^32。用户层与内核层描述符之间的区别在于DPL。

    上述四个描述符都在统一放在GDT中,事实上Linux对LDT也是没怎么使用。GDT中内容如下:

X86分段机制

    这里讲的分段指的保护模式(protected mode)下的段机制。与保护模式相对的一个概念是实模式(real mode),实模式的地址由“段基址:偏移量”组成,段基址是个16位的寄存器(CS,DS等),这样显然限制了系统的寻址空间。保护模式的地址由“段选择子+偏移量组成”,段选择子(Segment Selector)仍然由16位寄存器(CS,DS等)指定,但是其意义也不再是段基址,而是指定了一个下标,用于从描述符表(X86把所有的段信息都存在这个表中)中提取对应的段信息。 

 

    段选择子格式:高12位作为下标从段描述符表选择对应段信息,第2位指示从哪个描述符表寻找(TI=0是取GDT),在X86中共有两个,一个是全局描述符表GDT(Global Descriptor Table),另一个是局部描述符表LDT(Local Descriptor Table),低2位用于指示优先级RPL(Request Privilege Level)。X86共有4中优先级(也叫4个ring),不过linux仅仅使用0和3。

 

    段描述符格式:段描述符中的BASE(32位)指定了该段的基址,LIMIT(26位)指定了段的范围,具体数值要根据G Bit来看,因为给定的是一个“粒度”,相当于一个单位,一般情况下是4K,所以总共就是2^26 * 4K = 2 ^ 32。另外TYPE指明该段的属性,比如是否代码、可执行等,而DPL是与优先级相关的属性。

 

    分段机制(逻辑地址 -- 线性地址)

 

Linux对分段机制的应用

    Linux对段机制的应用效果是等价于几乎绕过了段基址。在Linux中仅有4个段,用户代码段、数据段和内核代码段、数据段。

 

Segment Base G Limit S Type DPL D/B P
user code 0x00000000 1 0xfffff 1 10 3 1 1
user data 0x00000000 1 0xfffff 1 2 3 1 1
kernel code 0x00000000 1 0xfffff 1 10 0 1 1
kernel data 0x00000000 1 0xfffff 1 2 0 1 1

 

    不难看到,由于Base都为0,经分段机制后“线性地址=逻辑地址”,并且G=1(4K粒度)Limit=2^20,因此最大寻址空间为2^32。用户层与内核层描述符之间的区别在于DPL。

    上述四个描述符都在统一放在GDT中,事实上Linux对LDT也是没怎么使用。GDT中内容如下:

分享到:
评论

相关推荐

    Linux内核设计与实现(第三版中文高清带目录)_linux_linux内核_

    这本书由Robert Love编写,是学习Linux内核不可或缺的经典之作。以下将从标题、描述以及标签中提炼出的关键信息,详细阐述Linux内核设计与实现的相关知识点。 1. **Linux内核的基本概念**:Linux内核是Linux操作...

    linux 分页分段机制及储存分析

    在Linux中,虽然早期的版本使用了分段机制,但现代Linux内核主要采用分页机制,同时也融入了某些分段的思想。Linux的虚拟内存管理系统(VMM)使用了一个称为页表的数据结构来映射虚拟地址到物理地址。页表由一系列的...

    Linux的分段和分页机制

    在探讨Linux的分段机制之前,我们先了解一下80386处理器的两种工作模式:实地址模式和保护模式。 - **实地址模式**:这是系统启动时的初始状态,也是较早的x86架构CPU(如8086/8088)的主要工作模式。在此模式下,...

    深入理解linux内核(中文第三版高清带书签).zip

    《深入理解Linux内核》是一本深受欢迎的书籍,它为读者揭示了Linux操作系统的内在运作机制,旨在帮助读者深入理解Linux内核的工作原理。这本书的第三版是中文高清版本,带有书签,使得学习过程更为便捷。在这个...

    Linux内核完全注释及linux内核源码

    这份"Linux内核完全注释及linux内核源码"资料提供了宝贵的教育资源,帮助读者理解这个复杂的开源项目的内部运作机制。 首先,让我们来看看Linux内核的基本组成部分: 1. **进程管理**:Linux内核通过调度算法控制...

    linux内核设计与实现3

    通过对这本书的学习,读者不仅能够理解Linux内核的基本工作原理,还能具备分析和调试内核的能力,为进一步开发Linux系统或优化系统性能打下坚实基础。书中的实例代码和练习将帮助你将理论知识转化为实践技能,加深对...

    Linux内核0.11版本 学习Linux内核编程极好的源代码

    7. **编译和调试**:学习如何配置、编译和调试Linux内核,这对于任何想要修改内核的人来说都是必要的技能。 8. **源码结构**:了解早期Linux内核的代码组织结构,有助于理解更高版本内核的复杂性。 通过研究`linux...

    深入理解Linux内核

    通过对《深入理解Linux内核》的学习,读者可以了解并掌握Linux内核的运作机制,从而有能力解决实际工作中遇到的系统级问题,或者参与到Linux内核的开发和优化中去。这本书不仅适合Linux爱好者,也对系统管理员、软件...

    Linux内核完全剖析

    《Linux内核完全剖析》是一本深度探讨Linux操作系统核心机制的专业书籍,旨在帮助读者深入理解Linux内核的工作原理,从而能够进行内核编译及源码分析。在Linux的世界里,掌握内核知识是提升系统优化和调试能力的关键...

    linux内核分析及编程

    3. **内存管理**:Linux内核采用了虚拟内存系统,实现了分页和分段机制。它通过地址映射将虚拟地址转换为物理地址,并利用页表进行管理。此外,还包括内存分配、内存回收、交换和内存保护等功能。 4. **文件系统**...

    linux内核学习.rar

    深入学习Linux内核原理,不仅可以帮助我们理解操作系统的工作机制,也有助于提升系统优化、故障排查和软件开发的能力。通过阅读压缩包中的资料,你可以逐步揭开Linux内核的神秘面纱,从而更好地驾驭这个强大的开源...

    深入理解linux内核2nd(EN)

    - **2.3 Linux中的分段**:分析了Linux内核如何利用分段机制来管理内存区域。 - **2.4 硬件中的分页**:介绍了分页机制的基本原理,以及它如何优化内存使用效率。 - **2.5 Linux中的分页**:具体分析了Linux内核...

    linux内核完全注释

    这本书旨在帮助读者理解Linux内核的工作原理,深入探究这个开源操作系统的核心机制。 Linux内核是Linux操作系统的心脏,它负责管理系统的硬件资源,如处理器、内存、磁盘驱动器等,并提供了一个平台,使得用户空间...

    linux内核设计与实现2nd(英文Chm版)

    这本书由Robert Love撰写,详细阐述了Linux内核的工作原理及其背后的实现机制,是学习和理解Linux系统内核不可或缺的资源。 一、Linux内核简介 Linux内核是开源操作系统的核心,负责管理硬件资源,调度进程,管理...

    Linux-kernel.zip_linux编译内核_内核_编译内核

    总之,Linux内核编译、内核调试以及80386的分段机制是Linux系统管理与开发中的重要概念。通过不断学习和实践,我们可以更有效地利用Linux的强大功能,解决各种复杂问题。对于有志于深入Linux世界的人来说,这是一个...

    linux内核资料,linux内核资料集合,linux内核教程

    这份"linux内核资料集合"包含的可能是关于Linux内核的深入学习材料,包括源码分析、模块开发、调度算法、内存管理等多个方面的内容。下面我们将详细探讨这些主题。 1. **Linux内核源码分析**:Linux内核源码是了解...

Global site tag (gtag.js) - Google Analytics