Я тоже застрял на "Загрузка начального RAM-диска". На самом деле в моем случае гостевой системой был Debian 64 -бит. И проблема решилась, когда я точно указал тип ОС в General > Basic > Version.
Я бы не стал полагаться на этот элемент поведения. Каналы предназначены для непрерывного потока данных. Чтение и запись не могут быть легко сопоставлены друг с другом, единственная реальная гарантия, на которую вы должны полагаться, заключается в том, что первые байты на входе будут первыми байтами на выходе.
Причина ручного комментария относительно пейджингового буфера заключается в том, что каналы полагаются на кольцевой буфер.Из руководства я бы сделал вывод, что «кольцо» - это кольцо страниц, а не кольцо байтов. Страницы IE :заполняются, когда страница заполняется, используется следующая страница. Страницы не используются -повторно, пока они не будут полностью прочитаны. Это означает, что половина -прочитанной страницы будет вообще недоступна для записи. Это просто вывод из руководства, я не проверял исходный код.
Самая большая проблема, связанная с использованием этого поведения, заключается в том, что это деталь реализации, а не предполагаемый эффект конвейера. Разработчики ядра могут изменить это в любое время, и в вашем коде внезапно возникнут условия гонки.
Говорят, что если единственным намерением является синхронизация, то «классический способ», как вы его называете, никогда не использует каналы. Вместо этого используйте семафоры или сигналы.
Поскольку пропускная способность канала меняется в зависимости от реализации и фактически менялась несколько раз с момента первой реализации POSIX... документация, на которую вы ссылаетесь, явно пишет:
Applications should not rely on a particular capacity
Если я правильно понимаю, то вы должны найти ответ на свой вопрос как часть справочной страницы для трубы:
POSIX.1-2001 says that write(2)s of less than PIPE_BUF bytes must be atomic: the output data is written to the pipe as a contiguous sequence. Writes of more than PIPE_BUF bytes may be nonatomic: the kernel may interleave the data with data written by other processes. POSIX.1-2001 requires PIPE_BUF to be at least 512 bytes. (On Linux, PIPE_BUF is 4096 bytes.) The precise semantics depend on whether the file descriptor is nonblocking (O_NONBLOCK), whether there are multiple writers to the pipe, and on n, the number of bytes to be written