- •Управление процессами и потоками в мультипрограммных ос. Общие сведения о процессах и потоках в ос Windows. Понятие объекта ядра. Типы объектов ядра.
- •Описатель, командная строка, и переменные окружения процесса.
- •Создание процессов.
- •Завершение процесса.
- •Общие сведения о потоках. Создание потоков.
- •Выполнение потоков.
- •Завершение потоков.
- •Планирование потоков. Приостановка и возобновление процессов и потоков.
- •Приоритеты потоков. Классы приоритетов процессов и относительные приоритеты потоков.
- •Синхронизация процессов и потоков в мультипрограммных ос. Независимые и взаимодействующие процессы. Понятие критических ресурсов и критических секций.
- •Синхронизация процессов и потоков в ос Windows. Объекты синхронизации и функции ожидания.
- •Синхронизация с помощью критических секций.
- •Мьютексы.
- •События.
- •Семафоры.
- •Передача и обмен данными между процессами. Способы передачи данных и типы связей между процессами.
- •Средства передачи и обмена данными между процессами в ос Windows.
- •Обмен данными с помощью буфера обмена данными Clipboard.
- •Обмен данными по технологии dde.
- •Обмен данными по технологии ole. Понятие документно-ориентированной среды.
- •Принципы технологии ole.
- •Особенности ole 2.0
- •Обмен данными через разделяемые файлы.
- •Обмен данными через файлы, проецируемые в память. Создание файлов, проецируемых в память.
- •Обмен данными через проекцию файлов в память.
- •Обмен данными через страничный файл.
- •Обмен данными через программные каналы.
- •Средства организации анонимных и именованных каналов в Windows.
- •Концепция почтовых ящиков.
- •Создание почтовых ящиков.
- •Соединение клиентов с почтовым ящиком.
- •Обмен данными через почтовый ящик.
- •Закрытие почтового ящика.
- •Получение информации о почтовом ящике.
- •Обмен данными с помощью очередей сообщений.
- •Подсистема управления памятью. Функции подсистемы управления памятью.
- •Физическая и логическая память. Виртуальное (логическое) и физическое адресное пространство.
- •Способ построения вап процессов.
- •Способы распределения памяти на уровне управления процессами. Односвязное непрерывное распределение памяти.
- •Распределение памяти фиксированными разделами.
- •Распределение памяти динамическими и перемещаемыми разделами.
- •Виртуализация оперативной памяти. Свопинг и виртуальная память.
- •Страничное распределение памяти.
- •Преобразование адресов страниц прямым отображением.
- •Преобразование адресов страниц ассоциативным отображением.
- •Преобразование адресов страниц комбинированным ассоциативно-прямым отображением.
- •Совместное использование программ и данных в системах со страничной организацией памяти. Выбор размера страниц.
- •Сегментное распределение памяти.
- •Управление доступом в системах с сегментной организацией памяти.
- •Сегментно-страничное распределение памяти.
- •Реализация режима виртуальной памяти. Стратегии замещения страниц.
- •Стратегия замещения случайной страницы.
- •Стратегия замещения по принципу fifo.
- •Замещение страницы, которая использовалась наименее часто (lfu).
- •Замещение страницы, которая не использовалась в последнее время (nur).
- •Концепция локального и рабочего множества программ в системах с виртуальной памятью.
- •Уровни привилегий и защита по привилегиям.
- •Кеширование данных в памяти эвм. Иерархия устройств памяти. Понятие и принцип действия кэш-памяти.
- •Способы отображения основной памяти на кэш.
- •Двухуровневое кэширование.
- •Кеширование в процессорах моделей Pentium.
- •Структура линейного виртуального адресного пространства процесса в ос Windows.
- •Раздел 4 используется для хранения совместно используемых всеми процессами данных. Сюда же загружаются все системные .Dll модули, поэтому же доступны любому пользовательскому процессу.
- •Управление устройствами. Основные понятия и концепции организации.
Завершение потоков.
Любой поток может быть завершен одним из следующих 4 способов:
естественный. Функция потока выполняется до конца, и возвращает управление в ОС;
поток самоуничтожается путем вызова в нем ExitThread ();
любой другой поток данного или иного процесса вызывает функцию уничтожения потока TerminateThread ();
завершение процесса, содержащего данный поток.
Наиболее корректным для системы является первый способ. В этом случае, выполняются следующие системные действия:
все объекты, созданные в программе потока, уничтожаются соответствующими деструкторами;
система корректно освобождает память, которую занимал стек потока;
система устанавливает код завершения данного потока, который возвращается из прикладной функции потока (из программы потока);
счетчик числа пользователей объекта ядра «поток» уменьшается на единицу.
Во втором способе, вызывается в потоке и принудительно исполняется функция ExitThread (). При этом, освобождаются все системные ресурсы, выделенные потоку, в частности, стек. Но все объектные ресурсы, созданные в программе потока, не уничтожаются. В функцию ExitThread передается значение, которое рассматривается системой, как код завершения всего потока.
В третьем способе, в любом другом потоке процесса выполняется функция TerminateThread. Она имеет два параметра. В первом параметре задается дескриптор завершаемого потока, а второй параметр интерпретируется как код завершения для уничтожаемого потока. Особенность исполнения этой функции состоит в том, что её вызов оказывается внезапным для потока, и в следствие этого, в потоке не могут быть выполнены все действия для корректного освобождения системных и объектных ресурсов.
В первых двух способах завершения стек уничтожается. В третьем способе стек сохраняется до момента завершения процесса, которому принадлежит уничтожаемый поток. Это сделано для того, чтобы другие потоки могли использовать указатели, ссылающиеся на данные в стеке завершаемого потока. В любом случае, некорректное освобождение ресурсов может привести к ошибке.
Четвертый способ. Поток завершается в результате окончания всего процесса. В этом случае, выполняется функция ExitProcess () или TerminateProcess (). В результате, выполняется освобождение выделенных для процесса ресурсов, в том числе и освобождение стеков всех потоков. Однако, при этом деструкторы созданных объектов не вызываются, и промежуточные данные не переписываются на диск для сохранения, и следовательно, завершение потока выполняется некорректно.
В любом из четырех рассмотренных случаев, в системе дополнительно реализуются дополнительные операции:
освобождаются все дескрипторы интерфейсных объектов, которые принадлежали потоку, то есть окна, меню, значки, шрифты, курсоры, и т.д.;
код завершения потока меняется с исходного значения 0x103 на действительное, которое вырабатывается в системе;
объект ядра «поток» из состояния «занято» переводится в состояние «свободно», но при этом, объект полностью не освобождается до тех пор, пока на него не будут закрыты все внешние ссылки;
счетчик числа пользователей объекта ядра «поток» уменьшается на единицу;
если данный поток был самым последним активным потоком процесса, то завершается и сам процесс.
