Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Экзамен по ОС_Ответы.doc
Скачиваний:
51
Добавлен:
24.09.2019
Размер:
926.72 Кб
Скачать

9) Эффект инверсии приоритетов. (пример, способы преодоления)

Наличие приоритетов может привести к неявной рокировке, когда более высокоприоритетный поток ждет сигнал от менее приоритетного потока.

  1. Поток T1 выполняет код в критической секции.

  2. Появляется поток T3 с наивысшим приоритетом в готовом состоянии поток T1 вытесняется.

  3. Поток T3, ожидая событие, отдает управление потоку T1, потому что в данный момент поток T1 наиболее приоритетный поток в готовом состоянии.

  4. Если в системе появляется готовый поток T2 в то время, как T1 не успел выйти из критической секции, то он (T2) блокирует более приоритетный поток T3, т.о. происходит инверсия приоритета.

Решение проблемы Win 2000 и Win 98:

В Win 2000 планировщик учитывает время простоя готовых потоков и случайным образом повышает их динамический приоритет.

В Win 98 диспетчер обнаруживает зависимости более приоритетного потока от менее приоритетного потока через объект ядра и повышает приоритет менее приоритетного потока до уровня приоритета более приоритетного потока.

10) Мультипроцессорная обработка в ос Windows. (термины, вызовы api, назначение)

Управление несколькими процессорами

Распределение потоков между процессорами.

  1. ThreadAffinity (соответствие потока определенному процессору). Указание данного свойства вынуждает поток исполняться на указанном подмножестве процессоров.

SetProcessAffinityMask() GetProcessAffinityMask()

SetThreadAffinityMask() GetThreadAffinityMask()

Установка аффинности может использоваться в двух случаях:

  • Отладка многозадачного приложения (при отладке можно наблюдать за активностью каждой отдельной нити);

  • Оптимизация под архитектуры с неоднородным доступом к памяти (NUMA).

Если зависимые нити поместить на один процессор, то они будут выполняться быстрее, так как будут обрабатываться через один внутренний КЭШ процессора, а не внешний, как в противном случае.

MSDN: назначение (жесткое) нитей на процессора может снизить производительность.

  1. Thread Ideal Processor (это не жесткая привязка, а “рекомендация” диспетчеру назначать поток на данный процессор).

SetIdealProcessor() GetProcessIdealProcessor()

11) Эффект гонки. (пример, способ преодоления)

Синхронизации в пользовательском режиме

Типы синхронизации:

  1. Совместное использование разделяемого ресурса (конкурентное взаимодействие);

  2. Уведомление потоков о завершении какой-либо операции (кооперативное взаимодействие).

12) Средства синхронизации в режиме пользователя в ос Windows. (interlocked-функции, объект «критическая секция»)

Третьей важной функцией ОС является функция управления исполнением процессов в системе. Для каждого вновь создаваемого процесса ОС генерирует системные информационные структуры, которые содержат данные о потребностях процесса в ресурсах вычислительной системы, а также о фактически выделенных ему ресурсах. В мультизадачной ОС одновременно может существовать несколько процессов. Часть процессов порождается по инициативе пользователей и их прикладных программ, такие процессы называются пользовательскими. Другие процессы, называемые системными, инициализируются самой ОС для выполнения своих функций.

Поскольку процессы часто одновременно претендуют на одни и те же ресурсы, то ОС обязана поддерживать очереди заявок процессов на ресурсы, синхронизировать доступ процессов к ресурсам и организовать совместное использование ресурсов (например, доступ к общей области памяти).

Ресурс, который допускает обслуживание только одного пользователя за один раз, называется критическим ресурсом.

Если несколько процессов хотят пользоваться критическим ресурсом в режиме разделения, им следует синхронизировать свои действия. Внутри процесса можно выделить места, в которых происходит обращение к критическим ресурсам. Эти места называются критическими секциями и должны быть взаимно исключаемыми, то есть в ОС должен быть предусмотрен механизм синхронизации входа процессов в свои критические секции.

Синхронизация процессов должна производиться также с целью обмена информацией между процессами. Одним из решений проблемы синхронизации является механизм семафоров.

Понятие семафора введено Дейкстрой. Семафором называется целая переменная, значение которой могут менять две операции: P и V. Пусть S – семафор, тогда операции определяются следующим образом:

  1. P(S): Если S>=0, то S уменьшается на 1 и процесс продолжает работу;

если S<0, то процесс останавливается и встает в очередь ожидания, связанную с S; он заблокирован до тех пор, пока операция V(S), выполненная другим процессом не освободит его, то есть не будет возможно выполнить операцию P(S).

  1. V(S): S увеличивается на 1 и запоминается, если S>=0 то, один процесс из очереди может продолжить свою работу; к S нет доступа другим процессам во время операции.

В каждый момент времени только один процесс может выполнить операцию P или V над данным семафором. Если эти операции запрашивают несколько процессов, то они будут выполняться последовательно в произвольном порядке.

P– операция вызывает ожидания процесса, V– операция может, активизировать ожидающий процесс.

Семафор, максимальное значение которого равно 1, называется двоичным семафором. С помощью двоичного о семафора процессы могут организовать взаимное исключение, заключив свои критические операции в “скобки”, роль которых играют операции P и V.

Если два процесса используют S, то S=1 означает, что ни один процесс не находится в критической секции, S=0 означает, что 1 процесс в критической секции, S= -1 означает, что один в критической секции и хотя бы один – в очереди к семафору. С помощью семафоров можно организовать управление ресурсами и решить проблему синхронизации работы процессоров.

При реализации синхронизации доступа процессов к ресурсам может возникнуть проблема тупика. Тупиком называется ситуация, когда 2 процесса нуждаются в 2 ресурсах одновременно, при этом 1 процесс захватывает 1 ресурс, а 2 процесс захватывает 2 ресурс и ни один не может продолжать исполнение. Процессы ждут друг друга неопределённо долгое время. Такая ситуация также носит название “клинч” – смертельное объятие. Проблема тупиков решается двумя путями: их предотвращением или автоматическим распознаванием тупиков. Проблема автоматизации распознавания тупиков привела к тому, что многие исследователи стали разрабатывать математические модели для представления и анализа поведения параллельных процессов. Все эти модели основаны на представлении вычислительного процесса в виде графа или сети (сеть – это граф, у которого множество вершин разделяется на два или более непересекающихся подмножества, имеющих разное назначение).

На протяжении периода существования процесса его выполнение может быть многократно прервано и продолжено. Для того, чтобы возобновить выполнение процесса, необходимо восстановить состояние его операционной среды. Состояние операционной среды идентифицируется состоянием регистров, режимом работы процессора, указателями на открытые файлы, информацией о незавершенных операциях ввода-вывода и т.д. Эта информация называется контекстом процесса.