Skip to content

OSパーソナリティ

oraccha edited this page Jan 15, 2013 · 1 revision

マイクロカーネル上に載せる一般的にいわれるOSとしての働きを提供する物。

まず,OSサーバの呼出しをシステムコールレベルで実現する方法と,ライブラリレベルで実現する方法がある(システムコールとライブラリ).

  • 前者はまずユーザタスクを execve(2) するときエミュレーションライブラリをユーザ空間にマップしておく.そして,システムコールが発行されたら,対応するエミュレーションライブラリに処理をリダイレクト(トランポリン)するようにカーネルに登録する(Mach だと task_set_emulation_vector).エミュレーションライブラリは IPC を使って OS サーバにリクエストを出す.
  • 後者は libc に手を入れることでシステムコールを発行することなく,直接 OS サーバにリクエストを投げる.libc に変更を加えるため,動的リンクでは問題ないが,静的リンクされたバイナリはエミュレートできない.

また,OSサーバの実装方式にはシングルサーバとマルチサーバの2種類が考えられる.

  • 前者はプロセス管理やファイルシステムを一つのタスクとして実装する方式で,UX,Lites,MkLinux などがそうである.
  • 後者はOSサーバを機能ごとに複数のタスクとして実装する方式で,US,HurdSawMill などがそうである.マルチサーバにすることでシステム構成が柔軟になるが,実装が複雑になったり,オーバヘッドが大きくなるという欠点がある.

OSサーバから取得したデータをキャッシュしておいたり,仮想記憶機構を利用して,OSサーバとユーザタスク間で共有メモリを利用したり,プロトコル処理をユーザタスクで行なうなどOSサーバとの通信を削減するようにチューニングできる.


とりあえず,MachUnixエミュレーション機構が有名.

  • Mach2.5(非マイクロカーネル)のころは,カーネル内にUnixシステムコールを実装していたみたい.つまり,MachネイティブとUnixの二本立て.Mach はシステムコールエミュレーション用に task_set_emulation,task_set_emulation_vector を提供している.

    • で,Mach3.0 でカーネルから追い出された 4.3 BSD 互換部分は UX と呼ばれるサーバになったらしい.
  • MacOSXもBSD互換システムコールをカーネル内に実装しているらしい.

    • というか FreeBSD みたいですね.コアチームの Jordan Hubbard 氏が Apple に雇われたしね.
  • [http://www.cs.cmu.edu/afs/cs/project/mach/public/www/doc/abstracts/mach3_intro.html Unix as an Application Program] (1990)

    • Unix アプリケーションにリンクされるエミュレーションライブラリと単一の 4.3BSD 互換サーバ.
  • [http://www.cs.cmu.edu/afs/cs/project/mach/public/www/doc/abstracts/dospaper.html DOS as a Mach 3.0 Application] (1991)

    • 他にもOS/2Spriteとか.Macもあったっかな?

Spring上におけるUnixの実装とか.

  • [http://www.sun.com/research/technical-reports/1992/abstract-3.html An Implementation of UNIX on an object-oriented operating system] (1992)
    • SunOS4.1のサブセットを実装.
  • UnixプロセスサーバとSpringネイティブなファイルサーバ,ネットワークサーバなど複数のサーバでエミュレーションを行なう.つまり,既存のSpringサーバ群を有効活用しようというアプローチ.
  • Unixバイナリにダイナミックリンクされるエミュレーションライブラリ(libue.so)によって,Unix固有のサービスをSpringオブジェクトへの要求に変換する.例えば,シグナルを転送したり,fdとSpringオブジェクトの対応付けなど.
  • このようなエミュレーションライブラリを用いる実装は,システムコールを単なる手続き呼出し化するため性能はよいが,アプリケーションのバグや悪意に対する保護の面で問題がある.

Chorusの場合

  • [http://www.scs.carleton.ca/~csgs/resources/chorus/CS-TR-92-50.ps Experience with SVR4 Over CHORUS] (1992)
  • プロセスマネージャ,ファイルマネージャ,ストリームマネージャなど複数のサーバから構成されるMiXと呼ばれるUnix(SVR4)サブシステムが存在する.
  • Unixシステムコールは必ずプロセスマネージャを経由して,他のマネージャに通知される.Springにおけるエミュレーションライブラリの機能をプロセスサーバが持っている.
  • また,MiXサーバをカーネル空間で実行させることもできる.

OS/390の場合

  • [http://www-1.ibm.com/servers/eserver/zseries/zos/unix/release/nmas.html OS/390 UNIX]

SPINの場合

  • [http://www.cs.washington.edu/research/projects/spin/www/papers/TR/UW-CSE-96-11-01.ps A User-Level Unix Server for the SPIN Operating System] (1996)
  • カーネルにMachエミュレーションモジュールをインポートし,ユーザレベルで(Machの)Unixサーバを動かす.

こんなのもありますコーナ

FreeBSDのLinuxモード

  • システムコールをトラップして,エミュレーションする基本的な動作はMachとかと同じだろうな.
  • システムコールのエミュレーションをUnixサーバで実行するか,カーネル内(大抵はLKM)で行うかの違い.
  • Linuxシステムコールのエントリはproc構造体経由で調べるらしい.

Linuxの UserModeLinux とか

WinNTのWin32/POSIXサブシステム

Cygwin


関係ないけど,Linuxのパーソナリティ

  • personality(2)
Clone this wiki locally