| ミニックス3 | |
|---|---|
| 開発者 | Andrew S. Tanenbaum他 |
| 書かれた | C、アセンブリ言語 |
| OSファミリー | Unixライク |
| 作業状態 | 製造中止 |
| ソースモデル | オープンソース |
| 初回リリース | 2005年10月24日 |
| 最新リリース | 3.3.0 / 2014年9月16日 |
| 最新プレビュー | 3.4.0 rc6 / 2017年5月9日 |
| リポジトリ | |
| マーケティングターゲット | 組み込みシステム、教育 |
| 入手可能な | 英語 |
| サポートされているプラットフォーム | IA-32、ARM |
| カーネルタイプ | マイクロカーネル |
| ユーザーランド | Minix、NetBSD |
| デフォルトの ユーザーインターフェース | 灰 |
| ライセンス | 2005: BSD-3-Clause [ a ] [ 1 ] オリジナル: BSD-3-Clause |
| 先行 | Minix 1.0、1.5、2.0 |
| 公式サイト | www.minix3.org |
Minix 3は、 Unixライクな 小型オペレーティングシステムです。BSD -3条項[ a ]ライセンスの下で公開されており、以前のバージョンであるMinix 1および2の後継プロジェクトです。[ 1 ]
このプロジェクトの主な目標は、ユーザーの介入なしにシステムの障害を即座に検出・修復することで、フォールトトレランスを実現することです。このシステムの主な用途は、組み込みシステムと教育分野を想定しています。[ 2 ]
2017年現在[アップデート]、Minix 3はIA-32およびARMアーキテクチャプロセッサをサポートしています。[ 3 ]また、 Bochs、[ 4 ] [ 5 ] VMware Workstation、[ 6 ] Microsoft Virtual PC、[ 7 ] Oracle VirtualBox、[ 8 ] QEMUなどのエミュレーターや仮想マシンでも実行できます。PowerPCアーキテクチャへの移植は開発中です。[ 9 ]ディストリビューションはライブCDで提供され、ライブUSBインストールはサポートされていません。[ 10 ]このプロジェクトは2018年後半から休止状態になっており、[ 11 ]最新リリースは2017年の3.4.0 rc6ですが、[ 12 ] Minix 3ディスカッショングループはまだアクティブです。[ 13 ]
Minix 3は、SkylakeおよびKaby Lakeプロセッサで使用されるME 11の導入から始まり、IntelのPlatform Controller Hubに搭載されているIntel Management Engine (ME)OSに影響を与えたと考えられています。 [ 14 ] [ 15 ] Intel MEでの使用により、MinixはMicrosoft Windows、Linux、 macOSよりも多くのインストールがあり、 x86 / AMD64プロセッサで最も広く使用されているOSになる可能性があると議論されました。[ 16 ]
プロジェクトの目標
[編集]
Minixの開発者Tanenbaumによると、ドライバ(通常のプログラムの約3~7倍のバグを持つ)[ 17 ]がシステム全体をダウンさせる可能性があるというモノリシックカーネルベースのシステムの性質を反映して、 [ 18 ] Minix 3は「信頼性が高く、自己修復機能を備えたマルチサーバUnixクローン」となるオペレーティングシステムの作成を目指しています。[ 19 ]
これを実現するには、カーネル内で実行されるコードは最小限に抑え、ファイルサーバー、プロセスサーバー、そして各デバイスドライバーをそれぞれ独立したユーザーモードプロセスとして実行する必要があります。各ドライバーは、システムの一部である「再生サーバー」によって厳密に監視されています。このサーバーからのpingに応答しないドライバーはシャットダウンされ、新しいドライバーのコピーに置き換えられます。
モノリシックシステムでは、ドライバのバグによってカーネル全体が簡単にクラッシュする可能性があります。Minix 3では、このような事態が発生する可能性ははるかに低くなります。[ 20 ]
歴史
[編集]| バージョン | 発売日 | 説明 |
|---|---|---|
| 3.1.0 ( OSDI3 ) | 2005年10月18日 | |
| 3.1.1 (SOSP) | 2005年10月24日 | |
| 3.1.2 | 2006年4月18日 | |
| 3.1.2a | 2006年5月29日 |
|
| 3.1.3 | 2007年4月13日 | |
| 3.1.3a | 2007年6月8日 |
|
| 3.1.4 | 2009年6月9日 | |
| 3.1.5 | 2009年11月5日 |
|
| 3.1.6 | 2010年2月8日 |
|
| 3.1.7 | 2010年6月16日 |
|
| 3.1.8 | 2010年10月4日 | |
| 3.2.0 | 2012年2月29日 |
|
| 3.2.1 | 2013年2月21日 |
|
| 3.3.0 [ 27 ] | 2014年9月15日 |
|
| 3.4.0 rc6 | 2017年5月9日 |
|
| ||
Minix 3は、2005年10月24日、アンドリュー・タネンバウム氏によって、 ACM( Association for Computing Machinery)シンポジウム「オペレーティングシステム原則」カンファレンスの基調講演で発表されました。タネンバウム氏とウッドハル氏の教科書の新版のサンプルとして現在も使用されていますが、「リソースが限られた組み込みコンピュータや高い信頼性が求められるアプリケーションで本格的なシステムとして使用できる」よう、全面的に再設計されています。
当初は2000年からMinixがライセンスされていたのと同じBSD-3条項ライセンスの下でリリースされました。 [ 23 ] [ 24 ] 2005年後半に著作権者が変更され、4番目の条項が追加されました。[ 1 ] [ 25 ] [ 28 ]
信頼性ポリシー
[編集]Minix 3の主要な目標の一つは信頼性です。以下では、信頼性を高めるための重要な原則をいくつか説明します。
カーネルサイズを縮小する
[編集]LinuxやFreeBSDなどのモノリシックOSや、 WindowsのようなハイブリッドOSは、数百万行に及ぶカーネルコードを持っています。対照的に、Minix 3の実行可能カーネルコードは約6,000行であり、[ 29 ]コード内の問題を発見しやすくなります。
虫を檻に入れる
[編集]モノリシックカーネルでは、デバイスドライバはカーネル内に存在します。そのため、新しい周辺機器がインストールされると、未知の信頼できないコードがカーネルに挿入されます。ドライバ内の1行のコードがシステムダウンを引き起こす可能性があります。
その代わりに、Minix 3では、各デバイスドライバは独立したユーザーモードプロセスです。ドライバは特権命令の実行、ページテーブルの変更、任意の入出力(I/O)の実行、絶対メモリへの書き込みを行うことはできません。これらのサービスを実行するにはカーネル呼び出しを行う必要があり、カーネルは各呼び出しの権限を確認します。
ドライバーのメモリアクセスを制限する
[編集]モノリシック カーネルでは、ドライバーがメモリの任意のワードに書き込むことができるため、ユーザー プログラムを誤って破損する可能性があります。
Minix 3では、ユーザーが例えばファイルシステムからデータを取得する場合、誰がどのアドレスにアクセスできるかを示す記述子を作成します。次に、この記述子へのインデックスをファイルシステムに渡し、ファイルシステムはそれをドライバに渡す場合があります。すると、ファイルシステムまたはドライバはカーネルに記述子経由で書き込みを要求し、バッファ外のアドレスへの書き込みを不可能にします。
悪いポインタを乗り越える
[編集]ドライバ内で不正なポインタを参照すると、ドライバプロセスがクラッシュしますが、システム全体には影響しません。再創造サーバーはクラッシュしたドライバを自動的に再起動します。一部のドライバ(ディスクやネットワークなど)では回復に気づかないかもしれませんが、他のドライバ(オーディオやプリンターなど)では回復に気づく可能性があります。モノリシックカーネルでは、ドライバ内で不正なポインタを参照すると、通常はシステムクラッシュが発生します。
無限ループを抑える
[編集]ドライバが無限ループに陥ると、スケジューラはドライバの優先度を徐々に下げ、最終的にはアイドル状態になります。最終的に、再創造サーバはドライバがステータス要求に応答していないことを認識し、ループしているドライバを強制終了して再起動します。モノリシックカーネルでは、ループしているドライバはシステムをハングさせる可能性があります。
バッファオーバーフローによる被害を制限する
[編集]Minix 3は内部通信に固定長メッセージを使用することで、特定のバッファオーバーフローやバッファ管理の問題を排除しています。また、多くのエクスプロイトはバッファオーバーランによって、攻撃者が管理するメモリ(通常はオーバーランバッファ)を指す上書きされたスタックリターンアドレスを使用してプログラムを関数呼び出しから復帰させることで機能します。Minix 3では、命令空間とデータ空間が分割され、(読み取り専用)命令空間内のコードのみが実行可能になるため、この攻撃は軽減されます。これは実行可能空間保護と呼ばれます。しかし、悪意のある方法で合法的に実行可能なメモリを実行することに依存する攻撃(return-to-libc、リターン指向プログラミング)は、この軽減策では防ぐことができません。
カーネル関数へのアクセスを制限する
[編集]デバイスドライバは、カーネル呼び出しを行うことでカーネルサービス(例えば、ユーザーのアドレス空間へのデータのコピーなど)を取得します。Minix 3カーネルでは、各ドライバごとに、どの呼び出しが許可されているかを示すビットマップが存在します。モノリシックカーネルでは、すべてのドライバは、許可されているかどうかにかかわらず、すべてのカーネル関数を呼び出すことができます。
I/Oポートへのアクセスを制限する
[編集]カーネルは、各ドライバがアクセスできるI/Oポートを示すテーブルも保持しています。そのため、ドライバは自身のI/Oポートにしかアクセスできません。モノリシックカーネルでは、バグのあるドライバが別のデバイスのI/Oポートにアクセスできてしまうことがあります。
OSコンポーネントとの通信を制限する
[編集]すべてのドライバとサーバーが、他のすべてのドライバとサーバーと通信する必要はありません。したがって、プロセスごとのビットマップによって、各プロセスが送信できる宛先が決まります。
死んだドライバーや病気のドライバーを再生する
[編集]再創造サーバーと呼ばれる特別なプロセスが、各デバイスドライバーに定期的にpingを送信します。ドライバーが故障したり、pingに正しく応答しなくなったりした場合、再創造サーバーは自動的に新しいコピーに置き換えます。動作していないドライバーの検出と置き換えは自動的に行われるため、ユーザーの操作は必要ありません。この機能は現在ディスクドライバーには対応していませんが、次期リリースでは、ランダムアクセスメモリ(RAM)にシャドウイングされたディスクドライバーも復元できるようになります。ドライバーの復元は実行中のプロセスには影響しません。
割り込みとメッセージを統合する
[編集]割り込みが発生すると、低レベルで適切なドライバに通知が送信されます。ドライバがメッセージを待機している場合は、即座に割り込みを受け取ります。そうでない場合は、次にRECEIVEメッセージを取得しようとしたときに通知を受け取ります。この仕組みにより、割り込みのネストがなくなり、ドライバプログラミングが容易になります。
建築
[編集]
ご覧のとおり、最下層にはマイクロカーネルがあり、これは約4,000行のコード(主にC言語で記述され、少量のアセンブリ言語も含まれています)で構成されています。マイクロカーネルは、割り込み、スケジューリング、メッセージパッシングを処理します。また、承認されたサーバーとドライバーが実行できる約30のカーネル呼び出しからなるアプリケーションプログラミングインターフェース(API)もサポートしています。ユーザープログラムはこれらの呼び出しを行うことはできませんが、代わりにPOSIX システムコールを発行してサーバーにメッセージを送信することができます。カーネル呼び出しは、割り込みの設定やアドレス空間間のデータのコピーなどの機能を実行します。
次のレベルにはデバイスドライバがあり、それぞれが独立したユーザーランドプロセスとして実行されます。各ドライバはディスクやプリンタなどのI/Oデバイスを制御します。ドライバはI/Oポート空間にアクセスできず、I/O命令を直接発行することはできません。代わりに、書き込み先のI/Oポートと書き込む値のリストを指定してカーネル呼び出しを行う必要があります。この処理にはわずかなオーバーヘッド(通常500ナノ秒)が発生しますが、この仕組みによりカーネルによる権限チェックが可能になり、例えばオーディオドライバがディスクに書き込むことができないようにすることができます。
次のレベルにはサーバーがあります。ほぼすべてのオペレーティングシステム機能はここにあります。ユーザープロセスは、例えばファイルサーバーにメッセージを送信することでファイルサービスを取得し、ファイルのオープン、クローズ、読み取り、書き込みを行います。一方、ファイルサーバーはディスクを制御するディスクドライバーにメッセージを送信することでディスクI/Oを実行します。
重要なサーバーの一つが、再創造サーバーです。その役割は、他のすべてのサーバーとドライバーを定期的にポーリングし、健全性を確認することです。コンポーネントが正しく応答しなくなったり、終了したり、無限ループに陥ったりした場合、再創造サーバー(ドライバーとサーバーの親プロセス)は、障害のあるコンポーネントを強制終了し、新しいコピーに置き換えます。このようにして、システムは実行中のプログラムに影響を与えることなく、自動的に自己修復を行います。
現在、リインカーネーションサーバー、プロセスサーバー、マイクロカーネルはトラステッドコンピューティングベースの一部です。これらのいずれかに障害が発生すると、システムはクラッシュします。しかし、トラステッドコンピューティングベースをLinuxやWindowsシステムのような300万~500万行のコードから2万行程度に削減することで、システムの信頼性は大幅に向上します。[要出典]
Minix 3と以前のバージョンの違い
[編集]
Minix 1.0、1.5、および 2.0 は、オペレーティング システムの設計について学習するのに役立つツールとして開発されました。
1987年にリリースされたMinix 1.0は、12,000行のC言語とx86アセンブリ言語で構成されていました。本書には、Minix 1.0のカーネル、メモリマネージャ、ファイルシステムのソースコードが掲載されています。タネンバウムは当初、当時入手可能だったIBM PCおよびIBM PC/AT マイクロコンピュータとの互換性を目的としてMinixを開発しました。
1991年にリリースされたMinix 1.5は、 MicroChannel IBM PS/2システムのサポートに加え、 Motorola 68000およびSPARCアーキテクチャにも移植され、Atari ST、Commodore Amiga、Apple Macintosh、Sun Microsystems SPARCstationといったコンピュータプラットフォームをサポートしました。SunOS上でユーザープロセスとして動作するMinixのバージョンも提供されていました。
1997年にリリースされたMinix 2.0は、x86およびSolarisホストのSPARCアーキテクチャでのみ利用可能でした。Minix -vmdは、フリー大学の2人の研究者によって開発され、仮想メモリとX Window System (X11)のサポートを追加しました。
Minix 3も同様であり、多くの新しいツールと多くのUnixアプリケーションを備えた最新のオペレーティングシステムを提供します。[ 30 ] Tanenbaum教授はかつて次のように述べています。
MINIX 3は祖父の時代のMINIXではないことにご注意ください。MINIX 1は教育ツールとして開発されました。MINIX 3はそれに加えて、信頼性が高く、自己修復機能があり、無駄のないオペレーティングシステムの構築の第一歩を踏み出したものです。MINIX 1とMINIX 3は、Windows 3.1とWindows XPが同じ名前であるのと同じように関連しています。[ 19 ]
Minix 2のリリース以降、カーネルの構造にも多くの改良が加えられ、システムの信頼性が向上しました。[ 31 ]

