1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

仮想記憶管理

Last updated at Posted at 2022-08-02

仮想記憶

実記憶管理でメモリ空間が細切れになったり、元々大きくて入らなかったりしてプログラムが入らなかった。
それは物理的な制約によって生まれる問題だった。
この問題をなくすために仮想的、論理的なメモリ空間を作って解決する。
プログラムはメモリがたくさんあるように見え主記憶、補助記憶を隠蔽している。

仮想的なメモリ空間が仮想記憶
仮想アドレス(論理アドレス)で中身を管理する。
物理的なメモリ空間が実記憶
実アドレス(物理アドレス)で中身を管理します。

気づき

メモリを仮想的にするのか。なんかかっこいい。
物理的に無理でも自由になれるのか?

なんで仮想記憶だと自由なの?

物理的な制約

実記憶は使っているうちにフラグメンテーション(断片化)が発生して空き領域を一つにするためにコンパクションをする。

仮想記憶

仮想的なので物理的な問題がなくなる
仮想的なメモリは32ビットで表せる数の範囲を仮想アドレス空間として持っている。
そのうちのどれかにプログラムの領域をとる。

それを実記憶のどのアドレスと対応づけするかは自由になる。
実記憶上ではプログラムはバラバラに入っている。

この仮想記憶のアドレスの仮想アドレスから実アドレスへの変換処理は、メモリ変換ユニット(MMU:Memory Management Unit)というハードウェアが担当する。
この仕組みを動的アドレス変換機構(DAT:Dynamic Address Translator)と呼ぶ。

気づき

仮想にするとプログラムはひとまとめの領域にいるつもりだが実際はバラバラに保存されてるのか。
仮想アドレスと実アドレス紐付けをしているのが動的アドレス機構(DAT)なのか。
主記憶と補助記憶を一体にしているので大体のプログラムは物理的には補助記憶に入っているのか。
それをカーネル(OS)が仮想のメモリを作っているのか。
OS恐るべし。
なんでもOSで自由自在だな。
書き込み速度は下がりそうだな。

実記憶の容量よりも大きなサイズを提供する仕組み

実記憶入りきれないサイズのものはどこに入れるか?
プログラムは主記憶と補助記憶を一体にして捉えているのでその場合は補助記憶の方に書き込まれる。

仮想記憶とは主記憶として使うことのできる見かけ上の容量を拡大させる仕組みだ。

ページング方式

仮想アドレス空間を固定調の領域に区切って管理するページング方式と、可変長の領域に区切って管理するセグメント方式の2つがある。
今回はこのページング方式について解説する。

プログラムはページという単位に分けられる

ページング方式ではプログラムをページという単位に分割する。

現在のOSではデマンドページングという実行に必要なページだけを実記憶に読み込ませる。手法が主流になっている。

ページフォールト

p258のようにプログラム(ページABCDE)が仮想記憶に入っている。
しかし実記憶には読み込まれていない。
ページAを実行しようとするとページフォールト(必要なページが実記憶にない時発生する割り込みが起きて実記憶に読み込まれる。

ページテーブル

仮想記憶と実記憶の対応づけはページテーブルという表によって管理されてる。
目的のページが実記憶上にないと判明したら、補助記憶から実記憶へとそのページが読み込まれる

ページイン、ページアウト

ページイン、ページアウトをすることによって必要なページが処理される。

ページイン

補助記憶から実記憶へのページ読み込み

ページアウト

実記憶に容量が少ないと実記憶から補助記憶へとページを追い出す
しかし
補助記憶に書き換えが必要となるのでシステムの処理効率は極端に低下する。
これをスラッシングという。

気づき

ページフォールトで割り込み、ページテーブルを利用して必要なページが処理されるのか。
それを可能にしているデマンドページングがすごいのかな。
考えている人は賢いな。
ページのおかげで想像しやすい。

ページの置き換えアルゴリズム

ページインしようとした時に実記憶に空きを作るためにいずれかのページをページアウトしなければなりません。
ページアウトがダメだとせっかく追い出したものをページインし直すこともある。

ページインには置き換えアルゴリズムがある

置き換えアルゴリズム

FIFO(Fiirst In First Out)方式

最初にページインしたページを、追い出し対象とする。
なので最初にページインする。

LIFO(Last In First Out)方式

最後にページインしたページを、追い出し対象とする。
なので最後にページインさせる。

LRU(Least Redently Used)方式

もっとも長い間参照されていないページを、追い出し対象にします。

LFU(Least Frequently Used)方式

もっとも参照回数の少ないページを、追い出し対象にします。

気づき

LRUとLFUは同じように見えてしまうな。
気をつけよう。
回数が多いだけでもそれが全てすごい過去の場合があるからな。

ページングとスワッピング

この2つは補助記憶装置と主記憶装置とでメモリ内容を出し入れすること全般を指す。
これには、両者に違いはない。

これらの違いは、出し入れする単位の違いだ。
スワッピングはプロセス単位
ページングはページ単位

気づき

なるほど単位の違いか。

プロセスとページの違いはなんだっけ?

プロセス

タスクとは、コンピュータが「実行中のプログラムです」と識別する仕事の単位。
プロセスとも言われている。

ページ

プログラムを「ページ」という単位に分割して管理する。

一つの処理をプロセスと考えて、それは複数のページで構成されている。
こういう感じでいいのかな?

出典 キタミ式イラストIT塾 基本情報技術者 令和03年

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?