- •Глава 11
- •Глава 12. Управление файлами
- •Глава 11 Управление вводом-выводом и дисковое планирование
- •11.1. Устройства ввода-вывода
- •11.2. Организация функций
- •11.3. Вопросы проектирования операционных систем
- •11.4 Буферизация операций ввода-вывода
- •11.5. Дисковое планирование
- •Выбор в соответствии с источником запроса
- •Выбор в соответствии с содержимым запроса
- •11.6. Raid
- •Буфер кэша
- •Очередь символов
- •Небуферизированный ввод-вывод
- •11.9. Ввод-вывод в windows 2000
- •Асинхронный и синхронный ввод-вывод
- •11.10. Резюме, ключевые термины и контрольные вопросы
- •Ключевые термины
- •Рекумендуемая литература
- •11.12. Задачи
- •Приложение. Дисковые устройства Магнитный диск
- •Оптическая память
Буфер кэша
Буфер кэша в UNIX является, по сути, кэшем диска. Дисковые операции ввода-вывода работают через этот буфер. Передача данных между буфером и пространством пользовательского процесса всегда происходит с использованием DMA. Поскольку и буфер, и область ввода-вывода процесса размещены в основной памяти, DMA используется для осуществления копирования "память-память". В этом случае процессор не используется, но расходуются циклы шины.
Для управления буфером кэша поддерживаются три списка.
Список свободных слотов. Список всех слотов кэша (в UNIX слот рассматривается как буфер; каждый слот хранит один сектор диска), доступных для распределения.
Список устройств. Список всех буферов, связанных в данный момент с каждым диском.
Очередь драйвера ввода-вывода. Список буферов, участвующих в операциях ввода-вывода конкретного устройства (или находящихся в состоянии ожидания операций).
Каждый буфер должен находиться либо в списке свободных слотов, либо в списке очереди драйвера ввода-вывода. Буфер, однажды назначенный устройству, остается назначенным ему, даже если он попадает в свободный список, — до тех пор, пока он не будет реально востребован и назначен другому устройству. Реально эти списки представляют собой списки указателей на буфера.
При обращении к номеру физического блока определенного устройства операционная система прежде всего выполняет проверку наличия этого блока в буфере кэша. Для минимизации времени поиска список устройства организован в виде хэш-таблицы с использованием методики, аналогичной методу переполнения с цепочками, рассматривавшемуся в приложении к главе 8 (рис. 8.24,6). Общая организация буфера кэша показана на рис. 11.15. Хэш-таблица фиксированной длины содержит указатели на буфер кэша. Каждая ссылка на (устройство блок ) отображается в определенную запись хэш-таблицы. Указатель в этой записи указывает на первыйбуфер в цепочке. Указатель, связанный с каждым буфером, указывает на следующий буфер в цепочке. Следовательно, для всех обращений вида (устройство блок ), соответствующих одной записи хэш-таблицы, искомый блок окажется в цепочке этой записи поля хэш-таблицы, если, конечно, данный блок имеется в кэше. Таким образом, при использовании хэш-таблицы длиной N длительность поиска в кэше снижается в N раз.
Рис. ll.l5. Организация буфера кэша в UNIX
Для замещения блоков используется алгоритм LRU. После того как дисковому блоку выделяется буфер, он не может быть использован для другого блока до тех пор, пока все остальные буфера не окажутся занятыми, причем позднее рассматриваемого. Список свободных слотов сохраняет этот порядок.
Очередь символов
Кэш способен эффективно обслуживать такие блочно-ориентированные устройства, как диск и магнитная лента. Для символьно-ориентированных устройств, таких, как терминалы и принтеры, требуется иная форма буферизации. Информация либо записывается в очередь символов устройством ввода-вывода и считывается процессом, либо записывается процессом и считывается устройством. В обоих случаях используется модель производителя/потребителя, изучавшаяся нами в главе 5, "Параллельные вычисления: взаимоисключения и многозадачность". Следовательно, символы из очереди могут быть считаны только один раз: прочитанный из очереди символ уничтожается. В этом и состоит отличие от буфера кэша, где процедура чтения может выполняться неоднократно и, следовательно, применима модель читателей/писателей (которая также рассматривалась в главе 5.