OS Project Wiki の保存版 ヒデさん・アリスさんほか、OS部のみなさんが書いたものです。
2019年にサイトが消滅しました。当時あった211ページのうち、本文が残っていたのは86ページです。すべては復旧できていません。Common Crawl と Internet Archive に 残っていたものを組み直しています(最終取得 2019-05-24)。
編集・検索・添付などの機能は動きません。表示のみです。

検索

まずは、検索!

Index

人気の20件
最新の20件
2018-12-022018-01-092017-05-072017-04-252016-05-012015-02-242014-01-032013-06-252012-12-302012-12-292012-07-272012-07-162012-02-052012-01-292011-10-012011-09-18

TSS : Task State Segment

目次

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

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

TSSの構造

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セレクタ

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

ESP0-2, SS0-2

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

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

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

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

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

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

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

関連リンク


Since 2008 July. OS Project Wiki
保存 2019-04-21 ・ ページ一覧