特異点に぀いお知りたいが、尋ねるこずを恐れおいたすべお



Microsoft Singularityに぀いお䜕か曞きたいず思いたす。 これは非垞にクヌルなこずであり、今日のITでは誰もがそれに぀いお話しおいる。 公匏の出版物を読みたくない人のための特異点レビュヌはこちらです。






これは䜕ですか


特異点は、オペレヌティングシステムの研究プロゞェクトです。 これは、「もずもず信頌性を重芖したオペレヌティングシステムをどのように䜜成したすか」ず蚀われた優秀な人々のチヌムです。



SlashdotやOSNewsのような人気のあるフォヌラムの人々は、MicrosoftがWindowsを攟棄しおれロから始めるこずを長幎倢芋おきた -䞍安や悪意のあるコヌドマルりェアの問題を克服するためです。 通垞、これらすべおの人々の倢は、WindowsをUNIXに移怍するずいうアむデアを䞭心に展開したすが、これはくだらないアむデアであり、䞻な問題を解決するものではありたせん。 基本的な蚭蚈機胜に起因する問題を解決したい堎合は、蚭蚈から始める必芁がありたす。 これは特異点で行われたす。



信頌性はかなり広範な質問です。 少なくずも、これはアプリケヌションがクラッシュせず、安党であるこずを意味したす。 しかし、Singularityの開発は倚くの分野をカバヌしおいるずいう事実にもかかわらず、開発者には本栌的なOSを䜜成するタスクはありたせん。たずえば、GUI開発には関䞎しおいたせん。





違いは䜕ですか


実際に、これは私がここで話すこずです。



特異点は、マむクロカヌネル蚭蚈であり、高性胜、単䞀アドレス空間、静的型怜蚌、およびアクセス暩の柔軟な管理です。



そうそう、前の文には恐ろしい孊問甚語がたくさんありたした。 それらを理解しおみたしょう。 特異点は、チュヌトリアルの暙準OS蚭蚈からはほど遠いため、簡単ではありたせん。



特異点- 高性胜 。 実際、生産性はプロゞェクトの目暙ではありたせんでしたが、開発者はそれなしでは開発が「クラりドに飛び蟌み」、完党に非商業化できるこずを理解するのに十分賢明でした。 これは、Microsoftがい぀か実際の補品でこの開発を䜿甚する予定であるこずを間接的に瀺しおいるため、高速にする必芁がありたす詳现は埌ほど。



そしお特異点はマむクロカヌネルです。 それが䜕であるかに今焊点を圓おたしょう。 他のこずに぀いおは埌で話したす。 このすべおを既に認識しおいる堎合は、䞋にスクロヌルしたす。この堎合、マむクロカヌネルずは䜕か、なぜ䜎速ず芋なされるかを正確に知っおいるず想定したす。





ええず...マむクロ䜕


歎史的に、オペレヌティングシステムの蚭蚈には2぀の方法があり、異なるコストず利益の比率を䜿甚しお同じこずを行う2぀の方法がありたした。小栞たたはモノリシックカヌネルです。 ここで䜎レベルの蚭蚈に぀いお話しおいるこずに泚意しおください...これは、UIでタスクバヌを䜿甚するかドッキングするかには圱響したせん。



マむクロカヌネル蚭蚈では、ファむルシステムやネットワヌクドラむバヌなどのサブシステムは、カヌネル自䜓の倖郚の倚かれ少なかれ通垞のプログラムのように機胜したす特殊なプロセッサモヌドで動䜜するずいう点で他のプログラムずは異なりたす。 カヌネルは、プロセス/スレッドを䜜成し、それらの間でメッセヌゞを転送し、CPUリ゜ヌスの割り圓おなど、その他の小さなこずのみを行いたす。 今日の真の小栞はほずんど発芋されおいたせん。 ほずんどの堎合、あなたもそれを実珟するこずなく䜿甚したした。 たずえば、QNXは、Ciscoルヌタヌなどの組み蟌みアプリケヌション向けに蚭蚈されたオペレヌティングシステムです。 QNXは玔粋なマむクロカヌネルです。



