15日目「マルチタスクなんてなぁ…、響きが難しいんだよ、このやろ〜」

 志(こころざし)をあらたにスタートした15日目だが、まず最初に、言っておかなければならないことがある。実は、正直に告白するとだ、俺、数ヶ月前までマルチタスクの意味が分からんかったです(こいつダメダメだー)。プログラマって基本的にマルチタスクの意味を分かってなきゃダメらしいのだが、俺はマジで分かってなかった。
 いやだってですよ、そもそもパソコン使う上で、マルチタスクなんて言葉必要ないと思うのですよ。プログラマというのはテキストエディタに文字さえ書ければあとは何とかなる職業なんですよ。とりあえずはそれでなんとかなるんですよ。就職するときだって、会社の偉い人から「プログラミングの経験はありますか?」と聞かれたときに、プログラミング経験のあまりない俺はとっさに「ペラルはやったことあります。」と言い出しました。いま思えば、すごい度胸ですよね。ペラルですよ、ペラル。なんのことか分かりますか? そうです。Perl(パール)のことです(これはさすがに死んだ方がいいかもしれない(笑))。
 そんなアホみたいな人間にマルチタスクがどうのこうのなんて言っても、分かるわけがない。同時に実行するって意味わかんねーよ、なんなんだよいったいよー。
 だた、物事は何事もシンプルに考えればよいわけで、要するにだ、マルチタスクマルチタスクというけれど、結局のところCPUはひとつなわけだ。つまり、同時に複数の処理を実行する仕組みと言われても、本当にCPUが同時に複数の処理を実行しているわけがない。MOV命令を同じ瞬間に2回処理することはできないのだ。その時点で、すでに同時に処理を実行することは不可能ということが分かる(CPU自体が複数あれば別)。じゃあ、マルチタスクって結局は何? ということなのだが、これは、人間にはあたかも同時に処理しているように見えているだけ、なわけだ。
 1秒間に何千何万何億という処理を行うCPU様から言わせてみれば、人間の眼の認識速度なんて止まってるようなもので、仮に俺がイチローの動体視力を持っていたとしても、CPUのそれを追うことはできないのだ。でも俺がイチローの動体視力を持ってたら、パソコンの画面なんて見ずにメジャーリーグで10億円くらい稼ぐからモウマンタイなのだ。でも運動神経が体育の成績オール3の平凡ピープルだから、せいぜい眼が少し良いだけの一般ピープルが関の山なのだ(うるせー)。
 話がそれたけど、要するに0.02秒とか、そういうかなり短い間隔で複数のタスクを行き来して処理しているから、人間には同時に処理しているように見えるだけなのだ。本書に「忍者の『分身の術』みたいですね」と書いてあるが、これはすごい良い例えで、本当にその通りなのだ。
 それで、じゃあ実際にプログラムにするにはどうするのかというと、CPUのレジスタの値をすべてメモリに保存しておいて、そっから「タスクAのCPUレジスタ復元→タスクA実行→タスクAのCPUレジスタ保存→タスクBのCPUレジスタ復元→タスクB実行→タスクBのCPUレジスタ保存→タスクAのCPUレジスタ復元→」という具合に、CPUの状態をメモリに保存しておくことで対処することができる。この処理を0.02秒くらいの単位でパッパッパッと行えば、シュッシュッっとなって、ウワッ、となるわけだ。これで見事マルチタスク完了! 仕組み自体はそんなに難しくない。セイカブツは→本当に30日でOSが出来上がるのかを試してみるページ(15日目)。ちなみにこれまでのソースコードは自分で最初から書いてきたものだったが、ちょっとソースコードを整理したいのと、コメント多すぎてワケワカラン状態になってたのとで、ひとまずリセットして、今日からまた改めて15日目の本書のサンプルソースから始めることにした。ソースコードは整理しだいまた変更していこうと思う。
 明日もマルチタスクだ。今度は何をするのか? 乞うご期待!