質問: osの処理、mmuのアドレス変換表について (1)マルチスレッドで、cpuの別コアでそれぞれ処理が進められているとき、タスクの共通のリソースにアクセスする場合も、各コアのmmuのアドレス変換表を参照すると思っています。 osはアプリケーションソフトのメモリ割り当ての際に共通のリソースに関しては全コアのmmuのアドレス変換表に情報を書き込むのでしょうか。 (2)cpuの各コアのセグメントレジスタに情報を書き込むのはosの役割と考えて間違いないでしょうか。 勉強を始めたばかりで、そもそも質問が的外れでしたら申し訳ございません。
回答: (1)ia-32あるいはintel64のアドレス変換テーブルはメモリ上にあります。 各コアのmmuにはtlb(translation lookaside buffer)とよばれるキャッシュがあり、cpuの必要に応じてアドレス変換テーブルの一部をエントリ単位で一時保管していますが、アドレス変換テーブルを編集する際には各コアのtlbの一部あるいは全部をosからパージ(無効化)しています。 (2)セグメントレジスタへの書き込みは特権命令ですので、特権モードで動作するosカーネルでしかできません。 参考までにintelの技術情報サイトを記載しておきます。インテル64およびia-32アーキテクチャのリファレンスマニュアルに詳細な記載があります。 # http://www.intel.co.jp/content/www/jp/ja/developer/download.html ちなみにia-32などはメモリ上のアドレス変換テーブルをmmuが直接扱いますが、一部のriscアーキテクチャではcpuアーキテクチャとしてはtlbしか定義されてなく、メモリ上のアドレス変換テーブルの管理とtlbへのエントリの登録は全てosの責任になっています。