TSS : Task State Segment Edit

目次 Edit

タスク・ステート・セグメントとは Edit

マルチタスクを実現するための、メモリ上のデータ領域。
タスクの状態(主にレジスタの値)を保存しておくためのセグメントで、システム・セグメントの一種。
一つのタスクに対して、一つのTSSが与えられる。

TSSの構造 Edit

104バイトの構成。
タスク・スイッチをする度に、レジスタの値をここに書き込んでいる。

0x0f0x0e0x0d0x0c0x0b0x0a0x090x080x070x060x050x040x030x020x010x00
前のタスクのTSSセレクタ0x00000x0000
予約:00x0002
ESP00x00040x0004
0x0006
SS00x00080x0008
予約:00x000a
ESP10x000c0x000c
0x000e
SS10x00100x0010
予約:00x0012
ESP20x00140x0014
0x0016
SS20x00180x0018
予約:00x001a
CR30x001c0x001c
0x001e
EIP0x00200x0020
0x0022
EFLAGS0x00240x0024
0x0026
EAX0x00280x0028
0x002a
ECX0x002c0x002c
0x002e
EDX0x00300x0030
0x0032
EBX0x00340x0034
0x0036
ESP0x00380x0038
0x003a
EBP0x003c0x003c
0x003e
ESI0x00400x0040
0x0042
EDI0x00440x0044
0x0046
ES0x00480x0048
予約:00x004a
CS0x004c0x004c
予約:00x004e
SS0x00500x0050
予約:00x0052
DS0x00540x0054
予約:00x0056
FS0x00580x0058
予約:00x005a
GS0x005c0x005c
予約:00x005e
LDTセグメント・セレクタ0x00600x0060
予約:00x0062
予約:0T0x00640x0064
I/Oマップ・ベース・アドレス0x0066

前のタスクのTSSセレクタ Edit

タスクスイッチ前のタスクのTSSディスクリプタのセレクタが入る。
呼び出しや割り込みなどによって、自動で格納される。
このフィールドによって、IRET命令で前のタスクに戻ることができる。

ESP0-2, SS0-2 Edit

各特権レベルのスタック・セグメントとスタック・ポインタ。
詳しくはスタック・スイッチング?を参照。

T(デバッグトラップ)フラグ Edit

このフラグがセットされている場合、このタスクへのタスクスイッチが起こると、プロセッサはデバッグ例外を発生させる。

I/Oマップ・ベース・アドレス Edit

I/O許可ビットマップのベースアドレスを格納する。(TSSのベースアドレスが基準)
I/O許可ビットマップは同TSS内にある。
すべてのI/Oアクセスを禁止する(I/Oマップを作らない)ときは、TSSのリミット値を越える値を設定すればOK。
0xDFFFが設定の限界値のようです。>インテルマニュアル参照。

ページングを使用する際の注意点 Edit

TSSは物理アドレスで連続していないといけないので、ページングを利用する際にはTSSの中に4KiB境界が来ないように注意する必要がある。

関連リンク Edit


Since 2008 July. OS Project Wiki
リロード   新規 下位ページ作成 編集 凍結 差分 添付 コピー 名前変更   ホーム 一覧 検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS