怎么理解用 TSS 恢复任务的执行,里面用到的 LDT 段选择子?

2022-12-19 20:35:18 +08:00
 amiwrong123

根据书上内容,当切换到新任务,当前任务会指向一个新的 TSS ,TSS 里面会保存 恢复任务需要的东西。上图红框的这几个选择子,都依赖从当前的任务的 LDT 里,去取属于自己的段描述符。

对于上图的 LDT segment selector ,我不是很理解,不是应该存任务的 LDTR 里面的值( 32 的基地址,和 16 的偏移地址),这样就可以直接拿这个值来装入 LDTR 寄存器里面,就可以识别到新的 LDT 了。或者说,我觉得保存 LDT 在哪里这个信息,不应该用到选择子阿

但是现在,却是一个 LDT 的选择子,难道说 可以用这个选择子从 GDT 里面取到一个段描述符吗,并把里面的地址 作为 LDTR 的基地址?但就算是这样,他也没有保存到 LDT 的界限是多少阿!

963 次点击
所在节点    程序员
6 条回复
amiwrong123
2022-12-20 00:03:43 +08:00
原来每个任务的 TCB 里面,有存 LDT 的基地址和界限。

但还是不知道 LDT 的段选择子是用来干啥的。而且 TCB 里面也有 LDT 的段选择子,奇怪了。
yuguorui96
2022-12-20 08:53:54 +08:00
愚以为直接存基址的话,在 32 和 64 之间就需要不同的大小来操作 ldt ,这个非常痛苦。
所以我理解 selector 的本质作用就是替换掉变长的地址宽度。
ihciah
2022-12-20 20:24:47 +08:00
The LDT is located in a system segment of the LDT type. The GDT must contain a segment descriptor for the LDT segment. If the system supports multiple LDTs, each must have a separate segment selector and segment descriptor in the GDT. The segment descriptor for an LDT can be located anywhere in the GDT. See Section 3.5, “System Descriptor Types”, for information on the LDT segment-descriptor type.
An LDT is accessed with its segment selector. To eliminate address translations when accessing the LDT, the segment selector, base linear address, limit, and access rights of the LDT are stored in the LDTR register (see Section 2.4, “Memory-Management Registers”).
From SDM Vol. 3A 3-15
amiwrong123
2022-12-20 21:28:36 +08:00
@ihciah #3
原来 LDTR 寄存器里面有三个东西,segment selector, base linear address, limit

但好像还是不明白,这三个东西,既然已经有了 segment selector ,那还需要 base linear address, limit 干什么,毕竟一个段选择子指向一个段描述符,而一个段描述符其实就是包含了基地址和界限。
yuguorui96
2022-12-20 23:22:24 +08:00
@amiwrong123 你再看看上个回答?谜底就在谜面上。
stevefan1999
2022-12-21 12:05:33 +08:00
歷史原因
在沒有線性地址前 DOS 就是靠交換 TSS 來獲得有限的虛擬內存支援 但並沒有內存保護
後來有了 32-bit 就完全改成了線性地址 但是為了向下兼容就規定了只有當你轉成保護模式才可以
你做的這是其中一步

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/903585

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX