ソフトウェアとは

公開: 2021年7月23日

更新: 2021年9月7日

あらまし

利用者がコンピュータを使って、何かをしようとしている時、利用者の思い通りにコンピュータが働かない場合があります。その原因の一つには、利用者が、そのコンピュータを利用した道具の働きを正確に分かっていないことが原因である場合があります。しかし、利用者の理解が正確であっても、道具がうまく働かないこともあります。そのような例の原因として考えられるのが、機械としてのコンピュータの故障や誤動作があります。コンピュータの故障や誤動作がなぜ起こるかについては、様々な原因が考えられます。

コンピュータの誤動作や故障の原因の一つに、コンピュータの設計者が、設計作業をしたときに入り込む、思い違いや誤りがあります。これは、技術者が最初にやろうとしていたことと、最終的に設計として書いたものの働きに、食い違いが生じた時の問題です。設計者には、自分が「間違った」と言う自覚はありません。しかし、書いた「設計」には、「誤り」が入っています。それは、人間である設計者のちょっとした不注意や、「頭で考えたもの」を「設計」として「表現したもの」の間に入り込んだ「手違い」などです。人間が設計作業をする限り、このような誤りを完全になくすことはできません。

もう一つのコンピュータの誤動作や故障の原因の一つに、コンピュータの小型化や高速化が原因で、機械に入り込む「危険な設計」が原因で発生する故障があります。これは、物体として製造されるコンピュータが、極限まで大きさを小さくし、計算の速度を極限まで速めようとしたために起こる問題です。理論から言えば、コンピュータの回路は、いくらでも小さくできるはずです。小さくなれば、電気が通る線の長さも短くなるため、その分、早くなるはずです。しかし、現実には、コンピュータの小ささには、限界があります。現代の製造技術の限界に近づいているコンピュータでは、2本の平行して並んだ線の片方に電気が流れると、もう一方の線にも電気が流れることがあります。このような物理現象が原因で、コンピュータに故障が起きることもあります。

また、コンピュータの大きさを極限まで小さくすると、平行して置かれている2本の線の間を、宇宙線が通り抜けた時、回路の動作に故障が起きることがあります。特に、記憶装置などでは、1を記憶しているはずの記憶素子の保持している値が、0(ゼロ)に変わってしまうと言うようなことが起こります。このような問題は、そのようなコンピュータを作って、何年間も動かして、初めて経験できる問題なので、技術者がコンピュータを設計している時には、分からない問題です。最近のコンピュータの設計では、分かっていることについては、設計図の段階で、コンピュータのプログラムによって、隠れた問題がないかどうかが検査されています。とは言え、その検査は完全ではありません。

コンピュータの作り方を間違えると

現在のコンピュータの中心部は、大規模集積回路(LSI)と呼ばれるガラスのような透明な板の上に電子回路を印刷に似たようなやり方で焼き付けた写真のように作られたモノです。透明なガラスのような板は、ガラスの原料と同じ、ケイ素から作られた棒状のガラス棒のようなものを薄く切って作ります。このガラス状のケイ素の棒は、ほとんどケイ素以外の物質を含まない、純度の高いものです。自然界にあるケイ素には、ケイ素以外の物質が多く含まれているので、そのようなガラス状にした棒を立てて、その棒に沿って、上から下へ高温の金属の輪をゆっくりと動かします。温められた輪の近くでは、ケイ素を含んだ棒の中が溶けて、ケイ素とその他の物質が、比重によって、上に浮き上がる物質と、下側に沈む物質に分かれます。

このように、ケイ素を組んだガラス棒に沿って、高温の金属の輪を何度も上から下へと動かす動作を繰り返すと、ケイ素より比重の軽い物質が、棒の上側に集まり、ケイ素よりも比重の重い物質は、棒の下側に集まります。このようにして作られたガラス棒の中心部には、ケイ素の純度が高く、ほとんど他の物質を含まない部分ができます。このガラス棒の中心部だけを切ると、純度の高いケイ素棒を作ることができます。このケイ素棒を薄く切って、その上に、電子回路を印刷したのが、LSIです。そのケイ素棒の品質が悪く、ケイ素以外の物質が多く含まれていると、電子回路は、設計者が考えたような動作をしなくなるので、コンピュータとして利用している場合には、誤動作と考えられる動きをすることになります。

いくら高い純度のケイ素棒から作られたガラス板を使ったLSIでも、ケイ素版の上に印刷された回路に間違いがあると、回路は、設計者が考えたようには動作しないので、「誤動作(ごどうさ)」をすることになります。コンピュータの電子回路の動作は、基本的に2つの入力信号の両方が1の時に、1の値を出力するand(アンド)回路、2つの入力信号のどちらか一つか、または両方が1の時に、1の値を出力するor(オア)回路、そして入力信号が1の時には、0の値を出力し、入力信号が0の時に、1の値を出力するnot(ノット)回路のどれかを組合わせています。例えば、足し算をする回路(加算器)は、2つの入力の片方だけが1ならば、1の値を出力し、2つの入力の両方が0ならば、0の値を出力し、2つの入力の両方が1ならば、「桁上がり」を意味する信号の値を1にして、和の値を意味する信号の値を0にして、2つの出力を出します。

