- •1) Что понимают под архитектурой, структурой и составом ос?
- •2) Каков типовой состав ос?
- •3) Представьте классическую архитектуру ос (на основе ядра), поясните состав и функции ядра и вспомогательных модулей ос.
- •4) Какие режимы, обеспечивающие привилегии ос, должна поддерживать аппаратура компьютера?
- •5) Какая задержка переключений процессора характерна для классической архитектуры ос?
- •6) Изобразите многослойную структуру ос и поясните ее основные особенности.
- •7) Какие действия выполняет ос при порождении процесса?
- •8) Что такое «описатель (дескриптор) процесса»?
- •9) Что такое «описатель (дескриптор) потока»?
- •10) Поясните суть и основные типы планирования потоков.
- •11) Чем динамическое планирование потоков отличается от статического?
- •12) Поясните суть и порядок диспетчеризации потоков.
- •13) Как организуются и переупорядочиваются очереди потоков?
- •14) Чем различаются вытесняющие и невытесняющие алгоритмы планирования?
- •15) Поясните особенности алгоритмов планирования, основанных на квантовании.
- •16) Что такое «приоритет потока» и каким он бывает?
- •17) Чем динамические приоритеты потоков отличаются от статических?
- •18) Опишите схему назначения приоритетов в ос Windows nt.
- •19) Опишите смешанный алгоритм планирования в ос Windows nt.
- •20)Перечислите события, требующие перераспределения процессорного времени и поясните действия планировщика ос в каждом случае.
- •21) Опишите моменты перепланировки в среде ос рв.
- •22)Как осуществляются диспетчеризация и учёт приоритетов прерываний в ос?
- •23) Как работает диспетчер прерываний?
- •24)Как согласуется диспетчеризация прерываний с диспетчеризацией потоков?
- •25)Как организован диспетчер системных вызовов?
- •26) Опишите схему организации системных вызовов с диспетчером системных вызовов.
- •27)Опишите особенности и различия организации синхронных и асинхронных системных вызовов.
- •31)Что такое «критическая секция», «критические данные», «взаимное исключение» потоков.
- •32)Поясните суть использования блокирующих переменных.
- •33)Поясните суть использования семафоров.
- •34)Опишите пример использования семафоров при работе с буферным пулом записи/чтения.
- •36)Чем тупики отличаются от очередей?
- •37)Опишите идеи и средства выявления и устранения тупиков.
- •38)Поясните сложность синхронизации потоков разных процессов.
- •39)Какие методы используются в ос для разделения синхронизирующих объектов?
- •40)Какие обычные объекты ос могут использоваться как синхронизирующие и какие события переводят их в сигнальное состояние?
34)Опишите пример использования семафоров при работе с буферным пулом записи/чтения.
Рассмотрим использование семафоров на примере взаимодействия потоков, выполняющихся в многозадачном режиме. Одни потоки записывают данные в буферный пул, а другие считывают их из буферного пула. (Буферный пул – набор регистров, в которые записывается информация для временного хранения. Регистры освобождаются и занимаются потоками.) Пусть буферный пул состоит из N буферов, каждый из которых может содержать одну запись. Потоки-писатели должны приостанавливаться, когда все буферы оказываются занятыми, и активизироваться при освобождении хотя бы одного буфера. Напротив, потоки-читатели должны приостанавливаться, когда все буферы пусты, и активизироваться при появлении хотя бы одной записи. Операции записи в буфер и считывания из буфера являются критическими секциями потоков-читателей и потоков-писателей.
Для решения задачи введем три семафора:
e – число пустых буферов;
f – число заполненных буферов;
b – блокирующая переменная – двоичный семафор, используемый для обеспечения взаимного исключения при работе с разделяемыми данными в критической секции.
V- освобождение ресурса Р-занятие ресурса.
Использование семафоров для синхронизации потоков Здесь операции Р и V имеют следующее содержание: Р(е) – если есть свободные буферы, то уменьшить их количество на 1, если нет, то перейти в состояние «ожидание»; P(b) – если критическая секция доступна, то установить признак «занято» (b=0), если нет, то перейти в состояние «ожидание»; V(b) – освободить критическую секцию (установить b=1); V(f) – нарастить число занятых буферов. Следует учитывать, что уменьшение количества свободных и увеличение числа занятых буферов – разные операции. Поток-писатель, прежде всего, проверяет, имеются ли в пуле пустые буферы, используя семафор P(e). Если свободных буферов нет (е=0), то поток переводится в состояние ожидания. Если свободные буферы есть (е>0), то поток-писатель уменьшает их число и входит в критическую секцию (если это возможно, т.е. если b=1) для записи данных в буфер. После выхода из критической секции поток-писатель наращивает число занятых буферов V(f). Поток-читатель действует аналогично, с той разницей, что он начинает работу с проверки наличия заполненных буферов – P(f), а после чтения данных наращивает количество свободных буферов – V(e). 35)Поясните суть взаимных блокировок (тупиков).
Взаимная блокировка - ситуация, когда каждый из группы процессов ожидает событие, которое может вызвать только другой процесс из этой группы. Часто, такая ситуация наблюдается в парадоксах типа «Курица или яйцо». Также встречаются названия тупиковая ситуация, тупик,клинч. В англоязычной литературе эта ситуация называется англ. deadlock(произносится как Дедлок ).
В качестве примера подобной ситуации можно привести двух мужчин, чертят схемы, имея лишь одну линейку и один карандаш. Если один из мужчин примет линейку, а другой карандаш, между ними возникает ситуация взаимного блокирования когда для того, чтобы освободить линейку надо карандаш, а для освобождения карандаша надо линейка.
Вообще говоря, блокировкой (или зависанием ) есть такая ситуация, когда вне зависимости от того, сколько прошествии времени, ни один прехид из одного состояния в другое состояться не может.
Условия возникновения взаимной блокировки
Было показано, что для возникновения ситуации взаимной блокировки, необходимо выполнение следующих четырех условий одновременно:
Условие взаимного исключения ( англ. mutual exclusion ). Каждый ресурс в текущий момент или занят ровно одним процессом или свободный. То есть, ресурсы находятся в режиме эксклюзивного пользования.
Условие удержания и ожидания ( англ. hold and wait ). Процессы, в текущий момент удерживают полученные ранее ресурсы, могут делать запросы на получение новых ресурсов.
Условие отсутствия принудительного освобождения ресурсов ( англ. no preemption ). Невозможно заставить процесс освободить ранее полученные ресурсы.Процесс, обладающий ресурсами, должен сам их увольнять.
Условие циклического ожидания ( англ. circular wait ). Должно существовать кольцевая последовательность из двух или более процессов, каждый из которых ожидает увольнение ресурса, удерживаемого следующим членом последовательности. Иными словами, должно существовать множество процессов {P0, P1,... Pn}, так, что процесс P 0 ожидает освобождения ресур процесса P 1, P 1 ожидает P 2,...,P N - 1 ожидает P N, а P N ожидает освобождения ресурсов процессом P 0.