Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПБД part 3 lecture 16 Лекция (повышение эффективности дисковых операций).doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
81.92 Кб
Скачать

Упорядочение дисковых операций и «алгоритм лифта»

Ещё один способ повышения пропускной способности системы связан с применением алгоритмов (уровня контроллера дисков), позволяющих упорядочить запросы на выполнение дисковых операций во времени и выбирать, какие из них должны обрабатываться первыми (динамические расписания обслуживания запросов). Это неприменимо, когда системе (как в случае с двухфазной сортировкой) приходится считывать и записывать данные в определённой последовательности, но даёт выигрыш в производительности, если система единовременно выполняет множество запросов, затрагивающих небольшие порции данных.

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

Пример:

Среднее время поиска – 6,46 млсек., среднее время оборота – 4,17 млсек., среднее время передачи – 0,25 млсек. (см. исходные данные системы вначале лекции). Пусть к некоторому нулевому моменту времени поступили три запроса, предусматривающие обращения к блокам данных, расположенным на цилиндрах с номерами 2000, 6000 и 14000, а блок головок расположен напротив цилиндра 2000. В скором времени должны поступить ещё три запроса (данные представлены в таблице ниже). Например, запрос, предполагающий обращение к цилиндру 4000, поступает в момент времени 10 млсек. и т.д.

№ п/п

Номер цилиндра

Момент поступления, млсек.

Номер цилиндра при обработке

Момент времени начала обработки, млсек.

Момент времени завершения, млсек.

Пояснения

2000

0

2000

0

4,42

4,17+0,25=4,42, поиск не требуется, запрос к цилиндру 4000 ещё не поступил

6000

0

6000

9,42

13,84

4,42+5(4000/1000+1), головки «проскочили» цилиндр 4000, запрос ещё не поступил

14000

0

14000

22,84

27,26

13,84+9=22,84, запрос по цилиндру 16000 уже поступил

4000

10

16000

30,26

34,68

27,26+3=30,26, движение меняется на обратное

16000

20

10000

41,68

46,10

34,68+7=41,68

10000

30

4000

53,10

57,52

46,10+7=53,10

Предварительное считывание и крупномасштабная буферизация

В некоторых приложениях удаётся заранее предвидеть порядок, в соответствие с которым блоки должны считываться с диска. В таком случае можно загрузить дисковые данные в ОП ещё до момента, когда потребность в них действительно возникнет. Так можно улучшить качество расписания обслуживания обращения к диску за счёт уменьшения среднего времени обработки блока.

При этом требуется наращивание объёма ОП для создания дополнительных буферов. Метод не даёт преимуществ, если поток запросов – «случайный».

Пример:

Объединим стратегии предварительного считывания и группирование данных по цилиндрам.

Рассмотрим снова алгоритм сортировки двухфазным многокомпонентным слиянием (вторую фазу). Количество свободно ОП позволяет организовать по два буфера объёмом, равным ёмкости дорожки, для каждого из 16 отсортированных подсписков. Т.к. дорожка сохраняет 512 Кб, объём требуемой ОП – 16Мб. Можно начинать считывание с любого сектора, так что время, необходимое для загрузки данных всей дорожки, состоит фактически из одного периода среднего времени поиска и времени полного оборота диска: 6,46+8,33=14,79 млсек. Т.к. для считывания всех 16 отсортированных подсписков требуется обратиться к 3136 дорожкам 196 цилиндров, общее время загрузки информации в ОП составит 46 сек.

Показатели производительности можно улучшить ещё больше, если использовать для каждого из подсписков по два буфера объёмом, равным ёмкости цилиндра.