2017-09-15 4 views
0

私たちは、ネットワークからのデータを待っている以外は何もしないコンピュータを持っていて、それが受信されると計算をしているとします。コンピュータは、ネットワークからのデータを待つプロセスに切り替えることができることをどのように理解していますか?

今は、 のほかに、データが準備完了であることを示すプロセッサレジスタを定期的にチェックしてから、コンピューティングを行う以外の方法はないと思います。フードネットワークカードの下での私の理解では、データを受信し、それをメモリに入れ、それ自身でCPUがコンピューティングを行うことができるCPUレジスタに書き込みます。その後、次の を定期的にチェックするプロセッサは、物事を計算します。実際に何が起きているのかを詳細に説明することができますか(ハードウェアとOS)。この質問は、私の年齢について心配です!

また、それについての資料を見てうれしいです!

+0

割り込みまたはポーリング特にリストするのは簡単にアクセスできない文書があります。話題はあまりにも広すぎて、情報はすぐに入手できます。 –

+0

また、[Wikipedia:Polling](https://en.wikipedia.org/wiki/Polling_(computer_science))と[Wikipedia:Interrupt](https://en.wikipedia.org/wiki/Interrupt)も参照してください。 – xmojmr

答えて

6

定期的にいくつかのデータレジスタをチェックするプロセッサの質問に記載されている方法が使用され、ポーリングと呼ばれます。ポーリングは実装が簡単なためシンプルなシステムでよく使用されますが、そこにあるかもしれないデータをチェックするCPUサイクルの無駄があります。

実際には、最新のオペレーティングシステムではというCPUハードウェア機能を使用する予定ですが、をOSのスケジューラと一緒に割り込みます。ネットワークからデータを取得する例では、プログラムはネットワークからデータを受信するのを待つブロッキング読み取り呼び出しを使用します。読み込み呼び出しが行われると、呼び出し元プログラムは完全に実行を停止し、OSのスケジューラはデータが受信されるまでプログラムを中断状態に保ちます。

何かが起こるまで(パケットが受信されるまで)実行を停止したいと思うプログラム信号は、しばしばセマフォ(または同様の相互排除メカニズム)と呼ばれるソフトウェア構成である。しかし、ネットワーキングコードの場合、セマフォはプログラマによって直接アクセスされない。

ネットワークカードによってパケットが受信されると、ネットワークカードはそのパケットをどこかのRAMに格納します。これが完了すると、ネットワークカードはCPUへの割り込みをトリガします。割り込み(一般的に)は、現在実行されているプログラムの実行をCPUに停止させ、CPUはネットワーク活動の処理に関連するカーネルコードを実行します。この場合、受信したパケットをデータの受信を待っていたプログラムに送信します。

最後に、カーネルはセマフォを使用してパケットが受信されたことを通知します。カーネルは、スケジューラがネットワークからのデータを待っていたプログラムを「起床」させるようにします。プログラムはデータを処理し、ネットワークからの次のデータセットを待つことができます。

もっと知りたいのであれば、割り込み、スケジューリング、セマフォを読むことをお勧めします。これらの手法はネットワーキング以上の用途に使用されます。同様のアプローチで多くの他のIOデバイスがアクセスされます。

関連する問題