web-dev-qa-db-ja.com

オペレーティングシステムのプログラミング方法

私はコーディングが大好きですが、現在はWeb開発のみを行っています。ユニークで楽しく、ウェブプログラミングとはまったく異なる何かをしたいと思います。

ええ、これは馬鹿げた質問かもしれませんが、本当にシンプルなオペレーティングシステムを構築するのは本当にクールだと思います。だから失礼なことは言わないでください。次のことを知りたいだけです。

*どこから始めれば? *リソース*どの言語を使用しますか?

私はcmdベースのようなシンプルなものを考えていました

33
Kevin

オペレーティングシステムの設計に関する絶対的な「聖書」は、アンドリュータネンバウムの オペレーティングシステムの設計と実装 -「ドラゴン」の本です:-)

alt text

他にも多くの参考文献があります。 独自の32ビットオペレーティングシステムの開発

Microsoft Researchには、マネージコード(C#)で Singularity と呼ばれるオペレーティングシステムを作成するプロジェクトがあります。

しかし、完全なOSを書くことは簡単な作業でも簡単な作業でもありません。

19
marc_s

Webdevからバックエンドに切り替えるのは非常にイライラするでしょう。

まず、ボード/ハードウェア/アーキテクチャを選択します-マシンで実行できるOSシミュレーターを使用することもできます。 OSを構築するCPUアーキテクチャに応じて、Cといくつかのアセンブリ(Intel、MIPS、ARM、coldfire/motorolla 68k)を学びます。

C++でOSを作成し、それを自動的にアセンブリに変換できるC++パッケージを見てきましたが、それらを適切に変換するのは非常に頭痛の種です。私はそれらをお勧めしません。

コードを書き始める前に、OSを設計する必要があります。たぶん、いくつかの図も含めて50ページの紙にデザインの決定を入れてください。

考慮すべき点:

  • メモリマップ(メモリの正確な場所はOSの一部をロードします。どこに常駐しますか)
  • スケジューラがどのように機能するか(プロセスおよび/またはスレッド対応、優先度)。おそらく、さまざまな優先度のキューを持つダイアグラム。さまざまなキュー(準備完了、ブロック、msg待機、実行中、実行中、中断など)のプロセス状態の図
  • プロセス間通信を行う方法(メールボックス、ミューテックス、原子性、同期通信と非同期通信、message envelopes {sender process id, receiver process id, message type, message}の形式)
  • カーネルモードとユーザーモードの処理方法
  • メモリ割り当てアルゴリズム-独自のmalloc/free演算子を作成します(ユーザーがメモリを動的に割り当てるときにどのように追跡しますか?バディツリーアルゴリズムを使用しますか?リンクリスト?スタック?など)
  • 割り込みの処理方法(コンテキストスイッチもここに入ります-どのようにすべてのレジスタを保存して復元しますか:1つのスタックがあり、そこにいる場所を追跡する必要があります)
  • 標準プロセス:キーボードプロセス、モニター出力、タイミング、
  • タイミングサービスを追加する方法
  • ユーザープロセスをロードして実行する方法
  • プリエンプションを追加するかどうか
  • ホットキーを追加します(OSをデバッグするのに便利です。フリーズした場合、メモリを検査するためにホットキーを追加できます)。
  • oSをテストする

EDIT-URL update独自の32ビットオペレーティングシステムの開発は絶版ですが、オンラインで利用可能です: http://www.ipdatacorp .com/mmurtl/mmurtlv1.pdf

9
Adrian

開始するためのリンクを次に示します。

http://www.brokenthorn.com/Resources

http://wiki.osdev.org/Main_Page/

GCCとNASMが必要です。 GASMも使用できると思います。

BIOS割り込みを学習します。

また、APIC A20 Gate PCI&PCIExなどの一連の標準を入手する前に、それらのいずれかを取得しようとしています。多少の変更が必要です。 Intel&AMD-これらを見てください。多くの情報が得られます。 VGA ATA&SATAなど...たくさんあります。

また、bochsおよびqemuのようなエミュレーターを入手します。

コンピューターがどのように機能するか、つまり、どのように起動するかを理解します。

そこにはたくさんの情報があります、あなたはあなたの研究をしなければなりません。

幸運を。

5
Matthew Hooker

Tanenbaumsの Modern operating systems のようないくつかのオペレーティングシステムの本を読むことから始めます。

これにより、オペレーティングシステムを作成するために解決する必要がある問題を理解できます。

3
Oded

あなたがそれらをグーグルで検索するとき、かなりのリソースがありますが、私はあなたにnotをお勧めします!

たとえ簡単なものであっても、OSを作成するには、コンピューターが低レベルでどのように機能するかを十分に理解する必要があります。また、少なくともCまたはC++、できればアセンブリも必要です。これらのスキルがなければ、退屈でイライラするプロジェクトになります。熟練したCプログラマーにとっても困難でやりがいがあります。

2
GolezTrol

OSの記述は困難です。 OS開発者になる前に開発者になることをお勧めします。基本的なオペレーティングシステムを作成するには、C/C++とアセンブリを知る必要があります。 OSの作成方法、つまりカーネルの種類、リアルモードまたは保護モード、メモリマップなどを考える必要があります。

2
PersonMan

Andrew S. Tanenbaum workを探索し始めた方がいいと思います。

2
Pradeep