日別アーカイブ: 2016年11月10日

ゾンビとか

何十年も前ですが、若い頃の話です。

先輩方が、カフェで雑談しおられて、「このこ」「あのこ」「そのこ」と言う単語を頻繁に使って、会話しておられて、子供さんのことでも話されているのかと思いましたが、内容が変です。よく聞きますと、プログラムの動作モード(挙動)について、事前に考察して、設計書の草案を考えていると言う状況だった様です。

内容は違いますが、下記の様な会話でした。

あの子と、その子と、共有記憶領域で連携を持っていて、この子が、状況を確認するんだけど、無応答でタイムアウトになったら、どうしたらいいかな?。

放置するとゾンビになるし、困るよね、 killしておくべきかな?。30秒毎にチェックして、一斉にkillする様なプロセス作ろうか?。

ふーんそのプロセスは常時起動時にしておくのかな?、落ちたらどうなるんだろう、いっそ、デーモンとして動かした方がいいのじゃないのかな?。

デーモン化すると言う事だと、サービス周りをいじるの?。それより時刻起動で周期的に動かすのはどうなんだろう。

いやいや、それだと、複数起動する条件もあるかもしれないし、へたしたら、さらにそれが、ゾンビ化しない?

じゃぁ、この件については、一度プロトタイプを作って、どう言う挙動をさせるのが良いか、確認する様にしてみよう。

とか

そんなの感じの会話でした。

よく聞けば、UNIX系ソフトエンジニアがプログラムの連携動作について、相談している会話だけど、知らない人が聞いたら、誤解するんじゃないかと思いました。

プログラムがオペレーティングシステム上で動く時の単位をプロセスがと言ったりするのですが、プロセスの起動時と終了について、プロセスの生成とか、プロセスの終了と言わずに、生まれるとか、死ぬとか、言っていた時期がありました。プロセスの終了が不具合で正常に終了しないことがありまして、動いていないのに残存することがあるんですが、この状態をゾンビ化したとか、そういう言い方をします。生きているプロセスや、ゾンビ化したプロセスを、強制終了させるコマンドにkillコマンドというのがあるのですが、聞こえが、よくないですよね、killって日本語だと、殺すと言う意味ですから、ゾンビをkillする。とかゾンビを殺すとか悪い言葉ですよね。

当時のプログラマは、普通の人々ですが、会話がですね、傍で聞いていて、まずいです。人格を疑いたくなる様な話をして居る様な聞こえ方をしています。

今の時代にそういう言い方をしていたら、ソフト業界のプロフェッショナルな人達に、ばかにされるのかもしれないのですが…。

当時、私は、そういう環境になじんで行きました。

またある日、親戚が大勢来ている時に、会社から電話がかかって来ました。大変にお怒りで、「長期休暇とるんだったら、お前のプロセス全部落としてかえれよ!。30個以上もプロセスが起動しているじゃないか!。みたら、全部エディターで、ソースコードをいじっているけど、出社するまで、このまま、置いておくつもりか?」と言う内容でした。

ソース閲覧していて、ctrl+zで、中断かけて、他のコードを閲覧して、さらにそれをctrl+zで中断してとかしていて、最後にキチンと全部終わらせずに、端末電源オフしていたとか、不用意に、ログイン状態のセッションが切れてゾンビ化していたとか、そう言う事でした。

そこで、電話口で私は、「あー、申し訳ございませんでした、始末できていませんでした。どうぞ、システム管理者権限で、その子たち全部、殺しておいてください。」と申しましたら、「新入り、お前のせいで、いらない仕事おが増えたよ、ハイ終わった。全部殺したぞー、出社しても、閲覧中のコードをみれないから、また探しなさいよ!。きついことを言ったけど、休暇中は会社のことを忘れて、せいぜい骨休めしてこいよー」と最後は優しいお言葉をいただきました。

で、電話を置いて、振り向きましたら、集まっている親戚の方々の表情がなぜか硬い。

一応、誤解のない様に、事情を説明しましたが、お年寄りにご理解をいただけたのかが、不明でした。

