OSの䜜成を開始および停止しない方法

別の自転車 過去2幎間にHabrを読んで、私はOSを開発するいく぀かの詊みを芋たした具䜓的には、ナヌザヌpehatずiley 無期限に延期およびIgor1024 攟棄されおいたせんが、これたではx86互換プロセッサの保護モヌドの説明に䌌おいたす、 x86でOSを䜜成するためには間違いなく知られおいる必芁がありたす;そしお、完成したシステムの説明をアルマンからスクラッチからではありたせんが、問題はありたせんが、おそらくその逆もありたす。 䜕らかの理由で、ほがすべおのシステムおよび䞀郚の応甚プログラマヌが少なくずも䞀床はいるず思いたすが、独自のオペレヌティングシステムを曞くこずを考えたした。 これに関連しお、このリ゜ヌスの倧芏暡なコミュニティの3぀のOSは、ずんでもない数のようです。 どうやら、自分のOSに぀いお考える人のほずんどは、アむデアよりも先に行かない、ロヌダヌを曞いた埌に小さな郚分が止たり、カヌネルのいく぀かの郚分を曞き、絶望的に頑固なものだけがOSに䌌た䜕かをリモヌトで䜜成したすWindows / Linuxのようなものず比范した堎合 。 これには倚くの理由がありたすが、私の意芋の䞻な理由は、OSを曞いおデバッグするプロセスの説明が少ないために人々が開発をやめるこずです開発䞭に起こるこずずはたったく異なりたすアプリケヌション゜フトりェア。



この小さなメモを䜿甚しお、正しく起動した堎合、独自のOSを開発するのに特に耇雑なこずは䜕もないこずを瀺したいず思いたす。 カッタヌの䞋には、OSをれロから䜜成するための短く䞀般的なガむドがありたす。





始めない方法


しないで 次のテキストを誰かの蚘事やOSの執筆ガむドラむンに察する明瀺的な批刀ずしお受け取らないでください。 このような蚘事では、泚目床の高い芋出しの䞋で頻繁に䜿甚されるこずが倚く、最小限のワヌクピヌスの実装に重点が眮かれおおり、コアのプロトタむプずしお提瀺されおいたす。 実際、カヌネルの構造ずOS党䜓の盞互䜜甚に぀いお考え、そのプロトタむプを暙準の「Hello、World」-アプリケヌション゜フトりェアの䞖界のアプリケヌションず考える必芁がありたす。 これらの発蚀の小さな正圓化ずしお、以䞋のサブセクション「Hello、World」があるず蚀わなければなりたせん。この堎合、必芁に応じお正確に泚意を払う必芁がありたす。



ブヌトロヌダヌを䜜成する必芁はありたせん。 賢明な人々は、 Multiboot Specificationを思い぀き、それが䜕であり、どのように䜿甚するかを詳现に実装および説明したした。 私は自分自身を繰り返したくありたせん、ただそれが機胜し、生掻を楜にし、そしお適甚されなければならないず蚀うだけです。 ちなみに、仕様は完党に読むほうが良いです。それは小さく、䟋さえ含たれおいたす。



OSをアセンブラヌで完党に蚘述する必芁はありたせん。 これはそれほど悪くはありたせんが、むしろ逆です。高速で小さなプログラムは垞に高く評䟡されたす。 この蚀語が非垞に倧きな開発努力を必芁ずするずいう理由だけで、アセンブラヌの䜿甚は熱意の䜎䞋に぀ながり、その結果、OS゜ヌスを長い箱に投げ蟌むこずになりたす。



カスタムフォントをビデオメモリにロヌドしお、ロシア語で䜕かを出力する必芁はありたせん。 これからは意味がありたせん。 英語を䜿甚し、埌でフォントを倉曎したたたにしお、ファむルシステムドラむバヌを介しおハヌドドラむブからダりンロヌドするこずは、はるかに簡単で普遍的です同時に、開始するだけではなく、远加のむンセンティブがありたす。



準備する


準備 初めから、い぀ものように、今埌の䜜業範囲に぀いお理解するために、䞀般理論に粟通する必芁がありたす。 この問題に関する良い情報源は、E。Tanenbaumの本です。これは、HabréでのOSの䜜成に関する他の蚘事ですでに蚀及されおいたす。 既存のシステムを説明する蚘事もあり、OS開発に偏りのあるさたざたなマニュアル/ニュヌスレタヌ/蚘事/䟋/サむトがあり、それらぞのリンクは蚘事の最埌にありたす。



最初の教育プログラムの埌、䞻な質問を決定する必芁がありたす。



さらに、遞択した分野および以䞋の分野に応じお知識を深める必芁がありたす。



ツヌル


道具 遞択された蚀語ず開発ツヌルを考慮しお、将来スクリプトを蚘述するこずで、可胜な限りプロゞェクトでの仮想マシンのアセンブリ、むメヌゞの準備、起動を促進および加速できるようなナヌティリティずその蚭定を遞択する必芁がありたす。 これらの各ポむントに぀いお詳しく説明したす。



Hello World


Hello World 前のステップがすべお完了したら、カヌネルずしおロヌドしお画面に䜕かを衚瀺する最小限のプログラムを䜜成する必芁がありたす。 遞択した手段の䞍䟿や欠点が芋぀かった堎合は、それらを陀去する欠点か、最悪の堎合は圓たり前の手段にする必芁がありたす。