愛人メモ


仮想メモリの抂芁を以䞋に瀺したす。 コヌドがメモリから䜕かを読み取るず、CPUは内郚的にアドレスを仮想アドレスからメモリコントロヌラヌに送るこずができる物理アドレスに倉換したす。 32ビットCPUでは、䞡方ずも32ビットポむンタヌであり、栞開発者でない限り、ほずんどの堎合、盎接の物理アドレスは衚瀺されたせん。 この倉換は、MMUメモリ管理ナニットず呌ばれるプロセッサコンポヌネントによっお行われたす-たた、アクセス制埡も実装したす。 メモリは4キロバむトの「ペヌゞ」に分割されIntel / AMDチップ内、ペヌゞごずにマッピングが開始されたす。 衚瀺ペヌゞには、UNIX䞊のファむルず同じように、読み取り/曞き蟌み/実行のアクセスビットがありたす。



このメモリマッピングは、すべおのオペレヌティングシステムのセキュリティの基瀎です。 バグのあるプログラムがメモリ内の他のプログラムを台無しにするこずはできたせん。たた、メモリペヌゞのテヌブルを曎新できるのはカヌネルだけであり、ハヌドりェアぞのすべおのアクセスはカヌネルを介しお行われるため、プロセッサのナヌザヌモヌドで動䜜するプログラムは、カヌネルが「興味深い」こずを行うこずができたせんこれは蚱可されたせん。 たた、MMUではカヌネルメモリを読み取るこずができないため、アクセスできたせん。 たた、スワップファむルを䜿甚しおディスクをRAMチップずしお䜿甚できるこずを意味したす。プロセスアドレススペヌスの䞀郚の衚瀺をアンロヌドし、そこから読み取った゚ラヌをキャッチしお、衚瀺を再床ダりンロヌドしたす。



仮想メモリは玠晎らしいこずであり、過去13幎間でコンピュヌタヌの信頌性が最倧に向䞊したこずの1぀です。 Windows 3.1は、Windows 95ずは異なり、これを䜿甚したせんでした。そのため、倚くの人がOSを曎新したした。 マむクロカヌネルの利点はここで明らかです-バグのあるカヌネルコンポヌネントはコンピュヌタヌをBSOD、別名「死のブルヌスクリヌン」に送るこずはできたせん-今日のように。 ファむルシステムがクラッシュした堎合は、再起動しおください



モノリシック蚭蚈では、ファむルシステム、ドラむバヌ、さらにはWebサヌバヌもカヌネルに盎接読み蟌たれ、特暩プロセッサモヌドで動䜜したす。 カヌネルは、ナヌザヌモヌドプロセス甚のメッセヌゞ受け枡しシステムを匕き続き提䟛したすが、他の堎所では䜿甚されたせん。 今日、䞀般的なサヌバヌたたはデスクトップOSはすべおWindows、Linux、MacOSのWindowsモノリシックです。 Linuxは垞にモノリシックであり、Windows NTは元々マむクロカヌネルであり、Machに基づいたMacOSは理論的にはマむクロカヌネルであったこずに泚意しおください。 しかし、私はそれを信じる人を誰も知りたせん。



オペレヌティングシステムがマむクロカヌネルたたはモノリシックであるかどうかを刀断するのはおそらく難しいでしょう。なぜなら、それはバむナリの「yes / no」ロゞックではないからです。たずえば、Linuxではグラフィックサブシステムは別のプロセスX Serverで動䜜したすが、Windowsではそれはそうでした -しかし、今日ではありたせん。 いずれにしおも、Linuxがマむクロカヌネルではないず䞻匵する人はいたせん。 優れた評䟡基準は、ファむルシステムがカヌネルモヌドで動䜜するかどうかです。グラフィックシステムは灰色の領域にありたすが、ファむルシステムはありたせん。



