12.6 УПРАЖНЕНИЯ
1. Решите проблему
функционирования
многопроцессорных систем таким
образом, чтобы все процессоры в
системе могли функционировать в
режиме ядра, но не более одного
одновременно. Такое решение будет
отличаться от первой из
предложенных в тексте схем, где
только один процессор (главный)
предназначен для реализации
функций ядра. Как добиться того,
чтобы в режиме ядра в каждый момент
времени находился только один
процессор? Какую стратегию
обработки прерываний при этом
можно считать приемлемой?
2. Используя системные функции
работы с разделяемой областью
памяти, протестируйте программу,
реализующую семафорную блокировку
(Рисунок 12.6).
Последовательности операций P-V над
семафором могут независимо один от
другого выполнять несколько
процессов. Каким образом в
программе следует реализовать
индикацию и обработку ошибок?
3. Разработайте алгоритм
выполнения операции CP (условный тип
операции P), используя текст
алгоритма операции P.
4. Объясните, зачем в алгоритмах
операций P и V (Рисунки 12.8 и 12.9) нужна
блокировка прерываний. В какие
моменты ее следует осуществлять?
5. Почему при выполнении
"циклической блокировки"
вместо строки:
while (! CP(семафор));
ядро не может использовать
операцию P безусловного типа? (В
качестве наводящего вопроса: что
произойдет в том случае, если
процесс запустит операцию P и
приостановится?)
6. Обратимся к алгоритму getblk,
приведенному в главе 3.
Опишите реализацию алгоритма в
многопроцессорной системе для
случая, когда блок отсутствует в
буферном кеше.
*7. Предположим, что при выполнении
алгоритма выделения буфера
возникла чрезвычайно сильная
конкуренция за семафор,
принадлежащий списку свободных
буферов. Разработайте схему
ослабления конкуренции за счет
разбиения списка свободных буферов
на два подсписка.
*8. Предположим, что у
терминального драйвера имеется
семафор, значение которого при
инициализации сбрасывается в 0 и по
которому процессы
приостанавливают свою работу в
случае переполнения буфера вывода
на терминал. Когда терминал готов к
приему следующей порции данных, он
выводит из состояния ожидания все
процессы, приостановленные по
семафору. Разработайте схему
возобновления процессов,
использующую операции типа P и V. В
случае необходимости введите
дополнительные флаги и семафоры.
Как должна вести себя схема в том
случае, если процессы выводятся из
состояния ожидания по прерыванию,
но при этом текущий процессор не
имеет возможности блокировать
прерывания на других процессорах?
*9. Если точки входа в драйвер
защищаются семафорами, должно
соблюдаться условие освобождения
семафора в случае перехода
процесса в состояние приостанова.
Как это реализуется на практике?
Каким образом должна производиться
обработка прерываний, поступающих
в то время, пока семафор драйвера
заблокирован?
10. Обратимся к системным функциям
установки и контроля системного
времени (глава 8).
Разные процессоры могут иметь
различную тактовую частоту. Как в
этом случае указанные функции
должны работать?
Предыдущая
глава || Оглавление
|| Следующая глава
|