1. Рассмотрим функцию хеширования
применительно к Рисунку 3.3. Наилучшей
функцией хеширования является та,
которая единым образом
распределяет блоки между
хеш-очередями. Что Вы могли бы
предложить в качестве оптимальной
функции хеширования? Должна ли эта
функция в своих расчетах
использовать логический номер
устройства? 2. В алгоритме getblk, если ядро
удаляет буфер из списка свободных
буферов, оно должно повысить
приоритет прерывания работы
процессора так, чтобы блокировать
прерывания до проверки списка.
Почему? *3. В алгоритме getblk ядро должно
повысить приоритет прерывания
работы процессора так, чтобы
блокировать прерывания до проверки
занятости блока. (Это не показано в
тексте.) Почему? 4. В алгоритме brelse ядро помещает
буфер в "голову" списка
свободных буферов, если содержимое
буфера неверно. Если содержимое
буфера неверно, должен ли буфер
появиться в хеш-очереди? 5. Предположим, что ядро выполняет
отложенную запись блока. Что
произойдет, когда другой процесс
выберет этот блок из его
хеш-очереди? Из списка свободных
буферов? *6. Если несколько процессов
оспаривают буфер, ядро гарантирует,
что ни один из них не
приостановится навсегда, но не
гарантирует, что процесс не
"зависнет" и дождется
получения буфера. Переделайте
алгоритм getblk так, чтобы процессу
было в конечном итоге
гарантировано получение буфера. 7. Переделайте алгоритмы getblk и brelse
так, чтобы ядро следовало не схеме
замещения буферов, к которым
наиболее долго не было обращений, а
схеме "первым пришел - первым
вышел". Повторите то же самое со
схемой замещения редко
используемых буферов. 8. Опишите ситуацию в алгоритме
bread, когда информация в буфере уже
верна. *9. Опишите различные ситуации,
встречающиеся в алгоритме breada. Что
произойдет в случае следующего
выполнения алгоритма bread или breada,
когда текущий блок прочитан с
продвижением? В алгоритме breada, если
первый или второй блок отсутствует
в кеше, в дальнейшем при проверке
правильности содержимого буфера
предполагается, что блок мог быть в
буферном пуле. Как это может быть? 10. Опишите алгоритм,
запрашивающий и получающий любой
свободный буфер из буферного пула.
Сравните этот алгоритм с getblk. 11. В различных системных
операциях, таких как umount и sync (глава 5), требуется,
чтобы ядро перекачивало на диск
содержимое всех буферов, которые
помечены для "отложенной
записи" в данной файловой
системе. Опишите алгоритм,
реализующий перекачку буферов. Что
произойдет с очередностью
расположения буферов в списке
свободных буферов в результате
этой операции? Как ядро может
гарантировать, что ни один другой
процесс не подберется к буферу с
пометкой "отложенная запись" и
не сможет переписать его
содержимое в файловую систему, пока
процесс перекачки приостановлен в
ожидании завершения операции
ввода-вывода? 12. Определим время реакции
системы как среднее время
выполнения системного вызова.
Определим пропускную способность
системы как количество процессов,
которые система может выполнять в
данный период времени. Объясните,
как буферный кеш может
способствовать повышению реакции
системы. Способствует ли он с
неизбежностью увеличению
пропускной способности системы? Предыдущая
глава || Оглавление
|| Следующая глава
3.7 УПРАЖНЕНИЯ