Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Вопросы и ответы по ОС.doc
Скачиваний:
37
Добавлен:
27.08.2019
Размер:
3.35 Mб
Скачать

Процесс планирования ввода-вывода

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

Алгоритм планирования ввода/вывода, используемый в очереди запросов, представлен объектом-лифтом, имеющим. Его адрес хранится в поле дескриптора очереди запросов. Объект-лифт имеет несколько методов, покрывающих все возможные операции над лифтом: связывание

лифта с очередью запросов и отсоединение от нее, добавление запросов в очередь, слияние запросов в очереди, удаление запросов из очереди, получение из очереди следующего запроса для обработки и т. д. Лифт содержит также адрес таблицы со всей информацией, необходимой для управления очередью запросов. Кроме того, каждый дескриптор запроса имеет поле, которое указывает на дополнительную структуру данных, используемую планировщиком ввода/вывода при обработке запроса.

[Для справки]

В настоящее время Linux 2.6 предлагает четыре типа планировщиков ввода/вывода, или лифтов. Они называются Anticipatory (Предвидящий), Deadline (Крайний срок), CFQ (Complete Fairness Queueing, Абсолютно честная очередь) и Noop (No Operation, Никаких действий). Лифт, используемый ядром по умолчанию для большинства блочных устройств, указывается на этапе загрузки в определенном параметре ядра.

14. Подсистема виртуальной фс в ядре ос. Кеширование. Ввод-вывод и прямой доступ к памяти на примере дискового устройства. Необходимость в уровне буферов (на примере Линукс)

VFS является основным интерфейсом к файловым системам нижнего уровня. Этот компонент экспортирует набор интерфейсов и после этого абстрагирует их в отдельные файловые системы, образ поведения которых может быть весьма различным. Для объектов файловой системы (узлов inodes и записей dentries) существуют два кэша, о которых я скоро расскажу. Каждый из них предоставляет пул недавно использованных объектов файловой системы.

Основные структуры

В Linux все файловые системы рассматриваются с точки зрения общего набора объектов. К этим объектам относятся системные блоки, узлы inode, записи dentry и файлы. Корнем каждой файловой системы является системный блок, который описывает и поддерживает состояние файловой системы. Каждый объект, с которым работает файловая система (файл или директория) представлен в Linux узлом inode. Узел inode хранит в себе все метаданные для управления объектами файловой системы (в том числе и возможных операциях с ним). Другое множество структур, которое называют записями dentry, используется для осуществления преобразования между названиями и узлами inode, для чего существует кэш директорий, в котором хранятся последние использованные записи. В записях dentry также хранятся отношения между папками и файлами для обхода файловых систем. И, наконец, файл VFS представляет собой открытый файл (содержит состояние открытого файла, в том числе смещение для записи и т.п.).