独自のプラットフォヌム。 パヌト0.1理論。 プロセッサに぀いお少し

こんにちは䞖界 今日、私たちは、プロセッサアヌキテクチャ私のスペルチェッカヌは、「アヌキテクチャ/アヌキテクチャ」ずいう単語で誓いたす。単語を正しく曞くこずを望みたすを凊理し、独自のプロセッサアヌキテクチャを䜜成するプロセッサの操䜜に぀いお平均的な知識を持぀人々のための䞀連の蚘事を持っおいたす。







4004







コメントは受け付けおいたす









プロセッサアヌキテクチャに぀いお少し



歎史的に、倚くのプロセッサず倚くのアヌキテクチャがありたす。 しかし、倚くのアヌキテクチャには類䌌点がありたす。 特にこのために、RISC、CISC、MISC、OISCURISCなどのアヌキテクチャの「グルヌプ」が登堎したした。 さらに、異なるメモリアドレス指定アヌキテクチャを䜿甚するこずもできたすvon Neumann、ハヌバヌド。 各プロセッサには独自のアヌキテクチャがありたす。 たずえば、最新のアヌキテクチャのほずんどはRISCARM、MIPS、OpenRISC、RISC-V、AVR、PIC **などですが、他の芁玠たずえば、利䟿性/䟡栌/人気/などによっお単玔に勝ったアヌキテクチャもありたすx86、x86-64最新のプロセッサのx86-64およびx86はマむクロコヌドを䜿甚し、その内郚にはRISCコアがありたす、M68K。 圌らの違いは䜕ですか







RISC



呜什セットコンピュヌタの削枛-呜什の実行時間を短瞮したアヌキテクチャRISCデコヌドから、これは呜什の数を枛らしたず思うかもしれたせんが、そうではありたせん。 この方向は、圓時のコンパむラのほずんどがすべおの呜什を䜿甚しおいなかったこずが刀明した埌、最終的に発展し、プロセッサ開発者はConveyorを䜿甚しおパフォヌマンスを向䞊させるこずにしたした。 䞀般に、RISCはすべおのアヌキテクチャの䞭間です。







このアヌキテクチャの鮮明な䟋ARM、MIPS、OpenRISC、RISC-V







Tta



TTAずは䜕ですか TTAは、1぀のメモリアドレスから別のメモリアドレスぞの1぀の移動呜什に基づくアヌキテクチャです。 このオプションは、コンパむラヌの䜜業を耇雑にしたすが、パフォヌマンスを向䞊させたす。 このアヌキテクチャには1぀の欠点がありたす。デヌタバスぞの匷い䟝存性です。 これがたさに人気が䜎い理由です。 TTAはOISCの䞀皮であるこずに泚意しおください。







鮮やかな䟋MOVEプロゞェクト







OISCURISC



1぀の呜什セットコンピュヌタヌ-単䞀の呜什を持぀アヌキテクチャ。 たずえば、SUBLEQ。 そのようなアヌキテクチャには、倚くの堎合、次の圢匏がありたす。アクションを実行し、結果に応じお、ゞャンプするか実行を続行したす。 倚くの堎合、その実装は非垞に単玔であり、パフォヌマンスは小さく、デヌタバスによっお制限されたす。







鮮明な䟋BitBitJump、ByteByteJump、SUBLEQ それらの䜕千もの







CISC



CISC-耇雑な呜什セットコンピュヌタヌ-呜什ごずのアクション数の増加ずいう機胜。 したがっお、コンパむラの耇雑さを増すこずにより、プログラムの生産性を高めるこずが理論的に可胜でした。 しかし、実際には、䞀郚の呜什はCISCで十分に実装されおいたせんでした。 それらはめったに䜿甚されず、生産性の向䞊は達成されたせんでした。 このグルヌプの特城は、アヌキテクチャ間の倧きな違いです。 たた、名前にもかかわらず、呜什の少ないアヌキテクチャがありたした。







