• アドレス空間はプロセス毎に独立なので、各プロセスの領域はハードウェア的に完全 に他プロセスの不当アクセスから保護されることになる。
• システム内の総アドレス空間の広さに原理的な制約はなくなった。
'
&
$
% 補足:
新しいプロセスが加わればその分だけアドレス空間が広くなると考えられる。
しかし、実際上は
3 CPUの能力(アドレス変換を高速に行うための仕組が必要; e.g.TBL),
3 実記憶容量(少な過ぎるとスラッシングを起こし易くなる),
3 仮想記憶をサポートするバッキングストア容量(総アドレス空間はこの容量 よりは広くできない)
による制約もあるので、多重仮想記憶を実装/運用していくには性能評価を十分 に行っておく必要がある。
• 近代のOSはほとんどこの多重仮想記憶を採用している。例えば、IBM社のMVS(1974), UNIX系カーネル, ...。
9.14 記憶保護の機構
(野口12.3節,清水8.1節,吉沢5.1.4節, U.ヴァハ リア13.4.2節, G.ナット5.1節, H.M.レヴィー
&R.H.エックハウスJr.8章
)
'
&
$
% p.96からの引用:
記憶保護の問題:
多重プログラミング環境においては複数のジョブが同時に主記憶領域を使うこと になる。 ここで、ジョブの実行が他のジョブによって影響を受けるようなシス テムは、信頼性の点で大きな問題がある。 更に、一般ジョブがOSの領域に勝 手に書き込みを行ってしまうと、システムダウンにもつながる。
=⇒1つのジョブから別のジョブに割り当てられた主記憶領域への不当 アクセスは絶対に避けなければならない。
OSの領域
プロセスAの領域 プロセスBの領域
どういった場合に記憶保護すべきか:
• 一般プロセスからOSの領域へのアクセスは許さない。
• 一般プロセスから別のプロセスに割り当てられた主記憶領域へのアクセスは許さない。
• 自プロセス内であっても、プログラム部分への書き込みは許さない。
OSや他プロセスの領域へのアクセス制御:
(方法1) メモリ保護境界レジスタを用いる。
1つのアドレス空間内に複数のジョブが混在する環境を想定した方法である。
ジョブがCPU資源を割り当てられた時点で、そのジョブの使っている領域の 境界を特別なレジスタ(メモリ保護境界レジスタと呼ぶ)に記憶する。 これに よって、実行中のプログラムがアクセス可能なメモリの範囲は常に分かること になるから、その外側の領域にアクセスしようとすると記憶保護例外の割込み (Segmentation Fault)を発生させる。
主記憶
OS ジョブ
実行中のジョブ ジョブ レジスタ
レジスタ CPU
アクセスしようとすると、
記憶保護例外の割込みが 発生して、強制終了
(方法2) キー/ロック機構を用いる。
仮想記憶の様に、主記憶が複数のブロックに分割されている環境を想定した方 法である。プロセスにはキー(key,鍵)を与え、そのプロセスの利用可能なブロッ クには対応するロック(lock,錠前)を掛ける様にし、メモリアクセス時にキーと ロックが対応するかどうかを調べることにより、不当アクセスをチェックする。
主記憶
OS lock
lock
lock lock lock lock lock lock
プロセス lock key
プロセス key プロセス key
CPU
CPU待ち CPU待ち
'
&
$
%
補足:· · ·(岩波情報科学辞典)
この「保護キー」の方式はIBM System/360(1964年)で初めて採 用された。その時のブロックは2048 byte、キーは4bit。
(方法3) 仮想アドレス空間の壁の恩恵を受ける。
仮想アドレス空間の中では、変数参照のアドレスがどの様に設定されたとして もその仮想空間外を参照することはあり得ない。 従って、多重仮想記憶の下で は、プロセス間の不当アクセスは原理的に起こらない。
仮想アドレス空間
OS 実行中のプロセス
アクセスしようとすると、
記憶保護例外の割込みを 発生させ、強制終了させる。
仮想アドレス空間外へ のアクセスは原理的に 起こらない。
仮想アドレス空間
OS プロセス
実メモリ上では同一(常駐)
9.14. 記憶保護の機構 115
'
&
$
% 多重仮想記憶の場合でも、
プロセスはOSと1つの仮想アドレス空間を共有することになるの で、プロセスがOSの領域に不当アクセスするのは防がないといけ ない。そのためにはキー/ロック機構やメモリ保護境界レジスタの 考えが有効である。 例えば、各ブロックにOSの領域かどうかの ロック(1ビット)を付けCPUがスーパバイザモードでない場合は OS領域へのアクセスを禁止すれば良い。
プロセスとOSが仮想アドレス空間をどう共有するか:
(BSD) 1ページ=512バイト, 32ビットマシンであるVAX-11の アドレス空間モデルを採用している。4GBのアドレス空間は次 の4つの領域に分けられる。
•P0(program)領域 · · · 最初の1GBの領域で、プロセスのテ
キスト(実行コード)とデータが格納される。
•P1(control)領域 · · ·2番目の1GBの領域で、ユーザ・スタッ
ク, u領域, カーネル・スタックが格納される。
•S0(system)領域 · · · 3番目の1GBの領域で、カーネルのテ
キストとデータが格納される。
•最後の1GB領域 · · · システム用に予約済。詳細未定。
(Linux) 1ページ=212バイトである。4GBのアドレス空間は次の 2つの領域に分けられる。
•ユーザ セグメント · · · 3GB。
•カーネル セグメント · · ·1GB。
プロセス内の記憶保護: 通常、アドレス変換表には、仮想記憶を実現したり 実メモリ
←→補助記憶 の間のブロックの移動の手間を出来るだけ減らしたりするために、
3 ページ/セグメントに対して実メモリが割り当てられているかどうか, 3 ページ/セグメントが修正されたかどうか
を記録するフラッグの欄が設けられているが、こういったフラッグだけでなく記憶保護の ために、
3 ページ/セグメントが読出し可能かどうか, 3 ページ/セグメントが書込み可能かどうか, 3 ページ/セグメントが実行可能かどうか
を記録するフラッグの欄も設けられている。これらの保護モードのフラッグを使って、次 の様な誤った操作を避けることが出来る。
• 自プロセス内の、プログラム部への書き込み,
• 自プロセス内の、プログラム部の(データと見ての)読み出し,
• 自プロセス内の、データ部の実行
'
&
$
% p.102からの引用:
f番目の ページフレーム
(番号pのページ)
d 番号pのページ
d
p d
f d 1
2
p V C P
仮想記憶空間 ページ表
制御情報 ページフレームの番号
主記憶
ページ番号 変位
主記憶上の番地 を表すビット列 =
f
V =
1 ifページが主記憶内にある 0 otherwise
C =
1 ifページが修正された 0 otherwise
P =
000 ifアクセスは許されない
001 if read only 010 if write only 011 if read/write 100 if execute only 101 if read/execute 110 if write/execute 111 if read/write/execute
演習問題
□演習 9.1 フラグメンテーションとは何か?
□演習 9.2 仮想記憶において「アドレス変換」とは何か? また、ページングにおい てアドレス変換がどのように行われるかを簡単に説明せよ。
□演習 9.3 ページングにおいて、(a)仮想アドレス空間と実アドレス空間がどの様に分 割されるか、(b)アドレス変換表とは何か、(c)仮想アドレス−→実アドレスの変換がど の様に行われるか、をそれぞれ簡単に説明せよ。
□演習 9.4 スラッシングとは何か?
□演習 9.5 記憶保護が必要な理由を述べよ。 さらに、記憶保護の機構としてどのよう なものがあるか例示せよ。
117
<第8回,第10〜14回> 詳説部(UNIXシステムプログラミング,他)
10 UNIX ファイル・システム
• UNIXファイルシステムの特徴(吉沢6.1節),
• UNIXで扱うファイルの種類(吉沢6.2節),
• ファイルのデータ構造(吉沢6.3.2-3節),
• 指定ファイルへのアクセス(吉沢6.3.4節),
• UNIXファイルシステム利用のための各種シス テムコール(吉沢6.4節)
10.1 UNIX ファイルシステムの特徴
吉沢6.1節,岩波情報科学辞典, A.S.タネン バウム7.5.3節, 久野5.5節
OS/360のファイルシステムとの比較:
OS名
OS/360 UNIX
ファイル名空間 フラットな構造 木構造
ファイル編成 順編成, 直接編成 順編成のみ アクセス方法 SAM,DAM,PAM,VSAM
特にない。
指定されたファイル位置 から順次1バイトずつア クセスするのみ。
ファイルの データ構造
各種レコード形式が存在。
(情報の基本単位はレコード。) バイト列
ファイル管理
ディスクの中にボリューム目次
(VTOC)と呼ばれる管理情報
を置き、そこにディスク内の全 てのファイルの名前と記憶位置 を記録する。
個々のファイル(やディレクト リ)を管理するためにi-ノード と呼ばれる構造体を用意し、そ こに保護モードやユーザID,フ ァイル実体のアドレス等を保持 する。このi-ノードとOS/360 における「ボリューム目次」に 相当するディレクトリを組み合 わせて木構造を構成する。
OS/360におけるファイル管理(概略):
• ディスクの中にボリューム目次(Volume Table Of Contents,VTOC) と呼ばれる管理 情報を置き、そこにディスク内の全てのファイルの名前と記憶位置を記録する。
補足:ファイルが記憶される媒体のことを総称的にボリューム(volume)と呼ぶ。
• ボリュームの中の最初の2つのブロックはIPL(Initial Program Loader)が占め、その 後のボリューム通し番号 (Volume Serial Number,VSN)のレコードの中にボリューム 目次のアドレスが置かれている。このアドレスを用いてボリューム目次へのアクセス、
更にはボリューム内のファイルへのアクセスが為される。
IPL1 IPL2 VSN
ファイル名
ファイル
エクステント
エクステント ファイル名 ファイル
ファイル名 VTOC
UNIXにおけるファイル管理(概略):
• 個々のファイル(やディレクトリ)を管理するためにi-ノード(i-node,index-nodeの省略 形だが誰もそうは言わない) と呼ばれる構造体をファイル(やディレクトリ)毎に用意 し、そこに保護モードやユーザID等の属性、ファイル実体のアドレス等を保持する。
• ディレクトリ(ファイル)はOS/360における「ボリューム目次」に相当するもので、
そのディレクトリ内のファイル(やディレクトリ)の 名前 と i-ノード番号 のペアを保
持する。 '
&
$
% 補足:ディレクトリファイルに保存されている ファイル名とi-ノード番号のペアを記
憶されている順に列挙したければ、ls -fi ディレクトリ指定 とする。
• i-ノードとディレクトリファイルが交互に繋がって木構造が出来る。
i-ノード
データブロック
i-ノードの 番号がここに 入っている (番号2)
bin home usr
cat ls
motoki
データブロックの アドレス
データブロック データブロック
データブロック
i-ノード
i-ノード
データブロック
• 伝統的なUNIXシステムのディスクには次のようなブロックがこの順に並んでいる。
(ブートブロック) · · ·UNIXでは使わない。それ以前のブートストラップのプログラ ムが入っていることが多い。
(スーパーブロック) · · ·ここにはファイルシステムの基本パラメータが置かれている。