0

ESP と SS は何を指しますか? たとえば、リング 0 の特権レベルを持つ TASK_1 からリング 0 の同じ特権レベルを持つ別の TASK_2 にタスク スイッチを実行すると、コンテキスト スイッチが完了した後に (ESP と SS) または (SS0 と ESP0) が使用されます。 .

1- SS0、SS1、SS2 は、タスク「内」のスタック スイッチの場合にのみ使用されますか?

2- SS は任意の特権レベルのスタック セグメントを保持できますか、それともリング 3 のみのスタック セグメント専用ですか?

4

1 に答える 1

4

CPUがさまざまな目的で使用するメモリ内の構造である32ビットTSS(タスクステートセグメント)について話していると思います。ESP および SS フィールドは、CPU が古いタスクの ESP および SS を保存し、CPU 管理のタスク切り替え中に新しいタスクの ESP および SS 値を復元する場所です。これらのフィールドは、他の汎用レジスタ フィールドやセグメント レジスタ フィールド (EAX や DS など) と同様に、タスク スイッチ中に保存および復元されます。

ESP0、ESP1、ESP2、SS0、SS1、SS2 フィールドは、タスク スイッチ中に使用されることはありません。これらは、割り込みまたは例外により、同じタスク内でより特権レベルに変更された場合にのみ使用されます。これにより、スタック スイッチが発生し、現在の TSS からの適切な ESP# および SS# 値が ESP および SS レジスタにロードされ、古い ESP および SS 値が新しいスタックに保存されます。これらの TSS フィールドは、CPU によって変更されることはありません。割り込みハンドラーが特権の低いコードに戻ると、CPU は保存された ESP と SS の値をスタックから復元します。

タスクの切り替えによって CPU の特権レベルが変更される可能性がありますが、タスクの特権レベルが変更されることはありません。新しいタスクは、以前に実行していたときと同じ特権レベルで実行を再開します。

32 ビット保護モードでは、基本的に OS が TSS をセットアップする必要がありますが、OS がタスク切り替えに TSS を使用する必要はないことに注意してください。OS が独自のメカニズムを使用して手動でタスクを切り替えることも可能であり、これがほとんどの 32 ビット x86 オペレーティング システムの仕組みです。(そして、CPU は 64 ビット long モードでタスク スイッチ メカニズムを提供しないため、すべての 64 ビット x86 OS が動作する方法です。)

于 2016-10-25T18:26:35.283 に答える