
- •Управление процессами и потоками в мультипрограммных ос. Общие сведения о процессах и потоках в ос Windows. Понятие объекта ядра. Типы объектов ядра.
- •Описатель, командная строка, и переменные окружения процесса.
- •Создание процессов.
- •Завершение процесса.
- •Общие сведения о потоках. Создание потоков.
- •Выполнение потоков.
- •Завершение потоков.
- •Планирование потоков. Приостановка и возобновление процессов и потоков.
- •Приоритеты потоков. Классы приоритетов процессов и относительные приоритеты потоков.
- •Синхронизация процессов и потоков в мультипрограммных ос. Независимые и взаимодействующие процессы. Понятие критических ресурсов и критических секций.
- •Синхронизация процессов и потоков в ос Windows. Объекты синхронизации и функции ожидания.
- •Синхронизация с помощью критических секций.
- •Мьютексы.
- •События.
- •Семафоры.
- •Передача и обмен данными между процессами. Способы передачи данных и типы связей между процессами.
- •Средства передачи и обмена данными между процессами в ос Windows.
- •Обмен данными с помощью буфера обмена данными Clipboard.
- •Обмен данными по технологии dde.
- •Обмен данными по технологии ole. Понятие документно-ориентированной среды.
- •Принципы технологии ole.
- •Особенности ole 2.0
- •Обмен данными через разделяемые файлы.
- •Обмен данными через файлы, проецируемые в память. Создание файлов, проецируемых в память.
- •Обмен данными через проекцию файлов в память.
- •Обмен данными через страничный файл.
- •Обмен данными через программные каналы.
- •Средства организации анонимных и именованных каналов в Windows.
- •Концепция почтовых ящиков.
- •Создание почтовых ящиков.
- •Соединение клиентов с почтовым ящиком.
- •Обмен данными через почтовый ящик.
- •Закрытие почтового ящика.
- •Получение информации о почтовом ящике.
- •Обмен данными с помощью очередей сообщений.
- •Подсистема управления памятью. Функции подсистемы управления памятью.
- •Физическая и логическая память. Виртуальное (логическое) и физическое адресное пространство.
- •Способ построения вап процессов.
- •Способы распределения памяти на уровне управления процессами. Односвязное непрерывное распределение памяти.
- •Распределение памяти фиксированными разделами.
- •Распределение памяти динамическими и перемещаемыми разделами.
- •Виртуализация оперативной памяти. Свопинг и виртуальная память.
- •Страничное распределение памяти.
- •Преобразование адресов страниц прямым отображением.
- •Преобразование адресов страниц ассоциативным отображением.
- •Преобразование адресов страниц комбинированным ассоциативно-прямым отображением.
- •Совместное использование программ и данных в системах со страничной организацией памяти. Выбор размера страниц.
- •Сегментное распределение памяти.
- •Управление доступом в системах с сегментной организацией памяти.
- •Сегментно-страничное распределение памяти.
- •Реализация режима виртуальной памяти. Стратегии замещения страниц.
- •Стратегия замещения случайной страницы.
- •Стратегия замещения по принципу fifo.
- •Замещение страницы, которая использовалась наименее часто (lfu).
- •Замещение страницы, которая не использовалась в последнее время (nur).
- •Концепция локального и рабочего множества программ в системах с виртуальной памятью.
- •Уровни привилегий и защита по привилегиям.
- •Кеширование данных в памяти эвм. Иерархия устройств памяти. Понятие и принцип действия кэш-памяти.
- •Способы отображения основной памяти на кэш.
- •Двухуровневое кэширование.
- •Кеширование в процессорах моделей Pentium.
- •Структура линейного виртуального адресного пространства процесса в ос Windows.
- •Раздел 4 используется для хранения совместно используемых всеми процессами данных. Сюда же загружаются все системные .Dll модули, поэтому же доступны любому пользовательскому процессу.
- •Управление устройствами. Основные понятия и концепции организации.
Планирование потоков. Приостановка и возобновление процессов и потоков.
В ОС Windows используется вариант мультипрограммного режима работы, называемый вытесняющей многозадачностью. Для её реализации, в системе используется алгоритм, позволяющий распределять процессорное время между потоками.
В версиях системы Windows 2000 и далее примерно каждые 18мс в системе просматриваются все существующие объекты ядра типа «поток», и отмечаются те из них, которые готовы получить процессорное время. Далее, в соответствии с принятым алгоритмом, выбирается один из них, и из его контекста загружаются регистры процессора. Данная операция называется переключением контекста потока. Затем, в течение интервала квантования, программа потока выполняется в адресном пространстве своего процесса. По окончании этого интервала, система сохраняет состояния регистров процессора в структуре CONTEXT данного потока, и приостанавливает его выполнение. Затем снова просматриваются все объекты ядра типа поток, выбирается один из них на основе алгоритма дисциплины распределения процессорного времени, в процессор загружается его контекст, и начинается выполнение программы этого потока, либо продолжение выполнения программы ранее прерванного потока.
Подобный цикл операций, включающий:
выбор потока для запуска;
загрузку его контекста;
исполнение программы потока в процессоре в течение интервала квантования;
сохранение контекста;
начинается с момента запуска системы вплоть до её выключения.
Из приведенного общего описания алгоритма распределения процессорного времени между потоками следует, что в режиме вытесняющей многозадачности в системе в каждый момент времени присутствуют потоки следующих типов:
выполняющиеся в процессоре;
планируемые к выполнению;
приостановленные системой;
ожидающие возникновения каких-либо событий.
В объекте ядра «поток» имеется системная переменная SUSPENDCOUNT, которая называется счетчиком числа простоев данного потока. Если его значение равно нулю, то соответствующий поток приостанавливается, и не получает процессорного времени. При вызове функций CreateProcess () и CreateThread () эта переменная инициализируется единицей, которая запрещает системе немедленно выделять новому потоку процессорное время, поскольку требуется его инициализация. После выполнения инициализации проверяется состояние одного из флагов функции создания потока CreateThread, а именно P5. Если он равен единице, то поток оставляется в приостановленном состоянии. Если этот флаг сброшен, то SUSPENDCOUNT обнуляется, и поток включается в число планируемых к выполнению в процессоре.
Новый поток может быть изначально создан как приостановленный, если упомянутый флаг имеет исходное значение единицы. В этом случае, в системе имеется возможность изменить какие-либо свойства потока, например, его приоритет. После подобной настройки потока, ему может быть разрешено выполнение в процессоре. В этом случае, реализуется процедура возобновления потока. С этой целью в системе используется функция ResumeThread (), в которую в качестве параметра передается дескриптор потока, возвращаемый функцией создания потока. Если поток ожидает наступления какого-либо внешнего события, например, ввода данных с клавиатуры, то он будет находиться в этом состоянии, называемом состоянием блокирования, до момента возникновения этого события. Затем поток снова включается в число планируемых к выполнению.
Поток может быть приостановлен не только в момент его создания, но и в ходе свого выполнения. Для этого используется системная функция SuspendThread (). Параметром функции является описатель приостанавливаемого потока. Эта функция может быть вызвана из любого другого потока, если известен его описатель. Поток может быть приостановлен не более чем устанавливаемое в системе количество раз. С помощью функции Sleep () поток может запросить у системы возможность не выделять ему процессорное время на определенный период времени, то есть запросить возможность приостановки самого себя. Параметр – период приостановки в миллисекундах. После её выполнения поток приостанавливается, и у него отбирается остаток выделенного ему кванта процессорного времени. По окончании периода приостановки, система переводит поток в число планируемых, после чего он продолжает свое выполнение.
В системе имеется также функция SwitchToThread (), с помощью которой система может подключить процессору новый поток, если он имеется. При вызове этой функции, система проверяет, присутствует ли поток, которому хронически не хватает процессорного времени («голодание потока»). Если такого потока нет, то данная функция просто завершается. Если подобный поток обнаруживается, то ему выделяется дополнительный квант времени. При этом, с помощью данной функции может быть выделено время потоку с более низким приоритетом, чем потоки, которые до этого выполнялись в процессоре.
В системах Windows, понятия, о которых здесь шла речь, а именно – приостановка и возобновление, неприменимы к процессам, поскольку процессы в распределении процессорного времени непосредственно не участвуют. Существует лишь одна возможность приостановить одновременно все потоки какого-либо процесса. Это можно сделать из другого процесса, который является отладочным.