すべてのシステムコールがブロックされていますか?


13

システムコール時に発生するユーザー空間とカーネル空間の切り替えについて説明している記事を読みまし。記事によれば

アプリケーションは、ユーザーモードの実行を再開する前に、システムコールの完了を予期します。

さて、今まで私はいくつかのシステムコールがblockingであると仮定していましたが、他はそうnon-blockingです。上記のコメントで、私は今混乱しています。これは、すべてのシステムコールがブロックされていることを意味しますか、または概念を誤解しましたか?


@Ankit編集をロールバックした理由を説明してください。投稿の詳細を改善するための編集はSEの標準ポリシーであり、暗黙の批判を意味するものではないことに注意してください。
ラファエル

@Raphaelごめんなさい!私はただいじって、誤ってロールバックを押しただけで、前のバージョンを見つけることができませんでした。実際、私はあなたの編集が本当に好きでした。:P
アンキット

@ラファエルはそれを取り戻しました。実際、改訂システムにだまされました(「記事」がリンクであると認識していませんでした)。編集していただきありがとうございます。
アンキット

@Ankit:助けてくれてうれしいです!
ラファエル

回答:


15

「ブロッキング」という用語をオーバーロードしているようです。

カーネルに対して行うコンテキスト切り替えは、アプリケーションを続行する前にカーネルがユーザーモードに戻るのを待つ必要があります。これは通常「ブロッキング」と呼ばれるものではありません。

現在のカーネル設計では、ブロッキング呼び出しは、要求が完了した(またはエラーが発生した)ときにのみカーネルが戻る呼び出しです。これらの呼び出しは通常、より長い時間を要し、通常はプロセスがスケジュールされます。たとえば、多くのIO呼び出しがブロックしています。

非同期IOを提供するシステムコールがあり、それらは非ブロッキングです。ここで発生するコンテキストスイッチがまだあることに注意してください。アプリケーションのみが非同期呼び出しの性質を処理する必要があります。

論文は、このコンテキストの切り替え(例外のないシステムコール)をなくし、すべての呼び出しを非同期にすることを目指しているようです。


実際には研究論文です。URLは次のとおり
livio

2
@Ankit:質問を編集してそこに含めてください。
アルヤバタ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.