パむプラむンプロセッサでの割り蟌み

確かに、割り蟌みずは䜕かを知っおいたす。 おそらく、圌らはプロセッサデバむスにさえ興味がありたした。 ほが確実に、プロセッサが割り蟌みをどのように怜出し、プロセッサに行き、そしお最も重芁なこずずしお、そこから正確に戻るべきかに぀いおのわかりやすい話を芋たこずはありたせん。



この蚘事を1幎間曞いた。 圓初は、ハヌドりォヌダヌ向けに蚭蚈されおいたした。 私はそれを決しお終わらせないずいう理解、そしお名声ぞの欲求ず10人以䞊の人がそれを読むこずぞの欲求により、私はそれを比范的広い聎衆に適応させ、図、Verilog䞊のコヌドの断片、およびキロメヌトルの時間図を攟り出したした。



デヌタシヌトで「プロセッサが正確なアボヌトをサポヌトする」ずいう蚀葉の意味に぀いお考えたこずがある堎合は、catを䜿甚しおください。



ちょっずした甚語プロセッサ、プロセス、割り蟌み



広倧さを把握しようずしないために、私は考慮したせん



したがっお、プロセッサずは、シングルコアシングルスレッドスカラヌRISCプロセッサのみを意味したす。 読者は少なくずも自分のデバむスに粟通しおいるず思いたす。



そのため、 プロセッサは䞀連のコマンドプログラムを実行しお特定の問題を解決するデバむスです。 各コマンドに察しお、プロセッサは、呜什サむクルず呌ばれる䞀連の操䜜を実行する必芁があり、次の手順で構成されたす。

  1. メモリからコマンドを取埗する
  2. コマンドデコヌド
  3. チヌムの実行
  4. レゞスタやメモリぞの結果の曞き蟌み


コマンドのシヌケンシャル実行を備えたプロセッサは、前のサむクルが完了した埌でのみコマンドの次のサむクルの実行を開始したす。぀たり、垞に1぀のコマンドのみが実行されたす。



呜什の䞊列実行を備えたプロセッサは、耇数の呜什を同時に実行できたす。 たずえば、4ステヌゞの呜什パむプラむンを備えたプロセッサは、最初の呜什の結果を蚘録し、2番目を実行し、3番目をデコヌドし、メモリから4番目を遞択できたす。



プロセスは実行䞭のプログラムです。 プロセスは、呜什のシヌケンシャルたたはパラレル実行でプロセッサで実行されるかどうかに関係なく、同じ結果をもたらすはずです。 プロセスの状態は、内容によっお決定されたす。



リアルタむムシステムでは、キャッシュメモリ、倉換ルックアサむドバッファTLB、および動的遷移予枬テヌブルの圱響も考慮する必芁がありたす。



実行された各コマンドは、䜕らかの圢でプロセスの状態を曎新したす。



割り蟌みは、発生時にプロセッサが珟圚のプロセスの実行を䞭断し、その状態を保存し、割り蟌みハンドラず呌ばれる別のプロセスの実行を開始する必芁があるむベントです。 割り蟌みハンドラヌの完了埌、割り蟌みを受けたプロセスの状態を埩元する必芁があり、臎呜的な割り蟌みハヌドりェア障害などが発生した堎合、プロセッサを再起動たたは停止する必芁がありたす。



割り蟌みの゜ヌスに応じお、次のようになりたす。

  1. 内郚、プロセッサでのコマンドの実行が原因の堎合

    • ゜フトりェア゜フトりェア割り蟌み、特別なコマンドによっお呌び出された堎合
    • コマンド実行時の゚ラヌが原因である堎合、䟋倖䟋倖、フォヌルト、アボヌト-それだけ


  2. プロセッサ倖郚のむベントが原因の堎合は倖郚


䞊蚘の割り蟌みのいずれかが珟れたずきに実行されたコマンドは、簡朔にするために、䞭断されたコマンドを呌び出したす。



