2014年3月24日月曜日

人で無しのための計算機理論入門 その7 プログラムの基礎 その1

 勝手ながら、国際情勢に気を使いながらのこの記事の作成ですが、明日から春休みということもあり、にこにこしながら大きな荷物を抱えて戻ってきている子供たちも見るという状況。というわけで、核安全保障サミットもある一方、糊口を凌ぐためのお仕事にも精を出さないといけない状況になっていまして、昨日に続き一本記事を上げたいと思っています。

この記事からしばらくプログラムについての基本的なお話をしたいと思います。例によってハードウエアに一番近い部分から、プロセスという概念がどうして必要になったかというところまでお話ししていく予定です。

まず、プログラムをするのに必要な最小限度の要素を考えてみることにしましょう。

実は処理の流れを図式化したものに、フローチャート(流れ図)と呼ばれるもので、日本工業規格(JIS規格)でもきちんと定義されていたりもします(JISX0121)。これは、たとえば、ISO( 国際標準化機構 )の品質マネージメント規格にISO9000シリーズというのがありますが、そこでそろえる書類の手順書などにも用いられたりして、汎用性が高いので覚えておいても損はないと思います。

ここでは、あまり細かいことまでは言わず、まずはごく基本的な次の5つだけ説明しておきましょう。






以上の五つとなります。これに時には矢印を加えて、処理の流れを表わすのですが、だいたい、上から下へ処理の順序を書いていくのがふつうです。

ここで、「その2」のCPUに必要な機能で説明していなかった分岐というものが出てきました。この部分について説明して、今回の記事は終わりたいと思います。

CPU何らかの計算をすると、計算の結果に応じてフラグというものを立てます。ゲームなんかをやっている人は、あるイベントをクリアするとフラグが立って次のステージに進める、などと使ったりしてませんか。あのフラグと同様です。

ただし、CPUが計算の結果立てるフラグは基本的には次の二通り。

0(ゼロ)フラグ:計算の結果が0の時に1、そうでないときは0
マイナスフラグ: 計算の結果が負の時に1、そうでないときは0

この他に、割り込みの信号が検出されたときに1となる、割り込みフラグというものもあります。

CPUはこのフラグの状態をみて分岐をします。

たとえば、ある二つの変数の内容が等しいかどうかが必要なときは、引き算をしてゼロフラグが0か1かという結果を見て分岐の処理します。

また、同様に大きい、小さいの比較は引き算をした結果、マイナスフラグが立っている(=1)か立っていないか(=0)ということで分岐を判断します。

このように、ごく単純なことに、我々の作業は分解されて計算機では処理されていくことを少しご理解いただいておくと、計算機に対する見方もまた違ったものになるのではないでしょうか。


2014年3月23日日曜日

人で無しのための計算機理論入門 その6 基本ソフトの基本機能(OSのカーネルについて)

まだまだ寒かったり暑かったりですが、本日はよく晴れて春麗ら。連休最終日に好天に恵まれたか人出も多く、宛にしていた図書館の駐車場も満杯といった様子。どうしたものかと途方に暮れて喫茶店に入ったところです。

さて、今日は何をやるかというともちろんピクニックではありません。日本語では基本ソフトともいわれるオペレーションシステム(以下OS)の基本機能について簡単に触れたいと思います。この部分は縁の下の力持ちの部分ですので、あまり普段は意識して使っていないかもしれませんが、理解しておいても損はありません。

まず、OSの大まかな役割としては、前回の仮想メモリのお話でも分かるようにハードウエアの差異を吸収する、言い換えれば、ハードウエアを抽象化するという働きがまずあります。
それは、CPUから見たときのメモリばかりでなく、人間からみた場合もそうでした。細かいハードウエアの差異を吸収し、ほぼ同じような操作性を提供しています。

このほかに、CPUの処理能力やメモリを効率的に利用できるようにする、計算資源(一般にはリソースと呼ばれる場合も多い)の最適化ほか、入出力装置(IO)に関しての管理(パソコンに新しい機器を繋ぐとデバイスドライバをインストールしています、などと表示されますよね)などなど、さまざまな機能を持っています。

世の中に出回っているOSには、たくさんの種類があり色々なやり方で構成されていますが、どのOSにも共通している基本的な機能、言い換えれば、計算機のハードウエアに一番近い処理を管理するをプログラム群のことをカーネル(Kernel)と言い、基本的に次の4つの機能に分けることができます。


