「マルチタスクを暴く(あばく)」(1995/05/30執筆)
今回の話は少しコンピューター専門用語が多いので御勘弁を。
・・・
最近はWindowsのお蔭で、「マルチタスク」という言葉が
一般にも知られるようになった。
そもそもそれはコンピューター用語で、「いくつかの処理を平行して実行する」
という意味である。マルチタスクの反対語は「シングルタスク」、
一度に1つしか仕事が出来ないということである。
マルチタスクは一度にいくつかの仕事を平行して処理出来る。
「ああ、WORDとEXCELが同時に立ち上げられるということだね。」
と言う人がいるかも知れない。
しかし、正確に言えば、それはマルチタスクではない。
Windows上でマルチタスクと呼べるのは、印刷しながら文書作成出来るところが
代表的か。複数のソフトが同時に立ち上げられるのは単にソフトがスイッチされるだけ
である。その切り替えが速いだけ。
そういう意味では、Windowsは優秀なタスクスイッチャであっても、
マルチタスクとは言えないという人もいる。確かにそう思う。
(技術用語で言えば、「イベントドリブンだから」という意味ではない。)
そういう面ではかのアップルのマッキントッシュも同じである。
別にそれがいけない、と言っているのではない。
それはそれでいいものである。
しかし、真のマルチタスクについても少しは知っていて欲しい。
*ここまでの用語の説明(本文中で説明がなかったもの)
<タスクスイッチャ>
タスクとは1つの処理のこと。
タスク=1つのプログラムと思っても多くの場合あっている。
タスクスイッチャとは、その名の通り、タスクを切り替える機構のこと。
<イベントドリブン>
イベントどんぶりではない。
イベント=きっかけによって、driven=起動されるというやりかた。
イベントが与えられるまでは動かない。
専門的に言えば、Windows V3.1はこのイベントドリブン型マルチタスクである。
が、イベントドリブン=マルチタスクではない。イベントドリブン型シングル
タスクもある。
・・・
普通のコンピューター業務の上で、マルチタスク処理の必要性は、実は少ない。
タスクスイッチだけで間に合う。
マルチタスク処理は、例えば次のような処理で有効になる。
「ソートを行い、その上のものから順番に印刷する」
マルチタスクでは、ソートが終わるまでまってから印刷するのではなく、
ソートの途中結果でもいいから、上のものが確定したら、それを即印刷へまわす。
ソートと印刷という処理が同期して、同時に進行するのである。
マルチタスクの最大の利点は、CPUパワーの有効利用にある。
上の例ではCPUパワーはかなり有効に使われているが、
たとえば、キー入力待ちの時というのは、CPUはほとんど遊んでいる。
こういった空き時間に裏で何か別の処理が出来れば、CPUパワーの有効利用となる。
運転経費の安いパソコンではCPUパワーが余っていようがほとんど関係ないが、
経費のかかる大型機ではこの無駄はもったいない。
従って、マルチタスクとして有効利用するわけである。
正確に言えば、「マルチユーザー」かもしれないが。
マルチタスクでは、もう1つ「再入化可能」という技術を使うことで、
もう1つのメリットが産まれる。それはプログラムサイズを小さく出来ると
いうことだ。
今のソフトというものは、その中にいろいろな機能を持っているが、
その機能のうちいくつかは、各ソフトがみんな持っているものだ。
例えば、ファイル処理、印刷、ソートなど。
こういうものはそれぞれのプログラムが持っていては無駄ではないのか。
マルチタスクでは、それら処理は同時に複数のプログラムから使用される場合もある。
ということは、同時に呼び出されても大丈夫な仕掛=再入可能が必要となるわけだ。
そう、本当のマルチタスクでは、ソフトのサイズはむしろ小さくなる。
メインコントロールタスクがあり、それに付随する機能別タスクが存在する。
メインは、ある機能実行に必要なタスクを選択し、それに実行命令を掛ける。
各タスクは並列に動作する。
マルチタスクが真に利用されたプログラムが出来た時には、
小規模なプログラムがたくさん集まっているという形式になるはずなのだ。
そして、ソフトの違いとは、それらの利用方法の違い、呼び出し方の違いだけになる。
Windows上でも、実はDLLという形で、有用な処理がまとめられている。
しかし、少なくともその利用はまだ不十分で、同じような動作をするものが
複数存在することも多い。
*ここまでの用語の説明(本文中で説明がなかったもの)
<CPU>
Central Processing Unitの略。
日本語で言えば「中央処理装置」とでもいえるか。
パソコンの世界では、一般にパソコンの中心にあるICをさすが、大型機では
マシン全体を指すこともある。
そういう意味では、MPU(Micro Processing Unit)と呼ぶ方がいいかもしれない。
<マルチユーザー>
1つのコンピューターを複数の人が同時に使うもの。
シングルユーザーのマルチタスクでは、多くの場合、同時に起動されている
タスクには関連性があるが、マルチユーザーの場合、各ユーザー間のタスク
には基本的に関連性がない(ファイルの共有とかはあるけど)。
<再入可能>
同じプログラム(もしくはその中の一部処理)が同時に複数のプログラムから
呼び出されても大丈夫な作りになっているということ。
真のマルチタスクでは必要不可欠な技術。
<DLL>
Dynamic Link Libralyの略。
日本語的には「動的結合資源」とでも言うべきか。
これまでのプログラムは、その多くが実行プログラムの中に必要な処理が
すべて含まれていたが、DLLでは、実行に必要な処理の一部を実行する
そのときに取り込む。この利点は、プログラムの改良をした時、その一部だけを
変更するだけでいいということである。(全体を結合し直す必要がない。)
なお、DLLはWindows特有のものではない。有名になったのは
NextSTEPのObjective−Cであろうと思われる。
実行時に処理時間がかかるため、一定以上の処理スピードを持ったマシンで
しか実用レベルでなかったため、これまで敬遠されてきたと思える。
・・・
Windowsのソフトは、今や非常に肥大化している。
まったく「馬鹿みたい」にだ。
その分潜在的なバグも多い。
肥大化したものを、隅から隅まで100%チェックするのは不可能なのだ。
ここに、共通化によるソフトの小型化が行えれば、
共通化して外に出した小型プログラム毎にチェックが出来る。
小規模だからチェックも楽。
改良の場合もそれだけ変えればいいから簡単。
ということは、プログラムの開発期間が短くなるということであり、
それはソフトの価格を下げるということにもなる。
さらに、操作が統一されるので、ソフト毎に覚えるという必要もなくなる。
プログラムが小規模=少ないメモリーで動くというメリットもある。
その時に必要な小規模プログラムさえ起動されればいいからだ。
結局、マルチタスクは、正しく使えば全ての面でいい方向にいく。
その辺りのことを、マイクロソフトやその他アプリケーションソフト
開発会社にはいち早く気づいて欲しいものである。
追記:
ただ、そのようなプログラムの細分化には、それを作成する側の
設計思想を根本から変えていく必要がある。そのため、
慣れるまでは容易には行かないだろうが。機能追加の連続でソフトを
肥大化させていくのは、シングルタスク時代の名残である。
いくらOSそのものがマルチタスクになっても、その上で動くものが
そういう考えからで設計されない限り、OSが生かし切れないことになる。
マイクロソフトは、こういう面で意志統一性に欠けている。もっとも、
他の面でも欠けまくっているが。
逆説:
逆に言えば、それが今のメーカーの売り文句である。
わざと肥大化させて値段を上げる、メモリー不足ならメモリー追加を、
遅いなら速いマシンに買い換えをである。
マイクロソフトとインテル、それにそこら変のハードメーカーは、
この悪循環に乗って利益を上げようとしているのである。
結局馬鹿を見るのは消費者しかいなかったりする。
まったく、困った世の中よのう。
余談:
人間がマルチタスクが出来るかであるが、生物学的に見れば、
体内のいろいろな臓器の動きはマルチタスク以外の何物でもない。
手足を同時に動かせなければ、人はまともに歩くことすら出来ない。
が、仕事の面ではどうか。
タスクスイッチはしているが、マルチタスクはけっこう難しい。
それをしようとすると、かえって処理が遅くなったり、ミスが増えたりする。
ただし、マルチスレッドは可能だ。
自分の仕事を一部人に振って自分の仕事を軽減し、2人(以上)で同時進行することで
出来上がりを早くする。
出来のいい上司はマルチスレッドを的確に行い処理を短時間で終えるが、
そうでない上司は、各スレッド(=部下)に変な、もしくは適当でない
タスク(=仕事)を与え、なおかつその進捗管理・終了判定も出来ていないので、
まとまりがなくなってしまう。これではマルチスレッドの意味がない。
ああ、コンピューター用語でまたこの話をしてしまった。
ちゃんちゃん。
*ここまでの用語の説明(本文中で説明がなかったもの)
<OS>
Operating Systemの略。コンピューターを動作させる上で基本的な処理をまとめる
ものと思えばいい。
実は「OS」というのはIBMの登録商標だそうだが、こんな簡単なアルファベット
2文字が登録商標になるとは困った国である、アメリカも。
(もっとも誰も登録商標だなんて気にしてないけど。)
<マルチスレッド>
1つのCPUが時分割でプログラムを切り替えて同時に複数のプログラムを走らせ
るのとは違い、CPUが複数有り、それぞれに処理を分割して渡す方法。
もちろんこれもマルチタスクの一種であるが、
時分割よりもっと高度である(この説明には一部に嘘あり)。
<リアルタイムOS>
本文にはないけど、これも一応紹介しておこう。
リアルタイムOSというのは、タスクが呼び出しされた時に直ぐ=リアル
タイムで起動されるものをいう。
例えば、動作処理中にあるキーが押されたら、すぐそのキーの処理に移る
というものだ。
実は、純然なマルチタスクOSというものは、リアルタイム性が低い。
普通はリアルタイムに近いが、タスクが混み合うと、待ちがかかる場合がある。
リアルタイムではそういうことはない。そういう意味で、リアルタイム
OSはより高度なマルチタスクといえる。このようなOSは、機器制御
に使われる。Z80(8080)ならRP/M、86系ならIRMX、
68系ではR−OS(もしくはOS−9/リアルタイムカーネル)がそう。
組み込み機器用で有名なμITRONもこの一種である。