いずれにせよ、Singularityが小栞蚭蚈を䜿甚しおいるずいう事実は、奇劙なこずに芋えたす。歎史的に孊術環境では小栞が勝っおいたしたが、䞻にパフォヌマンスの問題により、モノリシックコアが垞に垂堎で勝っおいたした。 これらの玛争は80幎代に勃発したした- ここでは、トヌバルズずタネンバりムの間の有名な玛争を読むこずができたす 。 そのため、䞀芋するず、特異性は理論的にはクリヌンであるが実際には䜿甚できないものの別の孊問的発展のように思えるかもしれたせんが、そうではありたせん。





マむクロカヌネルが遅いのはなぜですか


マむクロカヌネルは通垞、プロセッサモヌドカヌネルモヌドでのナヌザヌモヌド、たたはその逆の切り替えのオヌバヌヘッドにより、モノリシックカヌネルよりも䜎速です。 さらに、2぀のナヌザヌモヌドプロセス間でプロセッサを切り替えるコストコンテキストスむッチングもありたす。



これらのコストは小さくおも珟実的であり、1秒あたり䜕癟ものそのような切り替えを行うず、すべおのプロセッサの䜜業が前埌の切り替えに削枛されるずいう事実に぀ながりたすが、実際の䜜業に残された時間はありたせん。 そしお、これらのコストを枬定するこずは非垞に困難ですが、Singularityチヌムはそれを行いたした。



これらの切り替えに貎重な時間がかかるのは、CPUが通垞ずは異なるゞョブを実行する必芁があるためです。たた、プロセッサはこの䜜業を行わずにほずんどの時間を費やすため、あたり最適化されおいたせん。 これは、最近のx86チップの䞖代で倉曎されたしたが、党䜓的にはすべおが同じたたです。



たずえば、syscallを実行しおカヌネルに匷制的に䜕かをさせるには、特別なプロセッサ呜什を䜿甚したす。 これは通垞Linuxでは「int 80」ですが、今日では、それをサポヌトするコアずプロセッサで「sysenter」オペコヌドを䜿甚できたすほずんどの人が䜿甚できたす。 この堎合、制埡はコアに枡されたす。 これは最新のコンピュヌタヌではかなり高速ですが、垞にそうであるずは限りたせんでした-たずえば、Windowsの初期バヌゞョンではCPU䟋倖をスロヌする方が割り蟌みを䜿甚するよりもカヌネルモヌドに入る方が速いこずが刀明したため、誀ったプロセッサヌ呜什を䜿甚しおいたした「公匏」方法。 Intelはそれを修正したした:)



コンテキストの切り替えはより高䟡です。 第䞀に、それが明らかにカヌネルモヌドぞの移行を匕き起こし、たたメモリマッピングテヌブルの再構成が高速ではないためです。



これもたた珍しい操䜜であるためx86チップで特別なレゞスタを䜿甚する必芁があるため高速ではありたせんが、䞻にいわゆる「倉換ルックアサむドバッファ」TLBのリセットが必芁です。 これらのバッファヌには、MMU芁求の結果が栌玍されたす。 実際、MMUがタスクに特化したハヌドりェアであっおも、その䜿甚は無料ではありたせんコヌドにアクセスするたびにメモリアドレスの倉換を行う必芁がありたす垞に発生したす。ここでは、キャッシュが必芁です。



このため、コンテキストスむッチングの費甚を枬定するこずは困難です。 CPUの基本的な蚭蚈機胜のために、そこに䜕か䟡倀があるこずはわかっおいたす。 しかし、実際の䟡倀は実行䞭のプロセスのコヌドによっお塗り぀ぶされたす。 コンテキストを切り替えた盎埌、コンピュヌタヌの実行速床がやや遅くなり、TLBが読み蟌たれるず速床が䞊がりたす。



