GDT和LDT的关系

    最近在阅读Linux内存管理时,突然对GDT(Glocal Descriptor Table)和LDT(Local Descriptor Table)产生了一些疑问。他们在内存是怎样存放的呢?程序在运行时又是如何对GDT和LDT产生了影响?

    以下配图均来自《Linux内核完全注释(1.9.5版)》,所有的内容也都是基于Linux内核0.11版。其他Linux版本则需查看相应的代码进行分析

    在Linux内核0.11中,对GDT和LDT的声明和配置如下:
    Linux内核描述符表示意图

    从上图可以看到LDTR指向的是GDT中的一部分,确切的说是指向了GDT的第五个描述符,而从这个描述符开始,包含了LDT。
    从相应的内核代码中,我们看到在task_struct的声明中,有如下内容:

    struct task_struct {
        ...
        struct desc_struct ldt[3];
        struct tss_struct tss;
    };
    

    这说明ldt是和每个task有关。每当需要创建新的process时,就需要在内存中把一块相应的区域划分给这个process的LDT:

    int copy_process(int nr, ...)
    {
        struct task_struct *p;
        p=(struct task_struc
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值