鮮明な䟋x86、M68K







メモリアドレッシング



フォンノむマンアヌキテクチャ



フォン・ノむマむンwiki







このようなアヌキテクチャの特城は、䞀般的なデヌタおよび呜什バスでした。 最新のアヌキテクチャのほずんどはノむマンの゜フトりェアですが、ハヌドりェアハヌバヌドを䜜るこずを犁止する人はいたせん。 このアヌキテクチャには、プロセッサのパフォヌマンスがバスに倧きく䟝存するずいう倧きな欠点がありたす。 党䜓のプロセッサパフォヌマンスを制限したす。







ハヌバヌドアヌキテクチャ



ハヌバヌド







このアヌキテクチャの特城は、個別のデヌタバスず呜什バスです。 1぀のサむクルで䞡方のバスを䜿甚する胜力バスからの呜什の読み取りずデヌタバスぞの曞き蟌みを同時に行うにより、フォンノむマンよりも高いパフォヌマンスを提䟛したすが、アヌキテクチャを耇雑にし、いく぀かの制限がありたす。 䞻にマむクロコントロヌラで䜿甚されたす。







CPUの機胜



コンベダヌ



コンベアずは 非垞に愚かな蚀語で蚀うず、これらはサむクルごずにいく぀かの䞊行アクションです。 これは非垞に倱瀌ですが、本質を瀺しおいたす。 アヌキテクチャの耇雑さによるコンベダヌは、生産性を向䞊させる可胜性がありたす。 たずえば、パむプラむンを䜿甚するず、呜什を読み取り、前の呜什を実行し、同時にデヌタバスに曞き蟌むこずができたす。







パむプラむン

絵はもっず鮮明ですね。







IF-指瀺を受け取る

ID-指瀺の解読

EX-実行、

MEM-メモリアクセス、

WB-レゞスタに曞き蟌みたす。

すべおがシンプルに芋えたすか そしおいや 問題は、たずえば、ゞャンプjmp / branch /などによっおパむプラむンが匷制的に実行を再開次の呜什を取埗し、次の呜什を実行する前に2〜4サむクルの遅延が発生するこずです。







既存のアヌキテクチャを拡匵する



かなり䞀般的な手法は、既存のアヌキテクチャの拡匵機胜を䜿甚しお呜什を远加するこずです。 鮮明な䟋は、x86でのSSEです。 同じ眪ARMおよびMIPSおよびほずんどすべお。 なんで ナニバヌサルアヌキテクチャを䜜成するこずは䞍可胜だからです。







別のオプションは、他のアヌキテクチャを䜿甚しお呜什のサむズを小さくするこずです。

代衚的な䟋ThumbずARM、MIPS16ずMIPS。







GPUテクニック



倚くのコアはビデオカヌドによく芋られ、この機胜のため、远加の゜リュヌションが必芁です。 マむクロコントロヌラでもパむプラむンを芋぀けるこずができる堎合、GPUで䜿甚される゜リュヌションはたれです。 たずえば、マスク実行ARM呜什にありたすが、Thumb-I / IIにはありたせん。 その他の機胜がありたす浮動小数点数ぞのバむアス、コアの増加ずは察照的なパフォヌマンスの䜎䞋など。







マスクされた実行



このモヌドは、ゞャンプを䜿甚せずに呜什が順番に実行されるずいう点で埓来のモヌドず異なりたす。 呜什は、この呜什が実行される条件に぀いお䞀定量の情報を保存し、条件が満たされない堎合、呜什はスキップされたす。







しかし、なぜですか







答えは簡単です それは呜什のバスをロヌドしたせん。 たずえば、ビデオカヌドでは、1぀の呜什で数千のコアをロヌドできたす。 たた、ゞャンプシステムが䜿甚された堎合、コアごずに䜎速メモリからの呜什を埅぀必芁がありたす。 キャッシュは問題を郚分的に解決したすが、それでも問題を完党には解決したせん。







その他



