热门关键字:  ubuntu  分区  Fedora  linux系统进程  函数

当前位置 :| 主页>Linux教程>内核研究>

Linux内核的段式管理

来源: 作者: 时间:2007-08-30 Tag: 点击:

段式管理用以将逻辑地址转化为线性地址。一个逻辑地址由一个16位的段选择子和一个32位的偏移量组成。

1、段选择子和段寄存器
    为了快速的对段进行访问,i386提供了6个段寄存器以存放段选择子,分别为CS(代码段寄存器)、SS(栈段寄存器)、DS(全局和静态数据段寄存器)、ES(后三个均为任意数据段寄存器)、FSGS。此外,i386还提供了6个段描述符寄存器(对程序员不可见),用来缓存相应段寄存器所对应段的段描述符。段寄存器格式如下:

Index

TI

RPL

    其中,Index13位,为访问段描述符数组项的下标;TI只有1位,为0表示使用GDT1表示使用LDTRPL2位,用以表示当前进程的特权级别。
2、段描述符
    每个段的属性在内存中由一个8字节的段描述符表示,段描述符存放在全局描述符表(GDT)或者局部描述符表(LDT)中,其地址和体积分别保存在GDTRLDTR寄存器中。段描述符的结构如下:

Base24-Base31

G

D/B

L

AVL

Limit16-Limit19

P

DPL

S

Type

Base16-Base23

Base0-Base15

Limit0-Limit15

    其中,Base32位的段基(线性)地址;Limit20位的段长度;G只有1位,为0表示段长度以字节为单位,1表示段长度以4KB为单位;D/B只有1位,为0表示为16位段,1表示为32位段;L只有1位,未使用;AVL只有1位,供系统软件使用(Linux从未使用该位);P只有1位,表示该段内容是否在内存中(Linux从不将整个段替换出内存,故该位恒为1);DPL2位,表示访问该段所需要的特权级别;S只有1位,为0表示段为存放关键数据的系统段,1表示段为普通段;Type4位,定义了段类型和访问权限。
    在linux系统中,主要包括代码段描述符、数据段描述符(包含栈段)、任务状态段(TSSType字段值为911)描述符和局部描述符表(LDTType字段值为2)描述符四种段描述符。其中,前两者可以被包含在GDTLDT中,TSSDLDTD为系统关键段,仅能包含在GDT中。


相关文章:
精通initramfs构建step by step
Linux利用kexec迅速切换内核
进程上下文VS中断上下文
内核通知链 学习笔记
linux spi子系统驱动分析
menuconfig 配置选项
《Linux操作系统内核实习》之练习一
udev详解
什么叫微内核,宏内核?
Linux 信号signal处理机制
开发简单的 Linux2.6 内核模块
删除内核的perl脚本
Linux2.6内核usb gadget驱动移植
GCC hacks in the Linux kernel
iomem
kernel学习的想法
让自己的驱动支持udev
linux内核编译步骤
内核的等待队列
Linux内核wait_queue深入分析
升级和删除内核
SD卡驱动分析2
Linux Kernel VDSO本地权限提升漏洞
内核中的TCP的追踪分析-15-TCP(IPV4)的客户端与
linux 2.6内核可加载模块的编译
内核模块HelloWorld
在环回接口上发送一个数据报
ARP初始化
1分钟编译FreeBSD内核
linux设备模型之uart驱动架构分析