
- •Число: 4.9.12. Лекция номер 1. Вычислительные процессы.
- •Формальное определение процесса.
- •Реализация процесса.
- •11.09.12 Лекция номер 2. Вычислительный процесс. Простейшие модели вычислительных процессов. Отношения между элементами вп.
- •Простейшие модели вп.
- •Автоматы с магазинной памятью.
- •13.09.12 Лекция 3.
- •Разновидности вп.
- •Какая-то тема.
- •18.09.12. Лекция 4. Состав ядра ос.
- •25.09.12. Лекция 5. Архитектура памяти.
- •Виртуальная память.
- •Флаги защиты для страниц.
- •26.9.12 Лекция 6. Страничная сегментная адресация. Продолжение.
- •Некоторые особенности 64-х разрядных систем.
- •27.9.12 Лекция 7. Продолжение и изучение виртуальной памяти.
- •2.10 Лекция номер 8 Потоки.
- •9.10 Лекция номер 9.
- •Алгоритмы диспетчирезации.
- •Методы планирования мультипрограммных систем.
- •16.10.12. Лекция номер 10. Продолжение темы диспетчирезаии.
- •Пояснение к выполнению курсовой работы.
- •Алгоритмы планирования.
- •Приоритеты потока.
- •Системы реального времени.
- •22.11.12 Следующая.
- •Синхронизирующие примитивные системы.
- •Сети Петри.
- •Очереди сообщений.
- •Продолжении лекции.
- •Файлы проецируемые в памяти.
- •Системы ввода вывода.
22.11.12 Следующая.
Таким образом уместно обозначить эту проблему в рамках совокупности параллельных и асинхронно выполняющихся процессов, которые находятся в состоянии конкуренции между собой за правообладание ресурсами, доступ к ресурсам может быть либо разделяемым(в один и тот же момент времени один и тот же ресурс может разделятся несколькими процессами) либо монопольным(в один и тото же момент времени только один процесс может занимать данный ресурс) если для продолжения исполнения процессу, требуется монопольное обладание ресурсом, то говорят что такой ресурс является критическим для этого процесса. Фрагмент программного кода в течении которого требуется монопольный доступ к ресурсу называется критическим участком или критическим интервалом. Бывает ситуация когда один и тот же ресурс требуется в монопольный доступ нескольким процессам сразу. Процессом П1 и П2 не пересекаются друг с другом при выполнении обработка данной ситуации состоит только в том чтобы разделить моменты доступа к разделяемому ресурсу А. В случае с ресурсом В: он требуется процессом П1 и П2 он требуется в монопольный доступ каждому из них когда участки кода на которых это происходит совпадают по времени выполнения, в этом случае требуется, чтобы не допустить одновременного выполнения критических участков в обоих процессов, для какого либо разделяемого ресурса, использовать механизм, который бы выполнял синхронизацию этих процессов, этот механизм должен обладать следующими свойствами:
В каждый момент времени разрешается находится в своем критическом участке не более чем одному процессу относительно фиксированного ресурса.
Если один или несколько процессов хотят обратиться к критическим участкам, то по меньшей мере хотя бы один из них должен получить доступ в свой критический участок.
Существуют следующие приемы синхронизации, первый называется синхронизация нижнего уровня, взаимное исключение реализуется аппаратно при том что операции над памятью делаются не делимыми, т.е если каждый из двух процессов пытается поместить какие-то значения в одну и ту же ячейку памяти, то такой спор решается на аппаратном уровне: одному процессу разрешается выполнить операцию помещения данных памяти немедленно, другому приходится ждать завершения операции первого. Такое разрешение спора называется блокировкой памяти и дает возможность реализации взаимного исключения двух и более процессов, алгоритмически это реализуется следующим образом, каждый процесс связывается со своим критическим участком через флаг, значение которого истина если процесс находится в своем критическом участке и ложь в противном случае. Прежде чем войти в критически участок процесс проверяет переключатель другого процесса, чтобы убедится в безопасности входа, если переключатели всех процессов установлены в значение ложь, процесс выполняет вход в критический участок, если хотя бы один из переключателей имеет значение ИСТИНА заинтересованный во входе в критический участок процесс переводится системой в состояние ожидания и его собственный переключатель остается в состоянии ложь, периодически производится повторный опрос состояния всех переключателей и когда значение всех их устанавливается в ЛОЖЬ, процесс устанавливает значение переключателя в ИСТИНА и входит в критический участок. Флаг ИСТИНА поднимается до входа в критический участок и опускается после выхода процесса из критического участка. Улучшенный вариант этого алгоритма был предложен Датским математиком Деккером: этот алгоритм основан на использовании трех переменных П1 П2 и очередь. Если П1 хочет войти в критический интервал, значение переменных П1 устанавливается ИСТИНА, значение переменная очередь указывает чье сейчас право входить в критический интервал, 0 или 1. Если П1 имеет значение ИСТИНА, а П2 ЛОЖЬ, то выполняется П1 не зависимо от значения переменной очереди, если обе переменные П1 и П2 имеют значение истина, то исполняемый процесс определяется значением переменной очереди. Завершив процесс сбрасывает свой флаг в ЛОЖЬ и изменяет значение переменной очередь на обратное. Возможное программное решение представлено в виде:
Begin integer c1,c2, очередь;
C1=0;
C2=0;
Очередь=1;
Begin
Процесс 1 : begin c1=1;
Do while(c2=1)
If очередь=2
Then begin
Do while (очередь=2)
End;
C1=1
End;
End;
C2=0;
Очередь =1;
End; end; end;
Процесс 2: begin c2=1
Do while (c1=1)
If очередь =2
Then begin
Do while (очередь=1)
End;
C2=1;
End;
End;
Алгоритм дейкера удобен если процессов не более двух, хотя реализован может быть для скольки угодно процессов. В итоге Петерсоном был предложен основанный на идеях алгоритма Дэйкера позволяющий выполнить диспетчерезацию для несколько процессов без утяжеления. На языке С++ алгоритм выглядит следующим образом:
#define False 0
#define true 1
#define N 2
Int turn;
Int interested [N];
Void enter_region (int process)
{
int other;
Other =1-process;
Interested [process]=True;
Turn=process;
While (turn==process &&interested[other]==True)
{}//пустой цикл
}
Void leave_region (int process)
{interested [process]=False;}
При попытке обратится к критическому ресурсу, процесс вызывает функцию enter_region передавая в нее свой номер, если критический ресурс уже занят, то функция войдет в бесконечный цикл ожидания пока ресурс не будет освобожден, освобождение ресурса производится вызовом функции leave_region. Данные способы диспетчеризации основаны на идеи активного ожидания, т.е на постоянном опросе значения переменой отвечающей за блокировку входа в критический участок. Не эффективность данных алгоритмов состоит в напрасном расходовании ресурсов на этот опрос, существуют способы синхронизации позволяющие организовать процесс ожидания и диспетчерезации для критических ресурсов не прибегая к активному ожиданию ресурса. Эти способы связанны с использованием программныхмеханизмов с использованием сущности ядра ОС(семафоры монтиры и др).