マルチタスクとメモリ

マルチタスク

  • このエントリーをはてなブックマークに追加
マルチタスクのイメージ

この記事は、絵でわかる プログラムとは何か(4)~マルチタスクとメモリ~ の最初に読んでいただくべき記事です。

この記事のポイント

  • OS(カーネル)は、プログラムの実行に際し、メモリや、プロセッサを準備する。
  • 最近のOSは、同時に複数のプログラム実行(並行処理)もこなしている。(マルチタスク)
  • メモリにロードされ、マルチタスクの実行対象となったプログラムをプロセスと言う。
  • CPUの特権モードには、カーネルモードユーザーモードがある。
  • 無制約のカーネルモードOSが握り、ユーザーモードからはシステムコールを利用する。

プログラムの実行(run)

プログラム実行(run)の準備は、OS(カーネル)が、指定された実行ファイル(executable)を、メモリにロード(load)するところから始まります。

ファイル単位でロード

そしてOSは、ABI(Application Binary Interface)に従って実行ファイル(マシンコード=バイナリデータの羅列)を分析し、プログラムの実行に必要なデータ用のメモリ領域を確保したり(プロセスの生成)、ライブラリなど追加のモジュールをロードしたり、様々な初期化処理をしたりします。

そして、プロセッサのプログラムカウンタを、エントリーポイント(entry point)と呼ばれるプログラムの先頭に切り替えることで、実行(run)が始まります。

マルチタスク

さらにコンピューターを無駄なくフル稼働させるため、同時に複数のプログラムをマルチタスク処理させる機能がOSに追加されました。

マルチタスク(multitask)とは、複数(multi)の仕事(task)を並行してこなすことを意味します。実際には同時処理をしていなくても、ごく短時間で切り替えて、まるで同時に進んでいるかのように見せている場合も、マルチタスクに含まれます。

マルチタスクOSでは、プログラムの処理に優先順位をつけ細かく切り替えることで、プロセッサに待ち時間/すきま時間を無くし、複数プログラム全体での総使用時間を短縮します。

アドレス指定でインプット
マルチタスクOSがアドレス指定でがタスクを切り替えているイメージ

プロセス

メモリにロードされて、プロセッサでの実行対象の一つになったプログラムをプロセス(process)と言います。

マルチタスクOSでは、複数のプログラムからそれぞれのプロセスを生成でき、1つのプログラムから複数のプロセスを生成することもできます。

たとえば、ウェブサイトからA,B,C,D,Eの5個のファイルをダウンロードしたい時に、1個ずつ順番にダウンロードするより、同時並行でいっぺんにダウンロードできると便利です。

その場合、同一のダウンロードプログラムを使って、

  • Aダウンロードのプロセス
  • Bダウンロードのプロセス
  • Cダウンロードのプロセス
  • Dダウンロードのプロセス
  • Eダウンロードのプロセス

が、同時にそれぞれでダウンロードをできるというイメージです。

マルチタスクのイメージ
マルチタスクのイメージ
(正確な時間配分ではありません)

CPUモード

カーネルモード

マルチタスクOSでは、カーネルプログラムが全体の管理者としての特権を持ち、他のプログラムの実行を中断したり、切り替えたり、再開させたりします。

具体的には、プロセッサの全オペコードを使用できる特権モード(カーネルモード)を、コンピューター起動(ブート)直後、最初にカーネルプログラムが握ってしまいます。

ユーザーモード

そして、あとからカーネルプログラムによってロードされるそれ以外のプログラム(ユーザープログラム)には、他プロセスもしくはシステム全体へ影響する一部の強権的なオペコードを利用できなくしたユーザーモードしか与えなくします。

そうなるとユーザープログラムは、どうしても強権的なオペコードを実行したい場合に、必ずカーネルを呼び出して、カーネルの力を借りなければなりません。カーネルは、ユーザープログラムの持つ権限から実行可否を判定し、その時の全体状況を見て、他のプログラムとの実行優先順位を決め、コンピューター全体を安全かつ効率的になるよう稼動させているのです。

CPUモード
プロセッサの特権モードの概念図

システムコール

このユーザープログラムからのカーネルの呼び出しをシステムコールと言います。

システムコールは、待ち時間の長い処理になりがちです。

OSが提供するライブラリにも、システムコールが使われていますが、ライブラリには、システムコールの待ち時間を減らす工夫が入れられています。

一般的なプログラミングでは、直接システムコールをする代わりに、ライブラリを通してシステムコールをします。
プログラミングの中で使うシステムコール用のライブラリAPI(Application Programming Interface)と言います。

システムコールは、ABI(Application Binary Interface)の一部です。

この記事のまとめ

最近のOSは、同時に複数のプログラム実行(並行処理)をこなすマルチタスクOSになっています。
メモリにロードされ、マルチタスクの実行対象となったプログラムをプロセスと言います。

OS(カーネル)は、プログラムの実行に際し、メモリ領域を確保したり、プロセッサのプログラムカウンタエントリーポイントに切り替えたりします。

CPUの特権モードには、カーネルが占有するカーネルモードと、その他のプログラムが共有するユーザーモードがあります。ユーザーモードのプログラムからメモリ操作などをする場合、カーネルに処理を依頼するシステムコールを利用する必要があります。

次は、仮想記憶 に進みましょう。

この記事は、絵でわかる プログラムとは何か(4)~マルチタスクとメモリ~ の一記事です。

コンピューターのしくみ全体を理解したい場合は、以下の2コースがお勧めです。

日本全国 オンラインレッスン にも対応しています。

知りたいことだけ単発で聞きたい場合は、 オンラインサポート をご利用ください。

記事を検索

コメントを残す

*

CAPTCHA