• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:コンピュータアーキテクチャに関して、下記のように質問があります。 )

コンピュータアーキテクチャにおけるデータ処理と同期の疑問

このQ&Aのポイント
  • コンピュータアーキテクチャにおいて、クロック信号とは異なるタイミングで発生するデータの処理方法について疑問があります。
  • マウスやキーボードからの割り込みやネットワーク通信において、データ処理が間に合わない場合の取りこぼしについても疑問があります。
  • 初学者として、コンピュータアーキテクチャについて興味を持っており、詳しい説明をお願いしたいです。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

非同期通信に関するご質問と、CPUの処理落ちの話かと思います。 少し長くなりますがご了承ください。 ==  先に、簡単そうなCPUの処理落ちに関してです。  CPUの処理が追いつかずにデータを取りこぼすことはよくあります。当然取りこぼしてはダメなのですが、普通のCPUはすべてのデータを期間内に絶対に処理できるようには設計されていないので、こういったことが起こりえます。  この場合、キーボードのような信号は取りこぼしても、まぁあまり問題ないので取りこぼしたであろうデータは無視して作業を進めます。ネットワークのデータ等は、TCP/IPプロトコルにより、取りこぼしが検知されれば、取りこぼしたデータがまた再送されるようになっています。UDPプロトコルならば、キーボードと同じように取りこぼしたデータを無視します。  要するに、CPUの処理落ちに関する処遇をどうするかは設計者次第であり、システムの要件に応じてその処遇を決定します。確実な受け渡しが必要なデータなら、再送システムとして設計します。そうでないなら、無視してもつじつまが合うように設計します。  余談ですが、すべてのデータを期間内に絶対に処理できるように設計されたシステムをリアルタイムシステムと呼びます。軍事機器や医療機器などが有名ですが、かなり特殊で高度な設計が必要になります。  普通のコンピュータは非リアルタイムシステムですので、データ処理時間の目標は、あくまで努力目標です。 == 次に、非同期通信に関してですが、まず2つ状況が考えられます。シリアルデータの受信と、パラレルデータの受信です。 ・非同期シリアルデータの受信  これが、おっしゃる「割り込みやネットワーク間での通信の際は必ずしもクロック信号と同じタイミングで(割り込みや通信の)データが発生するわけではない」という状況に当たります。じつは、これはとても沢山考えるべき問題があります。とても難しく、根の深い問題で、すべては解説できませんので、簡単な流れだけ抜粋して説明します。  まず非同期のシリアル信号を1つ(または必要に応じた段数)のフリップフロップ(F/F)で受信します。F/FはCPUに同期しています。このF/Fは同期化F/F、シンクロナイザ、またはメタステーブル防止F/Fなどと呼びます。いろいろな呼び方があって困ります。メタステーブルとは、非同期信号を同期回路で受ける際に発生しうる不可避の問題で、F/Fが発振してしまう現象です。非同期通信では、このメタステーブルが一番の問題となります。メタステーブルは有名なのですが、詳しい記事が少ないので分かりづらいかもしれません。参考URLなどをどうぞ。  とにかく、このように非同期信号を一回シンクロナイザF/Fで受けると、そのF/Fの出力はCPU同期信号として取り出せますから、普通に処理できます。  シンクロナイザで非同期信号を同期化する際に、本来の非同期信号のタイミングとの誤差が、最大1サイクルの周期分生じます。しかし、これは不可避の誤差となりますので、後段のデジタル回路はその誤差を考慮してもなお正しく動作するように設計しなければなりません。  シリアル受信したデータをシフトレジスタなどでパラレル化すれば、CPUに受け渡せるようになります。 ・パラレルデータのやり取り  クロックAとB(AとBの周波数と位相が異なる)で動くCPUAとCPUBの間でのやりとりも非同期通信に当り、この場合は非同期FIFO等を通じてデータをやりとりします。 近年のコンピュータの設計上とても重要な部分に興味を持たれているようですので、頑張ってください。

参考URL:
http://www.miyazaki-gijutsu.com/series4/densi0527.html
miyaken912
質問者

お礼

