イチから全部作ってみよう(34)マルチプログラミングとトランザクション:山浦恒央の“くみこみ”な話(203)(1/3 ページ)
ソフトウェア開発の全工程を学ぶ新シリーズ「イチから全部作ってみよう」。第34回は、週末の家事のたとえ話でマルチプログラミングについて理解した上で、データベースにおけるトランザクションについて解説する。
1.はじめに
山浦恒央の“くみこみ”な話の連載第170回から、入門者をターゲットとして、「イチから全部作ってみよう」というシリーズを始めました。このシリーズでは、多岐にわたるソフトウェア開発の最初から最後まで、すなわち、要求仕様の定義、設計書の作成、コーディング、デバッグ、テスト、保守までの「開発フェーズ」の全プロセスを具体的に理解、経験することを目的にしています。
興味がある方は、連載第170回からのバックナンバーをご覧ください。
2.マルチプログラミング
OSの重要な機能として、「マルチプログラミング」があります。OSの授業で、これを習う場合、「CPUで実行していたプログラムAが、入出力のような時間がかかる処理を実行する場合、CPUはプログラムAの処理を中断し、プログラムBを実行します」と言われ、「何だかよく分からないけど、難しい処理をやるんだな」とスッキリしない気分になった人が多いでしょう。
実は、皆さんの日常生活の方が、マルチプログラミングよりも圧倒的に難解な処理を無意識に実行しているのです。
例えば、「今日は土曜日なので、たまった洗濯をして、部屋の掃除をして、ご飯を炊こう」と、3つの仕事をやろうと考えたとします。まず、洗濯機に衣類と洗剤を入れ、スイッチを入れます。
で、洗濯機の前で、洗濯が終了するまで、じっと待っていますか? そんな暇なことをする人はいません。洗濯機に勝手に洗濯をやらせ、次に、米を研いで炊飯器に入れ、スイッチを入れます。
やはり、炊飯器の前で、ご飯が炊けるまで、じっと立って待っている人はいません。炊飯器を放置して、部屋の掃除を始めますね。掃除を始めて20分後に、炊飯器のブザーが鳴ると、「お、ご飯が炊けたな。保温にしよう」と掃除を中断して、炊飯器を保温状態にします(多分、自動的に「保温」になると思います)。
再び、部屋の掃除に戻り、ペットボトルをひとまとめにした時に、洗濯機のブザーが鳴りました。掃除を中断して、洗濯機のスイッチを押し、「洗濯」から「乾燥」モードに切り替え、再び、部屋の掃除を続けます。
誰もが当たり前に、上記のように「3つの処理」を実行します。これは、マルチプログラミングそのものです。CPUでは、ナノセカンド(10億分の1秒)単位の高速で処理が進みますが、CPUでの処理結果をモニター、フラッシュメモリ、ディスク(SSD)、プリンタなどへ出したり、ネットワーク経由で送受信したりするには、ミリセカンド(1000分の1秒)単位の時間がかかります。ナノセカンドとミリセカンドの差は、100万倍。1時間でできる仕事に114年もかかることになります。CPUにとって、ネットワーク経由での処理データの送受信を待つのは、洗濯機の前で待つ以上の時間と辛抱が必要です。とても、待っていられません。だからCPUは、「洗濯機は終わるまで放置し、次に、炊飯器でご飯を炊く」のです。
洗濯、部屋の掃除、炊飯の3つの仕事は、ある瞬間で切ると、1つの仕事しかしていませんが、1時間という長い単位で見ると、同時に3つを実行しているように見えます。これが、「マルチプログラミング」であり、「同時に複数の処理が走っている(ように見える)」仕組みの本質です(ちなみに、洗濯機のブザーが鳴るのは、「私(洗濯機)の面倒を見てください」と人間に処理を要求することですね。コンピュータの世界では、これを「割り込み」と呼び、「CPUに対して処理を要求すること」です)。
コンピュータの中での処理方式は、全て、人間の動作を応用しただけにすぎません。人間界の日常生活の方が、コンピュータより圧倒的に複雑な作業をしています。難解に見えるコンピュータの専門用語に惑わされてはなりません。
次からは、3つのプログラム(仕事)が同時に進んでいる(ように見える)ことを前提にして、複数の仕事(トランザクション)が、1つの資源(例えば、ディスクやトイレ)を占有する場合を見ていきます。
Copyright © ITmedia, Inc. All Rights Reserved.


