Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Разное

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Буферизиация при вводе-выводе
 
 автор: dump   (14.11.2011 в 15:22)   письмо автору
 
 

Когда какой-либо процесс генерирует данные для вывода на внешнее устройство, он, очевидно выводит их в оперативную память, а затем подаёт операционной системе вызов, для вывода. Но тут возникает вопрос: если процессу нужно вывести очень большие объёмы данных, значительно превышающие объёмы оперативной памяти(а возможно и жёсткого диска), то что происходит в этом случае? Каков механизм взаимодействия операционной системы с процессом в этом случае?

  Ответить  
 
 автор: sl1p   (14.11.2011 в 15:32)   письмо автору
 
   для: dump   (14.11.2011 в 15:22)
 

nuclear warning

  Ответить  
 
 автор: cheops   (14.11.2011 в 15:39)   письмо автору
 
   для: dump   (14.11.2011 в 15:22)
 

Ситуация даже сложнее... дело в том, что диски у нас настолько медленные, что если мы будем записывать по одному символу - у нас компьютеры просто остановятся и будут только и заниматься вводом-выводом. Именно поэтому, как вы описали существую буферы, причем как физические: оперативная память компьютера (как правило гигабайты), оперативная память жесткого диска (как правило десятки мегабайт), так и логические: на уровне операционных систем, языков программирования и отдельных программ. Буферы конечны и не очень большие, так как потоков чтения-записи довольно много, как только они заполняются (или идет сигнал об окончании записи), они сбрасываются на диск. Не обязательно (и опасно) хранить гигабайты в энергозависимой памяти, но этого достаточно, чтобы сократить операции записи в сотни раз - этого достаточно для того, чтобы все работало достаточно шустро (речь идет буквально о килобайтах). Именно поэтому нужно обязательно закрывать файлы. Пока вы файл не закрыли, информация может находиться в буфере - случись чего и в файл она не попадет. Пусть этого всего несколько килобайт, но чтобы попортить бинарный файл - этого хватит.

PS Это упрощенная схема, а вообще по этому вопросу можно написать книгу, а то и несколько - пока от программы до диска данные дойдут, там до черта всякой всячины происходит (особенно, когда еще какая-нибудь SCSI-плата между диском и шиной).
PPS Сейчас на смену жестким дискам идут твердотельные SSD-диски, они пока слишком дороги и быстро дохнут, но зато они очень быстрые. Если SSD-диски сменят HDD-диски, скорее всего начнется пересмотр как архитектуры компьютера, так и операционных систем... может так статься, что и архитектура фон-неймана пошатнется... Вообще подсистема ввода-вывода это очень интересная и довольно сложная область.

[поправлено модератором: обсуждение сетевых буферов вынесено в отдельную тему]

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования