
- •Управление процессами и потоками в мультипрограммных ос. Общие сведения о процессах и потоках в ос Windows. Понятие объекта ядра. Типы объектов ядра.
- •Описатель, командная строка, и переменные окружения процесса.
- •Создание процессов.
- •Завершение процесса.
- •Общие сведения о потоках. Создание потоков.
- •Выполнение потоков.
- •Завершение потоков.
- •Планирование потоков. Приостановка и возобновление процессов и потоков.
- •Приоритеты потоков. Классы приоритетов процессов и относительные приоритеты потоков.
- •Синхронизация процессов и потоков в мультипрограммных ос. Независимые и взаимодействующие процессы. Понятие критических ресурсов и критических секций.
- •Синхронизация процессов и потоков в ос Windows. Объекты синхронизации и функции ожидания.
- •Синхронизация с помощью критических секций.
- •Мьютексы.
- •События.
- •Семафоры.
- •Передача и обмен данными между процессами. Способы передачи данных и типы связей между процессами.
- •Средства передачи и обмена данными между процессами в ос Windows.
- •Обмен данными с помощью буфера обмена данными Clipboard.
- •Обмен данными по технологии dde.
- •Обмен данными по технологии ole. Понятие документно-ориентированной среды.
- •Принципы технологии ole.
- •Особенности ole 2.0
- •Обмен данными через разделяемые файлы.
- •Обмен данными через файлы, проецируемые в память. Создание файлов, проецируемых в память.
- •Обмен данными через проекцию файлов в память.
- •Обмен данными через страничный файл.
- •Обмен данными через программные каналы.
- •Средства организации анонимных и именованных каналов в Windows.
- •Концепция почтовых ящиков.
- •Создание почтовых ящиков.
- •Соединение клиентов с почтовым ящиком.
- •Обмен данными через почтовый ящик.
- •Закрытие почтового ящика.
- •Получение информации о почтовом ящике.
- •Обмен данными с помощью очередей сообщений.
- •Подсистема управления памятью. Функции подсистемы управления памятью.
- •Физическая и логическая память. Виртуальное (логическое) и физическое адресное пространство.
- •Способ построения вап процессов.
- •Способы распределения памяти на уровне управления процессами. Односвязное непрерывное распределение памяти.
- •Распределение памяти фиксированными разделами.
- •Распределение памяти динамическими и перемещаемыми разделами.
- •Виртуализация оперативной памяти. Свопинг и виртуальная память.
- •Страничное распределение памяти.
- •Преобразование адресов страниц прямым отображением.
- •Преобразование адресов страниц ассоциативным отображением.
- •Преобразование адресов страниц комбинированным ассоциативно-прямым отображением.
- •Совместное использование программ и данных в системах со страничной организацией памяти. Выбор размера страниц.
- •Сегментное распределение памяти.
- •Управление доступом в системах с сегментной организацией памяти.
- •Сегментно-страничное распределение памяти.
- •Реализация режима виртуальной памяти. Стратегии замещения страниц.
- •Стратегия замещения случайной страницы.
- •Стратегия замещения по принципу fifo.
- •Замещение страницы, которая использовалась наименее часто (lfu).
- •Замещение страницы, которая не использовалась в последнее время (nur).
- •Концепция локального и рабочего множества программ в системах с виртуальной памятью.
- •Уровни привилегий и защита по привилегиям.
- •Кеширование данных в памяти эвм. Иерархия устройств памяти. Понятие и принцип действия кэш-памяти.
- •Способы отображения основной памяти на кэш.
- •Двухуровневое кэширование.
- •Кеширование в процессорах моделей Pentium.
- •Структура линейного виртуального адресного пространства процесса в ос Windows.
- •Раздел 4 используется для хранения совместно используемых всеми процессами данных. Сюда же загружаются все системные .Dll модули, поэтому же доступны любому пользовательскому процессу.
- •Управление устройствами. Основные понятия и концепции организации.
Выполнение потоков.
Последовательность
действий системы в момент создания и
инициализации потока, предшествующий
началу выполнения, можно пояснить
следующей иллюстрацией:
В результате выполнения функции CreateThread создается объект ядра «поток». Одновременно, инициализируются основные параметры этого объекта ядра, а именно – счетчику числа пользователей присваивается 2, счетчику числа простоев – 1, коду завершения – 0x103, а состояние объекта устанавливается в «занято». Стеку потока из ВАП процесса выделяется память, и в старшие адреса записываются значения параметров P3, P4 функции создания. У любого вновь создаваемого потока имеется собственный набор используемых регистров процессора, называемый контекстом потока. Контекст отражает состояние регистров процессора на момент последнего выполнения потока. Контекст сохраняется в системной структуре данных CONTEXT, которая содержится в объекте ядра «поток». В контекст входят значения регистров указателя команд EIP и состояние указателя стека ESP. В ходе выполнения команд программы потока, в них формируются адреса памяти из области ВАП всего процесса. В момент инициализации объекта ядра «поток» указателю стека ESP присваивается адрес, по которому в стек заносится значение параметра P3, а указателю команд EIP присваивается адрес системной функции BaseThreadStart ().
Состояния этих регистров заносится в CONTEXT. После инициализации потока, система проверяет значение флага создания потока из параметра P5. Если это значение равно нулю, выполнение потока может быть начато немедленно. В этом случае, счетчик числа простоев обнуляется, в регистры процессора загружаются значения, которые хранились в структуре CONTEXT потока. После этого, поток переходит в состояние готовности к выполнению, то есть ему может быть предоставлено процессорное время, а точнее – очередной квант процессорного времени. Когда это происходит, то начинается выполнение программы потока. Так как EIP указывает на BaseThreadStart (), то выполнение потока начинается не с первой команды его программы, а именно с этой функции. Эта функция получает доступ к двум параметрам P3, P4, записанным в стеке потока, и в ходе своего выполнения реализует следующие действия:
Основная функция потока включается в область структурной обработки исключений, в результате чего любое исключение, если оно возникнет в ходе выполнения программы потока, будет обрабатываться системой по умолчанию;
Вызывается прикладная функция потока, и ей, в качестве параметра, передается значение P4;
Начинается выполнение программного кода основной функции потока.
По окончании выполнения этой функции, она снова возвращает управление в системную функцию BaseThreadStart (). Эта функция, в свою очередь, вызывает функцию завершения потока ExitThread(). В нее передается значение кода возврата, возвращаемое прикладной функцией потока. Одновременно, значение счетчика числа пользователей объекта ядра «поток» уменьшается на единицу, и выполнение потока прекращается.
Инициализация самого первого (первичного) потока процесса имеет некоторые особенности. Его указатель команд настраивается по адресу другой системной функции – BaseProcessStart (). Она, отчасти, аналогична функции запуска потока, но отличие состоит в том, что данная функция не использует параметр P3 из общего числа параметров. Вместо этого, функция BaseProcessStart () обращается к стартовой функции библиотеки системы программирования, которая выполняет необходимую инициализацию, а затем уже обращается к основной функции первичного потока.