雑種路線でいこう

ぼちぼち再開しようか

OS研究が再び盛り上がる,かも知れない

けれどもここ数年,我が国でもOSASKMonaやCooSといったOSが,フロムスクラッチで開発されたことをどう解釈したらいいんだろう,という問題にはたと気付いた.これはそろそろOS研究が再び脚光を浴びる胎動かも知れないね,と.
ひとつは,個人のエンパワーメントという観点.これはまさにLinuxもそうであるように,昔はOSというと何万人年も投資して巨大企業がつくるものだったのが,ひとりでしこしこ2年も頑張れば動くものを作れちゃうよ,という話.Linusだって最初は世界を変えようなんて大げさな話ではなく,386のメモリモードを色々遊んでみようというのが高じてOSをつくったという逸話もあるし,日本でもちょっとした技術者が腕試しとして試せるくらい,OS研究の敷居は低くなったのだろう.
Cygwinをはじめとしたフリーな開発環境の充実や,BochesやVMWare,Virtual PCといった仮想化環境の普及によってOSの単体PCでの開発が容易になったことも見逃せない.廉価なPC/AT互換機とMinixLinuxを産んだように,QemuCygwinがOS開発をカジュアルにしたのだろう.
それでもOSの開発は非常に難儀なものだし,他に何かOSがアツくなる理由のようなものがないと,ここへ来て再び解説書が増えてきたり,OS開発を志すひとが増えている理由を説明できない.やっぱりこれは何かの胎動ではないか.
ここからは完全に仮説だが,僕個人は再びOSのアーキテクチャを大きく変える地殻変動が起きつつあるのではないかと考えている.理由は大きく分けて4つ

  • セキュリティ対策
  • 仮想化技術の普及
  • バイスインターフェースの集約
  • マルチコア・メニーコア・専用プロセッサの普及

である.
まずセキュリティ対策.これはOSに対する要求を大きく変える.これまで性能と柔軟性を考えると,UNIXに倣って2層のメモリ保護を使ってCでゴリゴリ書くのが基本だった訳だが,Cで書いている限りデータ保護にも正規的検証を適用しようにも限界がある.データ保護の面では数多あるJava OSやCooSのように強く型付けされた言語でシステムを記述したり,もう一歩踏み込んでSingularityのように全てのプロセス間通信を強く型付けされたメッセージパッシングに置き換えて,システム記述言語と仕様記述やモデリングを連携させる試みが増えてくるのではないか.*1
次に仮想化技術の普及.これはOS開発の敷居を下げるだけでなく,いずれハイパーバイザ技術が普及すれば用途に合わせてOSを使い分けることが普通になる.仮に十分なアプリケーション資産や,既存ソフトウェアに対する情報互換性がなくても,性能や機能の面で長けた専用OSが特定用途向けにVM上で稼働するケースが増えてくるのではないだろうか.
3番目にデバイスインターフェースの集約について.新規OS開発でボトルネックとなるのはどうしても多様なデバイスをどうサポートするか,所謂デバイスドライバの開発コストだが,PC環境に限ればサポートすべきデバイスの数は大幅に減っている,USBやSerial-ATAなど,多くのデバイスが専用のデバイスドライバを必要としない汎用I/Fを用意している.また,既存OSとの共存を前提とするのであれば,仮想化環境の提供するデバイスI/Fだけ提供すればよいという割り切りも可能だ.
最後にマルチコア,メニーコア,専用プロセッサの普及.マルチコアやメニーコアは確実にプログラミング・パラダイムを変えるだろう.「Cで記述され2層のメモリモデルを持つ少数MPU上で動く時分割システム」という今のOSの基本は1970年代にAT&TUNIXで確立した*2訳だが,当時は少数の単一アーキ汎用プロセッサ,均一かつ希少なメモリ空間,狭帯域低遅延,少ないトランジスタ数という制約条件だったのが,気付いたら多数のプロセッサ,不均一かつ広大なメモリ空間,広帯域高遅延,トランジスタの集積は可能だが廃熱が課題という,異なるバランスに移行しつつある.まだ誰も,この制約条件を活かしきったOSアーキテクチャやプログラミング・パラダイムを開発していない.
という訳で,最初はOSの勉強って案外難しいよね,だってOSなんて地味じゃんという愚痴のつもりだったのだけど,ダラダラ書いているうちに,実はOSへの関心は高まりつつあるし,ここ20年近くのOS研究の停滞を脱する時期も近づいているんではないかという楽観的な期待を持ち始めている.

*1:Singularityのすごいところは,プロセス境界を仮想記憶に依存しないことでマイクロカーネルで一般に問題となるメッセージパッシングのオーバーヘッドをなくし,さらに全てのメッセージパッシングを強く型付けし,状態遷移を仕様記述言語で定義するようにして,実装から仕様記述,モデル検証まで一貫して行う仕組みをつくったこと.これほど重そうな仕掛けを用意しながら,ベンチマークでは既存OSと充分に競争できる速度を実現している点にある

*2:汎用機のメモリモデルは知らない.AS/400の永続記憶は斬新で興味深い仕掛けだが広まらなかった.Multicsは4階層のメモリモデルを持っていて,これがx86アーキテクチャがリング0〜3の4階層のメモリ保護を持つ所以.但し他のプロセッサの多くが2階層のメモリモデルしか持たないので,移植性を保つためにリング1,2は使わないOS実装が一般的