したがっお、2぀の盞反する優先順䜍がありたす。 䞀方では、アドレス空間を分離するために仮想メモリを䜿甚するず、プログラムを互いに分離するこずで信頌性が向䞊したすがこれは良いこずですが、䞀方で、パフォヌマンスの損倱を枬定するのが難しくなりたす-これは悪いこずです。 さらに悪いこずに、プロセッサはずきどき高速になりたすが、コヌドの実行は高速になりたすが、アドレス空間の操䜜は高速ではないため、今回はムヌアの法則に頌るこずができたせん。





メッセヌゞング


マむクロカヌネルは、異なるアドレス空間のプロセス間でメッセヌゞを送信するずいう考えに基づいおいたす。 そのため、ファむルを読み取るには、プログラムからファむルシステムサヌバヌにメッセヌゞを送信する必芁がありたす。 メモリにメッセヌゞを圢成しこれは高速、syscallで「メッセヌゞを送信」し​​たすもう高速ではありたせん。その埌、カヌネルはメッセヌゞを独自のアドレス空間にコピヌしややゆっくり、コンテキストをファむルシステムサヌバヌに切り替えたすゆっくりカヌネルモヌドを終了する前に、ファむルシステムサヌバヌのメモリにメッセヌゞをコピヌしたす。



ファむルシステムが探しおいるファむルを読み取るずき、この錫をすべお逆の順序で繰り返す必芁がありたす。今回はデヌタを返信メッセヌゞにコピヌしたす...そしおメッセヌゞの送信コストはサむズずずもに増加するため、これは最初のリク゚ストよりもさらに遅いです



モノリシックなデザむンではたったく異なっお芋えたすリク゚ストを䜜成し高速、syscallを実行しそれほど高速ではありたせん、ファむルシステムがデヌタを受信するたで埅機し、その埌カヌネルがデヌタをアドレススペヌスに盎接コピヌしたすたたは、 DMAを䜿甚する堎合、ナヌザヌモヌドに制埡を戻す...わあ、簡単で高速です ここでの欠点は、ファむルシステムがクラッシュするず、OS党䜓がBSODでクラッシュし、すべおが倱われるこずです。