他には、満員電車で、専門用語的に、得意そうに、お話をされているのを目撃することがありました。電話の向こうの方の話される内容をきかずに、ただ目の前の方が電話で話される内容をきいていると、とても危ないお仕事の人か、または人の道を踏み外した人に見えてしまって、一般の方々には、そう見えてもしょうがない状況でした。もしも、このかたの彼女のご両親が、探偵など雇って、素行調査でもされている最中なら、縁談はまとまらないのじゃないかと思える様な、そういうシーンでした。

ということで、ある程度、キチンとした言葉で意思疎通できる様にしてある方が、人生は穏やかに過ごせるだろと思います。

以上

 

時計について

私の使っている、コンピュータは、閏秒にびくともしない。

だって、電気代ケチって、ほぼ毎日電源オフ、通電するのは使う時だけだから。

唯一、このブログを動かしているノートパソコン (MINI-ITX)が、動いて居るけど、多分問題は無い。ハズ。

時間情報を配っていないし。

NTPクライアントとして、時間情報をよそからもらうけど、多分大丈夫。

(以下の文章で、誤認していましたので、訂正致します。閏秒挿入は、8:59:60でした。午前0時だと勘違いしていました。)

なお、関連情報へは、こちらのNICTのページからアクセスできます。

 

NTPサーバーから、時間情報を貰うタイミングを、午前0時にしていないので、きわどいその瞬間に遭遇しない。と言うのと、日々NTPサーバーから時間情報を貰った時に、コンピュータの中でカウントして居る時間情報との誤差があった時の対応動作は、日々発生していて、珍しい事でも無いし、NTPクライアントの動作モードと言うか、設定は「ジワーッと、長時間かけて調整する。ズレがデカすぎたら、調整は諦める。」で動かしているつもりなので、私の場合、特段閏秒で、困る事は起きないはずなんです。

<余談>

パソコンには、内部にハードウェアとして、時計チップが搭載されては居ますけど、そんなには、高精度じゃ無いはず。

高精度である必要が無いらしいです。

ほとんど見ないで動いていて、時計チップにアクセスするのって、起動時と時計チップに制御かけるコマンドを発行した時ぐらいだと思う。終了時に書き換えているのかは、勉強不足で、知りません。

CPUは、超高速動作していますが、IOデバイスは、CPUの超高速動作に比べて爆遅くて、時計チップに対する読み書きは「隣町の駅まで時計見に行って来ます。」的な悠長な話らしいです。

OSが、プロセスから時間情報を要求される回数は膨大で、時計チップ読みに行くなんて、悠長な事はやってられなくて、メモリー上に、年月日、時分秒、ミリ秒、マイクロ秒、のカウンターを設けて、プログラムでカウントアップしながら、あまたのプロセスからの時間情報読み出し要求に応える方がレスポンスが良いらしいです。

コンピュータ起動時に、ハードウェアの時計チップから、時間情報を読み出して、OS起動完了後、NTPクライアントが起動して、最初に貰ってきた時間情報と、時計チップとどっちの時間を採用するかですが、初回は無条件にNTP側の情報を信頼する事で良さそうに思いますが、利用環境毎にケースバイケースかも知れませんから、重要な設備やコンピュータは、キチンとした知識をお持ちの方々が検討されれば良いのだとおもいます。

さて、メモリー上で、カウントアップしながら管理している時間情報と、NTPサーバーから貰った、時間情報に乖離があったら、自分の時計がズレているのか、NTPサーバーが、ズレているのか、判りませんから、時間情報の情報源のNTPサーバーは、二台以上指定して、時間情報を見比べて、自分の時計がズレているのか、判断する様な設定でコンピュータを運用するのが良いのでしょう。

でも、サーバー的ポジションで、使わないなら、トラヒックを増やさない様にNTPサーバー1台指定で、十分じゃないかと思います。

最後は、乖離があったらどうするかですが、

1.一発で合わす。(時刻起動プログラムに影響するリスク?)

2.ジワーッと合わす(正確な現在時刻にたどり着くまでに時間がかかる)

3.無視する。

など、どう言う動作モードにするか、自己責任で考える事になるのでしょう。