「マルチタスク」という言葉を目にしたことのない人は、ASCII.jp読者にはまずいないだろう。また、最近ではあまり聞かないが、「タスク」と似たような用語に「ジョブ」がある。そのため、かつては「マルチジョブ」といった表現がされていたこともある。さらに似たような用語として「プロセス」もあり、やはり「マルチプロセス」という用語がある。また、マルチタスクと同じ意味で使われる言葉に、「マルチプログラミング」というものもある。
いずれも意味としては、「複数のアプリケーションを同時に実行できること」を示しているが、どうしてこんなに複数の用語があるのだろう? 理由のひとつは、かつてコンピューターメーカーがOSを作ってたときに、それぞれのメーカーで異なる用語を使っていたことにある。あるメーカーは、アプリケーションを実行することを「タスクを起動」と言い、別のメーカーでは「ジョブを起動」と呼んだわけだ。
今回はオペレーティングシステム(以下OS)とプロセスの関係を、はっきりさせてみよう。
「プログラムを実行」したときに何が起こるのか?
プログラムを実行するにはメモリーに読み込む必要があることは、本連載でたびたび説明したとおりだ。そして一般的なOSでは、アプリケーションプログラムはファイルとして、ストレージに格納されている。これを「実行ファイル」と呼んでいる。Windowsではこの実行ファイルの型式が定められており、OSは実行ファイルを読み込んで、メモリーへ配置する。このときの状態は、ファイル内でのデータの並び順と少し違う。さらに実行ファイル内の設定情報などから、利用するメモリーを確保する。
多くのOSでは実行ファイル内に、プログラムコード部分とデータ部分を分けて持っている。データ部分はプログラムが利用するためのデータで、プログラミング言語のレベルでいえば、最初から定義してある「定数」や初期化されている「変数」などに相当する。例えばプログラム中で表示するメッセージなどは、一種の定数として実行ファイル中に格納されている。
なおプログラミング経験のない方向けに説明すると「定数」とは、書き換えられることのないデータ領域のこと。変数とはプログラム実行中に書き換えられる(可能性のある)データ領域で、これには初期値のあるものとないものがある。
OSは実行ファイルを読み取ると、解析して必要なデータをファイルからメモリーへコピーしたり、実行ファイル内の情報を読んで、メモリー内に領域を確保したり、さらに必要なレジスターを設定したのちに、プログラムを実行する。
Windowsでは、「PE型式」と呼ばれる実行ファイル形式が使われているが、ファイルとしては「.EXE」という拡張子を持つのはご承知のとおり。拡張子EXEの実行ファイル形式はMS-DOSの時代に定義されており、EXE型式というフォーマットを持っているが、PE型式はMS-DOS用のEXE型式を含んでいる。
実行ファイルを元にメモリー内に確保されていく領域を「セクション」と呼ぶ。PE型式では実行ファイル内に、確保するセクションに対応するデータが含まれている。そのため、セクションはメモリー上の領域を示すと同時に、実行ファイル中の対応した領域を示す用語としても使われる。
ちなみに、PE型式はUNIXなどで使われていた「COFF」(Common Object File Formet)を拡張して作られたため、UNIXの習慣が持ち込まれている。例えば、実行ファイル中のプログラムコードのセクションには、「.text」という名前が付けられている。そのほかにも、初期値のある変数領域である「.data」や、初期値のない変数領域「.bss」などがある。一方Windows独自の領域としては、アイコンなどが含まれる「リソース」セクションがある。
このようにWindowsを含む多くのOSでは、アプリケーション実行前にメモリー内にアプリケーション起動のためのセクションを確保する。またOSは、各セクションに何が入っているのかを把握している。
このようにして作られたメモリーの状態を、「実行イメージ」と呼ぶ(図1)。実行イメージは実行ファイルから作られるが、アプリケーションに割り当てられた仮想メモリー環境内に各領域をそれぞれ適切に配置するため、実行ファイルとまったく同じビットの並びにはならない。
この連載の記事
-
第13回
PC
ARM版Windows 8実現の布石となったWindows 7の「MinWin」 -
第12回
PC
アプリがWindowsの機能を使うには? APIとDLLの仕組み -
第11回
PC
マルチコアCPUの消費電力はスケジューリングで変わる? -
第10回
PC
AMD FX向けにパッチで修正 スケジューラーが抱える難題 -
第9回
PC
マルチコアCPUを賢く使いこなす スケジューリングの秘密 -
第7回
PC
Windowsのメモリー管理をx86の仕組みから読み解く -
第6回
PC
メモリー不足を根本的に解決する64bit OSの仕組み -
第5回
PC
Windows 8でMetro Styleアプリを動かす「WinRT」 -
第4回
PC
Windowsを動かすデバイスドライバーの仕組み 前編 -
第3回
PC
OSの仕事はハードウェアをアプリから「隠す」こと? - この連載の一覧へ