1.プロセスの管理
 プロセスというのは、計算機が処理を行う上で基本単位となりうるプログラムとデータのセットだと考えて下さい。

ほかに、計算機の処理における仕事の単位としてタスクというのがありますが、これは、人間からみた場合の計算機にやらせたい仕事の単位です。
以前にも少しお話ししましたが、CPUさんは単純なものすごく細かい処理を、1秒間に10億回といった単位で処理しています。一方、人間の入出力の単位はせいぜいマイクロ秒、ミリ秒単位でしょう。そのため、人間には気づかれないように、自分がやりやすいように処理を分割して、人間からは並列に見えるような程度に処理の時間を区切りつつ多数の処理をちょっとずつ行っていたりします。

したがって、人間が計算機に何かやってとお願いしているときとの仕事の単位と、実際に計算機が処理を行っているときに管理する仕事の単位とは全く別のものになります。
たとえば、スマートフォンのアプリ。これは、人間からみたら、一つのプログラムに見えますよね。でも実際にたくさんの機能があって、それぞれの機能も計算機側からみたらいくつもの種類に分けることが可能です。

このように、スマートフォンのアプリのように人間が計算機にやらせようと考える仕事の単位をタスク、計算機側からみた仕事の単位をプロセスといいます。

このプロセスの管理や、計算機資源の効率的な仕様、並列処理などのお話はまた稿を改めて詳しくお話しするつもりです。


2.メモリ管理
 メモリとCPUは計算機にはなくてはならないもの。このメモリの抽象化については、仮想メモリについて述べましたが、このほかに、メモリを管理する上で、別のプログラムが同じメモリ領域にアクセスしないようにするメモリの保護などというものもあります。


3.デバイス管理
 OSのカーネルはデバイスドライバという形で、計算機の付属する各入出力装置や、外部記憶装置、あるいはネットワーク機器など一般にデバイス(IT業界におけるデバイスの意味は広いので使い方が難しいですが、OSのカーネルについて触れる時は、CPUとメモリ以外の様々なIO装置群)を
動かすプログラムを保持、その動作を管理しています。

たとえば、ディスプレイやキーボードなどの基本的な入出力装置以外に、プリンタに出力を送りプリントが終わればユーザに知らせたりもします。このほかに、ネットワークやファイル・ディレクトリの管理など、 カーネルはそのようなIOの管理機能の基本的な部分を提供しています。


4.システムコール
 以上のようなカーネルの機能はもちろんプログラムで書かれています。しかし、カーネルはハードウエアと密接に関わる部分であるため、簡単にカーネルの処理にアクセスするようなプログラムを作ってそれに触れるようなことがあればコンピュータは正常に動かなくなってしまいます。そこで、一般には、通常、カーネルはOSもしくはCPUが提供する特権モードで動作し、特別な許可を持つユーザしか触れることしかできません。しかし、一方で、一般のユーザもハードウエアに近い部分できめ細かい作業を行いたい場合もあります。そのような場合に、安全にカーネルの機能を提供する為の機能がシステムコールです。

例として、Windows系のOSでは、Windows APIと言われるものがあり、C言語やVisual BASICのようなプログラム言語から関数して呼び出すことができるような形で提供されています。


今回は、少しややこしかったですね。私もだいぶ忘れているところも多くありましたので、今回は、ウキペディアの記事のいくつかを参考書として勉強させていただきました。機能の分類は比較的一般的になものであり、ほかに引用などそのまま使用した部分はありませんが、念のために記載しておきます。

ウキペディアでの参考記事
・カーネル   : http://ja.m.wikipedia.org/wiki/カーネル
・OS      : http://ja.m.wikipedia.org/wiki/オペレーティングシステム
・システムコール http://ja.m.wikipedia.org/wiki/システムコール

2014年3月20日木曜日

人で無しのための計算機理論入門 その5 仮想メモリ

なんだか国際問題にまで関わってきているような気がするこの人で無しのための計算機理論入門。きっと気のせいだということで、話を続けたいと思います。

今回は今では当たり前になったOSの重要な機能の一つ、仮想メモリについてお話ししたいと思います。

以前「その2」で、内部メモリと外部メモリの違いは価格だけだということをはなしました。一方、「その3」では、OSが無い段階のプログラムでは、内部メモリの大きさにプログラムが依存する場合があるということをお話ししています。そのようなハードウエアの差異をなくすのがOSであるということでしたね。

