0

我正在阅读这里的培训机构之一的 linux 笔记。根据这一点,每当创建一个进程时,就会为其分配一个区域。区域包含进程的所有段。

区域也由区域表指定。区域表包含以下条目;--
虚拟地址到 - 物理地址指针 + 磁盘块描述符

磁盘块描述符指向磁盘上的交换或 exe 文件。

我有两个问题:-----

1> Global & Local Descriptor 角色在哪里。

http://www.google.co.in/imgres?um=1&hl=en&sa=N&tbo=d&biw=1366&bih=677&tbm=isch&tbnid=GSUGxm8x4QWQ1M:&imgrefurl=http://iakovlev.org/index.html%3Fp%3D945&docid= 8Y36SIxwT17J6M&imgurl=http://iakovlev.org/images/intel/31.jpg&w=1534&h=1074&ei=oBX8UKuwBoHsrAer8YHQAw&zoom=1&iact=hc&vpx=79&vpy=377&dur=609&hovh=188&hovw=268&tx=150&ty=107&sig=103468883298920883665&page=1&tbnh=155&tbnw=221&start= 0&ndsp=27&ved=1t:429,r:14,s:0,i:124

2> 每个进程都有自己的全局描述符表吗?我认为是的,否则两个进程的虚拟地址将指向相同的物理地址。

请建议

4

1 回答 1

0

1) 全局描述符表给出线性地址的基地址。它几乎总是零,并且“限制”设置得太“全1”(即所有可寻址内存)。实际上,实际上并未使用段选择器。该架构要求它们存在并加载,但它们“可用于”的实际效果并未在 Linux 中使用。

本地描述符表的工作方式完全相同,只是每个进程都有一个 LDT。通常它保存任务的堆栈段——它的基地址仍然为零。进程可以修改LDT,不能修改GDT。

要判断该段是 GDT 还是 LDT,请查看第 3 位(值 8 的那个) - 例如,在我的系统ss中有 value 0x2b,所以它设置了第 3 位。cs另一方面是33,所以它没有设置第 3 位,因此从 GDT 中出来。

2) 不。有一个 GDT(准确地说,每个 CPU 内核)——这就是它被称为“全局”的原因——所有事物都有一个。这也是堆栈段位于 LDT 中的原因,因为每个进程都有一个。

于 2013-01-20T16:45:04.053 回答