加速度モジュール続き。本番のテスト用のLPC2388に継ぎました。急いでるとい
きなりロガーに配線しだすのだけど、ちょっとのんびり。LPC2388はI2Cモジュー
ルが三つある。そのうちの一つだけがオープンドレインでI2Cを完全に満たす。
とりあえずレジスタ定義を書いたところまで。データシートを見ると、やはり ステートを調べるのが複雑だな...。

スケジューラアクティベーション続き。実際のアップコールについて。このあ たりからスケジューラアクティベーションはだめなんじゃないかというような 香りがしてくる。レースコンディションをなんとかするために無理しているよ うな...。
アップコールの一般的で、効率的な枠組がないと。それが簡単ではないのはシ グナルの歴史が物語っているのかもしれないけれど...。
とりあえずレジスタ定義を書いたところまで。データシートを見ると、やはり ステートを調べるのが複雑だな...。

スケジューラアクティベーション続き。実際のアップコールについて。このあ たりからスケジューラアクティベーションはだめなんじゃないかというような 香りがしてくる。レースコンディションをなんとかするために無理しているよ うな...。
アップコールの一般的で、効率的な枠組がないと。それが簡単ではないのはシ グナルの歴史が物語っているのかもしれないけれど...。
Adding Scheduler Activations to Mach 3.0 Paul Barton-Davis, Dylan McNamee, Raj Vaswani, and Edward D.Lazowska University of Washington Technical Report 92-08-03 Reversed March 1993続き。
2.2 カーネルイベントの扱い スケジューラアクティベーションの枠組の中で、特定のカーネルイベントはタ スクに通知される。通知はカーネルからユーザ層へのアップコールとして実装 され、その引数は以下に述べる通りである。カーネルからユーザ層に送られる のは四つの通知がある。 + blocked (new_sa, event_sa, interrupted_sas): new_saはevent_saがブロッ クされたことを伝える。interrupted_sasは通知を配送するために割込まれ たかもしれないアクティベーションを照会する(*)。2.2.1章で述べるように、 この'blocked'の通知の場合ではこの引数は常にNULLである。(*)この場所は interrupt_sas(複数形)と呼ばれる。それはアクティベーションは通知の準 備をしている間にカーネルの中でブロックされることがあるからだ。この場 合では、幾つかのアクティベーションは最終的に配送される前に割込まれて いるかもしれない。 + unblocked (new_sa, event_sa, interrupted_sas): new_saはevent_saのブ ロックが解除されたことを通知する。interrupt_sasは通知を提供するのに 横取りされたかもしれないアクティベーションを照会する。 + preempted (new_sa, event_sa, interrupted_sas): news_saはevent_saがプ ロセッサの再割当てよって横取りされたことを通知する。interrupted_sas は通知を提供するのに割込まれたかもしれないアクティベーションを照会す る。 + processor_added (new_sa, event_sa, interrupted_sas): new_saは新しく プロセッサがタスクに割当てられたことを通知する。この通知では event_saとinterrupted_sasは両方ともNULLである。(2.2.4章を見よ) これらの四つの通知の実装は以下に続く四章で述べる。まず最初に必要となる 背景について規定する。2.2章の以下の部分は相当詳細だということを確認して おく。 スケジューラアクティベーションの状態の決定的な構成要素はそのユーザ層で の継続で、それは、カーネルの継続([DBRD91]で述べられた)に似ているが、ユー ザ層に戻るのではなく、カーネルルーチンを指定して戻る。これを、アクティ ベーションの実行をアップコールからユーザ層に制御を移したい時に設定する (2.2.1章を見よ)。 スケジューラアクティベーションはevent_saとinterrupted_sasの二つの引数も あり、それは他のアクティベーションの場所であり、通知の間にそれらの情報 をユーザ層に伝えることを許している。この情報はアクティベーションそれ自 身、それが実行したいたプロセッサや、そのユーザ層のレジスタ状態を含んで いる。 カーネルはthread_select ()で、次に事項するスケジューラアクティベーショ ン、あるいはカーネルスレッドを選択する。 プロセッサ毎のフラグを、thread_select ()が通知が必要かどうかのために管 理する。このフラグの値は、PROC_SA_BLOCKEDがブロックしたイベントに、 PROC_SA_HANDLING_EVENTが通知中に、PROC_ALLOCATEDが、プロセッサセット間 でのプロセッサの再割当てである。thread_select()が、プロセッサのイベント フラグがこれらの値であれば、通知をする手配をする。 次の章では、一般的な用語でイベントの扱いについて述べる。さらに詳細な 記述は付録 A.3にある。
