Рассмотрим теперь две операции ввода-вывода, показывающие, как опасно полагаться на средние значения. Пусть у нас имеется обычный диск, у которого среднее время поиска составляет 10 ms, скорость вращения — 10000 об/мин, и диск разбит на сектора по 512 байт, с 320 секторами на одной дорожке. Предположим, что нам необходимо выполнить чтение файла, состоящего из 2560 секторов, общим размером 1.3 Мбайт. Мы хотим оценить общее время передачи данных.
Сначала предположим, что файл сохранен настолько компактно, насколько это возможно, — т.е. файл занимает все секторы на 8 соседних дорожках (8 дорожек * 320 секторов на дорожке = 2560 секторов). Такое размещение называется последовательным. В этом случае время, необходимое для чтения первой дорожки, определяется следующим образом:
Среднее время поиска 10 ms
Задержка на вращение 3 ms
Чтение 320 секторов 6 ms
19 ms
Предположим, что остальные дорожки могут быть считаны последовательно, без затраты времени на поиск. Другими словами, операция ввода-вывода не отстает от потока данных с диска. Значит, для каждой последующей дорожки остается только задержка из-за вращения; соответственно, каждая дорожка считывается за 3 + 6 = 9 ms. Итак, для чтения всего файла нам потребуется
Общее время = 19 / 7 * 9 = 82 ms = 0.082 s
Теперь рассчитаем время, необходимое для чтения тех же данных, но при случайном, а не последовательном доступе — т.е. секторы с содержимым файла распределены на диске случайным образом. Тогда для каждого сектора:
Среднее время поиска 10 ms
Задержка на вращение 3 ms
Чтение 1 сектора 0.01875 ms
13.01875 ms
Общее время = 2560 * 13.01875 = 33328 ms = 33.328 s
Очевидно, что порядок чтения секторов с диска оказывает огромное влияние на производительность дискового ввода-вывода. Если при доступе к файлу с диска считывается (или записывается на него) несколько секторов, имеется возможность определенного контроля над использованием секторов с данными, но об этом мы поговорим в следующей главе. Однако в многозадачной среде всегда будут в наличии конкурирующие между собой запросы на операции ввода-вывода с одним и тем же диском, так что избежать случайного доступа не удастся. Таким образом, следует изучить способы повышения производительности дискового ввода-вывода при случайном доступе.
Стратегии дискового планирования
В только что рассмотренном примере причина разницы в производительности может быть объяснена продолжительностью поиска. Если выполнение обращений к секторам включает выбор дорожек случайным образом, производительность дискового ввода-вывода окажется чрезвычайно низкой. Для ее повышения нам необходимо уменьшить время, затрачиваемое на поиск дорожки.
Рассмотрим типичную ситуацию в многозадачной среде, когда операционная система поддерживает очередь запросов для каждого устройства ввода-вывода. Соответственно, в очереди одного диска будет находиться некоторое количество запросов на ввод-вывод (чтение или запись) от различных процессов. Если выбирать запросы из очереди случайным образом, то следует ожидать, что искомые дорожки будут располагаться в произвольном порядке, это приведет к очень низкой производительности. Такое случайное распределение может служить точкой отсчета для оценки других методик.
Простейшей формой планирования является планирование "первым вошел — первым вышел" (FIFO), что просто означает обработку запросов из очереди в порядке их поступления. Преимущество такой стратегии — в ее беспристрастности. На рис. 11.8,а показано перемещение головки при использовании стратегии FIFO (в этом примере мы полагаем, что на диске имеется 200 дорожек, а в очереди находятся запросы к дорожкам, поступившие случайным образом: 55, 58, 39, 18, 90, 160, 150, 38, 184). В табл. 11.2,а приведены количественные результаты.
Рис. 11.8. Сравнение различных алгоритмов дискового планирования
При использовании стратегии FIFO надеяться на высокую производительность можно только при небольшом количестве процессов и запросах в основном к близким группам секторов. Однако при работе большого количества процессов производительность будет почти такой же, как и при случайном планировании. Поэтому следует обратиться к более интеллектуальным стратегиям планирования (табл. 11.3).