そのことについて今回は少々詳しく説明します。今回、比較的高度に専門的な内容ですので、理解できなくてもかまいません。このあたりのことを知らないIT業界の人なんかいっぱいいます。また、その分説明も詳しくなるため、文章も長いです。

では、まずCPUがどうやってメモリにアクセスするのかということについてお話ししたいと思います。

その2で、CPUとメモリはバスというもので結びついていて、バスにはアドレスバスとデータバスがあるということをお話ししました。

このバスは、基本的には電気信号を通す線、つまり電線ですが、機能が高度になり、高速化の要求に従っていろ色々なことがやられるようになっています、が、ここではそこまで詳しい内容にはふれません。

前回(その4)CPUとメモリの両方に関することとしてビット(bit)という単位が関係するという話をしました。そこでは、ビットとはCPUとメモリが一度に処理できる二進数の桁数であり、CPUがメモリにアクセスするとき指定するメモリの番地を表すときの桁数でもあるという話をしたと思います。

つまり、CPUがメモリとデータをやりとりするときに使われる信号線がデータバス、メモリの何番地のデータであるかを指定するのがアドレスバスというわけです。

遅まきながら、計算機が2進数を使用する理由は、それが、電線に流れる信号が、ONとOFFだけで表せられるからです。このあたりのことは、いずれ機会があればデジタル信号処理ということでお話しできるかもしれませんが、今回はごくイメージ的に。たとえば、モールス信号のように、とんつーとんつーと信号のあるなし、あるいは信号の長い短いで通信していた頃を思い出して下さい。その方が、明らかに明瞭に遠くまで信号を伝えることができますよね。計算機の世界では、同様に簡単なことをいかに速く動作させるか、処理させるかというようなことが基本的な考え方です。

さて、話しは、CPUとメモリの話に戻ります。内部メモリは動作が速いけれど高価で、外部メモリは遅いけれど安価というお話をしました。だいたい、現代のパソコンやスマホで使われる内部メモリは一般にDRAMと呼ばれる半導体のメモリですが、動作は数nsから数十nsで動作するのに比べて、HDDドライブなどの外部メモリはそれよりも数百倍ぐらい遅かったりします。ビットあたりの価格も逆方向に同じぐらい違いますけどね。

ところで、「その4」で説明しましたが、32ビットでアクセスできるメモリアドレスの範囲は4G(ギガ)、64ビットだと16E(エクサ)でした。これに対して、現在の高機能スマホでもメモリは2Gが一般的。パソコンのCPUは64ビットが普通ですが、せいぜい8Gから16Gぐらいが一般的ではないでしょうか。つまり、CPUが指定できるメモリアドレスの範囲より、遙かに小さいことがわかります。

CPUは、基本的にメモリにアクセスする場合、単にアドレスを指定してその番地の内容を読み書きするだけ、です。一方、OSさんは、たくさんのプログラムが時分割で同時に走らせていることで、計算機では、あたかも並列に色々な処理ができるように見せかけています(これも、マルチタスクと呼ばれるOSの重要な機能です)あるいは、一つのプログラムでも、CPUがメモリアクセスできる番地いっぱいのデータを処理する場合もあります。

そのような場合、OSさんは、こっそりと、CPUさんをだまします。つまり、外部メモリにあるような、プログラムやデータもあたかも内部メモリにあるように見せかけて、CPUが指定する本来内部メモリにはないアドレスも、あるように見せかけてCPUに処理をさせるのです。このようなOSの働きによって、CPU側から見ると、あたかも広大なメモリ空間に何も考えずにアクセスできているようにみえる。そういうOSの機能のことを仮想メモリ、と呼びます。

ただし、CPUはハードウエア的には内部メモリにしかアクセスできないため、OSさんは、一生懸命できるだけCPUさんが早く処理をできるように色々予測しながら、内部メモリの内容が外部メモリの内容とあまり頻繁に入れ替えをしなくて済むように考えて処理をしています。このように仮想メモリという考え方によって、現代のCPUは内部メモリの大きさに関わらず、様々な処理を行えます。

ただし、処理の内容が大きく、一方それに比べて、相対的な内部メモリの大きさが小さいような場合、内部メモリと外部メモリとの間の内容の入れ替えをOSは頻繁にしないといけなくなります。これが、古いパソコンで、なにかあるとHDDがカリカリ動き出す理由です。

