0

https://wiki.osdev.org/Task_State_Segmentのページを読んでいました

私が理解しているように、タスク記述子をジャンプまたは呼び出すと、このタスク記述子にリンクされたTSSセグメントに対応するリングとレジスタが「自動的に」切り替わります。

しかし、たとえばリング 3 から別のリング 3 にタスクを切り替えると、レジスタは実際の TSS に自動的に保存されますか? (tr レジスタにロードされます)。

このosdevページ(上記のリンク)では、レジスタが保存されていないと書かれていますが、そうでない場合、タスクがそれ自体でTSSを更新する方法はありますか? それは巨大なセキュリティ問題を引き起こすでしょう。

(ハードウェアの切り替えが時代遅れであることは知っていますが、それでもその仕組みを理解したいと思っています。)

4

1 に答える 1

0

そのページは osdev に関するものではありません。それはLinuxが何を使用するかについてです。Linux はタスクの切り替えを行わないため、タスク内での特権の切り替えのみを考慮します。

タスクまたはタスク ゲートであるセレクターを呼び出しまたは jmp すると、レジスターは現在のtrレジスターによって識別されるタスク セグメントに保存されます。次に、trがターゲット セレクタに切り替えられ、レジスタがこのタスク セグメントからロードされます。

于 2021-09-08T04:32:51.567 に答える