21
1 オオオオオオオオオオオオ i386 オオオオオオオ (2) 2005 オ 10 オ 27 オ オオ オオ

オペレーティングシステム i386 アーキテクチャ (2)

  • Upload
    kirsi

  • View
    68

  • Download
    0

Embed Size (px)

DESCRIPTION

オペレーティングシステム i386 アーキテクチャ (2). 2005 年 10 月 27 日 海谷 治彦. 目次. ページ 保護機能 セグメントの保護 ページの保護 割り込みと例外. ページング. 0 ~ 4GB で表現されるリニアアドレスを物理アドレス ( 実際にマシンに搭載されたアドレス ) に変換する仕組み. 実際のところ 4GB なんてメモリをつんだマシンはめったに存在しないので必須. もし 4GB メモリのマシンがあったとしても, i386 上で,複数のプロセスが同時に動作する OS を稼動させるには必要な技術.. ページ. - PowerPoint PPT Presentation

Citation preview

Page 1: オペレーティングシステム i386 アーキテクチャ (2)

1

オペレーティングシステムi386 アーキテクチャ (2)

2005 年 10 月 27 日海谷 治彦

Page 2: オペレーティングシステム i386 アーキテクチャ (2)

2

目次• ページ• 保護機能

– セグメントの保護– ページの保護

• 割り込みと例外

Page 3: オペレーティングシステム i386 アーキテクチャ (2)

3

ページング• 0 ~ 4GB で表現されるリニアアドレスを

物理アドレス ( 実際にマシンに搭載されたアドレス ) に変換する仕組み.

• 実際のところ 4GB なんてメモリをつんだマシンはめったに存在しないので必須.

• もし 4GB メモリのマシンがあったとしても, i386 上で,複数のプロセスが同時に動作する OS を稼動させるには必要な技術.

Page 4: オペレーティングシステム i386 アーキテクチャ (2)

4

ページ• セグメントを 4KB( もしくは 4MB) の

固定長に分割した個々の部分のこと.• リニアアドレスのある部分が物理アド

レスのどの部分に対応するかは表で管理している.⇒ アドレス変換テーブル

Page 5: オペレーティングシステム i386 アーキテクチャ (2)

5

アドレス変換テーブル• 前述のようにリニアアドレスのある部

分が物理アドレスのどの部分に対応するかを記述した表.

• 無論,メモリ内に記入される.• ある瞬間に利用されているテーブルは

1 つだが,変更もできる.• i386 では CR3 レジスタにこのテーブル

があるアドレスが記入されている.

Page 6: オペレーティングシステム i386 アーキテクチャ (2)

6

アドレス変換テーブルの例

C010 0000 0010 0000

論理アドレス空間物理アドレス空間( 実メモリ )

C010 0000

0000 0000

アドレス変換テーブル

CR3 レジスタココは丁度,¾ の位置, 3GB

KERNEL_CSの場合,カーネルコード

FFFF FFFF

0000 0000

0010 0000

1MB 目

Page 7: オペレーティングシステム i386 アーキテクチャ (2)

7

アドレス変換テーブルとプロセス

• Linux ではプロセス毎にアドレス変換テーブルを作る.

• さらに,プロセス間で同じ物理アドレスを使わないようにテーブル内の値を設定する.– 意図的に共有させることもできる.

• ユーザープロセスがこのテーブル群や CR3 の内容は変更できないので安心.– テーブル群は KERNEL_DS に書かれる.– CR3 は KERNEL_CS 内のコードでしか変更できな

い.• 実際のテーブルは効率化のため,二段階テー

ブルになっているが,それについては後日に.

Page 8: オペレーティングシステム i386 アーキテクチャ (2)

8

リニアアドレス空間 A リニアアドレス空間 B

物理アドレス空間( 実メモリ )

アドレス変換テーブル

アドレス変換テーブル

CR3

Page 9: オペレーティングシステム i386 アーキテクチャ (2)

9

i386 の 3 つのアドレス記述法• 論理アドレス : マシン語でのアドレス指定に使

う形式.セグメントとオフセットの対で表現.• リニアアドレス : 4GB のメモリ空間を素直に表

現した形式. 32 ビット• 物理アドレス : メモリチップの実アドレス.表

現は 32 ビットだが,上限は実際に搭載しているメモリ量に依存.

Linux の場合, 4G サイズのセグメントを使うので,論理アドレス = リニアアドレス

文献 5 p.44

Page 10: オペレーティングシステム i386 アーキテクチャ (2)

10

アドレス変換

論理アドレス リニアアドレス 物理アドレスセグメンテーション回路

ページング回路

マシン語が解釈されて,実際のメモリ回路までたどり着くには,以下のような二段階の変換が行われる.

Linux の場合,等価変換ただし,セグメント毎にタイプと DPL が異なる.

Page 11: オペレーティングシステム i386 アーキテクチャ (2)

11

保護機能• 特権レベルとはセグメント内に書かれた

プログラムの実行権限の強さを規定するもの.

• i386 は 4 種類の特権レベルを割り当てられるが, Linux では以下の 2 つのみを使う.– レベル 0 なんでもできる.– レベル 3 特権命令が実行できない.

