Другие языки программирования и технологии

Как же это работает. Разделение ресурсов устройств между процессами

Итак, недавно состоялся содержательный разговор с одним из пользователей данного ресурса. Он смог меня убедить что прав, но я всё-таки сомневаюсь (на другом форуме сказали что как-то не так, но как не объяснили) .
Значит, есть 2 процесса, есть одно устройство.. . давайте это будет винчестер. Есть 2 файла по гигу. Теперь вопрос, а что будет если мы одновременно в двух процессах запустим чтение этих файлов? Будет ли читаться сначала один файл, а потом другой.. . Или будут читать маленькими кусочками оба файла по очереди? Если маленькими кусочками, то по какому правилу (просто прерывание чтения в момент переключения процессов, или же на чтения каждого файла будет выделена своя квота времени) ?

вообщем понимаете суть? Хочу знать что происходит при таком чтении и как это происходит) ) На моём любимом форуме по программированию чёто отвечают невпопад.. . Спрашиваю то же самое, а мне про буферы ввода-вывода рассказывают и про упреждающее чтение )) Надежда только на вас.
Это зависит в первую очередь от режима работы SATA-контроллера. До появления второго поколения SATA-контроллеров все жесткие диски выполняли операции последовательно. Если же возникала ситуация вроде вашей (когда идет чтение двух файлов одновременно) , то скорость чтения существенно снижалась, поскольку головка будет попеременно метаться между разными областями диска. При этом приоритет считывания того или иного файла определить невозможно, это зависит от множества факторов (скорость работы центрального процессора, количества работающих в фоне приложений и служб, прошивки самого жёсткого диска, степени фрагментации файлов на нём, файловой системы, а также от приложения, которое инициировало считывание файла.. . ну и т. д.) . В целом работу жёсткого диска в таком режиме можно сравнить с работой лифта, который пытается перевозить пассажиров в том порядке, в каком поступают вызовы с этажей. Естественно, получается это у него далеко не самым лучшим образом, ибо жёсткий диск изначально спроектирован так, чтобы читать только один файл (головка-то одна у него) .

Появление SATA-контроллеров второго поколения (SATA-II) дало нам новый протокол обращения к жёсткому диску - AHCI (Advanced Host Controller Interface). Помимо всего прочего, AHCI-режим включал в себя поддержку технологии NCQ (Native Command Queuing - аппаратная установка очередности команд) . В этом режиме жёсткий диск работает с файлами принципиально иначе, он старается минимизировать количество метаний головки. Возвращаясь к примеру с лифтом: теперь лифт останавливается на каждом этаже, впуская и выпуская пассажиров. Да, какие-то пассажиры теперь будут ждать дольше, но большинство теперь попадает на нужный этаж намного быстрее.
Олег Хорошун
Олег Хорошун
3 805
Лучший ответ
Алексей Чаплий ну вот называется не признавай раньше времени, что не прав :)... Но из Ваших слов меня заинтересовал процесс до внедрения данной технологии (то есть когда очереди аппаратно не поддерживались). Может знаете, как тогда системы поступали... Как это работало во времена windows 98 или 2000, например?
За ответ спасибо )) он реально прояснил ситуацию в настоящее время... осталось разобраться с ide интерфейсом :) (кстати, вот только что на форуме ответили... полностью подтверждая всё то, что Вы написали).
Если это видеофайлы, то их можно запустить на разных плеерах и смотреть одновременно несколько фильмов
Фарид Ильдаров
Фарид Ильдаров
48 784
Алексей Чаплий да, но это не даёт ответа на вопрос )) Мы не знаем как устроен плеер... Тем более что он не читает файл одним разом, а буферизирует только часть файла (потому если смотреть фильм с диска он периодически затихает, а иногда снова раскручивается... иногда сопровождается очень коротким подвисанием видео из-за большой нагрузки при чтении).

Так что это не может служить показателем ситуации... а рядом уже ответили, как это устроено в относительно новых системах... осталось узнать как это происходило в старых :)
Мое мнение. Скорее всего система разпределит ресурсы на два файла, но сам процес чтения файла будет более медленным, так как таких процесса два. Если же делать акцент только на один, соответственно скорость чтения будет больше
Алексей Чаплий у меня есть предположение, так и будет, но только напрямую от квоты времени процесса чтение данных зависеть не будет. А просто будет делиться драйвером на отрезки равной длинны (или что-то типа такого) и по прочтению очередного отрезка очередь будет пересматриваться... Но вот так ли это... Вообщем очень интересен процесс обработки самой очереди (что, где, когда?) :)