このような足し算の計算は、私たちが普通使っている10進法の計算ではなく、1と0だけしか使わない、2進法の計算になっています。つまり、0+0は0、1+0と0+1は1、1+1は10(10進法の2)として計算しています。コンピュータの回路設計で、設計者が間違った設計をするとは、例えば、足し算の計算で、1+1の桁上がりの計算を間違って、回路の出力を00(10進法の0)にするようにしてしまう間違いをすると、コンピュータは、2つの奇数の足し算のときだけ、正しい計算をしないようになります。つまり、2つの偶数、2つの数のどちらかが奇数の場合は、正しい答えを出すので、4つの場合のうちの1つの場合だけ間違った答えを出すことになります。その様な加算器は、いつも間違った答えを出すのではなく、時々、間違える加算器になります。

コンピュータの設計で、設計者がこの様な間違いをしてしまうと、コンピュータが正しく動かないことが分かっても、その原因を突き止めることは簡単ではありません。コンピュータが間違った答えを出すのが、どの様な条件の場合かを、はっきりさせなければなりません。もちろん、加算器を作った時に、それが「思った通りに動くかどうか」を調べるので、その様な試験をしっかりとやっておけば、この様な間違いが見逃されることはありません。しかし、電子回路を設計した設計者は、自分が間違っているとは思わないので、いくつかの数の足し算を試して、それで問題が起こらなければ、加算器の設計は、「思い通りだ」と思い込んでしまうことがしばしばあります。そうして、この加算器は「正しく動くはず」のものとして、コンピュータに組み込まれます。

コンピュータが一応でき上がってしまうと、その時点での試験では、様々な数の計算をさせることはしないので、この例の様な加算器の設計が行われていると、コンピュータができ上がった後の試験では、この様な間違いは、簡単には見つけ出せません。たまたま、試験を行った人の誰かが、コンピュータの動作がおかしいことを見つけても、その様な「間違い」がどの様な条件で発生するのかを突き止めることは、様々な条件を試さなければ分からないので、まず、足し算の答えに、時々、間違いがあることを見つけるだけでも大変です。さらに、いろいろな数で、加算器がどの様な動きをするのかを試さなければ、奇数同士の足し算の時に、間違いが起こることを見つけ出さなければなりません。似た様な設計の間違いを経験した設計者であれば、気付く可能性はありますが、そうでなければ、その様な誤りを見つけ出すことはできないでしょう。結局は、でき上がったコンピュータを分解して、加算器を取り出し、その動きを一つ一つ確認するしかありません。この様な間違いが潜んでいることに気づき、間違いの原因を突き止めるためには、簡単な誤りでも、数多くの人々が、多大な時間をかけることになります。

回路の設計には誤りが無かったとしても、回路を描いた大きな設計図を、写真に撮影して、その写真を現像して、その現像した写真を、投影機で縮小撮影して、シリコンのガラス板の表面に焼き付けます。このガラス板の上に焼き付ける時、設計図では1メートル四方の図が、1ミリメートル四方の像に縮小されます。これは、顕微鏡の原理を反対にした特殊な投影機を使って行われます。元の設計図上では、幅が1ミリメートルあった線は、ガラス板上に焼き付けられると、1ミリメートルの1000分の1(1マイクロメートル)になります。もちろん、人間の目には見えません。その様に細く焼き付けられた線に、電気が流れて、コンピュータが動きます。この様な細い線が、何本も1ミリメートル角のガラス板の上に焼き付けられているので、隣り合った2本の線の間の間隔は、1000分の1ミリメートル程度しかありません。設計図では、隣り合った線の幅が。それぞれ1ミリメートルで、その線の間の隙間が、同じく数ミリメートルです。

LSIでは、この様な微細な線などによって、回路が形作られます。その様な状況で、ある1本の線に1秒間に何百万回と、電気が流れたり、止まったりします。そのため、1つのLSIにできるだけ多くの回路を詰め込もうとして、線と線の間の間隔をせばめると、2つの線が、実際にはほとんど「くっついている」様な状態になります。設計図上では、2つの線の間に、2ミリメートルの隙間が取られているとしても、ガラス板の上では、500分の1ミリメートルの間隔しかありません。こりように線と線との間が近くなると、片方の線に電気が流れた時に、隣の線にも電気が流れることがあります。これは、物理学で言う、「誘電現象」です。この様な誘電現象によって、本当は電気が流れないはずの回路に電流が流れ、それが原因て、コンピュータが誤動作をすることがあります。「クロストーク」と呼ばれる誤動作です。

