
- •Управление процессами и потоками в мультипрограммных ос. Общие сведения о процессах и потоках в ос Windows. Понятие объекта ядра. Типы объектов ядра.
- •Описатель, командная строка, и переменные окружения процесса.
- •Создание процессов.
- •Завершение процесса.
- •Общие сведения о потоках. Создание потоков.
- •Выполнение потоков.
- •Завершение потоков.
- •Планирование потоков. Приостановка и возобновление процессов и потоков.
- •Приоритеты потоков. Классы приоритетов процессов и относительные приоритеты потоков.
- •Синхронизация процессов и потоков в мультипрограммных ос. Независимые и взаимодействующие процессы. Понятие критических ресурсов и критических секций.
- •Синхронизация процессов и потоков в ос Windows. Объекты синхронизации и функции ожидания.
- •Синхронизация с помощью критических секций.
- •Мьютексы.
- •События.
- •Семафоры.
- •Передача и обмен данными между процессами. Способы передачи данных и типы связей между процессами.
- •Средства передачи и обмена данными между процессами в ос Windows.
- •Обмен данными с помощью буфера обмена данными Clipboard.
- •Обмен данными по технологии dde.
- •Обмен данными по технологии ole. Понятие документно-ориентированной среды.
- •Принципы технологии ole.
- •Особенности ole 2.0
- •Обмен данными через разделяемые файлы.
- •Обмен данными через файлы, проецируемые в память. Создание файлов, проецируемых в память.
- •Обмен данными через проекцию файлов в память.
- •Обмен данными через страничный файл.
- •Обмен данными через программные каналы.
- •Средства организации анонимных и именованных каналов в Windows.
- •Концепция почтовых ящиков.
- •Создание почтовых ящиков.
- •Соединение клиентов с почтовым ящиком.
- •Обмен данными через почтовый ящик.
- •Закрытие почтового ящика.
- •Получение информации о почтовом ящике.
- •Обмен данными с помощью очередей сообщений.
- •Подсистема управления памятью. Функции подсистемы управления памятью.
- •Физическая и логическая память. Виртуальное (логическое) и физическое адресное пространство.
- •Способ построения вап процессов.
- •Способы распределения памяти на уровне управления процессами. Односвязное непрерывное распределение памяти.
- •Распределение памяти фиксированными разделами.
- •Распределение памяти динамическими и перемещаемыми разделами.
- •Виртуализация оперативной памяти. Свопинг и виртуальная память.
- •Страничное распределение памяти.
- •Преобразование адресов страниц прямым отображением.
- •Преобразование адресов страниц ассоциативным отображением.
- •Преобразование адресов страниц комбинированным ассоциативно-прямым отображением.
- •Совместное использование программ и данных в системах со страничной организацией памяти. Выбор размера страниц.
- •Сегментное распределение памяти.
- •Управление доступом в системах с сегментной организацией памяти.
- •Сегментно-страничное распределение памяти.
- •Реализация режима виртуальной памяти. Стратегии замещения страниц.
- •Стратегия замещения случайной страницы.
- •Стратегия замещения по принципу fifo.
- •Замещение страницы, которая использовалась наименее часто (lfu).
- •Замещение страницы, которая не использовалась в последнее время (nur).
- •Концепция локального и рабочего множества программ в системах с виртуальной памятью.
- •Уровни привилегий и защита по привилегиям.
- •Кеширование данных в памяти эвм. Иерархия устройств памяти. Понятие и принцип действия кэш-памяти.
- •Способы отображения основной памяти на кэш.
- •Двухуровневое кэширование.
- •Кеширование в процессорах моделей Pentium.
- •Структура линейного виртуального адресного пространства процесса в ос Windows.
- •Раздел 4 используется для хранения совместно используемых всеми процессами данных. Сюда же загружаются все системные .Dll модули, поэтому же доступны любому пользовательскому процессу.
- •Управление устройствами. Основные понятия и концепции организации.
Общие сведения о потоках. Создание потоков.
Потоки создаются в процессах, и определяют порядок выполнения программного кода в адресном пространстве процесса.
Каждый поток включает в себя следующие понятия:
Объект ядра типа «поток», с помощью которого ОС управляет потоком, и в котором хранятся статистические данные потока;
Стек потока, в котором хранятся параметры всех функций, процедур, а также локальные переменные, необходимые для выполнения программной части потока.
Потоки, в отличие от процессов, используют значительно меньше системных ресурсов. Это связано, прежде всего, с тем, что образование потоков, в отличие от образования процесса, не связано с выделением области ВАП, на что требуются дополнительные системные ресурсы. В частности, много памяти при создании процессов расходуется на хранение статистических данных о процессах, файловых ресурсах для загрузки .exe и .dll-файлов. Для потока необходимы лишь ресурсы для создания объекта ядра и стека. Объем статистических сведений для потока гораздо меньше.
При инициализации процесса, в системе всегда создается первичный поток. В ходе выполнения программы главной функции этого потока могут создаваться новые потоки, которые начинают выполняться в режиме мультипрограммирования, а точнее – в режиме вытесняющей многозадачности. Любой новый поток создается путем вызова в первичном потоке процесса, либо во вновь созданном потоке системной функции создания потока функции CreateThread (p1..p6). При вызове этой функции система создает объект ядра типа «поток», который представляет собой системную структуру данных, хранящую статистическую информацию о потоке и используемую для управления им. Кроме того, для нового потока в ВАП процесса выделяется память для его индивидуального стека. Новый поток выполняется в рамках того же процесса, что и родительский поток. Это означает, что вновь созданный поток имеет доступ ко всем описателям объектов ядра и стекам других потоков в данном процессе. За счет этого, потоки одного процесса могут взаимодействовать друг с другом.
Функция CreateThread является системной функцией, входящей в WinAPI. В ряде систем программирования, для реализации действий этой функции используются эквивалентные ей средства. Например, в системе Delphi используется TThread.
Смысл параметров функции создания потока:
Указатель на системную структуру данных, в которой хранятся атрибуты защиты объектов ядра потока;
Задает размеры стека потока. После создания процесса, этот параметр принимает начальное значение, которое хранится в исполняемом файле программы первичного потока. Можно управлять этим значением с помощью ключа компоновщика /STACK: arg1, arg2. Первый параметр определяет объем памяти, который система должна зарезервировать под стек, а по умолчанию – один мегабайт ВАП. Второй параметр задает объем физической памяти, которая изначально передается под стек. По умолчанию – одна страница памяти (x32 – 4kb, x64 – 8kb). В ходе выполнения программы потока может возникнуть потребность в увеличении стека. Если возникает переполнение стека, то генерируется прерывание, обрабатывая которое, система передает для зарезервированного стека столько страниц физической памяти, сколько указано в параметре arg2. В результате, размер стека может динамически изменяться;
Определяет адрес функции, с которого начинается выполнение программы создаваемого потока;
Служит для передачи в функцию потока какого-либо инициализирующего значения – константы или указателя на что-либо еще;
Представляет собой флаг, управляющий запуском потока на выполнение. Состояние «0» этого флага соответствует случаю немедленного начала исполнения потока. Состояние «1» означает, что поток создается, инициализируется, но начало его исполнения задерживается до определенного момента;
Это адрес переменной, в которой функция создания потока возвращает идентификатор, назначаемый системой новому потоку.