「マルチタスク時のメモリの奪い合い/スラッシング」をシミュレーターで解説します!
前回記事で、ページングとは何かを説明しました。今回はマルチタスク時の、各タスクのメモリの奪い合いの様子をシミュレーターで解説します。
おさらい:メモリが足りない場合は、、、ストレージ上に保存!
メモリは↓のような区画で管理されます。
もし、この区画が足りなくなったらどうなるでしょうか?必要なデータ保存領域がなくて、コンピューターが動けなくなってしまいますよね。
そうならないためにも、コンピューターは↓のように「メモリが足りなくなったら、ページファイルと呼ばれるストレージ上のファイルに代替保存」を行います。
ストレージのほうが、圧倒的に保存できる容量が広いので、これが使えれば溢れることはないんですね!
しかし、ストレージは遅いという問題があります。コチラのシミュレーターでも示している通り、CPUやメモリと比べて動画がめちゃくちゃ遅いんです!
そのため、「できる限りストレージにあるページファイルにアクセスしないよう、メモリを有効活用する」ことが重要なのです!
メモリ管理は通常LRUで行われる
メモリを有効活用するために、↓LRUというアルゴリズムを使うのが通常です。
LRU = Least Recently Used
メモリのページ(区画)の中で、もっとも最近使われていないページ区画を選択して、ストレージに追いやる
「最近使われていないページ区画」とは、「一番使った時間が古いページ区画」です。もし、ページ区画が足りなくなったら、各ページで使った時間を記録していて、一番古いページ区画を見つけて追いやるんです!
「マルチタスク時のメモリの奪い合い」をシミュレーターで確認してみよう!
それでは、マルチタスク時のメモリの奪い合いが起きる様子をシミュレーターで確認してみましょう!
少しややこしいので前提から説明します!
前提1:各タスクの使用メモリを赤/青/緑で示しています
今回は3つのタスクが10秒ごとに切り替えて稼働する場合をシミュレーションします。各メモリ区域は、どのタスクが使っているかで赤/青/緑で色付けしています!
前提2:各データは使う頻度に差があり。その頻度の差を「数字」で示してます
実際のコンピューターでもそうですが、メモリにあるデータが全て平等にアクセスされることは稀です。大概は、1割のデータに9割のアクセスが集中するようなことが多いです。
このため、今回のシミュレーターは「書いてある数字に比例して呼ばれる頻度が高い」ようにしています。今回の場合、↓のように1~10というように数字が書かれていますが、「1のデータは、10のデータの1/10の確率でしか呼ばれない」という設定です。「数字が高いほど頻繁にアクセスされる=追い出されにくい」状態になっています。
前提3:直近でアクセスされたデータほど濃く表示。古いデータほど白く表示
シミュレーターでも↑で示したLRU方式で、どのデータを追い出すか決めます。これがわかりやすいように、「直近でアクセスされたデータほど濃く」「触られていないデータほど白く」表示するようにしてます。
↓の絵だと、赤の「1」が一番白っぽく、追い出される候補になることを示しています。
前提4:メモリ容量は40区画固定で、各タスクのメモリ使用量をシミュレーターで変更できます
今回は↑の絵のようにメモリに40区画のデータがおける状況でシミュレートします。この状況で、総メモリ使用量が40より少ない場合、それ以上となった場合でどうなるか確認してみましょう!
「マルチタスク時のメモリの奪い合い」シミュレーター
- ↓で各タスクのメモリ使用量を指定し、実行ボタンを押すとページングシミュレーターが開始します
- 3タスクあるので総メモリ使用量は指定したタスクメモリ使用量の3倍になります
- 10秒ごとに次のタスクに切り替わります
- 各メモリ/ページファイルのデータにランダムアクセスをしていきます。アクセスされたメモリは色が濃くなります
- ページファイル内のデータにアクセスされると、ページイン/ページアウト(交換)が起きます
各タスクのメモリ使用量:
シミュレーターの要点解説
ページファイル使用量が多くなると、タスク間のメモリの奪い合いになる!
総メモリ使用量が、↓のようにメモリ内に収まっているときには、効率よくどのタスクも走ります。
しかし、メモリからあふれてページファイルを使うようになると、どんどん遅くなっていき、、、↓のように大量にページファイルを使う場合は「タスク間のメモリの奪い合い」が発生します。
タスクが待ち状態になっているときには、メモリを使わないため、メモリ区画がどんどん古くなっていくため、ページファイルに追い出されるようになるんですね。
こうなると、毎回順番がくるたびにページファイルからメモリにデータを呼び込まないといけなくなり、それだけで処理が終わってしまう状態になります><
このような状態を「スラッシング」といいます。ページングが多発しすぎて、処理が進まない悪い状態のことです。この状態だと通常時より何十倍/何百倍も遅くなってしまうんですね><
このようなことが起こらないように、最適なメモリ容量を用意することが重要なんです!
- メモリが足りなくなった場合、ページファイルというストレージ領域に保管される
- マルチタスクの場合は、待ちタスクがメモリを使わない状態が発生するので、メモリが足りない場合は奪い合いが発生する
- 最悪の場合、ページング処理だけでタスクの稼働機会が終わってしまう。このようにページング多発で極端に遅くなることを「スラッシング」という
⇒「主記憶管理」カテゴリ記事一覧
その他関連カテゴリ