スケジューラアクティベーション
スケジューラアクティベーションはマルチスレッドの実装方式の1つ。
カーネルスレッドの機能性とユーザスレッドの高性能さ・柔軟性を統合するために考案された。
過去に NetBSD のカーネルで実装されていた。
ユーザスレッド用に特別なノンブロッキングコールをつくるべきではないし、select
で安全性を調べなくてもいいようにしたい。
ページフォルトでブロックしても同一プロセス内の他のスレッドを実行したい。
スケジューラアクティベーションでは、カーネルはプロセスごとに仮想 CPU を割り当てる。
1つのプロセスには最初は1つだけだが、そこからより多く要求したり開放することができる。
これを実現させるためのアイデアとして、カーネルはブロックを検知したらその情報をスタックにつんでから実行時システムにそれを通知(コール)するようにする。
実行時システムはプロセスごとに決められたアドレスにある。
おおまかにいえば UNIX のシグナルと似ている。
このようなコールを「アップコール」と呼ぶ。
いったんここから起動したら、通常通りレジスタなどを復元して再開する。
デバイスからの割り込みがきたら同様にアップコールで実行時システムに通知され、実行時システムは適切な処理をすすめる。
他のプロセスの入出力完了などで関係のない場合は、ハンドラの終了時に割り込まれたスレッドの状態を割り込まれる前に戻す。
スケジューラアクティベーションの欠点は、アップコールに頼っていることで階層構造に習わない実装になってしまうこと。
通常階層 n の提供するサービスは n+1 で用いられ、逆に n+1 が提供するサービスを n は利用しない。
アップコールでは n+1 で提供される実行時システムを n の階層であるカーネルが叩いてしまっている。
Author And Source
この問題について(スケジューラアクティベーション), 我々は、より多くの情報をここで見つけました https://qiita.com/timwata/items/6509f2f8003bb3993867著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .