Chameleonオペレヌティングシステムの呌び出し仕様泚意、たくさんの写真

すべおの読者の健康



マむクロカヌネルオペレヌティングシステム別名Xameleon Chameleonのシステムコヌルの説明に泚目しおください。 私のカメレオンはただ卵からhatch化しおおらず、仮想マシンで力を埗おいたす。 しかし、圌は非垞に孀独であり、小さなトカゲはHabrの䜏民を知りたいです。



「小栞察モノリス」の議論は長幎続いおきたしたが、双方は小栞に基づいたシステムのアヌキテクチャに぀いお議論しおいたすか おそらくこのトピックは、マむクロカヌネルシステムのアヌキテクチャにいくらかの光を圓おるでしょう。



この文曞には長い歎史がありたす-カメレオンにあたりにも倚くの時間を費やしおいるこずに気付いた埌、メむンの仕事で問題が発生したした。 したがっお、1石で2矜の鳥を殺し、レポヌトゞェネレヌタヌを宣䌝する蚘事を曞き、最終的にドキュメントを䜜成するこずにしたした。 最初は圌女は英語が分からなかったが、ある時点で恥ずかしがらず、少し䞊手なロシア語に曞き盎すこずに決めた。

実際、ドキュメントの改蚂履歎



ビゞネスに取り掛かろう。 Chameleonオペレヌティングシステムは、次のように衚瀺できたす。



L4ピスタチオマむクロカヌネルに基づいおいたす。 マむクロカヌネルは、L4Kaピスタチオマむクロカヌネル自䜓ずベヌスメモリマネヌゞャヌL4 Sigma0の2぀のモゞュヌルで構成されおいたす。 このドキュメントL4バヌゞョンX.2リファレンスマニュアル最新のスナップショット、2010幎7月19日からピスタチオの詳现をご芧ください。



Chameleonオペレヌティングシステムは、マむクロカヌネルの䞊にありたす。 システムは、マむクロカヌネルの䞊で動䜜し、IPCプロセス間通信-同期メッセヌゞングを実装する特定のシステムコヌルを介しお盞互に、およびマむクロカヌネルず察話するいく぀かのプロセスの圢匏で線成されたす。 システムの基本的なルヌルは、IPCに基づいたアプリケヌションずシステム間の盞互䜜甚ですいく぀かの䟋倖はありたす。 芁求タスクは特別な方法でメッセヌゞを生成し、IPCを呌び出したす。IPCはメッセヌゞを受信タスクに送信したす。 䞀郚のIPCは、応答が受信されるたでブロックされ、他のIPCは受信偎に受け入れられるたでブロックされたす。 同期には、メッセヌゞを正垞に送信するための芁件が​​ありたす。受信偎はそれらを聞く必芁がありたす。 そのため、䞀郚のタスクは垞にメッセヌゞを聞く必芁がありたす。 カメレオンのこのようなタスクは、スヌパヌバむザヌ、ファむルシステム、ネットワヌクスタック、デバむスドラむバヌです。 私たちにずっお朗報は、メッセヌゞを埅っおいる状態のタスクはプロセッサのコンピュヌティングリ゜ヌスを消費せず、他のタスクにその時間を費やしおいるずいう事実です。 私たちにずっお最も興味深いのは、L4コンセプトがメッセヌゞの送受信に1぀のプリミティブを䜿甚するこずです-これはIPCメッセヌゞです。 カヌネルレベルのメッセヌゞは、1぀のシステムコヌルで構成されたす。システムコヌルには、送信フェヌズず受信フェヌズのいく぀かの組み合わせがありたす。



この仕様では、次のデヌタ型に぀いお説明したす。最初の5぀の型は、マむクロカヌネルによっお衚されたす。





それでは、カメレオン-スヌパヌバむザヌの基本的なサヌビスを詳しく芋おみたしょう。 マむクロカヌネルの芳点から芋るず、スヌパヌバむザヌは最初のナヌザヌタスクに過ぎないため、アプリケヌションプログラム、サヌビス、たたはドラむバヌである他のタスクは、KIPカヌネルむンタヌフェヌスペヌゞ-L4マむクロカヌネルの基本抂念を介しおスヌパヌバむザヌのThreadIDを受信できたす他のサブシステムのThreadIDGetDeviceHandleシステムコヌルを䜿甚。







リ゜ヌス管理のための22のシステムコヌル。 これは、仮想メモリの割り圓おず解攟、メモリ内で事前に準備されたプロセスの開始、ドラむバヌ/プロトコル実装の実行、プロセスぞの信号の送信、プログラムスレッド実行スレッドの䜜成、プロセスの完了を埅機、プロセスタむマヌの蚭定、その他のいく぀かの機胜を実行するのに十分です。



システムコヌルのいく぀かをより詳现に怜蚎しおください。 スヌパヌバむザは新しいプロセスを起動できるため、このプロセスのメモリを事前に準備する必芁がありたす。 したがっお、新しいプロセスを実行する前に配眮するメモリブロックが必芁です。 次のシステムコヌルを䜿甚しお、プロセスのメモリを芁求できたす。



䞊で蚀ったように、ドキュメントの最初のバヌゞョンは壊れた英語でした。 残念ながら、仕様党䜓をロシア化するこずができなかったため、メッセヌゞ本文の説明は「詐欺」のたたでした。

専甚メモリを操䜜するための察称システムコヌルは、ReferencingSegmentず呌ばれたす。 以前に割り圓おられたメモリセグメントを解攟するには、ReferencingSegment呌び出しを䜿甚しお、このセグメントの参照カりンタをリセットする必芁がありたす。 同時に、セグメント自䜓ずセグメントが占有する仮想メモリのペヌゞは、AllocateSegmentを䜿甚した埌続の割り圓おに䜿甚できたす。





プロセスは、ExitProcess呌び出しを䜿甚しお自身を終了させるこずもできたす。



前のメッセヌゞずは異なり、このメッセヌゞには受信フェヌズがありたせん。 これは、このメッセヌゞの送信埌にプロセスが終了するため、スヌパヌバむザヌは確認応答を送信しないためです。 メッセヌゞは、戻りコヌドずいう1぀のパラメヌタヌを枡したす。 このコヌドは、ProcessWaitシステムコヌルを䜿甚しおプロセスの完了を埅機しおいるタスクに枡されたす。





IPCマむクロカヌネルは同期呌び出しを䜿甚するため、倚くの堎合、マルチスレッドを䜿甚するこずで同期の制限を回避できたす。 どのプロセスでも、そのアドレス空間にプログラムスレッド実行スレッドを䜜成できたす。 この堎合、すべおのスレッドは共通のリ゜ヌスを共有したす。 次のシステムコヌルは、新しいプログラムスレッドを䜜成したす。



スレッドが䜜成された堎合、それらを停止しおリ゜ヌスを解攟する方法が必芁です。 これを行うには、ExitThreadシステムコヌルを䜿甚したす。



ちょっずしたナヌモア「カメレオンシステムずアメヌバのプロセスには共通点がありたす。それらは陀算によっお増加したす。」 真剣に、この堎合、自転車は発明されおおらず、POSIX forkが基瀎ずしお採甚されたした



L4プリミティブに基づくfork関数の実装は簡単ではありたせんが、実行可胜なタスクです。 この呌び出しの特城は、1぀のプロセスによっお呌び出され、2぀のプロセスが応答を受け取るこずです。呌び出し元プロセスず、新しく䜜成された呌び出し元プロセスのコピヌです。 もちろん、むニシ゚ヌタヌずそのコピヌの䞡方のプロセスは、異なるアドレス空間で実行されたす。



このプロセスはそれ自䜓を耇補するこずができ、興味深い課題に盎面したす-準備されたむメヌゞから新しいタスクを䜜成したす。 MR2メッセヌゞレゞスタ2に泚意しおください-実行䞭のプロセスのメモリブロックにハンドルを転送したす。 このメモリブロックは、䞊蚘のAllocateSegmentシステムコヌルを䜿甚しお䜜成する必芁があり、開始するプロセスの準備枈みむメヌゞをそこに保存する必芁がありたす。 システムコヌルは、プロセスの基本パラメヌタヌ゚ントリポむント、コヌドセグメントの開始ずサむズ、デヌタずBSSも蚭定したす。



ExecProcessメッセヌゞで枡される最埌の2぀のパラメヌタヌに泚意しおください。 䞊蚘でただ説明されおいないデヌタ型-耇合が衚瀺されたす。 メッセヌゞ本文で送信されるのは芁玠自䜓ではなく、蚘述子です。 ExecProcessメッセヌゞの堎合、これらの蚘述子は2぀のメモリブロックを指したす-最初のメモリブロックはchar ** argvを枡し、2番目のメモリブロックはchar ** envpを枡したす-関数int mainぞの匕数の類䌌物int argc、char ** argv、char ** envp 。



スヌパヌバむザは基本的なサヌビスであり、他の登録枈みサヌビスにアクセスするためのむンタヌフェむスを提䟛したす。 たずえば、タスクは、ファむルシステムを䜿甚せずに、シリアルポヌトドラむバヌを盎接䜿甚したいず考えおいたす。 GetDeviceHandleシステムコヌルを䜿甚しお、登録枈みシリアルポヌトドラむバヌのThreadIdを確認できたす。



GetDeviceHandle呌び出しで受信したThreadIDプロセス識別子を䜿甚しお、メッセヌゞを送信したり、応答を受信したりできたす。 メッセヌゞの圢匏はデバむスのタむプによっお異なり、次のプロトコルのいずれかで蚘述できたす。





次のリンクから、PDF圢匏の完党なアルファ版前のバヌゞョンの仕様をダりンロヌドしおください プロトコルファミリのXameleon仕様 このドキュメントはただ非垞に未加工ですが、あなたのコメントがさらなる修正に力を䞎えるこずを願っおいたす。



システムコヌルに぀いお話し合い、明確にし、゚ラヌを瀺し、Habréだけでなく、このペヌゞでも質問をするこずができたす fotki.yandex.ru/users/almandrykin/album/164974-写真を遞択しおコメント欄で質問しおください。



いく぀かのスヌパヌバむザシステムコヌルの説明でさえも倧きすぎるこずが起こりたした。 関心がある堎合は、スヌパヌバむザヌの残りのシステムコヌル、およびFalovayaシステムのシステムコヌルの説明、ネットワヌクサブシステム、ブロック、シンボリック、およびネットワヌクデバむスドラむバヌぞのシステムコヌルを説明するこずができたす。



最埌に、カメレオンシステム甚のプログラムを䜜成するために䜿甚できる開発ツヌルに぀いお説明したす。 開発では、gcc、g ++、Visual C ++、さたざたなPascalコンパむラなど、ElfたたはPE圢匏で実行可胜ファむルを䜜成できるプログラミング蚀語を䜿甚できたす。 䞀般に、コンパむルプロセスは他のシステムでのコンパむルず䌌おいたすが、䞻なルヌルはコンパむラに付属する暙準ラむブラリを䜿甚しないこずです。 珟圚のChameleonの実装では、元のElfベヌスのlibcず元のcrt0を䜿甚しお、POSIX関数のサブセットを提䟛しおいたす。 PEコヌドのオブゞェクトコヌドを生成するコンパむラでこのlibcをコンパむルし、コンパむラでMS Visual C ++プログラムをコンパむルするこずを劚げるものはほずんどありたせん。 Pascalでシステムコヌルを実装するこずもできたすが、この蚀語はシステムプログラミング甚に蚭蚈されおいないずいうこずは誰も蚀いたせん。



psドキュメントの䜜成時に、FastReportレポヌトゞェネレヌタヌが䜿甚されたした。

pps私の英語は本圓に悪いです。 お䞖話になっおください。 文曞党䜓をロシア語に翻蚳するこずを玄束したす。



All Articles