Лекции по "Системному программированию"

Автор: Пользователь скрыл имя, 20 Февраля 2013 в 20:15, лекция

Описание работы

Основой любой ОС является процесс. Понятие процесса можно трактовать как контейнер ресурсов (выделенная для программ память, файлы, устройства ввода/вывода), а так же как последовательность исполняемых команд. В простейших системах можно реализовать такую ситуацию, при которой все необходимые процессы будут присутствовать сразу при загрузке. В универсальных системах необходим механизм создания и завершения процессов по необходимости.

Работа содержит 1 файл

Konspekt_SPOVM.docx

— 78.78 Кб (Скачать)

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 проверяют, будет ли системный запрос блокирующим.

Выполнять блокирующий  системный запрос неприемлемо, поскольку  это заблокирует и все остальные  потоки процесса. Одной из основных целей использования потоков  является предоставление возможности  каждому потоку использовать все  системные запросы, таким образом, чтобы не мешать другим потокам. Одним из вариантов решения является превращение всех запросов в неблокирующие (например, read в случае неудачного чтения возвращает 0), но это потребует внесение изменений в ОС, что недопустимо. В некоторых операционных системах существует запрос select, который позволяет узнать о наличии блокировки у последующего запроса.

При наличии  такого системного запроса библиотечную функцию можно заменить новой, сначала  выполняющей запрос select, а затем основной запрос, если за ним не последует блокировки. Если блокировка произойдет, то запрос не выполняется и упралвение передается другому потоку. Когда система поддержки исполнения программ получит управление в следующий раз, она заново выполнит проверку. Такой подход потребует создания новой библиотеки с системными запросами - уменьшится эффективность программ, но это один из немногих доступных выриантов. Код, который помещается вокруг системного запроса для проверки на блокировку, называется чехлом.

Еще одной  проблемой реализации потоков в  пространстве пользователя является тот  факт, что переключение на новый  поток не произойдет, пока рабочий  поток добровольно не отдаст процессор. Это связано с тем, что внутри одного процесса нет прерываний по таймеру => невозможно создать планировщик.

 

6. Реализация потоков в ядре. Смешанная реализация.

Реализация  потоков в ядре

 

 

 

 

 

 

 

 

 

 

 

ОС знает  о сущетсвовании потоков и управляет ими. Отсутствует необходимость в таблице потоков для каждого процесса. Существует единая таблица потоков в пространстве ядра наряду с таблицей процессов. Если необходимо создать, завершить либо заблокировать текущий поток, то выполняется системный запрос, вносящий изменения в общую таблицу потоков. Все блокирующие запросы реализованы как системные, что требует значительных временных затрат. Зато при блокировке планировщик запускает другой поток из того же процесса, либо поток другого процесса.

Смешанная реализация

Ядро знает  о потоках своего уровня и управляет  ими. При этом внутри процесса, поверх потоков ядра, могут быть реализованы  потоки пользователя с использованием своей системы поддержки исоплнения программ.

 

7. Прерывания. Аппаратные прерывания(Внешние). Системные вызовы. Исключения. (Внутренние)

Прерывание  – событие, генерируемое внешним  по отношению к процессору устройством.

Аппаратное  прерывание – асинхронное событие, соответственно обработка апп. прерывания не учитывает, какой процесс является текущим.

Системный вызов  – интерфейс между пользователем, программой и ОС. При системном вызове задача переходит в режим ядра.

Исключение  – событие, возникающее в результате попытки выполнения команды, которая  не может быть выполнена до конца. Бывают исправимые и неисправимые.

8. Прерывания. Программные и аппаратные  средства системы прерываний.

К программным средствам системы прерываний относятся:

- таблица  векторов прерываний - содержит 256 векторов  по 4 байта на каждый вектор. Каждый  вектор представляет собой пару  значений для регистров cs:ip, которые указывают на процедуры обработки соответсвтвующих прерываний. Таблица располагается с нулевого адреса;

- флаги:

‡ if (interrupt flag) - флаг прерывания, предназначен для запрета аппаратных прерываний (по входу INTR). При единичном значении микропроцессор обрабатывает входные сигналы прерываний, при нулевом - нет. Флаг сбрасывается с помощью команды cli и устанавливается командой sti. Не влияет на обработку сигналов по входу NMI;

‡ tf (trace flag) - флаг трассировки, при установленном состоянии после выполнения каждой машинной команды генерируется внутреннее прерывние с номером 1;

- команды  int, into, iret, cli, sti - машинные команды.

К аппаратным относятся:

- контролер  прерываний; 
- ЦП

9. Прерывания. Обработка прерываний  в реальном режиме работы процессора.

Обработка прерываний в реальном режиме

Производится  в 3 этапа:

- прекращение  выполнения текущей программы;

- переход  к выполнению программы обработки  прерывания;

- возврат  управления прерванной программе.

Первый этап должен обеспечить временное прекращение  выполнения текущей программы с  последующим ее восстановлением  таким образом, как будто прерывания не было. Поскольку каждая программа  работает в своем адресном пространстве, единственным разделяемым ресурсом являются регистры процессора. Обязательными  для сохранения регистрами являются cs, ip, flags. Остальные сохраняются на усмотрение программиста. При возникновении прерывания эти три регистра сохраняются автоматически. После этого сбрасывается флаг if (запрещаются аппаратные прерывания).

Второй этап заключается в определении источника  прерывания и вызова соответствующей  процедуры обработки. Адрес вектора  прерывания определяется следующим  образом: если возникло прерывание n, то смещение вектора прерывания будет n*4. Первые 2 байта по этому смещению заносятся в регистр ip, следующие 2 байта - в регистр cs. Далее управление передается процедуре по адресу cs:ip.

Третий этап заключается в восстановлении контекста  прерванной программы. Восстанавливаются  значения регистров микропроцессора, в том числе трех основных регистров. Этот участок кода необходимо защитить от внезапных аппаратных прерываний, сбросив флаг if с помощью команды cli. Последние команды при обработке прерывания - это команды sti (разрешение прерываний) и iret (восстановление flags, ip, cs).

 

10. Межпроцессное взаимодействие. Состояние состязания. Критические области.

Межпроцессное взаимодействие

Во время  работы системы возникает необходимость  организованного взаимодействия между  процессами, по возможности не используя  прерывания. Такое взаимодействие называется межпроцессным (IPC - Interprocess Communication).

Проблемы  разбиваются на 3 пункта:

- передача  информации от одного процесса  другому;

- контроль  над деятельностью процесса - необходимо  гарантировать, что 2 процесса  не пересекутся в критических  ситуациях (например, одновременный  доступ к файлу);

- согласованность  действий процессов (если процесс А поставляет информацию процессу Б, то процесс Б не должен отработать раньше А).

Второй и  третий пункты так же относятся к  межпоточному взаимодействию. Первый пункт проблемным не является для межпоточного взаимодействия, поскольку потоки одного процесса работают в одном адресном пространстве.

Информация о работе Лекции по "Системному программированию"