仮想アドレスとページングについて多くのことを読みました。まず、私が理解したことを人々に話させてください。プロセスが何かを実行したい場合、ハードディスクからメモリにデータをロードしようとします。これを行うには、仮想アドレスを使用します。そのため、MMU は仮想アドレスを検証して、対応する物理ページを見つけるために TLB を調べます。そこに見つからない場合は反転ページ テーブルを調べ、そこにエントリが見つからない場合は最後にページ テーブルを調べます。ページ フォールトが生成され、ページのすべてのスワッピングが行われ、すべてのテーブルが更新されます。そして、私が読んだように、すべてのプロセスには異なるページテーブルと同じ仮想アドレスがあります。そのため、int a[100] として定義された配列要素 a[1000] にアクセスしようとすると、その命令が属していないメモリにアクセスしようとしている可能性があるため、セグメンテーション違反が発生すると確信しています。しかし、仮想アドレスと物理ページの概念を使用するだけで、a[1000] が実行中のプロセスに属していないことを OS が認識する方法。ここで何かが足りないのでしょうか、それとも私の理解全体が間違っていますか?
プロセスが読み取り専用または真のメモリセグメントにアクセスしようとしている場合、メモリアクセスは違法であると言えます。
最後に、OS がどのメモリをどのプロセスに割り当てるかを決定する方法と、このメモリへのアクセスが違法であると OS がどのように決定するかという問題が沸き上がります。
このリンクはあまり役に立ちませんでした。
すべての素敵な人々の入力に前もって感謝します:)