したがって、パソコンやスマホ、タブレットPCを長く使いたいならば、CPUの性能はもちろん、内部メモリ(一般にDRAMあるいはRAMとよばれる半導体メモリ)の大きさも重要です。個人的には、新しくパソコンを買うとしたら、一番高いCPUより、二番目に高いCPUを選択し、その分、メモリにお金を使う方が、長く使うことができると思います。私なんか、パソコンは8年前に買ったものですが、メモリは奮発して2G載せていました。さすがにそろそろ限界に近いですが、まだそれなりにではありますが、Windows8.1走ってますよ。

2014年3月19日水曜日

人で無しのための計算機理論入門 その4 計算機に関するいろんな単位

さて眠れない夜、簡単に計算機で使われている単位のお話でもすることにしましょう。ここからは、若干ですが、専門的になっていきますので、わからなければそれはそれで良いと思って下さい。

まずCPU。

CPUは、電子回路で構成されています。従って電源が必要です。もう一つ、クロックと呼ばれるものがどうしても必要になります。これは、行進の時にかける号令のようなもので、電気ですので、イチ、ニ、のかわりに、on、off、オン、オフを繰り返します。このイチ、ニ、のかわりのオンとオフ(あるいは、オフとオン)の一セットを1クロックと呼び1クロックこれがCPUが命令を基準となる単位です。クロック数はHz(ヘルツ)で表し、大きい方が1秒間に実行できる命令の数が多いことになります。クロックが1GHzだと1秒間に最大10億回の処理が理論上できるということになります。

もっとも、1クロックに1命令処理できるとは限らず、数クロック掛かる命令もありますし、CPU設計の考え方の違いも有るので、あくまでも処理の速さとしてはの目安です。

他に、ビットと言うのもありますが、これはメモリとも関係しますので、少し後回しにします。

次にメモり。これは、少々やっかいです。というのはメモリの記憶容量を表すのに、ビット(bit)という単位とバイト(byte)という単位の2種類を使います。さらに、2の10乗が1024で、1000に近いこともあって、キロ(K)、メガ(M)、テラ(T)などの表現も10進数か2進数かで微妙に違います。

そういうややこしいことは後回しにして、とりあえずは基本的な事項。ビットというのはCPUやメモリが一度に処理できる2進数の桁数です。これが大きいほど、CPUとメモリで一度にやりとりできる情報の桁数も増えます。また、当然CPUが処理できる2進数の桁も増えます。そうすると、一度に処理する情報の量も当然増えますから、処理も速くなる傾向があります。

また、CPUが指定するメモリの番地もの大きさも広がります。一般に32ビットのCPUだと理論的に最大4ギガですが、64ビットであれば16エクサ(=100京)と無限に近いような大きさの数字です。

一方、メモリの容量バイト(byte、一般に大文字のBで表すことも多い)というのが使われますが、これは、これは、慣習的なもので1バイトは8ビットのことです。

細かいことを言い出すとこの辺も本当にややこしくなるので、基礎的な事項のみ説明しました。

2014年3月16日日曜日

人で無しのための計算機理論入門 その3 プログラムとOS


さて、おそらく絶賛大不評中であろうこの人で無しのための計算機理論入門、今回で、ごく初心者のための入門記事は終わりとなります。これだけわかっていれば、おそらくこの情報化社会のごく基本的な部分が魔法で動いているのではないということがわかっていただけるでしょう。ちなみに、某半導体工場で働いているときにエンジニアの女の子が半導体にあれだけ微細な加工をして動いているわけがない、ということを言っていたのでひっくり返りそうになった覚えがあります。では、なぜ、どうやって動いていると言うんでしょうかね。全く、技術者のくせにどういう教育を受けてきたんだと思いましたが。

それはそうとして、これだけわかっていただければ、アルゴリズムというものもウィキペディアそのほかネットの資料を読めばわかるようになるでしょう。これまでは、私にしては速いペースで記事を上げてきましたが、これからは、ごく不定期で書きたいと思います。いろんなことでこれでも忙しいのです。


その2までを読んでいただいたかたならおわかりと思いますが、計算機というのは、本当に単純なことしかできません。

