2013年2月17日日曜日

『Operating System Design: The Xinu Approach, Linksys Version』を読んだ

実際のOSのソースコードを示して解説する教科書といえば、TanenbaumのMINIXが有名である。本書は、Dougras ComerによるXINUというOSにつての同様の趣旨の本である。このような本があるという事は、以前から知ってはいた:
XINU("XINU is Not UNIX"の略)オペレーティングシステムの開発について述べた優れた本。<中略>この本はオペレーティングシステム概論の授業の副読本としてうってつけで、UNIXカーネルの授業でLionsのテキストと一緒に使っても良いくらいだ。(『Life with UNIX』p.127) 
この記述は本書の初版本に関するもので、LSI 11というPDP-11をワンチップ化したハードウェアを対象に書かれたものである。Amazonで調べてみると、本書はその後、PC版やMac版が出ていたようである。しかし、長いこと絶版となっていた。

ところが最近、Linksys(今はCISCO?)のEL 2100LというというMIPSアーキテクチャのルータ向けに書き直された版が出ていることを知った。このルータを選んだ理由として、安価で入手しやすいことと、シリアルを備えていることが本書で述べられている。日本だと、「ブロードバンドルータ」と言って家電量販店で2万円くらいで売られている類のものではないかと思う。

XINUは組込みOSとされている。今や組込み機器でもLinuxやBSDが動く時代なのでその定義は曖昧であるが、例えばMINIXと比較すると、以下の特徴がある:

  • ユーザモードとカーネルモードを区別しない
  • システムコールは普通の関数呼び出し(ただし割り込みは禁止)
  • アプリケーションはカーネルと一緒にリンクされる

MINIX本では後ろ半分に付録としてソースコードを載せていたが、本書は関数1つ毎に解説とソースコードが交互に記載されている。したがって、MINIX本のように本文とソースコードを行ったり来たりする必要はない。シーケンシャルに読める。また、小さいながらもUDP/IPプロトコルスタックも実装されている。

本書を読んだ感想だが、OSというのは、本当にまったく単なる巨大なCプログラムに過ぎない。これは、MINIX本を読んだときにも感じたことである。XINUの実装を読むことで、更にその思いを強くした。

かつては、OSには何か魔法のようなものがあると思っていた。並行プロセスやファイルシステムなど、まさに現代の魔法だった。しかし、その実装を見てみれば、何の魔法もないのだ。アーキテクチャに関わるところも、割り込み処理とブートストラップの一部だけである。そして、OSの実装言語としてのCのスジの良さ。実行環境としてスタックさえ準備してやれば、後はおなじみのCの世界である。

『Life with UNIX』にもある通り、本書はOSの授業の副読本として最適だと思う。例えば、アーキテクチャはパタヘネでMIPSを学べば、本書のアーキテクチャ依存部分もよくわかるだろう。

大人になってから、「学生時代にこの本を読んでいたら、違った未来になっていたかも」と思わせる本に出会うことがある。本書もそのひとつだ。OSに魔法などない。



2013年2月10日日曜日

忍び寄る全体主義

私が三菱電機を辞めた理由のひとつは、組織のもつ全体主義的傾向を嫌ってのことだった。全体主義とは、皆が同じ考えをもつことではない。そんなことは不可能だ。全体主義とは、皆が同じ考えをもつことを強制することである。従って、全体主義のもとでは、人は皆と同じ考えを持っているふりをするようになる。

ひとつ象徴的な例がある。私のいた事業所では、改善活動が行われていた。いわゆる「カイゼン」活動である。製造業なら、どこでもやっていると思う。職員全員について、改善のノルマが課せられていた。技術者も、事務職員も、現場の職人も例外は認められない。通常は1月に1件以上だった。

どういうわけか、改善の効果は、節約時間によって計られることになっていた。そして、年度ごとにトータルの節約時間が定められ、各セクションにその時間が割り当てられた。この時間は最低の基準とされた。

誰の目から見ても、この改善活動は馬鹿げていた。一人毎月数十時間を節約する方法を考えだすことは、不可能とは言わないまでも、通常業務の中でできることではなかった。その結果どうなったか? 皆、改善したふりをするようになった。

ソフトウェアのセクションでは、単体テストの自動化などはよく使われる手だった。単体テストを自動化したふりをして、時間と品質を改善したことにするのだ。嘘の報告をしているのではない。実際にテストは自動化されている。ただし、その効果を見積もるところで「ふりをする」。

年度末に提出する報告書の上では、莫大な時間が節約されているはずだった。毎年のようにテストが自動化され、このままではテストの工数がマイナスになるのではないかと思われるほどだった。しかし、皆、本当は何も改善されていないことを知っていた。毎日残業し、デバッグする自分が一番良く知っているのだ。

ちなみに、改善の内容については、一応の審査はされているようである。一度、毎月の報告書に、「陶器のマグカップから側面が魔法瓶でできているマグカップに変更することで、長時間美味しいコーヒーが飲めるようになり、作業が捗るようになった」と書いたことがある。改善の委員に、さすがにそれはダメだと言われた。

私は、ここで改善活動そのものを批判したいわけではない。改善活動は必要だと思っている。実際、優れた改善のアイディアというものは存在する。私が批判したいのは、効果がないとわかっているのに、それに異を唱えることを許さない全体主義的な空気である。

これは、三菱だけでなく、苦境に陥っている日本企業すべてに言えることではないか? かつての成功体験にしがみつき、無意味とわかっていることを続けているのではないか?

まるで戦時中の日本軍のようだ。最初の神風特攻隊が成功を収めたという理由だけで、効果を挙げられなくなった後も飛行機による体当たりを続けた。(人道的問題はおいておくとしても)特攻隊の効果に疑問を呈することはタブーだった。日本軍が最終的にどうなったかは、よく知られるところである。結局、日本人のメンタリティとはこの程度のものかと思うと残念である。

誰も「改善はインチキだ」とは言わない。私は言えなかった。もちろん、改善に異を唱えたからといって収容所に送られるわけではない。せいぜい、「害のない」ポジションに異動になるだけだろう。

多くの大企業が大量リストラを行なっている。リストラされた人には気の毒だが、これが日本企業にとっての「終戦」になることを期待している。