24
1 オオオオオオオオオオオオ i386 オオオオオオオ (1) 2005 オ 10 オ 21 オ オオ オオ

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

  • Upload
    jadon

  • View
    72

  • Download
    0

Embed Size (px)

DESCRIPTION

オペレーティングシステム i386 アーキテクチャ (1). 2005 年 10 月 21 日 海谷 治彦. 目次. i386 とは i386 アーキテクチャの内部 仮想記憶 実メモリより大きいメモリを扱う プロテクトモード セグメント. i386 とは. Intel 社の CPU 386 以降のアドレスバスが 32 本ある CPU の総称. だいたい Pentium4 まで. i386, IA32 とか 80x86 とか色々俗称がある. 8086, 286 等は i386 には入らない. いわゆる Windows パソコンに標準的に利用されている. - PowerPoint PPT Presentation

Citation preview

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

1

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

2005 年 10 月 21 日海谷 治彦

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

2

目次

• i386 とは• i386 アーキテクチャの内部• 仮想記憶

– 実メモリより大きいメモリを扱う• プロテクトモード• セグメント

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

3

i386 とは• Intel 社の CPU 386 以降のアドレスバス

が 32 本ある CPU の総称.– だいたい Pentium4 まで.

• i386, IA32 とか 80x86 とか色々俗称がある.

• 8086, 286 等は i386 には入らない.• いわゆる Windows パソコンに標準的に

利用されている.• Athron とか Efficion とかもソフトウェア

側から見れば同じ見える. ( 互換機 )

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

4

i386 以外の有名な CPU

• PowerPC マックで採用• ARM PDA( ザウルスなんか ) に乗っ

かってた.• Sparc サンマイクロシステム (Java の会

社 ) が出してるマシン ( いわゆるワークステーション ) の CPU.

他,色々ありすぎて列挙不能.

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

5

プログラムの処理の流れ

• プログラムがメモリに読み込まれる.

• 計算に必要なメモリも確保される.(変数等のため )

• CPU がプログラムを順に読んで,計算をする.

• 必要ならば,デバイス( ファイル等 ) にアクセスする.

メモリ

ディスク

CPUプログラ

変数等アーキテクチャの授業等の復習ですな.

前回より再録 : 大雑把な CPU 周辺の概念図

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

6

i386 周辺の構造

文献 6 p.57

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

7

i386 の基本動作1. アドレスバスでメモリもしくは I/O ポート

のアドレスを指定.2. 指定した場所からデータをレジスタに読む.3. なんか計算する.4. またメモリもしくは I/O ポートに結果を書

き出す.の繰り返し.• プログラム自体もメモリに記録されており,

記述される順番に読んで実行するだけ.

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

8

i386 のレジスタ

文献 6 p.52

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

9

プロセスの独立性を保つには?

• Linux(UNIX) では,複数のプロセスが同時に存在する.

• 実際のメモリを注意深く区分けして利用するメモリ境界を決めていたのでは危なっかしい.

• そこで,プロセス毎に独立のアドレス空間があるように見せる仕組みが必要.– アドレス変換

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

10

アドレス変換の考え方 1

文献 6 p.79

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

11

アドレス変換の考え方 2

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

12

少ない実メモリ上で大メモリを

• 実際, 4G のメモリを積んだマシンなどめったにない.

• そこで,実メモリ (512MB 程度 ) を使って, 4G のメモリ空間を表現できなければならない.– ( 実際, 4G まで使うかは別として )

• そのための機構として仮想記憶がある.

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

13

仮想記憶 1

文献 6 p.87

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

14

仮想記憶 2

左図のようにメモリ内容が,一時退避されることを,「スワップアウト」と言う.

通常はディスク

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

15

プロテクトモード• Protect Mode• i386 が普通 (?) に動作している状態.

– 他のモードについては後日ふれる.• メモリアドレスが 4GB(4294967296=232)