ここでは、䞭倮凊理装眮およびマむクロコントロヌラヌで䜿甚されるいく぀かの手法に぀いお説明したす。







äž­æ–­



割り蟌み







割り蟌みは、珟圚実行䞭のコヌドを䞀時停止しお、特定の条件䞋で他のタスクを実行する手法です。 たずえば、存圚しないメモリ䜍眮にアクセスするず、HardFaultたたはMemoryFaultの割り蟌みたたは䟋倖が呌び出されたす。 たたは、たずえば、タむマヌがれロたでカりントダりンする堎合。 これにより、䜕らかのむベントを埅぀間、非アクティブにならないようにするこずができたす。







欠点は䜕ですか 割り蟌み呌び出しは、数回のアむドルサむクルであり、割り蟌みから戻るずきは数回です。 たた、コヌドの先頭にあるいく぀かの呜什は、割り蟌みテヌブル甚の呜什によっお占有されたす。







䟋倖



ただし、割り蟌みに加えお、たずえばれロで陀算する堎合など、ただ䟋倖が発生したす。 倚くの堎合、MIPSなどの割り蟌みやシステムコヌルず組み合わされたす。 AVRたたは䞋䜍PICなどのように、プロセッサに䟋倖が垞に存圚するわけではありたせん







システムコヌル



システムコヌルはオペレヌティングシステムで䜿甚され、プログラムがオペレヌティングシステムず通信できるようにしたす。たずえば、OSにファむルの読み取りを芁求したす。 割り蟌みに非垞に䌌おいたす。 同様に、䟋倖はプロセッサに垞に存圚するずは限りたせん







メモリアクセスコントロヌラヌおよびその他のプログラム栌玍方法



ここでは、アプリケヌションのハヌドりェアぞの盎接アクセスを拒吊する方法に぀いお説明したす。







特暩モヌド



これは、プロセッサが起動するモヌドです。 このモヌドでは、プログラムたたはOSはMMU / MPUをバむパスしおメモリにフルアクセスできたす。 これを目的ずしないプログラムのハヌドりェアサブシステムぞの盎接アクセスを避けるため、すべおのプログラムは非特暩モヌドで実行されたす。 たずえば、マルりェア。 Windowsでは、しばしばRing-0ず呌ばれたすが、* nixでは、システムず呌ばれたす。 ルヌトで特暩ナヌザヌず特暩モヌドを混同しないでください。ハヌドりェアに盎接アクセスするこずはできたせんこれを行うこずができるシステムモゞュヌルをダりンロヌドできたすが、埌で詳しく説明したす:)







MPUおよびMMU



MMU







MPUずMMUは、耇数のアプリケヌションを分離するために最新のシステムで䜿甚されおいたす。 ただし、MMUでメモリを「移動」できる堎合、MPUではメモリぞのアクセス/メモリ内の実行コヌドのみをブロックできたす。







PICPIE



PIEずは䜕ですか MK PICずの混乱を避けるためにPICは䜿甚したせん。 PIEは、コンパむラがメモリ内の任意の堎所で動䜜するコヌドを生成する手法です。 この手法ずMPUを組み合わせるず、MPUで機胜する高床なプログラミング蚀語をコンパむルできたす。







SIMD



䞀般的なSIMD技術は、1クロックサむクルで耇数のレゞスタに察しお耇数のアクションを実行するために䜿甚されたす。 たずえば、MIPS、NEON / VFP /などのARM、SSE2のx86など、メむンアヌキテクチャに远加される堎合がありたす。







最適化のための再配眮



この手法は、呜什を再゜ヌトしおコンパむラヌが生成するコヌドを最適化し、プロセッサヌのパフォヌマンスを向䞊させるために䜿甚されたす。 これにより、コンベアを最倧限に䜿甚できたす。







ステヌタスレゞスタ



ステヌタス







ステヌタスレゞスタずは䜕ですか これは、プロセッサの状態を保存するレゞスタです。 たずえば、プロセッサが特暩モヌドであるかどうか、最埌の比范の操䜜を終了したもの。







Masked Executionず組み合わせお䜿甚​​したす。 䞀郚の開発者は、MIPSに入力されたボトルネックになる可胜性があるため、ステヌタスレゞスタを特に陀倖しおいたす。







mov vs $ 0 reg



MIPSには、定数をメモリにロヌドするための個別の呜什はありたせんが、addiおよびori呜什があり、れロレゞスタ$ 0ずずもに、定数をレゞスタにロヌドする操䜜を゚ミュレヌトしたす。 他のアヌキテクチャには存圚したす。 このトピックに觊れたのは、緎習のある蚘事で圹立぀からです。







Rd、Rs vs Rd、rs、rt



算術呜什に含めるべきオペランドの数に぀いおは倚くの議論がありたす。 たずえば、MIPSは3レゞスタオプションを䜿甚したす。 2぀のオペランド、1぀のレコヌドのレゞスタ。 䞀方、2぀のオペランドを䜿甚するず、呜什のサむズが小さくなるため、コヌドが削枛されたす。 組み合わせの䟋は、MIPSのMIPS16ずARMのThumb-Iです。 パフォヌマンスの点では、それらはほが同じです芁因ずしお呜什サむズを陀く。







゚ンディアンネス



゚ンデンネス







バむトオヌダヌ。 ビッグ゚ンディアン匏ずリトル゚ンディアン匏を知っおいるかもしれたせん。 それらは、呜什/レゞスタ/メモリ/などでバむト順を蚘述したす。 ここでは、すべおが簡単だず思いたす:)。 MIPSなどのモヌドを組み合わせたり、同じ呜什システムを䜿甚するがバむト順が異なるプロセッサヌARMなどがありたす。







CPUビット



それで、プロセッサビットは䜕ですか 倚くの人は、これがデヌタバスのビットネスであるず信じおいたすが、そうではありたせん。 なんで マむクロコントロヌラずマむクロプロセッサの初期段階では、バスはたずえば4ビットですが、8ビットのパケットで送信されたす。 このプログラムでは、これは8ビットモヌドであるように芋えたしたが、珟圚のように幻想でした。 たずえば、ARM SoCでは、128ビットのデヌタたたは呜什バスがよく䜿甚されたす。







128/64/32







コプロセッサヌ



コプロセッサヌずは䜕ですか コプロセッサは、プロセッサたたは倖郚マむクロサヌキットの芁玠です。 これらは、プロセッサの䞻芁郚分にずっお面倒すぎる呜什を実行できるようにしたす。 代衚的な䟋ずしお、MIPSのコプロセッサヌは陀算ず乗算甚です。 たたは、80386の堎合は387など、浮動小数点数のサポヌトが远加されたした。 しかし、MIPSには倚くのコプロセッサヌがあり、それらの圹割を果たしたした。割り蟌み、䟋倖、システムコヌルを制埡したした。 倚くの堎合、コプロセッサには独自の呜什があり、これらの呜什が存圚しないシステムARMなどでは、トラップトラップを介しおそれを゚ミュレヌトしたす。 束葉杖ず䜎パフォヌマンスにもかかわらず、それらは倚くの堎合、マむクロコントロヌラの唯䞀の遞択肢です。







原子操䜜



アトミック操䜜は、1぀の疑䌌タクトで耇数のアクションを実行する呜什により、ストリヌムに䟝存しない実行を保蚌したす。







別の゜リュヌションの倉圢は、呚蟺の原子性です。 たずえば、STM32のレッグを高䜎に蚭定するには、異なるレゞスタを䜿甚したす。これにより、呚蟺レベルでの原子性が可胜になりたす。







キャッシュ



キャッシュ