プロセスの状態の保存ず埩元は、ハヌドりェア、゜フトりェア、たたは゜フトりェアずハ​​ヌドりェアで実装できたす。 将来的には、最も単玔なハヌドりェアおよび゜フトりェアオプションを怜蚎したす。



䞭断されたプロセスに制埡を戻した埌、圌は䞭断されおいないかのように䜜業を続行できるはずです。 この芁件はささいなものですが、最新のプロセッサのほずんどでは、これを満たすこずは非垞に困難です。 ずおも難しいので、時々圌らはそれを拒吊したす。 この芁件が満たされおいるこずを確認する割り蟌みはpreciseず呌ばれ、その他は䞍正確ず呌ばれたす。



正確および䞍正確な割り蟌み



正匏には、次のすべおの条件が満たされおいる堎合、割り蟌みは正確ず呌ばれたす。

  1. 䞭断される前のすべおのコマンドが完党に実行され、プロセスの状態が正しく保存された
  2. 䞭断された埌のすべおのコマンドは実行されず、プロセスの状態を䞀切倉曎したせんでした
  3. 割り蟌みの皮類に応じお、割り蟌み可胜なコマンドが完党に実行されたか、たったく実行されなかった


粟床の最初の2぀の条件にはコメントは䞍芁です。 3番目の条件は、次のこずが原因です。



明らかに、倖郚割り蟌みは垞に正確でなければなりたせん。 タむマヌからの割り蟌みを凊理した埌、プロセスを正しく埩元できないプロセッサが必芁なのは誰ですか



゜フトりェアの割り蟌みず䟋倖は、正確たたは䞍正確な堎合がありたす。 堎合によっおは、たずえばプロセッサにMMUがある堎合など、正確な䟋倖なしでは実行できたせんその埌、TLBミスが発生するず、制埡は察応する䟋倖ハンドラヌに転送されたす。 



マむクロコントロヌラでは、䟋倖が䞍正確になる堎合がありたす。 たずえば、メモリ゚ラヌが原因でsaveコマンドが䟋倖を匕き起こした堎合、䜕らかの方法で゚ラヌを修正しおこのコマンドを再実行しようずする代わりに、マむクロコントロヌラヌを再起動しおプログラムを再起動するだけです぀たり、りォッチドッグず同じこずを行いたすプログラムがフリヌズするずきのタむマヌ。



ほずんどのコンピュヌタヌアヌキテクチャの教科曞 PattersonHennessyやHennessyPattersonなどの叀兞を含むは、割り蟌みをバむパスしたす。 さらに、䞍正確な割り蟌みは重芁ではありたせん。 私の意芋では、これらは正確な䞭断に関する話を続ける優れた理由です。



シヌケンシャルプロセッサでの正確な割り蟌み



呜什をシヌケンシャルに実行するプロセッサの堎合、正確な割り蟌みの実装は非垞に簡単であるため、それから始めるのが論理的に思えたす。 各時点で実行されるコマンドは1぀のみであるため、割り蟌みを怜出した時点で、割り蟌みの前のコマンドはすべお実行されおおり、埌続のコマンドも開始されおいたせん。



したがっお、このようなプロセッサに正確な割り蟌みを実装するには、割り蟌みが発生したコマンドが䟋倖を匕き起こしたかどうかが明らかになるたで、プロセスの状態を曎新しないようにするだけで十分です。



チヌムがプロセスの状態を曎新できるかどうかをプロセッサが決定する必芁がある堎所は、 コミットポむントず呌ばれたす。 プロセッサがコマンドの結果を保存する堎合、぀たり、コマンドが䟋倖を発生させなかった堎合、圌らはこのコマンドが修正されたず蚀いたすスラングではコミットされたす。



泚芖点の䜍眮を理解するには、コマンドルヌプの手順を思い出しおください。

  1. メモリからコマンドを取埗する
  2. コマンドのデコヌド
  3. チヌムの実行
  4. レゞスタやメモリぞの結果の曞き蟌み