• 保護はセグメント段階とページ段階の二段階で行われる.

Page 12: オペレーティングシステム i386 アーキテクチャ (2)

12

特権命令の例• HLT

– システムを停止する.• LGDT

– GDT の値を設定– 要は利用しているセグメントの切り替え

• MOV CRn – CRn レジスタの値を設定– ページ変換テーブルの指定は CR3

Page 13: オペレーティングシステム i386 アーキテクチャ (2)

13

i386 の OS 関係のレジスタ

16bit

48bit

32bit

凡例

EAX

EDI

・・・・

EBP

ESP

CS

BIP

BFLAGS

汎用レジスタ インストラクションポインタ

フラグレジスタ

ベースポインタ

スタックポイタ

セグメントレジスタ

DS

ES

・・・・

CR3

CR2

CR1

CR0

GDTR

IDTR

LDTR TR

システムアドレスレジスタ

コントロールレジスタ

再録

Page 14: オペレーティングシステム i386 アーキテクチャ (2)

14

割り込みと例外• 現在,動作しているプログラムを停止

し,事前に準備した別のプログラムを実行する仕組み.

• 割り込み・例外は発生原因によって分類されている.

• 大まかにいうと,– 割り込み : 優先度の高い機器等からの優先

処理依頼.– 例外 : 異常事態.と分類できる.

Page 15: オペレーティングシステム i386 アーキテクチャ (2)

15

i386 の割り込みの発生源• ハードウェア割り込み

– キーボードやタイマー等の外部機器からの信号により発生. (INTR ピンから受け取る )

– メモリーエラー等により発生. (NMI ピンから受け取る )

• この割り込みのみマスク ( 受け取り拒否 ) できない.

• ソフトウェア割り込み– 割り込みを発生させるアセンブラ命令, IN

T を用いて,プログラム自身が発生させる.• 気分的にはサブルーチンコールに似ている.

Page 16: オペレーティングシステム i386 アーキテクチャ (2)

16

i386 例外の分類対処法の違いにより分類• フォルト : 割り込まれた命令を再実行

する場合.– セグメントやページの保護違反等が原因.

• トラップ : 再実行しないもの.– サブルーチンコールのようなもの.

• アボート : 致命的なエラー.– プログラムもしくは OS の強制停止があり

うる.

Page 17: オペレーティングシステム i386 アーキテクチャ (2)

17

i386 の割り込みと例外の識別• 割り込みと例外は「割り込みベクタ」という番号によって識別される.

• 番号は 0 ~ 255 (8bit) の 256 個つけられる.• 0 ~ 31 は intel が予約, 32 以降は自由に

使ってよい.• 通常,それぞれの割り込み番号は,

INT Xとかいう番号で略記される. ( 実際,割り込みを呼び出す場合のアセンブラ命令はこんな感じで書く)

• ベクタ番号 128 (INT 0x80) は, Linux ではシステムコール実装のために使われる.

Page 18: オペレーティングシステム i386 アーキテクチャ (2)

18

割込みディスクリプタ・テーブル

• IDT (Interrupt Description Table)• 1 個 8B のエントリを数個 ( 256)≦ 列挙して,ある番号の割り込み・例外が 起こったら,どのセグメントのどのコードを実行するかを定義している表.

• 表の先頭アドレスとは IDTR レジスタに記録されている.

• 後述の割込みゲートディスクリプタとトラップゲートディスクリプタの二種類のエントリがある.

• ベクトル番号 (エントリの番号 ) 3, 4, 5, 128 だけはユーザーモードから割り込めるが,他はカーネルモードでないと利用できない.– 128 はシステムコール実装のための利用.

Page 19: オペレーティングシステム i386 アーキテクチャ (2)

19

i386 の OS 関係のレジスタ

16bit

48bit

32bit

凡例

EAX

EDI

・・・・

EBP

ESP

CS

BIP

BFLAGS

汎用レジスタ インストラクションポインタ

フラグレジスタ

ベースポインタ

スタックポイタ

セグメントレジスタ

DS

ES

・・・・

CR3

CR2

CR1

CR0

GDTR

IDTR

LDTR TR

システムアドレスレジスタ

コントロールレジスタ

Page 20: オペレーティングシステム i386 アーキテクチャ (2)

20

エントリの種類• 割込みゲート ディスクリプタ

– この割込み実行中には他の割込みを禁止する.– Linux では割込みを全てこちらのエントリ方式で

処理する.

• トラップ ゲート ディスクリプタ– 他の割込みを禁止しない.– Linux では例外を全てこちらのエントリ方式で処

理する.– ユーザーモードからアクセス可能な 3, 4, 5, 128番はこちらのエントリである.

もう 1 種類あるけど Linux で使わないので略.

Page 21: オペレーティングシステム i386 アーキテクチャ (2)

21

割込みハンドラ検索の概念図

ゲートディスクリプタIDTR

ベクタ番号割込みディスクリプタテーブル

ハンドラ

セグメントディスクリプタGDTR

オフセット

セグメントセレクタ

グローバル ディスクリプタ テーブル