Windowsでのクラッシュの玄80は、曲がったドラむバヌが原因です。 したがっお、バグのあるプログラムによるクラッシュを防ぐのず同じ方法で、ドラむバヌによるシステムクラッシュを防ぐこずができれば、䞖界䞭のすべおのBSODの80を防ぐこずができたす。 これはかなりクヌルです たた、セキュリティメカニズムがドラむバヌで機胜できるこずも意味したす。 今日サヌドパヌティのファむルシステムをむンストヌルする堎合、実際に䜕が埗られるのか誰が知っおいたすか 自分でコヌドを確認しおコンパむルするたで、コヌドを提䟛した人を信頌する必芁がありたす。 これですべおが問題ない堎合でも、新しいドラむバヌのバグがルヌトキットに穎を開け、セキュリティシステム党䜓を曲げるこずがありたす:(



おそらく、孊者が遅くおも信頌できる゜リュヌションを奜んだのは驚くこずではありたせん-デスクトップOS開発者は速くおも䞍安定な゜リュヌションを奜んだのです。 しかし、圌らはそうしなかったずは思わないでください Windows NTは、玔粋にマむクロカヌネル゜リュヌションずしお開発されたしたが、プロセス間通信が非垞に最適化されおいおも、GUIず共にカヌネルに降䌏し、「移動」したした。





特異点


特異点は、「座っお食べる」こずに成功したす-マむクロカヌネルのすべおの利点ず、モノリシックコアよりも高いパフォヌマンスを実珟したす。 かっこいい





どのように機胜したすか


特異性は、そのクリヌンなマむクロカヌネル蚭蚈に印象的で、埓来のアプロヌチよりも30高速で、モノリシックよりも10高速です重いファむルI / Oのベンチマヌクで。 圌女はどうやっおそれをしたすか



トリックは非垞に簡単です-ハヌドりェアのメモリ保護を完党に攟棄したした。 Singularityでは、すべおがカヌネルモヌドで動䜜し、すべおが単䞀のアドレススペヌスで動䜜したす。 ぀たり、MMUは䜕もしたせん。 そしお、䌝統的な意味での「プロセス」はありたせん。



もちろん、これが圌らがした唯䞀のこずであれば、それはそれほど面癜くないでしょう。 Windowsのクラッシュの80は、カヌネル゚ラヌではなく、バグのあるドラむバヌが原因です残りの20はハヌドりェア障害が原因であるず思われたす。 暩限の昇栌を可胜にする無数の脆匱性は、ドラむバヌの䞍具合によっお匕き起こされたす。 そのような脆匱性はそれぞれ「悪者」ぞの莈り物です。 ゜フトりェアのバグ保護は、マむクロカヌネルを䟿利にするものです。



Singularityのプログラムは互いに分離されおいたすが、分離はシリコンではなく型理論を䜿甚しお完党にプログラム的に実行されたす。 これは、SingularityプログラムがSず呌ばれ​​るCの子孫で曞かれおいるために可胜です理論的には、.NETには任意の蚀語を䜿甚できたす-SingularityはCに远加された機胜をほずんど䜿甚しないため、他の蚀語ではこれらのわずかな倉曎のみが必芁です 。



おそらく、JavaやCのようなほずんどの珟代蚀語では、メモリに盎接アクセスできないこずをご存知でしょう。 倧たかに蚀っお、Javaで同様のCコヌドを曞くこずはできたせん。



*((char *)0x1234) = ‘X’; // 1234



, . Java/C# -, , , . , , JVM/MSIL « », , , , / . — !






, . . , C , — Java/.NET ( C++) .



, , reflection () , .



JVM- . , JRE — .






Singularity — C#, C++ . . Microsoft — , .



Singularity — SIP, software isolated process « ». Singularity , -, , — .



SIP (heap), ( GC, , GC ) . SIP , ( KaffeOS), . , SIP. , SIP — , . , , GC , .



CPU — , , «». Singularity «» , SIP' , , SIP' . , / , C++ . SIP ( ), , , .



SIP' , . , GC SIP' — . syscall .



SIP' «». — , UNIX' , . , , — - . . SIP' ( , -) .






, . ? SIP' ?



, SIP (, CD), MSIL-. (just-in-time, JIT) , Java .NET. , . Singularity — . .



MSIL CPU , « I/O » « », — - , . , , , . , — CPU .






OS - . : , iTunes , , iPod. , -, , — , -, .



SIP' , ( ) SIP'. — ? , ?



Singularity . , .NET, XML-, SIP' , . . , , .





Singularity


, :

  1. 80% Windows .
     
  2. Linux , 7 , .
     
  3. , « » , — — .
     
  4. , . « ».


Singularity - , , — Sing#- (Sing# «» C#), MSIL-. SIP, . , C# — , «overflow» .



MSIL , , - . , - DLL, , , . DLL (Singularity.DriverRuntime) , Microsoft «trusted computing base», - DRM, . DLL, , . IoPortRange, IoIrqRange ( ..) - .



Singularity , . . , — , ? ?



Singularity , , . .NET — , . XML- ( , ) (compile-time transform), , . — HAL (hardware abstraction layer).



, Singularity , . , ( ) — . , , .





?


, - ( ?). , , DMA- , .



DMA — Direct Memory Access ( ) — , RAM, CPU. , , , . , DMA CPU, MMU, , DMA- . , . Singularity .



, DRM! , ! CPU, Intel AMD, -, ( ) IOMMU. , MMU — , / DMA . IOMMU, DMA. ( DRM-). , , , .



, , DMA- - «».





?


2001- Microsoft . , . — , , , . Microsoft unit-, , . Microsoft. ?



, , . , . , , . $250 , «OK» . .



. , — .



, , : «, , “ ”, DMA, ( , , )». , ? . , , . BSOD, . , , — , .



, ( Singularity , SIP'), — . ? , . ( DoS' - ? ). , , - , , . , Microsoft, .

Source: https://habr.com/ru/post/J31605/


All Articles