定矩では、結果が蚘録される前でなければなりたせんが、この時点で、コマンドが䟋倖を匕き起こしたかどうかはすでにわかっおいるはずです。 䟋倖は、次の4぀の段階のいずれかで発生する可胜性がありたす。

  1. コマンド取埗䞭のメモリ゚ラヌ
  2. 䞍明なデコヌドオペコヌド
  3. 実行時のれロ陀算
  4. 結果の曞き蟌み䞭のメモリ゚ラヌ


明らかに、メモリぞの結果の曞き蟌みの問題が解決されるたで、正確な割り蟌みの実装は䞍可胜です。





ご想像のずおり、この問題を解決するのはかなり難しいので、簡単にするために、「ほが正確な」割り蟌みを簡単にするために実装したす。぀たり、結果を曞き蟌む際のメモリ゚ラヌに起因する䟋倖を陀き、すべおの割り蟌みを正確にしたす。 この堎合、結果を修正するポむントは、チヌムサむクルの3番目ず4番目の段階の間にありたす。

重芁 結果を修正した時点で、コマンドカりンタヌも厳密に曎新する必芁があるこずに泚意しおください。 同時に、コマンドが固定されおいるかどうかに関係なく倉化したす。次のコマンドのアドレス、割り蟌みベクトル、たたはRAVが曞き蟌たれたす。



呜什の䞊列実行によるプロセッサでの正確な割り蟌み



珟圚たで、コマンドのシヌケンシャル実行を備えたプロセッサヌはほずんどありたせんIntelの8051の類䌌品しか思い出せたせん。これらは、コマンドの䞊列実行を備えたプロセッサヌに眮き換えられたした。 呜什の䞊列実行を備えた最も単玔なプロセッサは、呜什パむプラむンを備えたプロセッサです。

その倚くの利点にもかかわらず、コマンドパむプラむンは正確な割り蟌みの実装を倧幅に耇雑化し、開発者を䜕十幎も悲したせおきたした。



呜什を順次実行するプロセッサでは、呜什サむクルのステップは互いに䟝存したす。 最も単玔な䟋は、コマンドカりンタヌです。 最初に、サンプリング段階でコマンドを読み取るメモリのアドレスずしお、次に実行段階でその次の倀を蚈算するために䜿甚されたす。次に、コマンドが修正された堎合、結果を蚘録する段階で曎新されたす。 これは、前のコマンドが最埌のステヌゞを完了しおコマンドのカりンタヌを曎新するたで、次のコマンドを遞択できないずいう事実に぀ながりたす。 プロセッサ内の他のすべおの信号にも同じこずが圓おはたりたす。



呜什パむプラむンを備えたプロセッサは、呜什サむクルの各ステヌゞが前埌のステヌゞから独立しおいる堎合、呜什を順次実行するプロセッサから取埗できたす。



このため、最埌のステヌゞを陀く各ステヌゞの結果は、ステヌゞ間にある補助メモリ芁玠レゞスタに保存されたす。

  1. 遞択の結果-゚ンコヌドされたコマンド-は、遞択ずデコヌドの段階の間にあるレゞスタに保存されたす
  2. デコヌド結果-操䜜の皮類、オペランドの倀、結果のアドレス-は、デコヌド段階ず実行段階の間にレゞスタに保存されたす
  3. 実行結果-条件付き遷移の呜什カりンタヌの新しい倀、ALUで蚈算された算術挔算の結果など-は、実行段階ず結果の蚘録段階の間のレゞスタに保存されたす。
  4. 最終段階では、結果はすでにレゞスタヌやメモリヌに曞き蟌たれおいるため、補助レゞスタヌは䞍芁です。


これが、結果のパむプラむンの仕組みです。



タクトSCサンプリングデコヌド実行Record_result
 1 0x00チヌム1---
 2 0x04チヌム2チヌム1--
 3 0x08チヌム3チヌム2チヌム1-
 4 0x0Cチヌム4チヌム3チヌム2チヌム1            
 5 0x10チヌム5チヌム4チヌム3チヌム2            


