sleepシステムコールはどのように機能しますか?


1

アプリケーションがOSに0.5秒間プロセスを一時停止するように要求することがありますが、それはどのように機能しますか?

他のプログラムが同時にうまく機能するため、CPUがその0.5秒間実行を停止するだけではありません。

しかし、それはすべてのOSに共通のことだと思います。


プログラミング言語で一時停止すると、アセンブリが発生します( NOOP または NOP )操作指示なし。あなたはどんな問題を解決しようとしていますか?
Ramhound

@ Ramhoundプログラムが一時停止したときにリソースが消費されないのはなぜですか(プロセッサ時間)。プロセッサは、一時停止が終了するまでナノ秒をカウントします。それともCPUにタイマー機構はありますか?
yanpas

1
私が言ったようにそれは資源を消費しません。 NOOP操作を実行します。あなたはそれが実際に何を意味するのかについて何らかの調査をしたいと思うかもしれません。それはまた、オペレーティングシステムが他のタスクに戻るために割り込まれるまで、単に他のタスクに切り替えることを意味します。
Ramhound

回答:


4

マルチタスクオペレーティングシステムでは、OSは、プロセッサの実行を完全に停止したり、そのプロセスが他の命令で使用する予定の時間をいっぱいにしたりするほど極端なことをする必要はありません。それは無限に簡単なことをすることができます。タスクをまったく実行するようにスケジュールすることはできません。

これがマルチタスクオペレーティングシステムの要点です。複数のタスクをすべて同時に実行する必要がある場合は、OSが1つをプロセッサにスワップし、一定時間実行してから、次のタスクをスワップインして、実行する必要があるすべてのタスクがジョブを実行するまで続行します。 。

タスクが一定期間スリープしたい、またはキーが押されるのを待っていることを知らせるタスクがオペレーティングシステムに効果的に伝えていること don't bother swapping me onto the processor unless time X has passed または don't bother running me unless you have event X waiting for me to action it

基本的に、OSは実行する必要があるタスクの長いリストを持っています、そして、それぞれに対して「イベントを待つ」記述子になるでしょう。実行する準備ができているタスクはスケジュールすることができ、そうでないタスクは単純にスキップされます。

文字通りある場合 いいえ 特定のタイムスライスでプロセッサ上で実行するためのタスク アイドル 「実際に行われるタスク H ある LT 通常はなんらかの割り込みによって、CPUが起動して起動するまで命令を実行しないようにします。このようなスケジューリング方法を「無駄にしない」ために使用することは、マルチタスクオペレーティングシステムのパラダイムにも適しています。

再び目覚めるために、CPUはRTC(リアルタイムクロック)を介して割り込み「ティック」を取得し、さらにセットアップすることができます。 HPET 特定の時間間隔で割り込みを発生させる(高精度イベントタイマー)。これにより、OSは非常に正確な時間にわたってCPUを停止させ、その後CPUをスリープ状態から解除してタスクの処理を再開できます。


私がNOOP命令に言及するとき、私はプログラムを一時停止する文字のコードブロックを意味します。しかし、あなたの答えはもちろん正しいです
Ramhound

@ Ramhound私は自分の答えがその点に焦点を合わせるためのものではなく、私があなたを修正しようとしているように聞こえることを意味するものではありませんでした。私はあなたがしたのと同じ方法でそれを意味しました、コードで時間を埋めることまたは完全に停止しているプロセッサでそれほど極端なことをする必要がないことを意味します。私はコメントにNOOPを見ました、そしてそれは何らかの理由で私の心の中で立ち往生しました。その最初の段落を間もなく明確にします。
Mokubai

私たちは同一ではないにしても同じことを言っています。あなたは本当に何も修正する必要はありませんでした。あなたは私が追加の情報を提供することによって質問に答えることができなかった何かをしました。
Ramhound
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.