2005年04月24日
同期
タイミングの制御っていうのをやらなきゃならなくなると,色々なものの同期を取らなければならない.
完璧に同期を取るためには,
最終的にクロック信号に頼らなきゃダメなんだろうなぁ.
そういうところに大きな隔たりを感じるところに,
ソフトウェア屋の限界を感じる.
その辺の力も今後付けて行きたい.でもどうやって?
その辺の力も今後付けて行きたい.でもどうやって?
- by fujie
- at 23:58
comments
久しぶりにコメント。
多分フジエさんは、ミリ秒~マイクロ秒単位のタイミング制御ってことが意識にあるんだと思いますが、セマフォを使ったスレッド間の同期にしても立派な制御であるわけで、そのレベルであったら別にソフトウェア屋(というかOSが提供する機能)でもOKなわけです。
自分もハードはわからないのですが、クロック信号で同期を取ろうと思った場合、ソフトウェアのセマフォみたいに関数一発呼んで終了とはならないで、回路設計を頑張る必要があると思うんですけど、そこら辺がFUJIEさんの言う「隔たり」ってことなんでしょうかね?
でも、各モジュール間の連携プレイという意味では、スレッドも回路系も共通する部分があると思うのですが・・・
単に同期って言葉で済ますのはよろしくなかったかもしれませんね.
ハードウェアの場合は,ある決まった動作はある決まった時間に(遅延が起こらないだけでなく,早期に終わると言うこともなく)必ず終了するという保障があります.昔のユニタスクで動いていた計算機は同様の仮定が基本的に使えた(キーボード入力等の割り込みはあるわけですが)と思いますが,今はマルチタスク・マルチユーザーということで,時間の概念が相当曖昧になってますよね.何クロックで終了する計算だから,何秒後に終了するという保障が無い.
シバチョさんはソフトウェアが簡単だというスタンスでコメントしてるけど,実際はハードウェアでやった方が簡単な話なんだと思います.
今回の問題は,別のハードウェアのデータを別々のインターフェースを介してLinuxでドライバを介して取得した時の同期を取りたいという話でした.基本的には両者ともコマンドを発行して,各々が最新だと思うデータを返すというロジックで使います.そうなると,実際はいつのデータなんだ?という話になります.実時間でいつ,というよりは,片方のデータを取ったのとほぼ同時にもう片方のデータを取れればいいわけで,あるきっかけ(クロック)を与えたときのデータが取れればそれで一発OK.なのに,なんか色々補正とか,パラメタとか弄って最適っぽいものをなんとなく作るという方式にしてるので,なんだかなーと思ったというところです.