|
|
|
| Когда какой-либо процесс генерирует данные для вывода на внешнее устройство, он, очевидно выводит их в оперативную память, а затем подаёт операционной системе вызов, для вывода. Но тут возникает вопрос: если процессу нужно вывести очень большие объёмы данных, значительно превышающие объёмы оперативной памяти(а возможно и жёсткого диска), то что происходит в этом случае? Каков механизм взаимодействия операционной системы с процессом в этом случае? | |
|
|
|
|
|
|
|
для: dump
(14.11.2011 в 15:22)
| | nuclear warning | |
|
|
|
|
|
|
|
для: dump
(14.11.2011 в 15:22)
| | Ситуация даже сложнее... дело в том, что диски у нас настолько медленные, что если мы будем записывать по одному символу - у нас компьютеры просто остановятся и будут только и заниматься вводом-выводом. Именно поэтому, как вы описали существую буферы, причем как физические: оперативная память компьютера (как правило гигабайты), оперативная память жесткого диска (как правило десятки мегабайт), так и логические: на уровне операционных систем, языков программирования и отдельных программ. Буферы конечны и не очень большие, так как потоков чтения-записи довольно много, как только они заполняются (или идет сигнал об окончании записи), они сбрасываются на диск. Не обязательно (и опасно) хранить гигабайты в энергозависимой памяти, но этого достаточно, чтобы сократить операции записи в сотни раз - этого достаточно для того, чтобы все работало достаточно шустро (речь идет буквально о килобайтах). Именно поэтому нужно обязательно закрывать файлы. Пока вы файл не закрыли, информация может находиться в буфере - случись чего и в файл она не попадет. Пусть этого всего несколько килобайт, но чтобы попортить бинарный файл - этого хватит.
PS Это упрощенная схема, а вообще по этому вопросу можно написать книгу, а то и несколько - пока от программы до диска данные дойдут, там до черта всякой всячины происходит (особенно, когда еще какая-нибудь SCSI-плата между диском и шиной).
PPS Сейчас на смену жестким дискам идут твердотельные SSD-диски, они пока слишком дороги и быстро дохнут, но зато они очень быстрые. Если SSD-диски сменят HDD-диски, скорее всего начнется пересмотр как архитектуры компьютера, так и операционных систем... может так статься, что и архитектура фон-неймана пошатнется... Вообще подсистема ввода-вывода это очень интересная и довольно сложная область.
[поправлено модератором: обсуждение сетевых буферов вынесено в отдельную тему] | |
|
|
|