リアルタイムオペレーティングシステム(Cおよび68Kを使用して実行)のカーネルを設計および実装する必要があるオペレーティングシステムおよびシステムプログラミングコースのデータ構造とアルゴリズムの知識はどれほど重要ですか?
このタイプのコースでは、リンクリスト、キュー、バイナリツリーなどのデータ構造をC++で実装するプログラミング経験がどれほど役に立ちますか?
ありがとう!
リンクリストとキューは、実際のオペレーティングシステムの実装に不可欠である可能性があります。他のデータ構造もおそらく役立つでしょう。これらのデータ構造に関するC++の経験がある場合は、言語間の違いに慣れれば、Cでの実装に問題はありません。
あなたが言及したすべてのデータ構造が役に立ちます。それに加えて、ネットワークプログラミング関連のプロジェクトが提供される可能性もあります。これは、スレッドが実際に使用されることがほとんどの領域であるためです。したがって、それに加えて、ソケットやネットワークに関することを学ぶことが役立つかもしれません。念のため、 この記事を読んでください 私のOS教授が推奨します。
スケジューラーには、これらのデータ構造がたくさん必要になります。プロセスのスケジュールに使用するアルゴリズムに応じて、異なるデータ構造を使用します。最も人気のあるラウンドロビンアルゴリズムは、キュー(FIFO)を利用します。
また、実際にはデータ構造に依存しないが、多くの「同期」プログラミングを利用する多くのスレッド化とfork/execを実行します。
私が受講したクラスでは、実際にオペレーティングシステムを作成するのではなく、OSが提供する基本的なAPI(バッファーからの読み取り、バッファーへの書き込み、フォーク、execなど)を使用しました。マルチスレッドアプリケーションを実装するために、C#やJavaなどの高級言語を利用しました。
リソースの背後にある概念を理解すると、生産者/消費者問題(ライブロック、デッドロック)が非常に役立ちます。
あなた常に基本的なデータ構造を知る必要があります:セット(順序付きおよび順序なし)、キュー、リストなどを実装する方法。
ハードウェアアーキテクチャ(命令セット、レジスタ、ハードウェアプッシュダウンスタック、トラップ、割り込み、コンテキスト保存/復元、メモリマップ/アドレス空間)、またはOSの動作について非常によく理解している必要があります。意味がなく、実際のスケジューラを実装する機会はありません。
また、多くのプログラム(「プロセス」)をOSの下で(シミュレーションと実際の両方で)並行して実行でき、これらのプロセス間の相互作用を管理して完全な混乱を防ぐ必要があるという考えに慣れることができます。