OS開発に必要な知識

必要な知識

これをスキップできると思う場合、それはおそらくあなただけのためです。

OSを書くことは初心者の仕事ではありません。実際、OSの作成は通常、最も難しいプログラミング作業と見なされます。このようなプロジェクトを検討する前に、平均以上のプログラミングスキルが必要になります。従わない場合、あなたは愚かに見えます。

知っておくべきことがいくつかあります:

  1. 基本的なコンピューターサイエンス:16進表記と2進表記、ブール論理、およびデータ構造、その構築と操作、検索と並べ替えのアルゴリズム、抽象的なプログラミング概念などの類似の基礎知識に精通している必要があります。
  2. 言語と語彙:適切なレベルで(技術的な)英語を読み書きできる必要があります。実質的にすべての技術文書は英語で書かれており、ウェブ上で見つけることができるほとんどのリソース(このWikiやフォーラムなど)もあります。誤った用語を使用すると、あなたは愚かに見え、あなたを助けようとする人々を混乱させます。
  3. 言語と語彙、パート2:このサイトで取り上げられているほとんどのオペレーティングシステム、およびほとんどのコードスニペットと例は、C(またはC ++)で記述されています。別の言語(FreeBASICやPascalなど)を使用することを選択した場合でも、Cはプログラミングの共通語であり、頭と尾を作成する能力が必要です。
  4. アセンブリ:低レベル言語アセンブリに関する知識が必要です。本を読む。学校でコースを受講してください。ユーザー空間のコードをいくつか書いて、慣れ親しんでください。オペレーティングシステムの大部分を高水準言語で作成する場合でも、必要になります。
  5. プログラミングの経験:OSプロジェクトを使用したプログラミングについて学ぶことは、悪い考えです。あなたが徹底的に開発する言語を知っている必要があるだけでなく、バ​​ージョン管理、デバッグなどにも精通している必要があります。開発。
  6. プログラミングの実践:コードとユーザードキュメントの両方を記述する方法を知って、プロジェクトが個人的な使用のみであっても、コードと設計のすべての側面を注意深く文書化する準備をしておく必要があります。また、オフサイトリポジトリ(Savannah、GitHub、GitLab、Herokuなど)のセットアップや使用など、適切なコード管理プラクティスを学び、使用する必要があります。これらの2つのプラクティスだけで、そうでない場合もありますが、それらに従うと、将来的には多大なトラブルを防ぐことができます。
  7. UNIXの経験:OS開発で使用されるツールの多くがUnix用に開発され、後でWindowsに移植されていることにすぐに気付くでしょう。 Linuxカーネルは、多くの場合、物事を行う方法のリファレンスまたは例として使用され、趣味のオペレーティングシステムの多くは、Unixに似ています。 Unixコマンドライン(できればBashまたはksh)の経験があることは非常に重要な要件です。 (CygwinはWindows用のインストールしやすいUnixコマンドラインを提供します。)まだインストールしていない場合は、しばらくの間LinuxまたはBSDを使用してください。 Windowsユーザーの場合、これは仮想システム(下記参照)を使用して仮想システムをホストすることにより、ホームシステムを再パーティションすることなく非常に簡単に実現できます。 macOSユーザーの場合、単にターミナルを使用できます。macOSはUnixバリアントカーネル(MachカーネルとBSDカーネルの組み合わせ)上に構築されているため、Xcodeとエミュレーターまたはバーチャライザーがインストールされている限り、追加のツールは不要です。 (ただし、クロスコンパイラを設定する必要があります);デフォルトのターミナルシェルはBourne-Again Shellですが、CシェルとKornShellも利用できます。
  8. ツールチェーン:コンパイラ、アセンブラ、リンカ、およびmakeユーティリティの動作の詳細を知っている必要があります。発生した警告とエラーの意味を理解する必要があります。使用するツールのドキュメントを手元に用意し、コミュニティに問い合わせる前にそれらを参照する必要があります。 GCC、GNU as、NASM、GNU ld、Visual Studio、およびGRUBに関する初心者の質問には2回以上回答されていますのでご安心ください。尋ねる前に検索してください。
  9. エミュレーターとバーチャライザー:Bochs、VirtualBox、QEMU、またはVirtual PCなどのツールに精通していることが、開発を合理的に進めるための鍵です。これらのツールは、実際のハードウェアとテストシステムの間にバッファーを提供します。これらはOS開発の特定の目的のために学ぶことができますが、OSプロジェクトを開始する前に、それらが何であり、どこで入手できるかを確実に認識する必要があります。
  10. 実行可能形式:カーネル空間のプログラミングには、アプリケーション開発には未知の多くの追加要件があります。実行可能バイナリを解析できることはその1つです(OSでアプリケーションをロードして実行したいですか?)。実行可能ファイルの種類、その内部構造、およびリンカによる生成方法に精通してください。
  11. プラットフォーム:プログラミング対象のプロセッサのマニュアルを学習しておく必要があります。 最初にカーネルを設計するために必要な情報が含まれています。 これらの文書から簡単に入手できる情報を求めることは、「Read The(…)Manual」応答、または単にRTFMの原因になります。
  12. コンセプト:既存のオペレーティングシステムが技術レベルで機能する方法(書籍を読んだことなど)、それらの良い点と悪い点、および独自のOSの実行方法を理解する必要があります。 いくつかのチュートリアルを終了し、「今何をする?」 フォーラムのいずれかであなたが愚かに見えるようになります。