それは単に機能ごとに分割したサブルーチンかもしれませんが,周期的に,または,何らかのイベントを検出して処理を行うプログラムは全てアプリケーションタスクと呼んでも構いません.
●不正なループの回避
アプリケーションタスクの局所ループを回避する方法は二つしかありません.
(a) アプリケーションタスクで永久ループをバグと捉えて,ループしないプログラムを作る.
(b) アプリケーションが不正な状態でもメインループに戻れるような仕組みを作りこむ.
(a)の手段は単なるアプリケーション単位の実装依存の対応手段ということに対して,(b)の手段はいわゆる,OS の実装,ということになります.
●イベントループ
GUI プログラミングなどでのアプリケーション単位にループしているイベントループ処理はここで言うところのメインループではありません.
イベントループは必ずループ中にイベントを検出するための検出関数または
システムコールが存在します.
これらのイベント検出システムコールなどの処理にはアプリケーションの局所ループから抜けてOS の処理に戻る仕組みが実装されています.
したがって,それらの関数を呼び出した時点でOS が作りだしたメインループに
処理が遷移します.コーディング上はアプリケーション内で局所的にループしているように見えても実は局所的にはループしていないことになります.
他のアプリケーションに対するイベント検出なども行うような大きなメインループが背後では動作していることになります.
これがOS の実装による効果です.
●割り込み処理はループ禁止
割り込み処理は局所的なループから別の処理に遷移するための唯一の手段
です.もし,その割り込み処理内で不正なループが構成されると二度と
システムは復帰できなくなってしまいます.
セコメントをする