誰にでも経験があると思いますが、
パソコンやスマホをいじっているうちに
バグった、フリーズして動かなくなったという話。
これの特効薬として「再起動」は古くから
経験的にも知られている事実です。
でも
なぜ再起動が利くのか?
その前に
なぜフリーズするのか?
を解説している話は多くは見当たりません。
パソコンに限らず、Wifiのルータやモデムなど含め
再起動で解決する話は多くあります。
パソコンやスマホに話を戻すと、発熱等でハードウェアが不安定になった
というケースを除外すると原因はソフトウェアの挙動にあると言えます。
その挙動とは、使い続けているうちに自然と発生する
・メモリリーク
・メモリフラグメンテーション
によるところが多いのですが、
「なにそれ?」
と思われるのがごくフツーかと。
この手の単語はプログラミングの世界の話なので
一般論として知る必要性はほとんどありませんが
知っておくと安心するという効果もあります。
メモリリーク
で、まず「メモリリーク」
コンピュータ上で実行されるプログラムは主記憶(メインメモリ)
にロードされてそこで実行していくわけですが、
プログラム実行後に使い終わったメモリ領域を明け渡さず、
解放しないまま放置するケースがあるのですね。
これは主にプログラムの「バグ(bug)」が原因。
解放されない=利用できないメモリが増えていくと、
使用可能なメモリ(空き領域)がどんどん時間とともに減っていくわけです。
そうすると実行プログラムが自分用の空き領域を見つけられずに
停止したり、異常終了という事態に繋がります。
メインメモリの容量を超えて使う手法として、仮想メモリを使う
という考え方もありますが、これは物理的にはメインメモリと
外部メモリ(HDDやSSD)との間で「スワップ」という
内容を交換し合う動作が増えてしまい、やたら時間がかかるようになります。
メモリフラグメンテーション
次の「メモリフラグメンテーション」
先ほどのメモリリークとも似ていますが、
メインメモリ上で正しくプログラムが実行されて
その後バグもなく正しく自分が使った領域を解放できたとします。
この時その領域がもともと小さかったときに、今度は別の大きなプログラムが
メインメモリ上にロードされるときに解放された領域だけでは足りず、
また別の場所を探さないとなりません。
メモリの空き領域はどこかにあるのですが、
小さな領域が飛び飛びになって虫食いのような状態になってしまい
結局、ロード自体ができないよ~
という状況がメモリフラグメンテーションです。
メモリフラグメンテーションやメモリリークなどによって、
「あれ?フリーズした」
というような状態に陥るわけです。
この状態で「再起動」とは、そのパソコンやスマホのシステムを
設計した人から見て、電源を入れたばかりの「初期状態」であり、
ソフトウェアが「プログラマーが期待した通りの動き」をしやすい環境
であるということに落ち着くのです。
これが「再起動でもとに戻った」という大きな理由になります。
ここでアメリカ在住のエンジニア兼起業家である中島聡さん経由で
ボーイングの話を聞いてとても面白かったのでご紹介します。
ボーイングでの飛行機を動かすソフトウェアの設計思想です。
飛行機には同じソフトウェアが乗った3つのコンピュータが搭載されているそうです。
この3つが多数決でものを決めている上に、
時々お互いをリセットし合うように設計されているそうです。
時々「初期状態」に戻すことによって、
常に安定して動くことを目指しているのです。
ということですが、全然知りませんでした。
すごい話ですね、AIがまだまだ表舞台に出てこない時代の設計です。
この設計思想はNASAから来ているとのことでした。
私が感心したのはさすがにNASAだということです。
プログラムのバグを100%取り除くことはできないのは常識です。
そのバグによってどのようなリスクが発生するのかを予見して、
ひとつのコンピュータに任せることは危険だと考えていたことです。
私たちの生活に溢れる家電製品などではこの発想はありえないと思います。
飛行機の中のコンピュータがバグなどで万が一フリーズしてしまったら・・・
ということを予見し対策が打たれていることにあらためて英知を感じます。