#4 メモリー管理の基礎

  コツコツと続けている『ゼロからのOS自作入門』。メモリ周りのお話が面白かったので、まとめてみる。

メモリとは

  今回はメモリの扱い方について書いていくのですが、そもそもメモリとは何かというお話から始めましょう。

コンピュータのメインバスなどに直接接続されている記憶装置で、レイテンシやスループットは速いが比較すると小容量である。特に、CPUが入出力命令によって外部のインタフェースを操作するのではなく、「ロード・ストア命令」や、さらには通常の加算などの命令において直接読み書きできる対象であるものを指す。メインメモリ、一次記憶装置とも。

「主記憶装置 」(UTC:2022年7月21日 (木) 16:03)『ウィキペディア 日本版』
URL:https://ja.wikipedia.org/wiki/%E4%B8%BB%E8%A8%98%E6%86%B6%E8%A3%85%E7%BD%AE

これはウィキペディアからの引用です。
色々と横文字で書かれていますが要点としては、

  1. CPUと直接繋がっているよ

  2. 読み書きが速いよ

  3. 容量は小さい

  4. CPUの命令が読み書きできるよ

といった感じです。
CPUの代わりにデータや命令をストックしておくこと。
これがメモリの役割です。

重要なのは、1番と4番。CPUに直接繋がっているとこが肝要です。
メモリに命令やデータを置いておけば、CPUが取り出して作業ができるわけです。

メモリの仕事を詳しく

  メモリの仕事とは、なんでしょう。
前章でも少し触れましたが、メモリの仕事には大きく2つあります。

  1.  CPUが使うデータを保有すること

  2. CPUへの命令を保有すること。

えっ….メモリって命令も扱うの!?

データとメモリの共存

びっくりなことにメモリ君はデータだけじゃなくCPUへの命令も持ちます。
プログラムが使うデータも、プログラム自身も、
同じメモリの中にあるのです。
この形式のコンピュータをノイマン型コンピュータといいます。(たぶん)

つまりCPUとメモリから見たとき、データとプログラムに本質的な差はない

ということです。
従って、適当にメモリから何かを持ってきてCPUに読ませるだけでは、命令なのかデータなのか本人には判別つかないということです。
そのためにメモリを管理する必要があります。

メモリ管理をする

メモリを管理するといっても、具体的に何をする必要があるのでしょうか? 

  1. メモリ内のデータの長さは?

  2. メモリのどこがデータでどこが命令なのか?

この2つがメモリ管理で気にしないといけないことです。

1. メモリ内のデータの長さは?

  まず1番について。これはどこからどこまでがデータor命令なのかを管理しようということです。CPUから見たとき、メモリにはなにも境界線がないので、メモリ空間内のどこをどのように読んだらいいのか全く分かりません。
なので、データや命令などの塊に境界線を引いてあげる必要があります。

  例えるならば、お花見の時の場所取りみたいな話でしょうか。
レジャーシートを引いたり、何かしら物を置くなどして、ただの野原に自分たちの場所という”境界線”を作るわけです。
  これと似たようなことを行います。

2. メモリのどこがデータでどこが命令なのか?

  そして2番目。メモリ上の場所の区別がつくようになったとは言え、CPU君がその場所がデータとして使われているのか、命令が置かれているのか分かりません。この状態だと、メモリを読み込んだ後に何をすればいいのか分かりません。なので、場所と紐付けてデータなのか命令なのかも管理します。

GDT

  とこれまで何を管理するのかという話をしてきました。では実際問題、どうやって実装するのというお話です。
  実装の技術的な実態は、GDT(global descriptor table)と呼ばれるものです。

  テーブルという名前からもわかるように、テーブル状にメモリの場所と役割分担を管理します。エクセルを使って管理するイメージですね。メモリを使用する時にはこのテーブルに書き込むことで、OSがメモリを貸し出す。そんな貸し出し管理帳見たいな感じなものです。

ということで、今回面白かったところを軽くまとめてみました。まぁ、話だけブログで読んで面白いかは疑問ですが….. 私は実際にコーディングして動かすのが楽しいたちなので。

なんというか拙い文章ですが、何かの役に立ててれば幸いです。

この記事が気に入ったらサポートをしてみませんか?