そのため、ごく初期の頃は人間の方が計算機にあわせる必要がありました。プログラムというのは、そういう計算機に処理をさせる手順を書いたものですが、ただ足し算をするのにも、いちいち、レジスタAにメモリの何番地のデータを入れて、レジスタBには別のメモリの番地からデータを読み込んできて、レジスタAとレジスタBの内容を加えてレジスタAに入れるような命令を書き入れるというような、非常に面倒で手間のかかることをやっていました。

しかし、そのうち、効率よくプログラムを書くために、もう少し人間の方にわかりやすいプログラムを書くための方法が考え始められます。

まず、共通のプログラムを使いたいという欲求が沸いてきますよね。いちいち足し算をするにも、メモリの何番地があいているからそこにデータを入れて、そこから、どのレジスタにデータを読み込むのか、などという管理までちまちまとやっていられない。

そこで、そういうことを自動で行うプログラム、つまり、人間にわかりやすいプログラムを書くためのプログラムを作ろうという動きが出てきました。これが高級言語と一般に言われているものです。

現在よく使われている高級言語には、C/C++やJavaなどのグループがオブジェクト指向型言語と分類されもっとも普及しています。他にインターネットのホームページで使われるHTMLというのもプログラム言語です。細かい用途によって様々なプログラム言語があります。

さて、いろんなプログラムが書かれるようになりましたが、それは、ハードウエアの仕様により、様々に細かいところが異なってくる場合がありました。例えば、同じ種類のCPUを使っていても、内部メモリの大きさが違えば、処理できるプログラムは微妙に違います。そのような管理をいちいちプログラムでするのは面倒ですよね。

そこで、ハードウエアの差異を吸収して、人間に同じような操作性を提供するプログラムが必要だと考えられるようになりました。それが、オペレーティングシステム(以下OSと呼ぶ)です。

パソコンならWindows、スマートフォンやタブレットPCならば、iOSやAndroidが有名ですよね。このようなOSがあるからこそ、メーカー毎、あるいは発売された時期ごとに異なるハードウエアの細かい仕様の違いをユーザー側はあまり意識せずにスマホも使用することができ、また開発者側の負担も大幅に減らすことができるわけです。

2014年3月13日木曜日

人で無しのための計算機理論入門 その2 一般的な計算機のハードウエア構成要素とCPUの概略

では、一般的な計算機、(あ、特に言わなったけれど、学問の世界でコンピューターのことを計算機というのが普通です、念のため。)に必要な要素は何かということをここで改めて考えましょう。

 基本的に計算機ですので、計算する装置が必要ですね。現代の計算機ではこれをCPU(Central Processing Unit :中央演算装置)と呼ぶものを使っています。電子的に計算を行う装置ですね。

 あと、何が必要でしょうか。良く聞くメモリっていうものも必要でしょうかね。プログラムやデータを記憶させておくところです。少し専門的なことを言うと、メモリというのは内部メモリと外部メモリに分けられます。この辺りのことは、話せば長くなるんですが、要するにコストの問題で内部メモリと外部メモリが分けられていると思って一向にかまいません。一般的に読み書き速度の早いメモリは構造的に高価なためです。

 もう一つ、人間が使うものだから、やはり、やりとりをしないといけません。これを一般に入出力装置、あるいは単にI/O (Input/output)呼びます。

現在の処、コンピュータというのはどれだけ高価だろうが、小さくなろうが、この三要素で構成されています。


では、ここで、ノイマン型コンピュータのCPUについて少し説明を試みたいと思います。

今度はCPUに必要な要素を考えてみようと思います。

中央演算装置と言うくらいですから、まず演算する構造が必要ですね。ところが、基本的にCPUさん、面白いもので、演算は足し算しかできません。かけ算は、といえば、足し算をものすごいスピードでやります。3×3だと3を3回足すんです。乗算器という仕組みもありますが、これは応用編で。基本は足し算。引き算は、というと、二進数の世界はうまいことやると、その性質を使って引き算もできるんですね。だから割り算もできる。四則演算ができれば、とりあえず計算機としてはOKですが、だいたいのCPUには、二進数を桁上げしたり桁下げしたりという機能もついています。

つまり、CPUの世界では計算機と言いつつ、実は基本的な演算は加算しかできません。あとは、CPUを作る人や使う人の創意工夫による、というのがこの世界の掟。だからこそ面白いんですけどね。

