私は自分のOSカーネルを作るためにどのようなC++(プログラミングをやり直すべきですか)を学ぶ必要がありますか? (私もアセンブリを学ばなければならないことを知っています。) EDIT ***割り込みのように、キーボードドライバは、入力を取得します。自分のOSカーネルを作るためにどのようなC++を学ばなければならないでしょうか?
私は本当に* 3の基本的なOSを作りました。
ここに行きます。 Linuxの
私は自分のOSカーネルを作るためにどのようなC++(プログラミングをやり直すべきですか)を学ぶ必要がありますか? (私もアセンブリを学ばなければならないことを知っています。) EDIT ***割り込みのように、キーボードドライバは、入力を取得します。自分のOSカーネルを作るためにどのようなC++を学ばなければならないでしょうか?
私は本当に* 3の基本的なOSを作りました。
ここに行きます。 Linuxの
すべての http://bcsy.hostzi.com/BytOS.zip
コンパイル。これは簡単な作業ではなく、言語のほとんどの側面を学ぶ必要があります。カーネルプログラミングを調べることをお勧めします。私はそれを見て、プログラミング言語の論理理論とパラダイムを見つけてから、自分自身を構文に埋め込みます。ハードウェア層がありますので、あなたがこのサイトで取得しようとしている答えやGoogle検索を行うよりも、もっと学ぶ必要があります。
Good Luck!
今日の選択肢を考えれば、OSを「作る」という理由は絶対にありません。本当にうまく言語を学び、WindowsやLinuxのバリエーションで本当に快適になります。 CやC++は学ぶのが大好きです。
明確にするために編集 - 私の主張は、オペレーティングシステムを作成することで初めて言語を習得しようとするのは、非現実的で境界のない狂気であるということです。少なくとも、Cの本当に良いバックグラウンドが必要です。それ以外の場合は、アプリケーションを作成して、既存のOSのパワーを活用して自分自身を起動してください。
私はそれに同意できません、私は小さなOSを書いており、ファイルシステム、並行処理、同期プリミティブ、スレッドスケジューリング、I/Oと割り込みなどについて学ぶ素晴らしい方法です。 –
@David私は同意しますが、あなたがそれに取り組む前に、本当にうまく言語を学ばなければならなかったと思います。あなた自身のOSを書くことによって、言語を学ぼうとするのは難しいことです。 – Brandon
確かに、私はC(および組み立てのわずかなもの)が入っているというかなりの知識を持っていましたが、それはオペレーティングシステムをプログラムする理由がないことを意味するものではありません。 –
モノリシックカーネルの作成時にC++を使用することはお勧めしません。しかし、マイクロカーネルの設計を検討しているなら、カーネル自体をC /インラインasmで緊密に保ちながら、C++でサーバ(ネットワーキング、コンソール、fs、vfsなど)を書くことができます。
また、もしあなたがx86に向かうならば、それほど重要ではありません。
OSの設計目標は何ですか?
私はC++でOSカーネルを書いた友人がいる:
http://sourceforge.net/projects/ekp/
だから、それは間違いなく可能です。 (上記のコメントのいくつかは、それが不可能であると言う。間違っ。)
あなただけの権利で飛び込むと 「楽しいこと」を実装を開始できるように、あなたも、彼の ブートストラップを盗み、コードをビルドすることもできます。
チェックアウトnanoos、そのC++でのOSプロジェクト!あなたの質問への答えで
:
オペレーティング・システムは、(一般的に は、いずれかのOSやO/Sと略す)のハードウェアとアプリケーションの間の のインタフェースです。それは の活動とコンピュータの限定されたリソースの の共有の管理と調整を担当しています。 オペレーティングシステムは、 マシンで実行される アプリケーションのホストとして機能します。ですから、あなたのプログラム(OS)が実行されるハードウェアとやりとりすることを可能にするビットをC++で学ぶ必要があります。
次に、ハードウェアとのやり取りを超えてユーザーに使用する必要があります。そのために
、再び戻って出発点としてnanoosに試みられているものを参照してください(C++でOSを構築するかのC++学習ニーズが必然的に伴うため)nanoosで見つかっ
を読んで(または何特徴:
C++ランタイム
32ビット保護モード・メモリ・マネージャ
CPU検出、メモリの検出およびIDE ハードディスク検出
IDEハードディスクだけでOSが行うために必要なものをチェックアウトし、Operating Systemを書くために、基本的に
言語を考える前に、私はOSが何であるか理解しようとします。this is a great book:オペレーティングシステムの設計と実装。
alt text http://ecx.images-amazon.com/images/I/3125C47MR4L._SL500_AA180_.jpg
読んでください。幸運
私は、straight C for Kernel developmentをお勧めします。 OSの開発では、実際に何が起こっているのかを知りたがっています。私はC++が低レベルの開発にはあまりにも多くを隠していると感じています。
良いリソース:
多くの技術的理由から、LinuxはC言語以外の言語でプログラミングされていません。さまざまな政治的理由から、C++プログラムはほとんどありません。
約プログラミングカーネルを学びたい場合、Minixオペレーティングシステム/マイクロカーネルは、オペレーティングシステムの設計を学ぶために設計されています。それは小さく、最小です。これはC言語でもプログラムされています。
ちょうど好奇心から、その政治的な理由は何ですか? – Angela
Google for Linus TorvaldsのC++暴言と私はあなたが理解すると思います。 –
リュヌスの暴言はちょうど愚かなfudです:/ –
私が知っている重要なサイズの唯一のOSはC++でプログラミングされていて、AS/400オペレーティングシステムOS/400(v3r6以降)です。
C++でOSを実行することを妨げるものは何もありません。特に、バニラCは「ほぼ」有効なC++であることを思い出してください。興味深いのは、漏れなどがないことを保証する必要があるため、最低レベルでnew
/delete
を実行しています。これにより、new
関数を再実装する必要が生じます。
私はv3r6を手助けしましたが、それは約13年経ちましたが、毛深い詳細を覚えていません。私はそれに関する出版物を知らないが、あなたが本当に興味があるなら、http://www.parashift.comにマーシャル・クリンを書いてみてください。
(Augh。副 "自由" "削除"。)
new/deleteを実装するのは簡単ではなく、しばしばmalloc/freeの周りの短いラッパーになります。コンパイルはあなたのためのコンストラクタ/デストラクタコードを生成します。私は自分のC++ OSを持っています。/rtti.Ifもしあなたがそれらなしですることができます、起動し、実行する多くの仕事。 –
これはグローバルなコンストラクタ/デストラクタですが、 "main"の前に呼び出す必要があるので注意してください。もう一度、それを扱う5行の関数です。何も叙事詩ではありません。 –
Evanは、実際に低レベルの "ベアメタル"クラスの新規/削除を実装しています*ほんの些細なものではありません。特定の物理アドレスにマップする必要があるクラスに対しては、これは二重になります。 –
私はnachos(完全にない別のヒューリスティックオペレーティングシステム)を見てみ示唆しています。それは、私が大学のオペレーティングシステムコースで使ったOSです。
OSDev wikiをご覧ください。これは、C++を含む多くの言語でOSをプログラミングすることに関する素晴らしい情報源です。
具体的には、see thisセクションでは、gccを使用してC++カーネルを使用するために必要なことをすべて説明しています。
最後に、OSDev forumsをチェックしてください。初心者から高度な経験に至るまで、多くのユーザーがいます。
+1。 –
複雑な機能の基盤として使用されている「本当の」C++ベースのカーネルの例に興味があるなら、Laikka :: Pistachio、Haikuカーネル、またはSymbianのEKA2を見てみるのは良い考えです。オペレーティングシステム。
私は後者がよく構造化されており、非常に簡潔で読みやすいコードで構成されていることがわかりましたが、他の人はそれに反するかもしれません。しかし、現時点で(Symbian Foundationのウェブサイトは現在オフラインになっているので)現時点で入手してビルドするのは難しいですが、Google Codeのコピーはmirroredです。
L4Ka :: Pistachioが最も簡単なビルドカーネルの1つになっていますが、上位レベルのコンポーネントのカスタマイズと実装は別の方法です - Genodeはすぐに有望なルートのようでした私がそれをテストしたときに高レベルのコンポーネントをビルドするのはずっと前です。
短い答え:すべてです。 – Crashworks
LOL、 "hacklord"という名前の人物をコードをダウンロードするのに十分に信頼するはずですか? –
もちろん、あなたは彼を信頼します。彼の最も賞賛されたQは "どのようにしてバッファオーバーフローを引き起こすのですか"です。だから彼はかなり無害でなければなりません:-) – hirschhornsalz