一般的なオペレーティングシステム理論の質問ですが、UNIX系システムを通じてオペレーティングシステム理論を学んでいるので、ここに聞きたいと思いました。
今日は、オペレーティングシステムの講義が終わった後、講師にこう尋ねました。 「スケジューラはプロセスマネージャプロセス内のスレッドです。PMもプロセスなので、Aというプロセスが実行されているときにPMがプロセッサをどのように取得できますか?スケジューラはプロセスからプロセッサを分離して別のプロセスに割り当てる必要があります。管理者が実行されていない場合、これはどのように起こるべきですか?
彼は、「プロセスマネージャは「常に」CPU0で実行されます」と述べた。私は、「CPUとコアが1つしかない場合、PMはどのように常に実行できますか? 「彼はそうだと言った。
私がこの混乱から逃れるのを助けることができる人はいますか?
答え1
実行中のスレッドがシステムコールを実行したり、クロック割り込みが発生したり、他の割り込みが発生したりするたびに、オペレーティングシステムは通常、制御スレッドで「プロセッサとシム」します。
つまり、実行中のスレッドはシステムコールを介してread()
カーネルを呼び出します。システムコールハンドラは、読み取り、書き込みなどの操作を実行するだけでなく、それを呼び出したスレッドを返すべきか、他のタスクを実行する必要があるかを最終的に決定します。 「把握」を担当する人はプロセスマネージャです。write()
gettimeofday()
CPUバインドされたプログラム(読み取り/書き込み/開く/閉じるシステムコールを実行しない)は、まだタイマー割り込みのためにCPUを失うことがよくあります。特殊時計は毎秒10回、60回、1000回のCPUを停止します。割り込みハンドラは、まず、次のタイムスライスで CPU がどのスレッドに割り当てられるかを決定します。
他の割り込みは、マウス、キーボード、ネットワークカード、またはディスクドライブから発生する可能性があります。
割り込みハンドラとシステムコールハンドラのコードは常にそれを呼び出すため、「プロセスマネージャ」は常に実行可能であると言えます。