メモリモデル
いくつかの意味として使われている。文脈によって色々異なる。
CPUが直接管理するメモリの管理構造
VM が管理するメモリの管理構造
共有メモリやキャッシュにおけるメモリの管理構造
プログラミング言語が想定しているメモリの管理構造
何が違いになるか?
メモリのアドレッシング(位置指定)
メモリの属性(読み出し、書き込み、実行の可否など)
メモリ管理ユニット(MMU, Memory Management Unit)
物理メモリと論理メモリ
メモリのバス幅(ワードの単位)、エイリアス関連(奇数番地へのアクセスの禁止など)
エンディアン(ビッグエンディアン、リトルエンディアン)
一貫性
整合性
一貫性と整合性は、以下のようなときには崩れる可能性があるのでその対処が必要となる。
メモリマップドI/Oのような、読み書きする度に異なるもの
マルチプロセス、マルチスレッド、マルチCPUなどで、異なるコンテキストが同時に操作するために書き換わる可能性があるもの
逐次性
A、Bと処理を書いたときに、確実にA、Bの順に実行されること(あるいはそのように見えること)
グローバル性、局所性
スタックのような一時的に確保されたメモリ
ガベージコレクション関連
利用頻度などによるメモリの使い分け
CPUではモードによりメモリモデルが異なるようなケースがある。
x86系アーキテクチャ
リアルモード(8086互換)
プロテクトモード(80286以降)
ページング(論理メモリ)(80386以降)
仮想86モード
SMM(システムマネジメントモード)
マルチCPUではメモリのアクセス順が保証されない場合がある。
CPU1が書いた値をCPU2はすぐには読み出せない事がある。
参考
メモリモデル?なにそれ?おいしいの?
https://yohhoy.hatenablog.jp/entry/2014/12/21/171035