[解決済み] アドレス空間識別子(ASID)の目的
質問事項
現在、A Silberschatz, P Galvin, G GagneのOperating Systemsを勉強しています。
メモリ管理戦略について勉強しているのですが、Translation Look-aside Buffer (TLB)について紹介されているセクションがあります。
<ブロッククオートTLBの中には、各TLBエントリにアドレス空間識別子(ASID)を格納しているものがあります。ASIDは各プロセスを一意に識別し、そのプロセスのアドレス空間保護を提供するために使用される。TLBが仮想ページ番号を解決しようとするとき、現在実行中のプロセスのASIDが、仮想ページに関連付けられたASIDと一致するかどうかを確認します。ASID が一致しない場合、その試みは TLB ミスとして扱われます。
上記は、ASIDについて説明した教科書からの引用です。
TLBミスとは、論理アドレスがTLBにマッチしなかったということなので、物理メモリに向かうためにページテーブルでチェックする必要があるのですが、少し混乱しています。
つまり、ASID は TLB の各エントリに追加されるビットで、そのエントリにアクセスしているプロセスがプロセスに属しているかどうかをチェックするためのものです。
私が疑問に思うのは、ASIDを使用してプロセスを拒否する場合、TLBミスではなく、トラップするべきではないでしょうか?TLBミスはプロセスをページテーブルに転送し、そこでプロセスの論理アドレスがメインメモリ内の特定のアドレスにマッピングできるようになります。
私が間違って理解しているところを教えてください。
ありがとうございます。
解決方法は?
あるシステムで2つのプロセスが動作しているとします。プロセスAはその2Dページが100番目のページフレームにマッピングされ、プロセスBはその2Dページが200番目のページフレームにマッピングされているとします。
そこでMMUは2番目のページを探す必要があるのですが、ページテーブルを再び読みたくはないのです。ページフレーム100に行くのか、それともページフレーム200に行くのか?
この問題に対処する方法は、少なくとも2つあります。ひとつは、プロセスが切り替わるたびにキャッシュをフラッシュする方法です。
もう1つは、各プロセスに何らかの一意な識別子を割り当て、それをTLBキャッシュ・エントリに含めることです。
TLBミスとは、論理アドレスがTLBにマッチしなかったことを意味するので、物理メモリに向かうためにページテーブルでチェックしなければならないのですが、少し混乱しています。
論理ページ#Xを物理ページフレームに変換する。
- TLBで#Xを探します。なければページテーブルに移動します。
- [X exists] 現在のプロセスに一致するASIDを持つ#Xのエントリーがありますか?ない場合は、ページテーブルに移動します。
- TLB内のページマッピングを利用する
気になるのは、ASIDを使用してプロセスを拒否する場合、TLB missではなくtrapすべきではないでしょうか?
そうすると、そのプロセスが初めてページにアクセスしたときにトラップが発生して、プログラムがクラッシュしてしまうんです。
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン