Category 2_8. メモリ管理 〜仮想メモリ空間〜

「面倒臭い、この思いがあるからこそ

技術が研究され、社会強いては文明までも発展してきたのだ」

〜 クプ・ド・ンドブヴァ 〜

うーーーむ・・・・・。

うーーーーん・・・・。

・・・?

お二人さん、どうしましたか・・・?

 

いや・・・・ちょっとな。
今日の晩御飯どうしようか悩んでいたんすよ・・・。
そんな、どうでもいいことで意味深に悩まないで下さいよ・・・。

 

ちげえよっ!馬鹿っ!

マスターが出した前回の宿題だよっ!!

えっ

そ、そうっすよ!宿題っすよ・・・?

本当ですかね・・・。

 

おやじよ、考えたんだけどよ。

メモリ空間を完全予約制にするってぇのはどうだ?

領域も固定にしてよ。

月極駐車場みたいな感じっすね、それ。

領域を固定にすれば、確かに他のプログラムに影響を及ばないかもしれませんね。

でも、プログラムによってデータ量は違う上に、必要な領域は動的なんですよ。

 

くっそっ!!

ぜんっぜんっわっかんねっ!

わかんないっすねぇ〜。

M君は、もともと考えてないでしょ・・・。

お二人さん、自分がプログラムの立場になって考えてみてくださいよ。

 

そりゃーよ、贅沢言えばメモリ空間一つを丸々使えれば問題ないんだけどよ。

駐車場まるまる一個自分のものになるとか!ちょー贅沢っすね!

いいじゃないですか、それ。

何が問題なんですか?

 

いいって・・・。

まるまる一つのメモリ空間を一つのプログラムで使っちゃったら他のプログラムがメモリにロードできないべ!?

シングルタスクもいいとこっすよねー!

って、そもそもOSがメモリ使ってるから何もプログラムがロードできないんじゃないっすか?

お二人さん、いいところを指摘しますね!

だんだんとコンピュータというものがどういうものか理解してきた証拠です!実にすばらしい!

 

ま、まぁな・・・はは。

適当にいったらなんか、ほめられたっす。えへへ

えへへではありません。

じゃあ、どうしたらいいのかを考えて下さいというのが宿題でしょ。

 

そうか・・・仮想メモリ空間か!

なるほどっ!!ここで仮想メモリ空間なんすねっ!!

って、わかるかーいっ!

どういう事っすか・・・?

さすがヒゲ先輩。気が付きましたか。

いいでしょう、ここからは私が解説します。

 

ふぅ・・・すっきりしたぜ。

何一人ですっきりしてるんすか・・・。

いいですか、今までお二人が考えていたメモリ空間への割り当ては、物理的なメモリ空間に対してでしたよね?

当然、物理的なメモリなのでリソースに限界があります。

ですが・・・これが仮想的なメモリ空間だったら・・・!?

 

だったら・・・?

仮想的なメモリ空間って・・・言い方を帰ればただの「妄想上のメモリ空間」っすよね・・・?

妄想ならいくらでもリソースつくれちゃうっすよ?

オイラ妄想なら得意中の得意で、履歴書の趣味蘭に妄想を書くくらいっすからね・・・よく面接でつっこまれて・・・えへへ。

そうです、妄想上のメモリ空間で構いません。

その無限大に広がる妄想上のメモリ空間に対してプログラムを割り当てる!

 

おい、妄想上のメモリ空間はやめておこうぜ・・・いろいろと誤解が生まれそうだ。

妄想メモリ空間上にプログラムを割り当てる・・・それじゃ全部妄想でいいじゃないっすか。

CPUだって、ハードディスクだって・・・。

そんな妄想だらけでPCなんか動くわけないじゃないっすか!

CPUだって、ハードディスクだって、妄想的な技術はありますよ。

コンピュータ全体を妄想で作り上げている技術(仮想化技術)だってあります。

まぁ・・・妄想という言葉は確かに語弊があるので、やはりここは「仮想」という言葉にしましょう。

 

仮想化技術、すごく興味のある分野だな。

ちょっとまってくださいよ!妄想が仮想になったところでオイラは全然理解できないっす!

つまり、どういう事だってばよ!?

つまり、今まで

[pic_cat2_8_1 物理メモリ空間]

こうだったのが・・・こうなる、

[pic_cat2_8_2 仮想メモリ空間]

という事です。

 

ただ、これだけだと物理と仮想が紐つかないだろ。

・・・(絶句

そうですね、さらにここへこういうのを・・・。

[pic_cat2_8_3 ページテーブル]

 

なるほど、テーブルで物理メモリと仮想メモリのアドレスを関連付けるってことか。

ここまで予測はできなかったな。

こ、これが一体なんの解決になるんすか・・・?

いいですか、物理メモリ空間と仮想メモリ空間はそれぞれ同じ容量同じアドレス体系を持っています。

プログラムが割り当てられるアドレスは、物理メモリ上のアドレス空間ではなく、仮想メモリ上のアドレス空間です。

 

まぁ、つまりプログラムが10番地に割り当てられていたとしても、その10番地というのは仮想メモリ上のアドレスで、実際の物理メモリ上のアドレスじゃないって事だ。

プログラムは仮想メモリ空間上のアドレスに・・・じゃあ物理メモリ空間には割り当てられないって事っすか?

いえ、実際には物理メモリ空間上のどこかに割り当てられていますよ。

それを管理しているのが「ページテーブル」なのです。

 

プログラムは仮想メモリ空間上に整理整頓して割り当てられるが、実際は物理メモリ空間上にランダムで入っているんだな。
なるほど・・・そうすると、物理メモリ上で穴が開いた場所にもデータを割り当てていくことが可能っすね。

それだけではありません。

ページテーブルはプロセスが生成される度に一つ作成されていきます。

物理メモリ上へのマッピングは、他のページテーブルと重複しないよう管理されることで・・・

 

他のプログラムへの影響が無くなるって事だな。

あっ!!

なるほど、仮想メモリ空間のアドレスが他のプログラムとぶつかっていても、物理メモリ空間のアドレスが重複しなければ問題ないのかっ!

そういう事です!お分かりいただけましたか?

取り敢えず、そのイメージを。

[pic_cat2_8_4 仮想メモリ空間の独立性]

 

このページテーブルというのが非常に重要なんだな。

でも、なんで「ページ」なんすかね。

カーネルが、プログラムをメモリ上に割り当てる時は「ページ」という単位で行います。

1ページの容量はカーネルとCPUアーキテクチャによって異なります。

例えば、Linuxの場合、IA32のCPUだと1ページ4Kバイトです。

 

確かに割り当てる単位が細かすぎると、ページテーブルがものすごくでかくなりそうだな。

はっはぁ、割り当てる単位が統一されていれば、整理整頓も楽そうっすね。

M君、いいところに気が付きましたね。

先程、お二人は物理メモリ空間上に空いているアドレスへ「ランダム」で割り当てられると言いました。

ただ、ランダムに割り当てられプログラムデータがメモリ空間上に断片化された状態で保存されるとアクセス速度が遅くなります。

 

断片化・・・。

確かにアクセスするとき、物理メモリ空間上のいろんなアドレスにアクセスしなきゃいけないからな。

でも仕方ないんじゃないっすか?

物理メモリ空間上にプログラムを割り当てたり、開放したりする機構を「ページアロケータ」といいます。

いわゆる駐車場内の誘導員ですかね。

ページアロケータは、効率よくメモリ上へ割り当てる為に常に空きアドレスを管理しています。

 

ふむふむ、割り当てられているところへ上書きしたら他のプログラムに影響を及ぼしてしまうからな。

それくらいはオイラでも想像がつくっす。

2ページ分の空き領域Aと8ページ分の空き領域Bがあるとしましょう。

そこへ4ページ分必要なプログラムがアロケートされるとします。

空き領域Aと空き領域Bに分割してアロケートしても構いませんが断片化が発生します。

 

まぁ、仮想メモリ上では連続した領域になってるんだろ?

ページテーブルがしっかりと管理していれば問題はない事はないが・・・

断片化しているとアクセスが遅くなるっと・・・。

そうです。

なので、メモリの断片化を防ぐ一つの機能として、「バディシステム」という技術があります。

簡単にいうと、要求された領域より大きい空き領域をページアロケータが用意して、大きい領域を分割してそこへ割り当てる・・・といった具合です。

 

なるほど、そうして出来るだけ断片化を抑えているんだな。
ところで、「バディ」ってどういう意味っすか?

バディとは相方とかペアとかという意味ですね。

バディシステムは、空き領域を2のべき乗(2,4,8,16)で分割していきます。

[mov_cat2_8_1 バディシステム]

 

すげぇ複雑だな、おい。

でもメモリ管理が少しずつ見えて気がするっす。

まだまだ、メモリ管理には沢山の工夫された機能があります。

次回はそれらを説明していきましょう。

 

今日は結構すっきりしたんじゃねぇか?Mっぱげよ。

そうっすね!かっこいい名前も沢山おぼえられたっす!

ぺーじてーぶる・・・ぺーじあろけーた・・・ばでぃしすてむ・・・。

かっこいいですかね・・・。

 

かっこいいとは思わないがな。

オイラはかっこいい名前を沢山覚えてゼミで自慢してやりたいっす!

技術の発展は好奇心と怠慢から来ているとも考えられますからね・・・。

M君の場合、かっこいい名前を探すという好奇心から勉強が進んでいるのかもしれません。

 

好奇心と怠慢・・・?

なんすか、それ。

技術の発明は怠慢から、技術の発展は好奇心から・・・と私は考えています。

面倒くさいと思うから、それを改善するために新しい技術がうまれるでしょ?

 

おぉ、たしかになっ!!

なるほど、計算が面倒だったから計算機が生まれたとも考えられるっすね!
インターネットがここまで発展して流通したのも、きっと人々の好奇心があったからこそ、だと思うのです。

 

インターネット・・・確かにエロの宝庫だからな。
なんすか・・・人間にエロい好奇心があったからインターネットが流通したんすか。
まぁ・・・そうかもしれません・・・げふんげふん。

 

そう考えるといろいろとつじつまが合う・・・な。

お、おいらは全然身に覚えがないっすもんね!!もんね!

まぁ、エロを求めてインターネットをして、痛い目をみて勉強していく。

インターネットユーザのセオリーですね。ハハ

 

後半、馬鹿話になってきたな。

むぅ・・・(オイラのパターンそのものっすね・・・

では夜も更けてまいりました、本日はこのあたりで。

お会計は8280円になります。

 

くそっ!くそっ!!

後半の馬鹿話のせいで会計が跳ね上がったじゃねえかっ!

勉強するのが面倒っす・・・。

なら、勉強しなくても済むようなコンピュータを作ればいいんじゃないですか〜?

まぁ、その為にはコンピュータの勉強は必須ですけどね。

 

矛盾してるじゃねぇか・・・それ。

もういいっす!!
でもいつか、生きるのが面倒になった人向けのコンピュータが生まれるかも・・しれませんね。

 

今日のポイント

 ・仮想メモリ空間はメモリ空間の独立性を高める

 ・メモリ管理はページ単位で行われる 

 ・ページテーブルは物理メモリ空間と仮想メモリ空間をマッピング(紐付ける)

 ・ページアロケータはメモリ空間に対するプログラムの割り当てと開放、空き領域を管理する

 ・バディシステムはメモリの断片化を極力抑えるための機能である

前回へ TOPへ 次回へ

Copyright since 2010 IT Category Project All rights reserved.
inserted by FC2 system