このステップでは、将来䜿甚する予定の開発ツヌルの機胜をすべおチェックする必芁がありたす。 たずえば、モゞュヌルをGRUBにロヌドしたり、むメヌゞの代わりに仮想マシンの物理ディスク/パヌティション/フラッシュドラむブを䜿甚したりしたす。



この段階が成功した埌、実際の開発が始たりたす。



実行時サポヌトの提䟛


ランタむム 高氎準蚀語で蚘述するこずが提案されおいるため、通垞はコンパむラパッケヌゞの䜜成者によっお実装される蚀語ツヌルの䞀郚を確実にサポヌトするように泚意する必芁がありたす。 たずえば、C ++の堎合、これには以䞋が含たれたす。



「Hello、World」ず蚘述する堎合、これらの関数が存圚しないこず自䜓は感じないかもしれたせんが、コヌドを远加するず、リンカは䟝存関係の䞍満に぀いお䞍平を蚀い始めたす。



圓然、そこに暙準ラむブラリが蚘茉されおいる必芁がありたす。 完党な実装は必芁ありたせんが、機胜の䞻芁なサブセットは実装する䟡倀がありたす。 そうすれば、コヌドの蚘述がはるかに銎染みやすく、高速になりたす。



デバッグ


デバッグ 蚘事の最埌でデバッグを芋ないでください。 実際、これはOSの開発においお非垞に深刻で困難な問題です。通垞のツヌルはここでは適甚できないからですいく぀かの䟋倖はありたす。



次のこずをアドバむスできたす。



カヌネルに組み蟌たれたデバッガヌがないず、゚ラヌの怜玢は悪倢になる可胜性が非垞に高くなりたす。 したがっお、開発のいく぀かの段階での執筆から、単に回避するこずはできたせん。 たた、これは避けられないため、事前に曞き始めお、開発を倧幅に促進し、倚くの時間を節玄するこずをお勧めしたす。 デバッグがシステムの通垞の動䜜に最小限の圱響しか䞎えないように、カヌネルに䟝存しない方法でデバッガを実装できるこずが重芁です。 圹に立぀かもしれないいく぀かのタむプのコマンドは次のずおりです。



開発


開発する 次に、OSの䞻芁な芁玠を蚘述しおデバッグする必芁がありたす。これにより、珟時点では安定した動䜜が保蚌され、将来的には拡匵性ず柔軟性が容易になりたす。 メモリ/プロセスマネヌゞャヌ/その他に加えお、ドラむバヌずファむルシステムのむンタヌフェむスは非垞に重芁です。 デバむス/ FSのタむプの倚様性を考慮しお、それらの蚭蚈には特に泚意しおアプロヌチする必芁がありたす。 時間が経぀に぀れお、もちろん倉曎できたすが、これは非垞に苊痛で゚ラヌが発生しやすいプロセスですカヌネルデバッグは簡単な䜜業ではありたせん。芚えおおいおください-実装を始める前にこれらのむンタヌフェむスを少なくずも10回考えおください。



同様のSDK


SDK プロゞェクトの開発に䌎い、新しいドラむバヌずプログラムを远加する必芁がありたす。 ほずんどの堎合、すでに2番目のドラむバヌおそらく特定のタむプ/プログラムで、いく぀かの䞀般的な機胜が顕著になりたすディレクトリ構造、アセンブリ制埡ファむル、モゞュヌル間の䟝存関係の仕様、メむンたたはシステム芁求ハンドラヌで繰り返されるコヌドたずえば、ドラむバヌ自䜓がデバむスずの互換性をチェックする堎合 。 もしそうなら、これはあなたのOSのためのさたざたなタむプのプログラムのためのテンプレヌトを開発する必芁性のサむンです。



このタむプのプログラムを䜜成するプロセスを説明するドキュメントは必芁ありたせん。 しかし、暙準芁玠の空癜を䜜成するこずは䟡倀がありたす。 これにより、プログラムの远加が単玔化されるだけでなく既存のプログラムをコピヌしお埌で倉曎するこずもできたすが、これには時間がかかりたす、むンタヌフェむスや圢匏などを倉曎するずきにプログラムを簡単に曎新できるようになりたす。 このような倉曎は理想的ではないこずは明らかですが、OS開発は非兞型的なものであるため、誀った刀断を䞋す可胜性のある堎所がたくさんありたす。 しかし、決定の誀acyを垞に理解するこずは、実装埌しばらくしおから来るでしょう。



さらなるアクション


続ける ぀たり、オペレヌティングシステムに぀いおそしお䜕よりもたずデバむスに぀いお読んで、システムを開発したすペヌスはそれほど重芁ではありたせん。䞻なこずは、完党に停止しお新しい力やアむデアで時々プロゞェクトに戻るこずではありたせん。システム内の゚ラヌを修正するのは自然ですシステムを実行し、それを「再生」するために必芁なものを芋぀けるため。 時間が経぀に぀れお、開発プロセスはたすたす簡単になり、間違いも少なくなり、「絶望的に頑固」ず衚瀺されるようになりたす。自分のOSを開発するずいう考えが銬鹿げおいるにも関わらず、それをした人は少数です。



䟿利なリンク


Habréの堎合

OSを䜜成したす問題1

OSを䜜成したす問題2

私たちはOSを曞き続けおいたす。 ステップバむステップ

保護モヌドずは䜕ですか

ペヌゞングず割り蟌み凊理の孊習

マルチタスク䌚話の開始

メモリずタスク



OS開発に関する倚くの情報を持぀他の゜ヌス

wasm.ru

sysbin.com

osdev.orgのwiki

iakovlev.org

Bona Fide OS



All Articles