「リアルタイム/マルチタスクシステムの徹底研究」を読む〜その1〜

機能要求と時間要求の分離

なかなか面白い視点だと思った。機能要求の分離はプログラムというものが発明されてからずーと言われてきたもの(だと思う)で、「データ構造とアルゴリズム」なんて考え方も機能要求の分離と捉えることも出来る。そのメソッドなんかも一杯提唱されている。
提唱されて入るが、なかなか習得するのは難しいみたいだ。いろいろ読んでもだめで、結局は経験の中から導き出すしかない。悲しいかな、コピーペーストでプログラムする人も世の中にはいて、たぶん、出発点が違っているので、いつまでたってもプログラムがかけないということになる。
時間要求の分離は、著者も書いている通り、確立した技術ではない。でも、考え方としては非常に面白い。

マルチタスクで使えないコーディング

本にあった、コーディング例をぱっと見て、何が悪いのか解らなかった。errno がいけないのか、、、。errno というより、グローバル変数がだめということだね。当たり前か。そういえば、eCos にも errno があるのだけど、スレッド内で整合性があうように、関数に置き換えられている。

goto 文との類似性とジョインブロック

いまだに BASIC の怨念というか、「goto 分は使わないようにしましょう。」という文章を目にする。勿論、C 等の場合、ほとんどの場合使う必要はない。C を普通に学べば、BASIC とちがって、goto 10 なんてする人もいないだろう。しかし、エラー処理などはやはり使ったほうが便利。C++ なら、より構造化された、try catch を使ったほうが便利。
ここでは、そういう話ではなく(苦笑)、ジョインブロックという概念が出てくる。よーく見ると、これはデータフロー型の言語。時間の概念を入れるとどうしてもこうなるのか。
VHDL でもやはり、時間の概念が出てくる。そこが、ハードウェアのソフトウェアと違うところ。ハードウェアの右上がりの性能向上がなくなりつつあるので、今後は、ソフトウェアにもハードウェアの気持ちになって、時間の概念を入れてプログラミングしてもらいましょうというところなのだろうか?
しかし、ただでさえ複雑なプログラムを早くするために、スーパースカラ的な発想をしながらプログラミングせよとなると、ちょっと、プログラマーに負担がかかりすぎである気がする。
そういえば、脱線するけど、今月のインタフェースの「新しい組み込みチップは California から」を読むと、”Intel チップがやって来たような命令レベルでの並列処理だけでは、同時に発行できる命令数を飛躍的に増大させるには、コード・レベルの構文解析が大変になるだけでなく、用意した演算装置ほどは速度の向上が維持できないということがわかってきました”と書いてあった。う〜ん。何をさしているかわからないけど、ちょっと違う気もするけど、Hyper-Threading Technology のことなら、これはその名が示すとおり、スレッドが沢山同時に実行されるときに威力を発揮する。むしろ、個の記事が意図するところはスーパースカラーかな。Ahtron XP や Itanium はスーパスカラのようだけど Pentium はどうなんだろう?まぁ、意図するところは、そういう細かいことではなくて、コンパイラ、OS が協調して、マルチコアを有効に使うような環境を作っていく方向にあるということか。

その他キーワード

リエントラント、アトミックアクション