Minixバージョン3.1.5は2009年11月5日にリリースされました。X11 、Emacs、vi、cc、GCC、Perl、Python、Almquistシェル、Bash、Zシェル、FTPクライアント、SSHクライアント、Telnetクライアント、Pine、その他400以上の一般的なUnixユーティリティプログラムが含まれています。X11の追加により、このバージョンはテキストのみのシステムからの移行を示しています。このバージョンのもう1つの機能は、システムがデバイスドライバのクラッシュに耐える能力であり、多くの場合、実行中のプロセスに影響を与えることなく自動的に置き換えられます。このように、Minixは自己修復性があり、高い信頼性が要求されるアプリケーションで使用できます。
Minix 3.2.0は2012年2月にリリースされました。このバージョンには、Clangコンパイラ、実験的な対称型マルチプロセッサのサポート、procfsおよびext2fsファイルシステムのサポート、GNUデバッガ(GDB)など、多くの新機能が含まれています。また、ブートローダ、 libc、各種ユーティリティ、その他のライブラリなど、 NetBSDのいくつかのコンポーネントもこのリリースに統合されています。[ 32 ]
Minix 3.3.0は2014年9月にリリースされました。このリリースは、x86に加えてARMアーキテクチャをサポートする最初のバージョンです。また、 NetBSD ユーザーランドもサポートしており、数千ものNetBSDパッケージがすぐに実行できます。
マスコット
[編集]
ロッキー・ラクーンはMinix 3のマスコットです。[ 33 ]
ミニックスコン
[編集]MINIXCon は、Minix に関連する講演、取り組み、研究を共有するカンファレンスです。
2016年に1回開催されました。[ 34 ] MINIXCon2017は提出された講演の不足により中止されました。[ 35 ]
参照
[編集]注記
[編集]参考文献
[編集]- ^ a b c 「Minixライセンス」 。 2005年11月24日時点のオリジナルよりアーカイブ。2005年11月24日閲覧。
- ^ corbet (2005年10月24日). 「Minix 3がネットに登場」 . Lwn.net . 2014年5月1日閲覧。
- ^ "minix3.org" . minix3.org . 2017年4月16日閲覧。
- ^ 「Mac OS上のBochsでMinixを使い始める」 Woodhull.com 。 2014年5月1日閲覧。
- ^ "OSNews.com" . OSNews.com . 2014年5月1日閲覧。
- ^ 「VMWare環境でのMinixのインストール方法」 Patrick.wagstrom.net。2013年11月12日時点のオリジナルよりアーカイブ。2014年5月1日閲覧。
- ^ 「Virtual PC上のMinix:初見」 Woodhull.com 。 2014年5月1日閲覧。
- ^ 「Virtual box上のMinix 3」 inopinion.org、2014年8月6日。
- ^ Alting, Ingmar. 「MINIX OS の PowerPC プラットフォームへの移植」(PDF) .
- ^ "Minix3" . Minix3 . 2014年5月1日閲覧。
- ^ "git.minix3.org Git - minix.git/summary" . git.minix3.org . 2022年5月3日閲覧。
- ^ 「/Iso/Snapshot/ のインデックス」。
- ^ "minix3 - Google グループ" . groups.google.com . 2022年5月3日閲覧。
- ^ 「Intel ME:静的解析の方法」 blog.ptsecurity.com . 2017年7月1日時点のオリジナルよりアーカイブ。 2017年8月28日閲覧。
- ^ Corna, Nicola (2017年8月28日). 「me_cleaner: Intel ME/TXEファームウェアイメージの部分的デブロビングツール」 . GitHub . 2017年8月28日閲覧。
- ^ Tanenbaum, Andrew S. 「Intelへの公開書簡」 . 2022年6月17日時点のオリジナルよりアーカイブ。 2022年9月6日閲覧。
- ^ Tanenbaum, Andy (2006-09-25). 「MINIX 3 入門」 . OSnew . OSnews . 2008-07-04閲覧.
Rebirth
セクションより
:「様々な調査によると、ソフトウェアには概ね1000行のコードあたり6~16個のバグが含まれており、デバイスドライバにはオペレーティングシステムの他の部分よりも3~7倍のバグが含まれていることが示されています。一般的なオペレーティングシステムの70%がデバイスドライバで構成されているという事実と合わせると、デバイスドライバが大きなトラブルの原因となっていることは明らかです。Windows
XP
では、クラッシュの85%がデバイスドライバのバグが原因です。OS の信頼性を高めるには、バグのあるデバイスドライバに対処する必要があることは明らかです。デバイスドライバの避けられないバグにもかかわらず、信頼性の高いシステムを構築することが、Minix 3 の原動力でした。」
- ^ 「CSAILイベントカレンダー」 . Csail.mit.edu. 2012年2月4日時点のオリジナルよりアーカイブ。2014年5月1日閲覧。
- ^ a b 「Tanenbaum-Torvalds debate, Part II」 . Cs.vu.nl. 2006年5月12日. 2014年5月1日閲覧。
- ^ 「信頼性」 . www.MINIX3.org . 2006年7月1日時点のオリジナルよりアーカイブ。
- ^ "MinixReleases – Minix Wiki" . Wiki.minix3.org . 2014年5月1日閲覧。
- ^ 「Minixのバージョンと教育におけるその利用」 。 2006年7月11日時点のオリジナルよりアーカイブ。2021年6月16日閲覧。
- ^ a b "LICENSE (3.1.0)" . GitHub . 2021年6月16日閲覧。
- ^ a b 「LICENSE (3.1.1)」 . 2021年6月16日閲覧。
- ^ a b "LICENSE (3.1.2)" . GitHub . 2021年6月16日閲覧。
- ^ Swift, Björn Patrick. 「Minix 3における個別プログラミング割り当てのユーザーモードスケジューリング」(PDF) . Minix3.org.
- ^ MINIX リリース 3.3.0
- ^ 「Minix1: 複製と使用ポリシー」 2007年2月13日. 2020年6月14日時点のオリジナルよりアーカイブ。
- ^ 「MINIX 3オペレーティングシステム」 . minix3.org . 2012年1月13日時点のオリジナルよりアーカイブ。
- ^ "FAQ – Minix Wiki" . Minix3.org。 2013-11-09 。2014 年 5 月 1 日に取得。
- ^ 「V2以降の改善点」 www.minix3.org . 2006年4月17日時点のオリジナルよりアーカイブ。
- ^ "MINIX Releases" . wiki.minix3.org . 2012年6月21日時点のオリジナルよりアーカイブ。 2012年2月29日閲覧。
- ^ "マスコット [Wiki]" . wiki.minix3.org . 2017年7月20日閲覧。
- ^ “MINIXCon 2016のビデオがオンラインになりました” . www.minix3.org . 2016年3月10日. 2021年5月15日時点のオリジナルよりアーカイブ。2025年6月11日閲覧。
- ^ “Minix3” . 2017年9月5日時点のオリジナルよりアーカイブ。
さらに読む
[編集]- Tanenbaum, Andrew S. ; Woodhull, Albert S. (2006年1月14日). 『オペレーティングシステム:設計と実装(第3版)』Prentice Hall . ISBN 0-13-142938-8。
- 信頼できるオペレーティングシステムの構築: MINIX 3 におけるフォールトトレランス(Jorrit N. Herder 著、PDF)
- Jorrit N. Herder、Herbert Bos、Ben Gras、Philip Homburg、Andrew S. Tanenbaum 著『信頼性のための Unix の再編成』 (PDF)
- MINIX 3 でのモジュラー システム プログラミング(Jorrit N. Herder、Herbert Bos、Ben Gras、Philip Homburg、Andrew S Tanenbaum 著) (PDF)
- JN Herder他「MINIX 3におけるモジュラーシステムプログラミング」、Login、2006年4月(PDF)
- Pablo A Pessolani. MINIX4RT: MINIXベースのリアルタイムオペレーティングシステム 2023年6月7日アーカイブ - Wayback Machine
- MINIX 3 オペレーティングシステム用パフォーマンス測定ツールの構築、Rogier Meurs 著(PDF)
- MINIX 仮想ファイルシステムの設計と実装(PDF)
- MINIX 3 カーネル API リファレンスマニュアル(PDF)
- 真のマイクロカーネル オペレーティング システムに向けて(PDF)
- 高信頼性オペレーティングシステムの構築(PDF)
- Minix 3 とマイクロカーネルの体験: Rüdiger Weis 著「Smart Kernel」(PDF)
- Cristiano Giuffrida による安全で自動的なライブアップデート(PDF)