世界最小のオペレーティングシステムはどれですか?


ベストアンサー

オペレーティングシステムの意味によって異なります。私はかつて、ラウンドロビン方式で複数のプロトコルセッションを実行する単純なキューイングシステムを作成しました。ただし、標準のオペレーティングシステムで実行されていました。マイクロコントローラーが組み込みシステム向けに最初に登場したとき、エンジニアは通常、他の回答の1つに示されているように、独自の基本的なOSを作成しました。

マルチタスク動作の基本機能を備えた、私が使用した最小の便利なオペレーティングシステム-既製のシステムはQNXと呼ばれていました。これは、縮小されたUnixシステムであり、最初のIBMPCで実行されました。派手なグラフィックはありませんでしたが、ソフトウェア開発は快適に行えました。実際、最新のマシンとの唯一の本当の違いは、色とグラフィックスを備えたユーザーインターフェイスでした。したがって、基本的にIBMによるDOSの導入により、コンピューター業界は少なくとも10年前に戻りました。周りには(適応された可能性のある)優れたオペレーティングシステムがいくつかありましたが、もちろん当時はUnixが標準を設定して開発されていました。

回答

開発を終えたばかりです学校での最後の学期中のクラスのカーネル( CS-4284 Systems&Networking Capstone )。以前は、OSデザイナーの観点からではなく、プログラマーの観点からOSを操作することを目的としたOSクラスを受講しました。過去1年半の間、OSとカーネルの開発に携わっていました(そうではありません)。長い間、私は「たくさんのことを学びました)、ここに私がお勧めするものがあります:

1。マスターC これ以上強調することはできません。いいえ、マスターしてください。 OSの開発は大変です。 Cをマスターするために本当に必要な概念がたくさん含まれているので、邪魔になりません。たとえば、Unixパイプ(シェルで|と入力)を取り上げます。 OSでパイプを開発するには、OSのファイルシステムとファイル構造を十分に理解する必要があります。これは典型的な制限付きバッファの問題(消費者/プロデューサー)であり、すべての同期を処理する必要があります。仮想メモリを書き込むときは注意する必要があります。さらに、Unixは通常BYOB(独自のバッファを持参)です。ユーザーが提供したバッファなどを適切に管理する必要があります…ここで最後に実行したいのは、ポインタやメモリ管理などの基本的なCの問題に対処することです(注:OSでのメモリ管理はCメモリ管理よりも10倍難しい:ユーザーとカーネルのアドレススペースに注意する必要があります)

2。カーネルとOS カーネルとOSの違いを理解する必要があります。カーネルは本質的にOSの頭脳です。OSは一緒にバンドルされたアプリケーションのセットです。たとえば、Mac OS Xには、カーネル、インターフェイス(GUI)、組み込みの標準アプリケーション(Finder-これは単なる抽象化です。ファイルシステム、TextEdit、シェルなどを視覚化します…)

3。まっすぐに飛び込まないでください開始することは不可能です数日または数週間でカーネル開発を行うことをお勧めします。次のことから始めることをお勧めします。

  1. GCCのコンパイル手順(gccを実行するとどうなるか、実行可能ファイルがどのように生成されるか、プログラムを実行すると発生します)。Cで単純なアセンブラを作成することもできます(アセンブリコードを入力および出力マシンコードとして使用します。これには、アセンブリ内の.data、.text、および.bssセクションを理解する必要があります(非常に役立ちます)。 OS仮想メモリを理解するための道)また、マシンレベルのアドレス指定とブランチの解決方法についても理解します。
  2. machをよく理解してください。 ineレベルのツールとプログラム。爆弾実験室はたくさんの教材があるので、私はそれを行うことをお勧めします。ただグーグル爆弾ラボ。
  3. 基本的なOS攻撃についてよく理解してください。ポイント1(googleバッファオーバーフローラボ)と同じ理由で、バッファオーバーフローを確認することをお勧めします。
  4. Cでのシステムコール、スレッド、プロセスについて学びます。そこから、Cで独自のシェルを開発します。
  5. メモリ割り当てについて学び、Cでmallocとfreeを実装します。設計のトレードオフ、割り当て戦略、解放戦略などについて学びます…
  6. マルチスレッドとマルチプロセッシングについて学びますそこから、同期メカニズム(ロック、ミューテックス、セマフォ)に飛び込み、他のプログラムが使用できるCでスレッドプールを開発します。

4。これで、実際のOSカーネル開発を開始できますこの時点で、OSデザイナーとして実際のOSで開発を開始できます。 Google Stanford Pintosを使用すると、スタンフォードで開発された小さな教育用カーネルにアクセスできます。ドキュメントと4つのプロジェクトのセットが付属しています。ピントスの講義スライドがあるいくつかの学校をグーグルで検索できます。オペレーティングシステムの概念( Amazon.com:オペレーティングシステムの概念(9781118063330):Abraham Silberschatz、PeterBを購入することをお勧めします。ガルビン、グレッグガニア:本)。ドキュメントはかなりよく、プロジェクトはよく説明されています。 OSには、 `make check`を実行して実行できるテストも付属しているため、「適切に実行したかどうかを確認できます。

5.Linuxへの貢献を開始できますソースコードとLinuxの設計上の決定(Pintosよりもはるかに複雑です)を調べるのに多大な労力がかかりますが、現時点では、あなたは少なくとも始めることができます。もっと練習して読むことで、あなたはそれを拾うことができるでしょう。

私はちょうどステップ#4を完了しました。ステップ1から3が好きでしたが、率直に言って、4の途中で、OS開発にはそれほど興味がないことに気づきました。私は(プログラマーの観点から)プログラマーとしてOSを操作するのが好きでしたが、深く掘り下げることはあまり好きではありませんでした。しかし、私はカーネル開発から多くのことを学びました、そしてそれはあなたを多くのことにさらします。さらに、カーネルを作成できる場合は、そこにあるソフトウェアを作成します。 OSについての優れた洞察が得られるため、少なくとも最初の3つの手順を実行することを強くお勧めします。あなたは文字通り全体的に優れたソフトウェアエンジニアになります。高級言語をより理解することを学び、適切な仕事に適切なツール/言語/テクノロジーを使用する方法も学びます。

私はOS開発、プロジェクト、テストなどに関する多くの資料…興味があれば、コメントして知らせてください。初心者をOS開発に導くテスト環境を備えたオンラインのeBook / tutorial / guideをまとめることができます。取り組むプロジェクトとフィードバックを提供します。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です