- •Операционные системы (ос)
- •Назначение и функции ос [01-04]
- •Мультипрограммирование [05-08]
- •Режим работы и ос реального времени [13-16]
- •Универсальные операционные системы и ос специального назначения [17-20]
- •Сегментация виртуального адресного пространства процесса [29-32]
- •Диспетчеризация и синхронизация процессов [37-40]
- •Способы реализации мультипрограммирования [49-52]
- •Понятие прерывания [53-56]
- •Многопроцессорный режим работы [57-60]
- •Управление памятью [01, 05, …, 65]
- •Совместное использование памяти [02,06,...,66]
- •Защита памяти [03,07,...,67]
- •Механизм реализации виртуальной памяти [04,08,...,68]
- •Стратегия подкачки страниц [61-64]
- •Принципы построения и защита от сбоев и несанкционированного доступа [65-68]
- •Листинг 1. Классификация сбоев
- •Задача [01-72]
Сегментация виртуального адресного пространства процесса [29-32]
Современные инструментальные среды, используемые для создания программ, представляют программный код в виде заполненных секциями констант, переменных, команд, областей виртуального адресного пространства, каждая из которых имеет свою длину, базовый адрес и направление роста и называется сегментом (данных или кода). Кроме того, имеется сегмент стека, используемый для размещения автоматических переменных и вызова подпрограмм. Доступ к информации в сегменте осуществляется с использованием пары (селектор, дескриптор) через содержимое строки одной из таблиц дескрипторов. При этом в блоке сегментации процессора виртуальный адрес превращается в линейный. В режиме реальных адресов он равен физическому. В защищённом режиме линейный адрес подвергается страничной трансляции. В формировании линейного адреса участвует также адресный указатель соответствующего сегмента, который должен быть меньше длины сегмента, иначе фиксируется ошибка сегментации, являющаяся фатальной. Использование механизма сегментации – важная предпосылка защиты от сбоев. Он также обеспечивает разделение ВАП на области ядра и задачи.
Структура контекста процесса +
Идентификатор и дескриптор процесса +
Иерархия процессов [33-36]
Контекст процесса состоит из содержимого ВАП, текущего содержимого всех регистров процессора, системного контекста, используемого для управления процессом и битовой карты ввода/вывода. При переключении контекста он сохраняется в сегменте состояния задачи TSS, адресуемом регистром задачи TR.
При создании процесс получает уникальный идентификатор PID и наследует идентификатор родительского процесса PPID, его переменные среды и некоторые другие атрибуты (дескриптор). Пара (PPID, PID) – член отношения «родитель-дети», транзитивное замыкание которого «предки-потомки» является иерархией порождения, граф которой имеет вид дерева или леса. В отношении жизненных циклов процессов в разных ОС иерархия изменяется по-разному при завершении одного из процессов.
Диспетчеризация и синхронизация процессов [37-40]
Диспетчеризация – процесс переключения состояний процесса, при котором производится выбор одного из готовых к исполнению процессов для переключения контекста. При диспетчеризации в рамках той или иной дисциплины могут учитываться данные о времени порождения, израсходованных ресурсах, прогнозе будущих расходов. Синхронизация в WINNT может использовать функции ожидания извещений о событиях, связанных с созданием и уничтожением объектов, о событиях таймера, семафоры, мьютексы и критические секции при доступе к разделяемым ресурсам, пары событий при доступе к защищённым конфигурациям, почтовые ящики и другие средства коммуникации процессов. При этом диспетчеризация и синхронизация осуществляются на уровне потоков процесса.
Понятие приоритета и очереди процессов +
Средства обработки сигналов [41-44]
Приоритет – число, используемое для выбора готового процесса при диспетчеризации. Процессы, имеющие одинаковый приоритет, образуют очередь. В WINNT приоритет от 0 до 31 присваивается процессу при его порождении на основании значения параметра «класс приоритета» при использовании экземпляра класса Win32_ProcessStartup и передаётся потокам в качестве базового. Для потоков, базовые приоритеты которых меньше 16, ядро может изменять текущий приоритет.
Сигнал – простейшая форма уведомления о событиях. В UNIX сигналы используются как основная форма межпроцессного взаимодействия. Сигнал имеет диспозицию – указание на средство обработки, унаследованную от родительского процесса вместе с переменными среды и прочими элементами контекста. Она может быть изменена. В отличие от сообщений, сигналы не ставятся в очередь.
Понятие событийного программирования +
Средства коммуникации процессов [45-48]
Событийное программирование (Event-driven programming) – подход к разработке ПО, основанный на обработке уведомлений о событиях (значимых в модели управления изменениях состояний). Программа является приёмником уведомления, при его получении она переходит к коду обработчика события (Event handler). Событийное программирование противопоставляется директивному, характерному для императивных языков программирования., и может быть выражено в виде декларативной конструкции типа «при получении уведомления типа Type перейти к обработчику handlerType». По существу, это способ синхронизации процесса с работой средств ВС. Внутренние (с точностью до величины порядка кванта, сихронные) события имеют некоторую причину, происходящую из-за деятельности внутри процесса, например, вычисленияй, приводящих к делению на очень маленькое число, переполнения стека, вызванного слишком большой глубиной рекурсии при рекурсивном вызове функции, завершением работы одного из потоков, событием таймера, запущенного при исполнении кода данного процесса или из-за деятельности ОС, связанной с диспетчеризацией процессов и ресурсов, например, при отказе в предоставлении дескриптора при системном вызове OpenHandle() или замещении участка памяти. Внешние (или асинхронные) события связаны с деятельностью ОС по управлению передачей данных (обычно в блочном режиме), запросами внешних источников при работе в реальном времени или с работой механизмов межпроцессных взаимодействий (IPC). Одним из вариантов IPC является передача уведомлений о событиях (например, сигналов) через системные вызовы от одного процесса (источника) другому (приёмнику).
Существование механизмов IPC связано с необходимостью передачи данных с выхода одного процесса на вход другого при последовательной организации вычислений (программных каналов или переключения стандартных потоков) или (с помощью мультипрограммирования или распределённых вычислений) планирования и диспетчеризации параллельных взаимодействующих процессов при многопроцессной организации решения общей задачи. Поскольку адресные пространства процессов разделены, обмен данными между процессами возможен или путём пересылки с помощью функций IPC данных из одного адресного пространства в другое или путём организации доступа к одному и тому же физическому ресурсу. Кроме того, широко используется взаимодействие по схеме «клиент-сервер» как при работе на одном вычислительном узле, так и при распределённом компьютинге. Среди механизмов межпроцессного взаимодействия есть как проприетарные, так и стандартизованные спецификации с проприетарной реализацией (протоколы передачи файлов, удалённый вызов процедур RPC).
