FF13続き。ホプライスレを見ていたらヴァイルピークスからやりたくなり、4章
のセーブデータからやっていた。スニーク使いまくりで。ボス戦も今からやり
直してみると、きちんと強化弱体してやればどってことなかったんだな...。
オーディン後から戦闘時の声の掛け合いがはじまる。亀狩りの毎日にはいい清 涼剤だ。
これが見れるのはオーディン倒伐後。焦燥感でヒステリックにパニクっていた ライトさんが落ちつきを取り戻すところだ。オーディンは今やってもぎりぎり だった。

スケジューラアクティベーション続き。スケジューラアクティベーションにす るとI/Oやページフォルトでブロックされた時のカーネルとユーザ層の通信は 1:1のカーネルスレッドよりも多くなる。ここは不利なのだけど、それ以外の操 作はユーザ層だけで済むことで、全体の時間的には優位になるのか、ならない のかというとこか。
オーディン後から戦闘時の声の掛け合いがはじまる。亀狩りの毎日にはいい清 涼剤だ。
これが見れるのはオーディン倒伐後。焦燥感でヒステリックにパニクっていた ライトさんが落ちつきを取り戻すところだ。オーディンは今やってもぎりぎり だった。

スケジューラアクティベーション続き。スケジューラアクティベーションにす るとI/Oやページフォルトでブロックされた時のカーネルとユーザ層の通信は 1:1のカーネルスレッドよりも多くなる。ここは不利なのだけど、それ以外の操 作はユーザ層だけで済むことで、全体の時間的には優位になるのか、ならない のかというとこか。
Scheduler Activations: Effective Kernel Support for the User-Level Management of Parallelism Thomas E.Anderson, Brian N.Bershad, Edward D.Lazowska and Henry M.Levy University of Washington ACM Transactions on Computersystems, Vol.10, No.1, February 1992,p53-79. 表2にスケジューラアクティベーションによってカーネルからユーザ層に伝達さ れる事象を一覧にした; それぞれのアップコールの引数は括弧で、ユーザ層ス レッドシステムにによる動作は斜体。 ---------------------------------------------------------------------- 表2 スケジューラアクティベーションがアップコールする場所 + このプロセッサを追加する(プロセッサ番号) ユーザ層→走行可能なユーザ層スレッドを実行する + プロセッサが横取りされた(横取りされたアクティベーション番号とそのマシン 状態) ユーザ層→横取りされたスケジューラアクティベーションで実行していたユーザ 層スレッドを走行待ち行列に戻す。 + スケジューラアクティベーションがブロックした(ブロックしたアクティベー ション番号) ユーザ層→ブロックされたスケジューラアクティベーションはもはやそのプロ セッサを使用していない。 + スケジューラアクティベーションがブロックから復帰した(復帰したアクティ ベーション番号とそのマシン状態) ユーザ層→ブロックされたスケジューラアクティベーションで走行してたユー ザ層スレッドを走行待ち行列に戻す。 ---------------------------------------------------------------------- カーネルがスケジューリングの決定を他のものにする場所で正確に事象が伝達 されることを注記する。実際には、これらの事象は組み合わせで起き、それが 起きた時には一回のアップコールによって取り扱う必要のある全ての事象が伝 達される。 スケジューラアクティベーションの使い方の一つの例として、図1はI/O要求、 終了において何が起こるかを図解している。これはまれな状況であることを注 記する; 普通の操作では、カーネルの介入なしにスレッドは作成され、走行し、 終了する。図1のそれぞれの枠は異る時間ステップを表している。まっすくの矢 印はスケジューラアクティベーションを表し、S字の矢印はユーザ層のスレッド を表し、それぞれの枠の右側にあるユーザ層スレッドの固まりは実行待ち行列 を表している。 時間T1では、アプリケーションにはカーネルによって二つのプロセッサが割当 てられた。それぞれのプロセッサでカーネルはユーザ層のコードをアップコー ルし、そこで実行待ち行列からスレッドを外し走行開始させる。時間T2では一 つのユーザ層スレッド(スレッド1)がカーネル内でブロックした。この事象をユー ザ層に通知するために、スレッド1で走行していたプロセッサをとり、新しいス ケジューラアクティベーションとしてアップコールを実行する。そしてユーザ 層スレッドスケジューラはそのプロセッサを使って実行待ち行列の中のスレッ ドを走行させることができる。 時間T3では、I/Oは終了した。再びカーネルはこの事象をユーザ層スレッドシス テムに通知しなければならないが、この通知にはプロセッサを必要とする。カー ネルはそのアドレス空間内で走行しているプロセッサの一つを横取りし、それ を使ってアップコールする。(もしI/Oが完了した時、そのアドレス空間に一個 もプロセッサが割当てられていなかった場合、このアップコールはカーネルが プロセッサが割当てるまで待たないとならない) このアップコールによってユーザ層にはI/O終了と横取りの二つの事が通知され る。アップコールによってユーザ層のコードは二つの事をすることが求められ る(1) ブロックされたスレッドを実行待ち行列に置く。(2) 横取りされたスレッ ドを実行待ち行列に置く。この段階でAとBのスケジューラアクティベーション は放棄してよい。最終的に時間T4でアップコールは実行待ち行列からスレッド をとってきて、それを実行開始する。 ユーザ層のスレッドがカーネルの中でブロックしたり横取りされた時、既にユー ザ層の段階でそれを再開するのに必要な状態のほとんど、すなわちスレッドス タックと管理領域である。しかしながら、スレッドのレジスタ状態はカーネル の割込みハンドラや、ページフォルトハンドラのような低層で退避される。カー ネルはこの状態を、I/O完了や横取りをアップコールによってアドレス空間に通 知する時に一緒に受渡す。 我々はまったく同じ機構を多重処理のためのアドレス空間の間でのプロセッサ の再割当てに用いている。例えばカーネルがあるアドレス空間からプロセッサ を取り上げ、他に与えるとする。プロセッサに割込みをかけ、アクティベーショ ンを停止し、そのプロセッサを使って他のアドレス空間へ新しいアクティーベ ションとともにアップコールすることによってなされる。カーネルは事前に前 のアドレス空間にその許可を得る必要はない。許可を得るようにすると、アド レス空間の優先度を破るかもしれない(例えば、新しいアドレス空間は古いアド レス空間よりも高い優先度でもあり得る)。それでも古いアドレス空間はその横 取りが起ったことを通知されないといけない。カーネルはこれを古いアドレス 空間でまだ走行している他のプロセッサを横取りすることによって実行する。 その二番目に横取りされたプロセッサは、古いアドレス空間に向って新しいス ケジューラアクティベーションとともに、そのアドレス空間では「二つ」のユー ザ層スレッドが停止されたことを通知することに使われる。そしてユーザ層の スレッドスケジューラはこれらのスレッドをどう残りのプロセッサ上で実行す べきかを制御する(アドレス空間の最後の一つのプロセッサが横取りされた場合 は、そのアドレス空間からの横取りをしない。その代わりに、このアドレス空 間にプロセッサに再割当てされた時までその通知を遅延する。通知によってユー ザ層はどのプロセッサが割当てられたかを知ることができる。そしてこれは明 示的にキャッシュ局所性を管理するのに使える)。 上記ではとても単純化していて、いくつかの考慮する点がある。一つは、もし スレッドに優先度があった場合には、上記の例にさらに追加の横取りが必要に なるかもしれない。例えば図1では、スレッド3はスレッド1,2より低い優先度だっ たと想定しよう。この場合ユーザ層スレッドシステムはカーネルにスレッド3の プロセッサを横取りしてもらうように求めることができる。そしてカーネルは そのプロセッサを使って、ユーザスレッドシステムがスレッド3を実行待ち行列 に入れ、その代わりにスレッド2を走らせることができるようにアップコールを するだろう。ユーザ層はどのスレッドがどのプロセッサで走行しているかを正 確に知っているので、追加の横取りを求めることを知ることができる。 二つ目に、カーネルがユーザ層スレッドを停止し、そのコンテキストを保存し ているように記述しているが、カーネルとアプリケーションの相互作用は全て スケジューラアクティベーションによってなされる。アプリケーションはスケ ジューラアクティベーション上で、どのような並行性モデルでも構築できる。 つまりカーネルの挙動はどのような場合でもまったく同じである。特記するの はカーネルはユーザ層での並行性を実現するデータ構造についてまったく知る 必要がないことだ。 三つめは、ユーザ層スレッドがまったく走行していない時にユーザ層スレッド スケジューラの中で横取りやページフォルトが起きたとしても、スケジューラ アクティベーションは適切に動作するということ。この場合、スレッドスケ ジューラの状態はカーネルに退避される。その次に続くアップコールでは


コメントする