※ 本記事では、基本情報技術者試験の対策として私が勉強したことを備忘録的にまとめておきたいと思います。
少しでも参考になれば嬉しいです。
はじめに
さて今回は、基本情報技術者試験対策として、マルチプログラミングについてまとめたいと思います。
要はリソースを最大限活用する技術なわけですが、名前だけではイメージつかないはずです。
画像付きで分かりやすく解説していますので、是非チェックしておきましょう!
ちなみに私はこの参考書を使って勉強してました。
漫画形式で読みやすく、分かりやすい内容になっているため、無理なく学習を進められると思います。
過去問を解きまくり、不明点があれば参考書で知識を補う、このサイクルで試験対策するのが私のオススメです!
最新版はこちらです。
少し内容が異なる部分もあるかもしれませんが、大まかには変わらないはずですので、安心して下さい。
マルチプログラミングとは??
マルチプログラミング(Multiprogramming)は、コンピュータのCPU資源を最大限に活用するための技術です。複数のプログラムが同時に実行されることを可能にし、システムの効率を高めることができます。これにより、CPUがアイドル状態になる時間が減り、システム全体のパフォーマンスが向上します。
とまぁ言っても意味が分からないと思うので、図を使って説明しましょう。
例えば、ある「処理A」と「処理B」があったとします。
これらの処理は、CPU処理と入出力処理から構成されていたとし、CPU処理が終わったら入出力処理、入出力処理が終わったらCPU処理・・・というのを繰り返して一連のプロセスを終了させるとします。
「CPU処理」→「入出力処理」→「CPU処理」→「入出力処理」→「CPU処理」→「入出力処理」・・・
といった感じです。
CPU処理が終わらないと、入出力処理を行えない、入出力処理が終わらないとCPU処理を行えない、というのは覚えておいてください。また、処理Aと処理Bはそれぞれ競合しないものとします。細かい条件はさておきって感じですが・・・。
さて、下図を見てください。
「処理A」と「処理B」はどちらも110 msかかるようなイメージです。
これらの処理を考えた際、単純に「処理A」が終わった後に「処理B」とすると以下のようになります。
まぁ単純計算、110 ms + 110 ms = 220 msかかるわけですね。
ただこれだと、単純に空白となっている箇所多くない??と思いませんか??空白となっている箇所はそれぞれがタスクを実行せずに休んでいる状態です。人間だったら休むのは重要かもしれませんが、疲れ知らずの機械にはそんなもの必要ありません。とにかく無駄なくタスクを実行させることが重要なわけです。そんなときに大切な考え方が、マルチプログラミングです。
要はこの無駄となっているリソースを最大限有効活用しようという考え方です。
「処理A」のCPU処理が終わって休んでいるところに、「処理B」のCPU処理を突っ込むわけです。下図を見てみましょう。
上手いこと入れ込めば、リソースを無駄にすることなく処理を終わらせられることがよく分かりますね??
これだと処理が120 msで終わります。元々220 msだったことを考えると、単純に100 msも早く処理を終わらせることができています。
どうですか??マルチプログラミングの効果は伝わりましたかね??
さらにさらに、こういった効率的な処理を実現するために、タスク管理が行われています。詳細は以前まとめた記事をチェックです!
おまけ情報:読み飛ばしてOK
マルチプログラミングの主なメリット
- 効率的なリソース利用:
CPUのアイドル時間を最小化し、リソースの有効活用を図ることができます。 - 高速な応答性:
複数のプログラムを並行して処理するため、応答時間が短縮されます。 - スループットの向上:
より多くのプロセスを同時に実行することで、システム全体のスループットが向上します。
マルチプログラミングの動作原理
- プログラムのロード:
複数のプログラムをメモリにロードします。これにより、プログラムが実行可能な状態になります。 - スケジューリング:
スケジューラがCPU時間を各プログラムに分配します。これには、先着順(FCFS)、最短ジョブ優先(SJF)、ラウンドロビン(RR)などのアルゴリズムがあります。 - コンテキストスイッチング:
あるプログラムの実行が中断された場合、その状態を保存し、他のプログラムの実行を開始します。これにより、CPUが常に稼働している状態を保ちます。
マルチプログラミングとマルチタスクの違い
マルチプログラミングとよく混同される用語にマルチタスクがあります。これらは似ているものの、以下の点で異なります。
- マルチプログラミング:
複数のプログラムが同時にメモリに存在し、CPUがそれらを順番に処理する方式です。 - マルチタスク:
ユーザーが複数のタスクを同時に実行できるようにする方式で、一般的にはインタラクティブなシステムで用いられます。
マルチプログラミングの実装例
- Unix系OS:
UnixやLinuxなどのオペレーティングシステムは、マルチプログラミングを利用して効率的なリソース管理を行っています。 - メインフレームシステム:
大規模なデータ処理を行うメインフレームでも、マルチプログラミングは必須の技術です。
マルチプログラミングの課題
- デッドロック:
複数のプロセスが互いにリソースを待ち続ける状態であるデッドロックが発生するリスクがあります。 - オーバーヘッド:
コンテキストスイッチングには時間がかかり、これがシステムのオーバーヘッドになることがあります。
最後に
さて今回は、基本情報技術者試験対策として、マルチプログラミングについてまとめました。
画像のイメージだけしっかりと頭に入れておいてもらえればOKです。
★マルチプログラミング
複数のプログラムを同時に実行し、システムの効率を高める
以上!
前回まとめた記事も読んでもらえると嬉しいです!
基本情報以外の勉強記事も是非!
オススメ参考書 & Udemy講座
過去問編
兎にも角にも過去問を解かないことには始まりません。解いて解いて解きまくりましょう!
特に以下の参考書は問題数が多いのでオススメです。
この1冊だけ買って、とりあえず1周すれば合格がかなり近くなると思います!
科目A+B両方合わせて4セット収録されてるとかヤバすぎます・・・
知識網羅編
以下は知識網羅編として、講義系の参考書、動画をピックアップしています。
1からしっかりと学習し、知識を身に着けたい方はとてもオススメです。
過去問を解きまくり、不明点を参考書で補う。これが最高の勉強サイクルです~
私が勉強する際に使用していたオススメ参考書は以下です。
上記シリーズの最新版は以下です。(内容はそこまで変わらないはずですが・・・)
私がぜひオススメしたい、Udemyの講座もいくつかピックアップしておきます。
誰かに解説してもらった方が分かりやすい場合もありますからね~
画像でもボタンでも、どちらを押下しても講座へ飛べるようにしてありますので是非!
コメント