
- •Управление процессами и потоками в мультипрограммных ос. Общие сведения о процессах и потоках в ос Windows. Понятие объекта ядра. Типы объектов ядра.
- •Описатель, командная строка, и переменные окружения процесса.
- •Создание процессов.
- •Завершение процесса.
- •Общие сведения о потоках. Создание потоков.
- •Выполнение потоков.
- •Завершение потоков.
- •Планирование потоков. Приостановка и возобновление процессов и потоков.
- •Приоритеты потоков. Классы приоритетов процессов и относительные приоритеты потоков.
- •Синхронизация процессов и потоков в мультипрограммных ос. Независимые и взаимодействующие процессы. Понятие критических ресурсов и критических секций.
- •Синхронизация процессов и потоков в ос Windows. Объекты синхронизации и функции ожидания.
- •Синхронизация с помощью критических секций.
- •Мьютексы.
- •События.
- •Семафоры.
- •Передача и обмен данными между процессами. Способы передачи данных и типы связей между процессами.
- •Средства передачи и обмена данными между процессами в ос Windows.
- •Обмен данными с помощью буфера обмена данными Clipboard.
- •Обмен данными по технологии dde.
- •Обмен данными по технологии ole. Понятие документно-ориентированной среды.
- •Принципы технологии ole.
- •Особенности ole 2.0
- •Обмен данными через разделяемые файлы.
- •Обмен данными через файлы, проецируемые в память. Создание файлов, проецируемых в память.
- •Обмен данными через проекцию файлов в память.
- •Обмен данными через страничный файл.
- •Обмен данными через программные каналы.
- •Средства организации анонимных и именованных каналов в Windows.
- •Концепция почтовых ящиков.
- •Создание почтовых ящиков.
- •Соединение клиентов с почтовым ящиком.
- •Обмен данными через почтовый ящик.
- •Закрытие почтового ящика.
- •Получение информации о почтовом ящике.
- •Обмен данными с помощью очередей сообщений.
- •Подсистема управления памятью. Функции подсистемы управления памятью.
- •Физическая и логическая память. Виртуальное (логическое) и физическое адресное пространство.
- •Способ построения вап процессов.
- •Способы распределения памяти на уровне управления процессами. Односвязное непрерывное распределение памяти.
- •Распределение памяти фиксированными разделами.
- •Распределение памяти динамическими и перемещаемыми разделами.
- •Виртуализация оперативной памяти. Свопинг и виртуальная память.
- •Страничное распределение памяти.
- •Преобразование адресов страниц прямым отображением.
- •Преобразование адресов страниц ассоциативным отображением.
- •Преобразование адресов страниц комбинированным ассоциативно-прямым отображением.
- •Совместное использование программ и данных в системах со страничной организацией памяти. Выбор размера страниц.
- •Сегментное распределение памяти.
- •Управление доступом в системах с сегментной организацией памяти.
- •Сегментно-страничное распределение памяти.
- •Реализация режима виртуальной памяти. Стратегии замещения страниц.
- •Стратегия замещения случайной страницы.
- •Стратегия замещения по принципу fifo.
- •Замещение страницы, которая использовалась наименее часто (lfu).
- •Замещение страницы, которая не использовалась в последнее время (nur).
- •Концепция локального и рабочего множества программ в системах с виртуальной памятью.
- •Уровни привилегий и защита по привилегиям.
- •Кеширование данных в памяти эвм. Иерархия устройств памяти. Понятие и принцип действия кэш-памяти.
- •Способы отображения основной памяти на кэш.
- •Двухуровневое кэширование.
- •Кеширование в процессорах моделей Pentium.
- •Структура линейного виртуального адресного пространства процесса в ос Windows.
- •Раздел 4 используется для хранения совместно используемых всеми процессами данных. Сюда же загружаются все системные .Dll модули, поэтому же доступны любому пользовательскому процессу.
- •Управление устройствами. Основные понятия и концепции организации.
Семафоры.
Объект «семафор» в ОС Windows описывается объектом ядра Semaphore. Семафор находится в сигнальном состоянии, если его значение, называемое счетчиком семафора, больше нуля. В противном случае, семафор находится в несигнальном состоянии. Потоки, ожидающие сигнального состояния семафора, выстраиваются в очередь к нему, и обслуживаются в соответствии с дисциплиной FIFO. Если какой-либо из этих потоков ожидает наступления асинхронного события, то функции ядра могут исключить поток из очереди к семафору для обслуживания этого события (при его наступлении). После этого поток переводится в конец очереди к семафору.
Семафоры создаются вызовом функции CreateSemaphore (ps1, ps2, ps3, ps4).
ps1 определяет атрибуты защиты объекта;
ps2 определяет начальное значение счетчика семафора, которое должно быть не меньше нуля, и не больше его максимального значения, которое задается параметром ps3.
ps4 задает имя семафора, либо может иметь значение пустой строки. В этом случае создается безымянный семафор.
В случае успешного завершения возвращается Handle созданного объекта, и ноль – в противном случае. Если семафор с заданным именем уже существует, то функция возвращает дескриптор ранее созданного семафора, а GetLastError возвращает ERROR_ALREADY_EXISTS.
Значение счетчика семафора уменьшается на единицу при его использовании в функции ожидания. Увеличить значение счетчика можно путем вызова ReleaseSemaphore(Handle, pr2, pr3).
Handle – дескриптор семафора;
pr2 – целое положительное число, на которое увеличивается значение семафора;
pr3 – предыдущее значение семафора.
В случае успешного завершения, функция возвращает ненулевое значение, и нулевое – в противном случае.
Если значение счетчика семафора в сумме с pr2 оказывается больше ps3, то данная функция ReleaseSemaphore возвращает ноль, и значение счетчика не меняется.
Доступ к существующему семафору можно открыть либо путем вызова CreateSemaphore (ps1, ps2, ps3, ps4), либо вызова OpenSemaphore(po1, po2, po3).
При использовании CreateSemaphore, второй и третий её параметры игнорируются, поскольку они уже заданы другим потоком, при этом поток, вызвавший эту функцию, получает полный доступ к семафору с именем, заданным в четвертом параметре.
Функция OpenSemaphore используется в случае, когда заранее известно, что семафор с заданным именем уже существует. Параметры аналогичны параметрам OpenEvent.
Семафоры с внутренним счетчиком используются для синхронизации доступа к однотипным ресурсам, которые создаются одним или несколькими потоками, а потребляются также одним или несколькими потоками. Первые называются потоками-производителями ресурсов, а вторые – потребителями. В подобной схеме взаимодействия потоков, текущее значение счетчика равно количеству произведенных ресурсов. Максимальное значение счетчика устанавливается равным максимально возможному значению таких ресурсов. При создании единицы ресурса значение семафора увеличивается на единицу, а при потреблении – уменьшается на единицу.
В общем случае, скорости работы потоков-производителей и потребителей неизвестны, поэтому максимальное значение считающего семафора должно быть установлено равным максимальному количеству производимых ресурсов. Если поток, потребляющий ресурс, работает быстрее, чем поток, производящий ресурс, то поток-потребитель должен вызвать функцию ожидания для того чтобы ждать, пока поток-производитель не создаст очередную единицу ресурса.
В обратной ситуации, поток, производящий ресурсы, работает быстрее, чем потребитель. Он создаст все ресурсы, и завершит свою работу, не дожидаясь момента, пока другой поток использует их. Такая синхронизация между потоками-производителями и потребителями будет обеспечивать их максимально быструю взаимную работу.