私はしばらくの間 C++ を使用しており、ドライバーなどの低レベルのシステム プログラミングに興味を持ち始めました。ある種の原始的なオペレーティング システムでさえ、非常に興味深いプロジェクトになる可能性があります。
どこから始めればよいかわかりません。私が始めることができるそれほど挑戦的ではないものはありますか?また、C++ について、パフォーマンスが重要なコードの例外のように避けるべきものはありますか?
それが重要な場合、私の現在のOSはWindows 7です。
私はしばらくの間 C++ を使用しており、ドライバーなどの低レベルのシステム プログラミングに興味を持ち始めました。ある種の原始的なオペレーティング システムでさえ、非常に興味深いプロジェクトになる可能性があります。
どこから始めればよいかわかりません。私が始めることができるそれほど挑戦的ではないものはありますか?また、C++ について、パフォーマンスが重要なコードの例外のように避けるべきものはありますか?
それが重要な場合、私の現在のOSはWindows 7です。
C++ で Windows デバイス ドライバーを作成することは不可能ではありません。問題を引き起こす可能性のある CRT 関数は多くありません。たとえば、new 演算子は使用できません。std::bad_alloc を恐れる必要はありません。それを置き換えない限り、標準の C++ ライブラリ クラスのかなりの部分が削除されます。
しかし、それは実際にはデバイス ドライバーのポイントではなく、できる限り小さくすることが重要です。C++ は、複雑なコードを記述するときに効果を発揮します。デバイス ドライバーに複雑なコードを記述したくない場合。デバッグするのは redrum です。
Linus はカーネルの C が本当に好きです。それには十分な理由があります。
C++ には、完全なオペレーティング システムを実際に実装するために必要なすべてのツールが用意されているわけではありません。C++ では実行できないマシン固有の処理がいくつかあります。これらのことは、割り込みの処理と発生、MMU の制御、スーパーバイザー CPU 命令へのアクセスの制御、およびその他のいくつかの小さなオッズとエンドです。
幸いなことに、これらは C++ からアクセスするアセンブリ言語で記述できるほど少ないものです。
osdev.orgをご覧ください (独自の OS の開発を検討する際に頭に浮かぶ多くの質問に対する回答がここにあります)。
まず、既存のオープン ソース デバイス ドライバーとカーネルをハックすることから始めることを強くお勧めします。これは、実際には Linux または *BSD でしか実行できません。この経験は、あなたがこの種のプログラミングに適しているかどうかの良い感覚も与えてくれます。
最近オープン ソース化された Symbian OS は、C および C++ を使用して記述されていると聞きました。コードベースを読んでいないので、どの部分が C++ で行われているのかわかりません。検討してみてください。
Kerneltrap.org では、Linux カーネルのコード ベースに C++ が含まれていない理由について、非常に優れた議論が行われています。それも読んで考えてみてください。
Symbian OS は、C++ の変種で書かれています。もちろん、低レベルのもののアセンブリ コードもありますが、それはすべてまとめられています。例外を使用することはできません。また、リアルタイム ドライバーの場合、動的メモリ割り当てなどの通常のことは C でも実行できません。
Cプログラミング言語とアセンブラをお勧めします。C++ で多くの低レベル化が可能かどうかはわかりません。