SSブログ

某誌のなんとかアカデミー最終回 [Smalight OS]

今頃になって某誌6月18日号を読んでみました。
まあ記事全般は面白かったのです。アナログ放送の停波にはムカッと来ましたが。

でまあ、例によってなんとかアカデミーも読んでみましたが、相変わらず無茶を書く。

記事の内容は、高負荷時の割り込みと、それによって発生するスラッシングのメカニズムの解説と言った所でしょうか。
記事を転載できないので要約すると、「高負荷時に非同期の割り込みが集中発生すると、スラッシングと言う状態に陥り、実行し損ねた割り込みを実行しようとして、徐々にスタック領域を食いつぶし、最後にはシステムクラッシュに陥る」との事です。

うーーん!割り込みって、割り込み処理が終わる度にスタック領域が返却される事になっているので、割り込みが集中したとしても、全体の使用量は決まっているんですけれどね。
返却し切れていないスタックが有ったとすれば、それはプログラムに問題が有るのですよ(普通にC言語で開発すればそんな事にはならない筈。アセンブラ等を使って自分でスタックをいじった場合は、返却し損ねは可能性として有る。)。

多分、多重割り込みが発生した時にスタックオーバーフローになると言いたかったのかもしれませんが、本来多重割り込みが発生する事を想定してシステムを作っているのでしょうから、ワーストケースのスタック使用量は事前に盛り込んだ上でシステム設計するのが普通でしょう。最近の統合開発環境ならば、自動的にスタックサイズも計算してくれたりしますし。

つまりそこでスタックオーバーフローしているシステムは、高負荷状態でなくともスタックオーバーフローする可能性が有ると言う事になります(非同期割り込みですから。)。

ではスラッシングとは?になりますが、簡単に言えば、割り込みの出入り口処理の様な、本来の処理に関係しない処理に掛かる時間が、本来の処理に必要な時間を圧迫している状態。

対策は!、CPUを速い物に交換してください(*^。^*)。だって、処理が間に合わないからそうなっているんだから。後はプログラムを工夫するとか、メモリやメモリ配置を工夫して、メモリアクセスに掛かる時間を減らすとか。

他に対策できる要素を検討してみると、結局割り込みの数を減らせばよい訳で、例えば低価格なマイコンのSCIって1byte位しかバッファが有りませんので、転送スピードが速く、転送数が多いと、結構マイコンは苦しくなって来ます。もし使えるなら、NS16550の様に16byte位のバッファを内蔵している周辺チップを使えば、かなーり楽になる筈です。
ネットワークコントローラなんかも、一々パケットを受信する度に対応するのではなく、大概はコントローラ内部に大きなバッファを持っていますので、しばらく放って置いてから複数のパケットをまとめて処理すれば、割り込みのオーバーヘッドをかなり削減できます。DMAを使うのも有効でしょう。
TCP/IPなんかはリアルタイム性を保障しなくてもいいので、受信パケットは暫く放って置けます。

結局高負荷での実行中に「割り込みを制限する」なんてのは多分無理なので、システム設計の段階で、十分検討し、必要ならばCPUの負担を減らす対応をするしか無いですね。

あと、右側の注1)ですが、それはCISC、RISCの違いではないでしょう。割り込みコントローラの違いだと思うんだが。


nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。