091202

|



なんとACMからカードが届いた。前にACMで論文漁っていて、年間$99なら、ちょ
こと払って落としちゃうかと登録したのだ。英語とても苦手なので言葉で書い
てある部分はヒント程度にしかならないんだけど。



加速度センサー続き。LPC2388での実装。そういえば、NXPはフィリップスだっ た。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.1 ブロック

アクティベーションがブロックされた時、その'event_sa'はアクティベーショ
ンそれ自身の時点として設定され、そのユーザ層への継続はsa_notify(カーネ
ルルーチン)に設定される(これらはブロックが解除される時に使われる;2.2.2
章を見よ)。プロセッサのイベントフラグはPROC_SA_BLOCKEDに設定される。こ
れによって、thread_select()は新しいスケジューラアクティベーションを通知
するために作成する(他の実行可能なアクティベーションを選ぶのではなく)。
新しく作られたアクティベーションのevent_saはブロックされたアクティベー
ションを指し示す。新しいアクティベーションはsa_notify()で初まり、それは
アップコール用の引数を置くためにユーザ層のスタックをとってくる。その引
数は現在のアクティベーションと、ブロックされたアクティベーションである。

ユーザ層のスタックは、トラップから返るようにその場で設定され、プログラ
ムカウンタはタスクのアップコールの入口であるsa_blocked()に設定される。
最終的に、通知のためのアクティベーションはthread_exception_return()を使っ
て、ユーザ層で実行を始める。