IOの全体像について少し混乱しています。CPUがディスク(たとえばSATAディスク)からどのように読み取るか知りたいですか?
read()/ write()を使用するプログラムが特定のファイルへの参照に準拠し、CPUがこの参照に遭遇した場合、ディスクから直接(メモリマップドIOポートを介して)読み取りますか?または、RAMに書き込んでから、ディスクに書き戻しますか?
IOの全体像について少し混乱しています。CPUがディスク(たとえばSATAディスク)からどのように読み取るか知りたいですか?
read()/ write()を使用するプログラムが特定のファイルへの参照に準拠し、CPUがこの参照に遭遇した場合、ディスクから直接(メモリマップドIOポートを介して)読み取りますか?または、RAMに書き込んでから、ディスクに書き戻しますか?
読むことをお勧めします: http://www.makelinux.net/books/ulk3/understandlk-CHP-13-SECT-1 補足: http://en.wikipedia.org/wiki/Direct_memory_access
RAM でのバッファリングに関して: ほとんどのプログラミング言語とオペレーティング システムは、I/O 操作 (読み取りと書き込み) の少なくとも一部をメモリにバッファリングします。これは通常、非同期で行われます。つまり、バッファが作成され、埋められてから処理されます。読み取りの場合、CPU は (ディスク コントローラーと連携して) IO 命令を作成し、データをフェッチしてメモリに配置し、そのスペースを埋めてから、要求を行うプログラムにその内容を提示します。書き込み要求の場合、これは書き込み操作とそれに関連するデータをキューに入れ、それらを IO コントローラーに送信し、最終的に実行するディスクに送信します。バッファリングは、複数の場所で発生する可能性があります。CPU のキャッシュ、RAM、(場合によっては) ディスク コントローラ、またはハード ディスク自体です。どのくらいのバッファリングが行われているか、正確には操作の抽象的なシーケンスがどのように処理されているか
メイン メモリは、プロセッサが直接アクセスできる唯一の大きなストレージ領域 (数百万から数十億バイト) です。
「オペレーティング システムの概念」と述べています。
したがって、プログラムを実行したりデータを操作したりする場合、それら (プログラムとデータ) はメイン メモリに存在する必要があります。