遅いシステムコールと高速システムコールの違いは何ですか?プロセスがいくつかの信号を捕捉すると、遅いシステムコールがブロックされる可能性があることを理解してください。これは、捕捉された信号がブロックされたシステムコールを起こす可能性があるためです。しかし、このメカニズムを完全に理解することはできません。どんな例でも大いに感謝します。
ベストアンサー1
実際、システムコールは3つのレベルに分けられます。
- 一部のシステムコールはすぐに返されます。 「即時」は、必要な唯一のことは、わずかなプロセッサ時間だけであることを意味する。支出できる期間には厳しい制限はありません。リアルタイムシステム)、しかし、これらの通話は十分に長い間予約された後に戻ります。
これらの電話はしばしば呼び出されます。非遮断。非ブロック呼び出しの例には、システム状態を少しだけ読み取る呼び出し、または次のようにシステム状態を単純に変更する呼び出しがあります。getpid
、gettimeofday
、getuid
またはsetuid
。たとえば、一部のシステムコールは状況に応じてブロックまたは非ブロック化される可能性があります。read
ファイルが非ブロック読み取りをサポートするパイプまたは他の種類の場合は、ブロックしないでください。O_NONBLOCK
バナー設定しました。 - いくつかのシステムコールは完了するのに時間がかかるかもしれませんが、永遠ではありません。典型的な例は次のとおりです。
sleep
。 - 一部のシステムコールは、特定の外部イベントが発生した後にのみ返されます。このような通貨は次のとおりです。ブロックする。例えば、
read
ブロックファイル記述子への呼び出しはブロックです。wait
。
「高速」システムコールと「遅い」システムコールの違いは、非ブロック対ブロックに近いですが、今回はカーネル実装者の観点から見たものです。クイックシステムコールは、ブロックや待機なしで完了することが知られているシステムコールです。カーネルは、クイックシステムコールに会うとすぐにシステムコールを実行し、同じプロセスをスケジュールできることを知っています。 (一部のオペレーティングシステムでは、非線点型マルチタスク、高速システムコールは非線点型にすることができます。通常のUNIXシステムではそうではありません。 )一方、遅いシステムコールは他のタスクが完了するのを待つ必要があるため、カーネルは呼び出しプロセスを一時停止して他のタスクを実行する準備をする必要があります。
場合によっては少し灰色の領域です。たとえば、通常のファイルでは、ディスクの読み取りは通常、他のプロセスを待たずにディスクをread
待つため、非ブロックと見なされます。一般的に、応答には数分しかかからず、永遠に待つことはありません。 (これは上記の2の場合です)。ただし、カーネルの観点からは、プロセスはディスクドライバが完了するのを待つ必要があるため、これは確かに遅いシステムコールです。