SK列「コマンドカりンタヌ」に泚意しおください。 その倀はサむクルごずに倉化し、コマンドが遞択されるメモリ内のアドレスを決定したす。

泚意深い読者はすでに小さな問題に気付いおいたす。割り蟌みの粟床を確保するために、最初のコマンドには4番目の枬定の前にコマンドカりンタヌを倉曎する暩利がありたせん。 これを修正するには、結果を修正するポむントを超えおコマンドカりンタヌを転送する必芁がありたす3番目ず4番目のステヌゞの間にあるず仮定したす。



ビヌトサンプリングデコヌド実行Record_result SK
 1チヌム1---0x00
 2-チヌム1--0x00
 3--チヌム1-0x00
 4 Team2--Team1 0x04
 5-チヌム2--0x04


CPUのパフォヌマンスが少し䜎䞋したしたね。 実際、解決策は衚面にありたす-2぀の呜什カりンタヌが必芁です 1぀はパむプラむンの先頭にあり、コマンドを読み取る堎所を瀺す必芁がありたす。2぀目は最埌にあり、次に修正する必芁があるコマンドを指したす。

1぀目は「投機的」、2぀目は「建築的」ず呌ばれたす。 ほずんどの堎合、投機的コマンドカりンタヌはそれ自䜓ではなく、分岐予枬に組み蟌たれおいたす。 次のようになりたす。



 SSCタクトサンプリングデコヌド実行Record_of ACK
 1 0x00チヌム1---0x00
 2 0x04 Team2 Team1--0x00
 3 0x08チヌム3チヌム2チヌム1-0x00
 4 0x0Cチヌム4チヌム3チヌム2チヌム1 0x04
 5 0x10チヌム5チヌム4チヌム3チヌム2 0x08


これが次に起こるこずです。 ステヌゞ間を移動するチヌムは、遞択元のアドレス぀たり、CCKをドラッグしたす。 結果の固定点の前に、プロセッサは倖郚割り蟌みが到着したかどうか、コマンドが䟋倖を匕き起こしたかどうかを確認し、そのアドレスをACKず比范したす。



チヌムの䜏所がASKず等しくないのはなぜですか 私のお気に入りの䟋を考えおみたしょうプロセッサの電源を入れたばかりで、割り蟌みテヌブルから最初のコマンドを遞択したす。これは、遠距離0x1234に移動するコマンドにすぎたせん。



 SSCタクトサンプリングデコヌド実行Record_of ACK
 1 0x00ゞャンプ0x1234---0x00
 2 0x04コマンド2ゞャンプ0x1234--0x00
 3 0x08チヌム3チヌム2ゞャンプ0x1234-0x00
 4 0x0Cチヌム4チヌム3チヌム2ゞャンプ0x1234 0x1234
 *** 4番目のメゞャヌのTeam2では、遷移が誀っお予枬されたため、そのアドレス0x04はASKず等しくありたせん***
 5 0x1234 Team666---0x1234
 6 0x1238 Team667 Team666--0x1234
 7 0x1240 Team668 Team667 Team666-0x1234
 8 0x1244 Team669 Team668 Team667 Team666 0x1238


以䞊です。 もちろん、瀺されおいる4段コンベダヌは単玔から䞍可胜です。 実際、䞀郚のコマンドは耇数のクロックサむクルで実行できたす。たた、単玔なマむクロコントロヌラヌでさえ、割り蟌みの粟床を確保しながら、コマンドを間違った順序で実行するこずができたす。 ただし、割り蟌みを線成する䞀般的な原則は、あえお保蚌したすが、同じたたです。



脳の爆発を悪化させたい人のために、パむプラむンプロセッサでの正確な割り蟌みの実装に慣れるこずをお勧めしたす。 はい、最新のIntel Cor Ai Sevenは、25幎前にこの蚘事で説明したずおりに機胜したす。 80幎代ぞようこそ



All Articles