В дополнение к традиционным системным вызовам read и write 4.2BSD ввело возможность осуществления разбросанного ввода/вывода (scatter/gather I/O). Разбросанный ввод использует системный вызов readv, чтобы дать возможность поместить результат одной операции чтения в несколько различных буферов. Наоборот, системный вызов writev дает возможность записать несколько буферов в одной неделимой операции записи. Вместо передачи одного буфера и параметра размера, как делается в read и write, процесс передает указатель на массив буферов и их размеров вместе с числом, указывающим размер массива.
Это средство дает буферам в различных частях адресного пространства процесса возможность быть записанными атомарно, без необходимости копирования их в один непрерывный буфер. Атомарные записи необходимы в случае, когда лежащая в основе абстракция основана на записи, такой, как дейтаграммы, которые выдают на каждый запрос записи одно сообщение. Удобна также возможность прочтения одним запросом в несколько различных буферов (например, заголовка записи в одно место, а данных в другое). Хотя приложение может имитировать возможность распределения данных, читая данные в один большой буфер, а затем копируя части в соответствующие места назначения, стоимость копирования из памяти в память в таких случаях часто более чем удваивает время выполнения соответствующего приложения.
Так же как send и recv могли бы быть реализованы как библиотечные интерфейсы к sendto и recvfrom, можно было бы эмулировать read с использованием readv и write с использованием writev. Однако read и write используются так часто, что добавление издержек по их эмуляции не имело бы смысла.
- 18/05/2010 04:22 - Системный вход
- 17/05/2010 20:11 - Работа системы
- 16/05/2010 18:53 - Межпроцессное взаимодействие
- 15/05/2010 13:20 - Укорачивание файлов
- 14/05/2010 19:10 - Идентификация файла
- 21/03/2010 15:36 - Избежание перегрузки с помощью медленного старта
- 12/01/2010 06:53 - Передача информации ядру и от ядра. Вызов sysctl conf в FreeBSD.
- 09/01/2010 18:18 - Отладка системы FreeBSD. Отладчик GDB
- 09/01/2010 18:07 - Автоматическая перезагрузка и выключение системы
- 09/01/2010 17:59 - Конфигурация ядра FreeBSD (Linux)