非常にわかりやすい解説ありがとうございます。 非同期信号を同期回路で受ける際に発生しうるメタテーブルの問題、とても勉強になりました。参考URLも読ませていただきました。 そこで重ねて申し訳ありませんが、新たな質問があります。 非同期通信の際の挙動をより具体的に想像してみたのですが、以下のような解釈で間違ってないでしょうか? ?外部からの非同期信号は、シンクロナイザF/Fを通して同期化されコンピュータ内へ渡される。しかし、シンクロナイザと外部からの受信データは非同期なので、データを取りこぼすこともある。 ?受け取ったデータ、また内部からの割り込み信号は、逐次CPUが処理していたら間に合わないため、CPUで処理する前に一度バッファとしてメモリ上のスタックに積む?(これはハードウェア的に実現されている?) ?OSは一定期間毎にバッファのデータを読み出し(ポーリングし)、処理を行う。 特に?についてあまり自信がないのですが、もし間違っている部分や補足がありましたら恐縮ですがよろしくお願い致します。

その他の回答 (3)

回答No.4

?外部からの非同期信号は、シンクロナイザF/Fを通して同期化されコンピュータ内へ渡される。しかし、シンクロナイザと外部からの受信データは非同期なので、データを取りこぼすこともある。 はい。外部の信号が運悪くクロックのタイミングに合わない場合は取りこぼします。 取りこぼしを防ぐ場合はF/Fの前段にラッチを使って信号を引伸したりします。 ?受け取ったデータ、また内部からの割り込み信号は、逐次CPUが処理していたら間に合わないため、CPUで処理する前に一度バッファとしてメモリ上のスタックに積む?(これはハードウェア的に実現されている?) 割り込み履歴を取るかどうかはCPU外部の割り込みコントローラの仕様によります。 割り込みコントローラがスタックに積むように出来ている場合は、CPUの介在を必要とせずスタックに詰めますが、私の経験上では割り込み履歴を保存するシステムは少ないようです。 割り込みコントローラが対応していない場合は、CPUのプログラム上で取りこぼしを想定しても、なおつじつまが合うようにプログラムを書きます。 ?OSは一定期間毎にバッファのデータを読み出し(ポーリングし)、処理を行う。 たとえ履歴を取っていたとしても、OSが割り込みの有無をポーリングすることはまずないと思います。CPUが割り込み要求を確認してから、OSの割り込みハンドラにジャンプし、ハンドラのプログラム中で、おっしゃるような状況でしたらスタックを確認し、最も処理優先度の高い割り込みを処理します。 割り込み要因が複数考えられる場合はそれぞれ優先度が決まっていることが多いです。

  • lv4u
  • ベストアンサー率27% (1862/6715)
回答No.2

>>CPUの処理が間に合わないときもあると思うのですが、そういった場合はデータを取りこぼしたりしないのでしょうか? 昔の8bitマイコン(こう呼んでいた)で、クロック10MHz、メモリはたった16KBとかいう、今よりもずーーーと性能が低かったころ、2400bpsモデムなんて低速の機器からの受信データを取りこぼすことがありましたね。 で、処理速度の速いシリアルI/O用のLSIを積んだボードを外付けして対処するとか、通信ドライバのソフトを修正して、バッファを拡大したりとか、いろいろとやったもんです。 自分でハードを組み立てて、それを制御するソフトも作ってみるなんてのは、面白いですよ。がんばってください。

miyaken912
質問者

お礼

ご回答ありがとうございます。 >2400bpsモデムなんて低速の機器からの受信データを取りこぼすことがありましたね。 なるほど、クロックサイクルが長ければ(遅ければ)やはり受信したデータを取りこぼすこともあるのですね。 いずれマイコンなどにも挑戦してみたいです。どうもありがとうございました!

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

上: CPU は基本的にクロックに同期して動きます. だから, 「クロックに同期して処理する」ということになります. 例えば, 割り込み信号は「クロックに同期したあるタイミング (このタイミングは CPU による) で入ったとき」に「割り込み」として認識されます. 通信については, 今時なら割り込みで処理するのが普通. ものによってはポーリングするかもしれんけど. あと, CPU の処理が間に合わなければ, 当然取り零します. そうならないようにシステムを組んだりプログラムでなんとかするんだけど.

miyaken912
質問者

お礼

ご回答ありがとうございます。 やはり割り込み信号は「クロックに同期したあるタイミングで入ったとき」に「割り込み」として認識されるんですね。納得しました。 貴重な解説ありがとうございました!