Автор: Пользователь скрыл имя, 20 Февраля 2013 в 20:15, лекция
Основой любой ОС является процесс. Понятие процесса можно трактовать как контейнер ресурсов (выделенная для программ память, файлы, устройства ввода/вывода), а так же как последовательность исполняемых команд. В простейших системах можно реализовать такую ситуацию, при которой все необходимые процессы будут присутствовать сразу при загрузке. В универсальных системах необходим механизм создания и завершения процессов по необходимости.
1. Процессы. Определение. Состояния процесса. Реализация процессов.
Процессы
Основой любой ОС является процесс. Понятие процесса можно трактовать как контейнер ресурсов (выделенная для программ память, файлы, устройства ввода/вывода), а так же как последовательность исполняемых команд. В простейших системах можно реализовать такую ситуацию, при которой все необходимые процессы будут присутствовать сразу при загрузке. В универсальных системах необходим механизм создания и завершения процессов по необходимости. Процессы создаются в результате трех основных событий:
1) запуск системы;
2) выполнение
поступившего от процесса
3) запрос
пользователя на создание
При загрузке системы создается один главный поток, который, по мере необходимости, создает высокоприоритетные процессы (интерфейс, менеджер памяти, планировщик) и низкоприоритетные процессы, которые активизируются при определенных событиях (спулер печати). Создание новых процессов полезно в тех случаях, когда задачу проще всего разбить на несколько взаимодействующих и независимых процессов. Завершение процесса происходит по одной из следующих причин:
1) обычный
выход - процесс завершается
2) выход по
ошибке - причиной преднамеренного
завершения процесса может
3) выход по неисправимой ошибке - непреднамеренный выход, связанный с ошибкой в коде программы (деление на нуль);
4) уничтожение другим процессом.
Поскольку процесс является динамической системой, он может находится в одном из нескольких состояний.
1 - запуск процесса. Процессу выделяются все необходимые ресурсы.
2 - готовность.
Процессу выделены все
3 - выполнение.
Процессу выделено
4 - блокировка.
Процесс ожидает какое-либо
5 - завершение.
Происходит преднамеренное
Для реализации модели процессов ОС содержит таблицу с одним элементом для каждого процесса. Этот элемент называется блок управления процессом, PCB - Process Control Block, либо фрейм-процессом. Он содержит в себе информацию о состоянии процесса, значения регистров, счетчик команд, указатели стеков, распределение памяти, состояние файлов и устройств ввода/вывода и всю остальную информацию, необходимую для переключения процесса в состояние готовности или блокировки и для последующего запуска.
2. Потоки. Многопоточность.
Процесс можно
рассматривать как способ объединения
в группу родственных ресурсов (адресное
пространство, файлы, устройства ввода/вывода).
С другой стороны, процесс можно
рассматривать как поток
Различные потоки одного процесса независимы в меньшей степени, чем различные процессы. Они используют одно адресное пространство, и любой поток может считывать, записывать или стирать данные либо стек другого потока. Защиты от таких ситуаций не существует, поскольку это невозможно и не нужно. Один процесс запущен всегда одним пользователем, и потоки создаются таким образом, чтобы не мешать друг другу.
|Элементы процесса: |Элементы потока: |
|1)адресное пространство; |1)счетчик команд; |
|2)глобальные переменные; |2)регистры; |
|3)открытые файлы; |3)стек функций; |
|4)дочерние процессы; |4)состояния. |
|5)информация об | |
|использовании ресурсов. | |
Поток может находится в одном из состояний:
- готовность;
- выполнение;
- блокировка;
- завершение.
Состояния "создания" не сущетсвует, поскольку потоку не надо выделять ресурсы. У каждого потока существует свой собственный стек выполнения, в котором содержится по одному фрейму для каждой вызванной, но не вернувшей управление функцией. Во фрейме хранятся локальные переменные функции и адрес возврата.
3. Потоки. Основные функции. Достоинства
потоков.
Для реализации многопоточности необходим
минимальный набор специальных функций.
Поскольку процессы запускаются с одним
потоком, необходима функция создания
нового потока.
thread_create
Параметром функции обычно является имя процедуры, которое представляет собой новый поток.
Завершить работу потока можно с помощью функции thread_exit. С помощью функции thread_wait один поток может ожидать окончания выполнения другого потока. С помощью функции thread_yield поток может добровольно передать управление другому потоку. Если не указан поток, которому передается управление, запускается планировщик потоков, который выбирает один из находящихся в состоянии готовности потоков текущего процесса. Реализация этой функции очень важна для повышения эффективности многопоточных систем, поскольку, в случае потоков, не существует прерывания по таймеру, позволяющему переключаться между процессами через определенные промежутки времени.
4. Реализация потоков в
Метод основан на полном размещении всего пакета потоков внутри процесса, при этом ядро не знает о существовании многопоточности. Таким образом, реализовать многопоточность можно даже в однопоточных системах. Потоки должны работать поверх системы поддержки исполнения программ, которые являются набором структур данных и набором процедур, управляющих потоками, например функции creat, exit.
Каждому процессу необходима своя собственная таблица потоков, которая аналогична таблице процессов, но отслеживает только программный счетчик, регистры, состояния и другие характеристики потока. За счет того, что система поддержки исполнения программ реализована внутри процесса, создание потоков и переключение между ними выполняются с помощью небольшого количества команд без переключения в режим ядра. Если поток завершает либо приостанавливает свою работу, функции wait или yield могут сами сохранить информацию о потоке в таблице потоков, а так же вызвать внутренний планировщик для запуска следующего потока. У каждого процесса может быть свой собственный алгоритм планирования.
5. Реализация потоков в
Основной проблемой, связанной с такой реализацией, является реализация блокирующих системных запросов. Специальные инструкции select или try проверяют, будет ли системный запрос блокирующим.
Выполнять блокирующий
системный запрос неприемлемо, поскольку
это заблокирует и все
При наличии такого системного запроса библиотечную функцию можно заменить новой, сначала выполняющей запрос select, а затем основной запрос, если за ним не последует блокировки. Если блокировка произойдет, то запрос не выполняется и упралвение передается другому потоку. Когда система поддержки исполнения программ получит управление в следующий раз, она заново выполнит проверку. Такой подход потребует создания новой библиотеки с системными запросами - уменьшится эффективность программ, но это один из немногих доступных выриантов. Код, который помещается вокруг системного запроса для проверки на блокировку, называется чехлом.
Еще одной проблемой реализации потоков в пространстве пользователя является тот факт, что переключение на новый поток не произойдет, пока рабочий поток добровольно не отдаст процессор. Это связано с тем, что внутри одного процесса нет прерываний по таймеру => невозможно создать планировщик.
6. Реализация потоков в ядре. Смешанная реализация.
Реализация потоков в ядре
ОС знает о сущетсвовании потоков и управляет ими. Отсутствует необходимость в таблице потоков для каждого процесса. Существует единая таблица потоков в пространстве ядра наряду с таблицей процессов. Если необходимо создать, завершить либо заблокировать текущий поток, то выполняется системный запрос, вносящий изменения в общую таблицу потоков. Все блокирующие запросы реализованы как системные, что требует значительных временных затрат. Зато при блокировке планировщик запускает другой поток из того же процесса, либо поток другого процесса.
Смешанная реализация
Ядро знает
о потоках своего уровня и управляет
ими. При этом внутри процесса, поверх
потоков ядра, могут быть реализованы
потоки пользователя с использованием
своей системы поддержки
7. Прерывания. Аппаратные прерывания(Внешние)
Прерывание – событие, генерируемое внешним по отношению к процессору устройством.
Аппаратное прерывание – асинхронное событие, соответственно обработка апп. прерывания не учитывает, какой процесс является текущим.
Системный вызов
– интерфейс между
Исключение – событие, возникающее в результате попытки выполнения команды, которая не может быть выполнена до конца. Бывают исправимые и неисправимые.
8. Прерывания. Программные и аппаратные средства системы прерываний.
К программным средствам системы прерываний относятся:
- таблица
векторов прерываний - содержит 256 векторов
по 4 байта на каждый вектор. Каждый
вектор представляет собой
- флаги:
‡ if (interrupt flag) - флаг прерывания, предназначен для запрета аппаратных прерываний (по входу INTR). При единичном значении микропроцессор обрабатывает входные сигналы прерываний, при нулевом - нет. Флаг сбрасывается с помощью команды cli и устанавливается командой sti. Не влияет на обработку сигналов по входу NMI;
‡ tf (trace flag) - флаг трассировки, при установленном состоянии после выполнения каждой машинной команды генерируется внутреннее прерывние с номером 1;
- команды int, into, iret, cli, sti - машинные команды.
К аппаратным относятся:
- контролер
прерываний;
- ЦП
9. Прерывания. Обработка прерываний
в реальном режиме работы
Обработка прерываний в реальном режиме
Производится в 3 этапа:
- прекращение выполнения текущей программы;
- переход
к выполнению программы
- возврат
управления прерванной
Первый этап должен обеспечить временное прекращение выполнения текущей программы с последующим ее восстановлением таким образом, как будто прерывания не было. Поскольку каждая программа работает в своем адресном пространстве, единственным разделяемым ресурсом являются регистры процессора. Обязательными для сохранения регистрами являются cs, ip, flags. Остальные сохраняются на усмотрение программиста. При возникновении прерывания эти три регистра сохраняются автоматически. После этого сбрасывается флаг if (запрещаются аппаратные прерывания).
Второй этап
заключается в определении
Третий этап заключается в восстановлении контекста прерванной программы. Восстанавливаются значения регистров микропроцессора, в том числе трех основных регистров. Этот участок кода необходимо защитить от внезапных аппаратных прерываний, сбросив флаг if с помощью команды cli. Последние команды при обработке прерывания - это команды sti (разрешение прерываний) и iret (восстановление flags, ip, cs).
10. Межпроцессное взаимодействие. Состояние состязания. Критические области.
Межпроцессное взаимодействие
Во время
работы системы возникает
Проблемы разбиваются на 3 пункта:
- передача информации от одного процесса другому;
- контроль над деятельностью процесса - необходимо гарантировать, что 2 процесса не пересекутся в критических ситуациях (например, одновременный доступ к файлу);
- согласованность
действий процессов (если
Второй и третий пункты так же относятся к межпоточному взаимодействию. Первый пункт проблемным не является для межпоточного взаимодействия, поскольку потоки одного процесса работают в одном адресном пространстве.