確かに、あなたはL1、L2、L3およびレゞスタに぀いお聞いたこずがありたす。 芁するに、プロセッサはコヌドの䞀郚を分析しおゞャンプずメモリアクセスを予枬し、事前にキャッシュにこのデヌタをメモリから取埗するように芁求したす。 キャッシュはしばしばプログラムに察しお透過的ですが、このルヌルには䟋倖がありたす。 たずえば、FPGAの゜フトりェアコアは゜フトりェアキャッシュを䜿甚したす。







そしお、キャッシュミスやキャッシュミスなどのこずを聞いおしたいたした。 これは、プロセッサ向けではない操䜜であるか、プロセッサがメモリのこの郚分をキャッシュできたせんでした。 これは、メモリぞのアクセスが遅くなるずいう問題です。 ミスはプログラムに気付かれたせんが、パフォヌマンスの䜎䞋は芋過ごされたせん。たた、たずえば割り蟌み䞭にコンテキストを切り替えるず、小さなコヌドがパむプラむンずキャッシュを必芁に応じおノックするため、キャッシュが苊しみたす。







シャドヌレゞスタ



最近のプロセッサは、倚くの堎合、シャドりレゞスタ技術を䜿甚しおいたす。 これらを䜿甚するず、レゞスタの保存に関連する遅延を実質的に発生させるこずなく、割り蟌みずナヌザヌコヌドを切り替えるこずができたす。







スタック



スタック







スタック .NETずJavaでスタックを芋たした たあ、あなたは郚分的に正しいです。 スタックは存圚したすが、ほずんどのプロセッサではハヌドりェアではありたせん。 たずえば、MIPSにはそれがありたせん。 どうしお 答えは簡単です。 スタックは、バックアップする必芁のないメモリぞの単玔なアクセスです非垞に倧雑把な定矩。 スタックは、関数の呌び出し、匕数の受け枡し、関数の実行埌にそれらを埩元するためのレゞスタの保存などに䜿甚されたす。







ヒヌプずは䜕ですか ヒヌプは、スタックよりもはるかに倧きいメモリです通垞、スタックは玄1MBです。 ヒップはすべおをグロヌバルに保存したす。 たずえば、Mallocを䜿甚しお取埗したすべおのポむンタヌは、ヒヌプの䞀郚を指したす。 たた、ポむンタはスタックたたはレゞスタに保存されたす。 レゞスタにデヌタをロヌドするための呜什を䜿甚するず、スタックの皮類ごずにスタックやその他のメモリアクセスを高速化できたす。これは、PUSH / POP、INC / DECたたはADDI、SUBI定数を远加操䜜を垞に䜿甚しおスタックのデヌタを深くする必芁がないためです。負のオフセットを持぀スタックぞのアクセスを䜿甚するだけです。







登録



登録







レゞスタに぀いおはあたり詳しく説明したせん。 これに぀いおは、実践的な蚘事で觊れたす。







x86のレゞスタでは十分です。 MIPSは、31個のレゞスタを䜿甚したす$ 0の倀は垞にれロです。 バヌクレヌ倧孊のプロセッサはレゞスタりィンドりを䜿甚したした。これにより、機胜のネストが倧幅に制限され、パフォヌマンスが向䞊したした。 AVRなどのその他のものでは、レゞスタの䜿甚が制限されおいたす。 たずえば、3぀の16ビットは6぀の8ビットずしお解釈できたすが、最初の16ビットは䞀郚の操䜜では䜿甚できたせん。 MIPSが最良の方法を遞択したず思いたす。 これは私の個人的な意芋です。







アラむメント



アラむメントずは䜕ですか この質問はあなたにお任せください:)







終わり



これでれロパヌトの最初の章の終わりです。 シリヌズ党䜓は、独自のプロセッサを䜜成するずいうトピックを䞭心に展開したす。 独自のオペレヌティングシステム。 独自のアセンブラ。 独自のコンパむラなど。







れロの郚分は理論に専念したす。 シリヌズ党䜓を勝利に導くこずはできないず思いたすが、その詊みは拷問ではありたせん 








All Articles