トップ «前の日記(2004年02月15日) 最新 次の日記(2004年02月17日)» 編集
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|10|12|
2009|02|03|06|07|10|11|12|
2010|01|02|03|04|07|09|10|11|12|
2011|01|03|04|05|06|07|08|10|
2012|01|06|08|09|10|12|
2013|01|02|03|04|07|09|11|12|
2014|01|03|04|05|06|09|
2015|04|
2016|01|08|
ここは旧えびめもです。えびめも2に移行します(2016/12/1)

2004年02月16日 晴れ

CAT709

ここんとこSH-Linuxカーネルに割込みプライオリティーを追加したり、arch/sh/kernelの下とinclude/asm-shの下をいろいろといじっていてリアルタイム機能を追加する基礎実験を行っていたが一応の成果がだせた。リアルタイム割込みレイテンシ2〜4マイクロ秒(観測最悪値4.2マイクロ秒!!)だ。まずまずの速度だろう。というかおいら的用途ならば十分だ。
祝!リアルタイム動作
と言ってもしまおう。linux側はリアルタイムじゃないが、同一CPU上で並列にリアルタイム動作ができるようになった。fsm.lab社の"RT-Linux"のことじゃなくて、おいらのオリジナル。これが証拠Vだ(笑
motion jpeg 8Mbyte
SH-Linux上で並列処理でソフトウェアで
int hz[]={264,297,330,352,395,440,495,528};
ヘルツの音を出す実験だ(つまりド〜ド)。デジタル出力ポート(1bit)に圧電ブザーを付けて音を鳴らしている。例えば、440Hz(Aの音)を出すには正確な時間で毎秒880回のビット反転を行わなければならない。音を出している間(ビット反転している間)linuxは普通に動く。コマンドをたたけばちゃんと反応するし外からのpingにも応答する。通常のlinuxでこれをやろうとするとかなり無理があるのだ。全部のタスクをとめてしまってシングルタスクでやろうとしたら可能かもしれないけど,,,それではリアルタイムにならないし第一UNIXと呼べない。webサーバにもならない。今回はちゃんと並列処理をしているのでlinux上でどんなコマンドを実行してもCFにアクセスに行ってもネットワークに負荷をかけても音の出力には影響を与えないところまで成功した。リアルタイム化への基礎実験はうまくいったと言える。当然音を出し続けている間もlinuxは普通に動作している。特に見た目上、重くなったりはしない。

ネックになるのはカーネルやドライバの割込み禁止区間じゃなくて(これは簡単に解決できた)、このまえ書いたけどTLBミスマッチ等の一般例外実行時間だ。仮想メモリ上で動くタスクはTLBミスマッチからは逃げられない。ここのpage_fault()処理を最適化すればもうちっとレイテンシを短くできるかもしれないけど、おいら的には100usecだって十分だったりする。とりあえずユーザー空間でアドレスエラーを多発するプログラムを書いて影響を調べたけど、心配したほど大した影響はないのかもしれないなぁ。

ファンクションを整備したら公開する予定。