さて、他には何が必要か。そうですね、たくさんでは無くても計算をしたいデータや計算結果を記憶しておくメモリが必要ですね。このような、CPUの処理に必要なメモリのことをレジスタ、と呼びます。

他に、プログラムカウンタという奴も必要ですね。今プログラムの何処を走らせているのか、一つ処理が終わったら次のステップを処理する、そんな管理をしているところです。

他に、メモリとのデーターやプログラムの命令をやりとりする部分が必要ですね。現代のCPUには内部メモリとのあいだに更に早い速度のメモリ、キャッシュ、を持っていることも多いです。しかし、一般的に、データをやりとりするわけで、その部分をバス(bus)と呼んでいます。busには、アドレスバス、とデータバスというのがあるんですが、まあ良いですか、今のところはそこまで知らないで。

これくらいあれば、とりあえずプログラムを処理できそうですね。あと、割り込みというのがあって、ねえねえ、そんなことばっかりやってないで、ちょっとこっち見てよ、という事をやる働きの信号の受付の部分もありますね。

だいたい、こんなとこでしょうか。次は、プログラムとかOSとか、ソフトウエアのお話です。

2014年3月11日火曜日

人で無しのための計算機理論入門 その1 ノイマン型コンピュータ


だいたい、分かりやすく専門の知識について説明する講座などのことを、サルにも分かる○○入門だというようだが、モラルハザードに陥って、一人では何もできず、あるいは匿名でしか何かできない可哀想な人で無しの連中とサルを比べるとサルにも申し訳ないような気がする。そこで、サル以下の可哀想な人のために、計算機理論のお話をすることにした。今回は、まず、ノイマン型コンピュータ。

人間誰しも、一つ以上のことをするときには、リソースが限られていることもあって、ただ一つのことに専念するときと比べて、効率が落ちる。もっとも分かりやすいのは、自動車を運転しながらの携帯電話が、何処の国でも法律で禁止されているという事を挙げれば良いだろう。

さて、最近のCPUでは、4コアだとか、マルチスレッド対応だとか、あるいは動的配置だとかいろいろあるが、基本的にノイマン型コンピュータの枠をでない。GPUに関しては、厳密にはノイマン型コンピュータと違うが、基本的には、ノイマン型コンピュータの延長から生まれたものだ。

さて、何となくイメージが持てた方もいようが、非ノイマン型コンピュータというのはどういうものか、という事を先に説明しよう。

例えば、ニューラルコンピュータがそう。あるいは、PS3のCPU(Cell)ももともとは、非ノイマン型コンピュータを目指して作られたものの延長だと言えよう。実現はされていないが、量子コンピュータもその部類に入る。つまり、並列にいろんな物事を処理できるように、根本的に設計されているものを非ノイマン型コンピュータと呼ぶ。

逆に言えば、ノイマン型コンピュータは、基本的に一度に一つのことしかできない。それをものすごい早さでやるから、1秒間にどれだけの計算ができるか(FLOPS:フロップス、Floating-point Operations Per Second 1秒間に浮動小数点の数値演算がどれだけできるかを表わす)というのが、いまだにスーパーコンピューターにおいても速度の目安となるわけ。スーパーコンピューターはもっとも、ものすごいCPU数があってそれをうまい具合に並列処理させる仕組みで動いているけれど、ね。しかし、各CPUはたとえば、日本の誇る「京」だって、ノイマン型の処理をするCPU(今はなきSUNのSPARCの改良型)だからね。ノイマン型は基本中の基本というわけ。

つまり、古典的な紙テープに書いてあるようなプログラムというのが単に記憶装置の進化で電子化されて、後の仕組みは、大して変わらない。いまだに化石燃料を使う内燃機関の進化よりマシだけどね、内燃機関の基本は何にも変わっていないのと同じ。いまのCPUはスーパーコンピューターの世界でいうベクトル型の並列処理を取り入れてたり、一部、スカラー型の並列処理を取り入れたりもするけど。そういう進化はあるにせよ、だね。たとえば、CPUガソリンエンジンに例えると、GPUコンピューティングもスーパーコンピュータの世界ででいえばスカラー式というやつで、つまり、電気モータの補助を使うようなもの。ハイブリッドというのが、低消費電力時代のコンピュータ。

つまり馬鹿という奴が馬鹿。いい加減一回死んで私が死んだくらいに出直してきてくれ。もしくは一昨日来やがれ…って先一昨日あったのかな?ハハハ。