– 0H ~ FFFFFFFF H (F が 8 個 =1 が 32 個 ) まで.• プログラムからアドレスを指定する方法が特

殊.• 割り込み ( 後述 ) が起こった時の処理が特殊• メモリ, I/O 機器へのアクセス保護がある.

– プログラムは許可されたアドレス外をアクセスできないようにしている.

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

16

プロテクトモードのための環境

• このモードには複数のプログラム ( プロセス ) の概念が最初からある.

• よって,これら複数のデータを記録しておくための特別なエリアが必要.

• そのエリアとして,– GDT (Global Descriptor Table)– CR3 レジスタ ( ページ )– IDT (Interrupt Descriptor Table)があるが詳細は後述.

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

17

セグメント• 4G のメモリ空間をいくつかの部分に区切る仕

組み ( および区切りの名前 ).– 重なりがあってもよい.

• セグメント毎に色々情報を設定できる– ベース : セグメントの開始アドレス (32bit)– リミットと G フラグ : セグメントのサイズを設定– タイプ : セグメント内のデータが読み書き可能か,

実行可能か等の情報を指定.– DPL (Descriptor Privilege Level) セグメント内のプ

ログラムの特権レベルを示す• 1 個分を記述するのに 8B 必要.

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

18

セグメント群の情報は何処に?

• Segment Descriptor Table という表に書かれる.– Global Descriptor Table と Local D. T. がある.

• その表はメモリ内に記述しなければならない.– 自動的には作られない.– 通常, OS が起動時に作成する.

• 表の先頭アドレス ( と表内の項目数 ) は, GDTR レジスタに記述される.

• セグメントレジスタ (CS, DS …) には表の何個目の項目を使うかが記入される.

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

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 アーキテクチャ (1)

20

Linux で使うタイプと DPL• タイプ

– 1 読み書き可能なデータセグメント– 5 実行と読み出し可能コードセグメント

• DPL (Descriptor Privilege Level)– レベル 0: (最強 ) どんな命令でも実行でき,どん

なアドレスでもアクセスできる.– レベル 3: (最弱 ) 特権命令が実行できない.

• i386 は 8種類のタイプわけ, 4種類の DPLレベルがあるが, Linux では上記しか使わない.

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

21

Linux でのセグメント• 4 つのセグメントしか作らない.

– KERNEL_CS, KERNEL_DS, UESR_CS, USER_DS

• 以下の点が共通– セグメントのサイズ 4G– セグメントの開始アドレス 0要は全部重なってる.

• タイプと DPL について– *_CS タイプ 5 ( 実行可能 ) 要はプログラムが入る.– *_DS タイプ 1 ( 読み書き可能 ) 要はデータが入る.– KERNEL_* レベル 0 なんでもできる.– UER_* レベル 3 機能が制限.

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

22

CSと DS• CS (Code Segment) プログラムが入っている

セグメント• DS (Data Segment) プログラム実行のための

変数等を保存するためのセグメント

• 単純な話,– カーネル機能が実行されている場合は, KERNEL

_CS KERNEL_DS を利用して計算が行われおり,– ユーザープログラムが実行されている場合は, U

ESR_CS と USER_DS が利用されているということ.

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

23

i386 の OS関係のレジスタ

16bit

48bit

32bit

凡例

EAX

EDI

・・・・

EBP

ESP

CS

BIP

BFLAGS

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

フラグレジスタ

ベースポインタ

スタックポイタ

セグメントレジスタ

DS

ES

・・・・

CR3

CR2

CR1

CR0

GDTR

IDTR

LDTR TR

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

コントロールレジスタ

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

24

Linux でのセグメント概念図USER_DS

USER_CS

KERNEL_DS

KERNEL_CS

USER_CSセグメント

USER_DSセグメント

KERNEL_DSセグメント

KERNEL_CSセグメント

FFFFFFFF

0

GDTR レジスタ

メモリの中

CPU の中

SegmentDescription Table