-
Notifications
You must be signed in to change notification settings - Fork 0
oraccha edited this page Jan 14, 2013
·
1 revision
Memory Management Unit
- 仮想記憶から分家.
=== PDAとMMU === PDA用プロセッサにもMMUがあった方がいいか.
コストの問題もありますし,uClinuxなどのMMUを使わないLinuxなどの実装もありますが,MMUがあった方が圧倒的にプログラム作りやすいでしょう. アドレス空間をリニアな論理アドレスにマッピングできるようになるので,バンク切替えやPalmOSみたいな面倒な作業をユーザが気にする必要がなくなるし.
- メモリ空間が「抽象化」されることは大事(=嬉しい)だと思いますが、 「リニアに」なることが同じくらい大事なのかどうかは疑問です。 二次元アドレッシングの話や「C言語ポインタ完全制覇」本を読んで 益々そう確信するに至りました(^^;。従来通り(笑)のCとUnixの延長 のみを考えるならばリニアが前提なんでしょうけど、リニア性は結局 1つの配列の中身でだけ成立すれば充分じゃんっていうか。 -戯
- つーわけで JavaOS なのかなーと(^^;。保護がなぜ必要かというと、
リニア…直線つーか「線分」なメモリモデルを仮定してるから、
故意にせよ事故にせよOVER RUNを案じないとならないせい、ですよね? .
JavaOSでは極論すればKernelは「配列」マネージャなんじゃないかと(暴言 。
-
仮想マシンのところでも少し書いたけど,Java が安全なのは
生のメモリへのアクセスを禁止して,仮想マシン上で動作するからでしょう.
言語レベルで境界チェックがあるので,配列外へのアクセスはできないなど.
- 仮想マシンを拡張してハードウェアアドレスにアクセスできるバイトコード (peek/pokeとでもしておきますか(^^;)を付けた時点でC言語と同様な 脆弱性が生まれますよね.
- そここそがJava御自慢のSecurity Managerの出番かと。 通常のByteCode列であることしか期待されてないClass FileをLoadしたら、 正しいかどうかをManagerが調べてくれる。
- もちろん,JavaVM だけを動かすことを前提としたカーネルはプロセスみたいな ヘビーな環境を用意する必要はないですし,メモリに関して言えば malloc/free 程度の固定長ブロックの確保,解放があれば十分だと思うので, 「暴言」じゃないと思いますよ.ひょっとしたら, アクティビティもスレッドよりプリミティブなもので十分かもしれない.
- で,どうしても fork がしたい(^^;) (マルチスレッドじゃなく複数の保護ドメインみたいなものが欲しい)場合は, カーネルじゃなくて仮想マシンを拡張しちゃってもいいんじゃないかと思います.
- 「マイクロカーネル : [OSパーソナリティ] = (ちび)カーネル : 仮想マシン」って感じかな.
- LispマシンやBurroughsの計算機あたりとニュアンス的に近いのかな.
-
仮想マシンのところでも少し書いたけど,Java が安全なのは
生のメモリへのアクセスを禁止して,仮想マシン上で動作するからでしょう.
言語レベルで境界チェックがあるので,配列外へのアクセスはできないなど.
ページングみたいな高級な機能を使わなくてもMMUはやっぱり便利です.メモリ保護も重要な点です.