すべてのシステムコールはブロックしていますか?
-
16-10-2019 - |
質問
読んでいた 記事 これは、システムコールで発生するユーザースペースとカーネルスペースのスイッチを説明しています。記事によると
アプリケーションは、ユーザーモードの実行を再開する前に、システムコールの完了を期待します。
今、私はいくつかのシステム呼び出しが blocking
, 、他の人はそうです non-blocking
. 。上記のコメントで、私は今混乱しています。これは、すべてのシステム呼び出しがブロックされていることを意味しますか、それとも私は概念を誤解しましたか?
解決
「ブロッキング」という用語を過負荷にしているようです。
カーネルに作成するコンテキストスイッチは、アプリケーションを継続する前に、USERMODEに切り替えるのを待つ必要があります。これは、通常「ブロッキング」と呼ばれるものではありません。
現在のカーネル設計では、ブロッキングコールは、リクエストが完了したときにのみカーネルが返す(またはエラーが発生する)コールです。これらの呼び出しは通常、より長い時間がかかり、通常、プロセスをスケジュールするようになります。たとえば、多くのIO呼び出しがブロックされています。
提供するシステムコールがあります 非同期IO そして、彼らは非ブロッキングです。ここで発生するコンテキストスイッチがまだあることに注意してください。アプリケーションのみがコールの非同期性を処理する必要があります。
このペーパーは、このコンテキストの前後を廃止することを目指しているようです(例外のないシステム呼び出し)。すべての呼び出しを非同期にしようとします。
所属していません cs.stackexchange