非同期は1つじゃないことにいい加減気付け。
まずカーネルのデバイスからの読み出しはプロセスから見て普通非同期。
通常ファイルなら最初のread()まで読み出しは行われないだろうが、
それ以外の大抵のデバイスは、カーネルにどんどんデータを送って来て、
カーネルがそれをバッファに溜めている。
次に、プロセスのカーネルからの読み出しは、read()を使う限り
常に同期的に行われる。aio_read()の場合は非同期。
最後に、O_ASYNCを使う場合は、read()自体は同期的だが、プロセスの
SIGIOハンドラは通常のプロセスの実行コンテキストから見て非同期に走る。