过程区域表&全球描述符能够和虚拟地址

时间:2013-01-20 16:13:49

标签: linux virtual-address-space

我将从这里的一个培训机构获取linux笔记。 因此,当创建进程时,将为其分配区域。 Region包含进程的所有段。

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

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

我有两个douts:-----

1> Global&本地描述符角色就在这里。

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 - ;每个进程都有自己的全局描述符表吗?    我认为是的,否则两个过程的虚拟地址将指向相同的物理地址。

请建议

1 个答案:

答案 0 :(得分:0)

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

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

要判断该段是GDT还是LDT,请查看第3位(值为8的那个) - 例如,在我的系统中ss具有值0x2b,因此它具有第3位设置。另一方面,cs33,因此它没有设置第3位,因此来自GDT。

2)没有。有一个GDT(准确地说是每个CPU核心) - 这就是为什么它被称为“全球” - 所有东西都有一个。这也是堆栈段在LDT中的原因,因为每个进程有一个。