この様なコンピュータの間違った動きは、いつも起こるわけではなく、たまたま条件が整った時だけ発生するので、コンピュータの動きが「おかしい」と分かったとしても、その原因を突き止めることはほとんどできません。現代のコンピュータ設計では、コンピュータを使って設計をするので、設計をしている時に、コンピュータのソフトウェアで、2本の隣り合った線の間の距離をチェックする様な工夫がされています。しかし、簡単な設計図であれば、簡単なソフトウェアでそれを検査することもできますが、難しい図面の場合には、検査のソフトウェアを作ること自体が難しくなります。特に、最近では、図面が平面だけでなく、立体的になっているので、チェックのソフトウェアは、とても巧妙になっています。それでも、2本の線が、非常に接近してしまう例が、時々起こります。それが、時々、誤動作を起こす原因になることがあるのです。

さらに、隣り合った2本の線の間の距離が近すぎて、誘電現象で、本来は電気が流れないはずの線に電気が流れることは防ぐことができている設計でも、隣り合った2本の線の間の距離が、一定以下になっていて、その一方の線に電気が頻繁に流れ続けていると、ガラス板に焼き付けられた2本の線の間に、よく電気が流れている方の線の一部分が、少しずつ変化して、電気があまり流れない線に向かって、丁度、メッキの膜が作られる様に、細い結晶の線が、長い時間のうちに形成されることがあります。この様な現象によって、非常に稀ですが、図面上では別々の2本の線が、途中で結合してしまい、それが原因で、コンピュータが正しく動かなくなることもあります。この現象のばあい、その様な2本の線をつなげてしまう結晶の列ができると、コンピュータは、全く正しく動作しなくなるため、そのコンピュータを利用している人たちには、すぐに故障が分かります。ただ、その原因を突き止めるためには、LSIの回路を電子顕微鏡で調べなければなりません。「マイグレーション」と呼ばれる現象です。

現代のコンピュータは、超高速での計算を可能にするため、そして全体の大きさを小型にするため、電気がLSI上の線を流れる距離を限界まで短くする様に考えられています。LSIを平面的な設計から、立体的な設計にしている理由も、長い線を引くことなく、2つの回路をつなげられる様にするためです。速度の速い電気の流れでも、線の上を流れる電気は、回路から回路までの距離が長くなればなるほど、長い時間がかかるからです。この様な理由で、ケイ素のガラス板の上に描かれている線や回路は、どんどんと小さくなってきています。回路の大きさを小さくするためには、描かれている線と線の間の距離は、どんどん狭くなります。そうなると、回路を動かすために使われる電気の流れの量が少なくなるため、回路の動きが安定しなくなると言う問題が生じます。電流が少なすぎるのです。

例えば、計算結果を一時的に憶えておくための記憶装置の回路は、たった一つの0か1かを記憶する回路が集まってできています。その回路を動かすために使う電気の流れの量を減らして行くと、1の値を記憶していた回路が、時々、0の値を記憶していると言う間違いを起こすことがあります。その原因の一つには、宇宙から飛んできた宇宙線が、偶然にも記憶回路の間をすり抜けるために、それまで記憶していた1の値が、その瞬間に0に変化したりする場合があると言われています。地球の地面の近くでは、飛んでいる宇宙線の量は、大気に阻まれて、大分、減っているので、頻繁には起こりません。しかし、人工衛星が飛ぶ様な宇宙空間では、飛んでくる宇宙線の量が、地上に比較して随分と多いため、その様な誤りは頻繁に起こる可能性があります。そのため、スペースシャトルに搭載されていたコンピュータの記憶装置には、LSIの記憶装置ではなく、古いフェライトコアを使った記憶装置が使われていました。

私たちが利用しているコンピュータでは、アルファベットや数字などの記号を8つの、0か1を記憶する回路の集まりで記憶します。この8つの0か1の値の一つが変わってしまうと、7が6になったり、aがbに変わってしまったりします。それでは、情報が正しく伝わらなくなるため、現代のコンピュータには、その様な記憶回路の動作に誤りが起こっても、誤りを発見して、できればその誤りを修正して、元の正しい情報に訂正できる様な特別な仕掛けが組み込まれています。その様な仕掛けを数多く持ったコンピュータのば場合は、計算結果に生じる間違いは、ほとんどなくすことができます。しかし、その様な仕掛けを組み込むためには、普通には組み込まない仕掛けを入れるため、回路が大きくなって、結果として「高価なコンピュータ」になってしまいます。どれくらいの間違いまでなら、元に戻せるかは、その様な余分な仕掛けをどれくらい組み込むかに、かかっています。それを決めるのも、コンピュータを設計する人々の仕事になっています。

以上、ここではコンピュータの設計に不具合がある時、それを設計の時点で見つけることができないと、問題が表面化するまでに、一定の時間がかかること、問題が表面化したとしても、その原因を突き止めるために多大な時間と、その分析に従事する数多くの人々が必要なことを述べてきました。重要なことは、コンピュータの設計で、その様な間違いが入り込まない様に、最初から、しっかりと、注意して設計することがとても重要です。設計を間違ったままにすると、それを発見して、手直しするために、多大な費用が必要になります。しかし、コンピュータの設計も人間がやることなので、最初から、完全に「間違えないコンピュータ」にすることはできません。ですから、誰かが間違っても、他の誰かが、その間違いに気づき、修正できる様にしておくことが重要になっています。

(つづく)