私の最初のアドバイスは、このテーマに関する高度な本を読むことです。つまり、あなたはまだこれを行っておらず、単にオンライン チュートリアルか何かに沿って作業することを計画していたと思います。少なくとも私にとっては、このようなことに頭から飛び込みたいと思う傾向がありますが、すぐに頭がいっぱいになり、プロジェクトをあきらめます. プロジェクトを開始する前に、プロジェクトについて非常に高いレベルで理解していることを確認することは、非常に役立ちます。
私がお勧めするシリーズの 1 つは、Write Great Codeの本です。シリーズをすべて読んだわけではないので、シリーズ全体を保証することはできませんが、私のオフィスにはそれらがあり、何かに真っ先に飛び込む前に、主題をかなりよく理解するために何度も使用しました. たとえば、あなたの計画に直接関係する可能性のある 1 つの例として、GCC コンパイラが生成する ELF バイナリをどのように編成したか、各セクションが何であるか、そこに何が格納されているかを理解する必要がありました。(これは組み込みシステム用で、RAM を拡張していたので、いくつかのものを再編成する必要がありました...)
あなたは「難しいことは何もない」と言いました...私の意見では、特に最終目標がコンパイラーとオペレーティングシステムについて学ぶことである場合、あなたのステップはすでにかなり難しいと思います。少なくとも今のところ、この仮想マシン全体をスキップします。実際には、プロセッサは非常に単純であり、「機械語」を処理するだけであることをすでに知っているという事実に基づいて、おそらくすでに十分に理解しているでしょう。
代わりに、ステップ 3 から始めて、独自のコンパイラーを作成します。私は大学でコンパイラのクラスを受講し、学期の終わりまでに、 LEX と YACCを使用してゼロから構築した動作する Pascal コンパイラを手に入れました。それはかなり啓発的でした。Bisonは、そのような目的で yacc と組み合わせて使用されていると見なすこともできます。使ったことないけど。
また、GCC を操作して hello world を X バイト未満にコンパイルする方法を理解するなど、空き時間にちょっとした演習を行うだけでも、その仕組みについて思っている以上に多くのことを学ぶことができます。(ちなみに、これの例はウェブ上にかなりあります)
楽しんで!