Существует 4 класса проблем:
— взаимные исключения. Возникают 3из-за попытки процессора использовать системный ресурс конфликтным образом. Для решения проблемы предполагается полное завершение критического участка кода перед передачей управления другому процессу.
— синхронизация. Необходимо дать знать другому процессу о завершении работы в критическом участке кода проблема решается с помощью событий.
— взаимоблокировка. Проблема возникает когда кол-во единиц ресурса меньше числа процессов, запрашивающих этот ресурс.
— коммуникации м/у процессами. Необходимо максимально изолировать задачи друг от друга и обеспечить связь м/у ними. Разрешение этого противоречия решается с помощью механизма сообщений.
Эффективность ОС м/б определена по состоянию очередей. Если большинство процессов находится в очереди на выполнение, то такая с-ма наз-ся ограниченной по быстродействию. Если большинство процессов находится в очереди вв/выв, то такая с-ма наз-ся ограниченной по вв/выв.
Планирование и диспетчиризация процессов.
Планирование – это органиция процессов в некоторую очередь, согласно определенной стратегии.
1. Планировщик – программа, ответственная за постановку процессов в очередь на выполнение и управление стр-рой этой очереди.
2. Диспетчер – программа, которая выбирает процесс из очереди и переводит его в активное состояние.
Главный планировщик встроен в ядро ОС. Его задача – общесистемное распределение времени в ЦП. Он запускается в момент постановки процесса в очередь на выполнение.
Рис. Блок-схема диспетчера планировщика.
1. Планировщик выбирает готовый к выполнению процесс. Им м/б процесс в состоянии ожидания или процесс из очереди на выполнение. Если есть готовый к исполнению процесс, то он выбирается, иначе если есть приоритеты, выбирается процесс с наивысшим приоритетом. Если приоритетов нет, то выбирается следующий процесс из очереди. Для пустой очереди выполняется холостой процесс (Idle).
2. При возникновении прерывания или запросе ресурса, процесспереводится в состояние ожидания. После того как требуемый реысурс будет получен возможно 2 продолжения:
а) Произвести немедленную перепланировку очереди с возможным вытеснением текущего процесса.
б) Поставить процесс в обычную очередь активных процессов и дать доработать до конца другим процессам свои кванты времени.
Преимущества: не тратится время на перепланировку очереди.
Недостатки: нет оперативной реакции системы.
Алгоритм планирования.
1. Циклическое планирование. Процесс полностью израсходовавший свой квант времени, перводится в конец очереди. Приоритет процесса определяется его положением в этой очереди. Квантование времени предотвращает долговременные захваты ЦП каким-либо процессом. По происшествии кванта времени прооцесс прерывает ОС.
2. Приоритетное планирование. Каждый процесс обладает определенным приоритетом. Процесс с наивысшим приоритетом ставится в очередь первым, а с наинизшим (холостой) – последним. Установка приоритета выполняется статически или динамически.
Статическая установка приоритета – когда приоритет устанавливается при создании процесса и не изменяется в дальнейшем. Может быть определен сл. о.:
1. Приоритет вычисляется исходя из предполагаемых запросов к ресурсам.
2. Приоритет определяется оценкой времени выполнения – чем меньше время выполнения программы, тем выше приоритет.
3. Приоритет определяется исходя из типа выполняемого процесса.
Статическая оценка приоритета является неточной, поэтому чаще выполняется динамическая установка приоритета.
Динамическая установка приоритета – когда значение приоритета изменяется в процессе выполнения программы. Приоритет корректируется при каждой обработке планировщика.
Приоритетное планирование с квантованием времени.
Чем выше приоритет, тем меньше квант времени. Когда диспетчер-планировщик (ДП) получает управление, он выбирает из очереди процесс с наивысшим приоритетом, дольше других находяйщийся в очереди. Если этот процесс полностью отработал свой квант времени, то ему присваивается более низкий приоритет и больший квант времени.
Если процесс прервался до того как истек его квант времени, то он сохраняет свой приоритет или повышает его. Т. о. процессы с низким приоритетом вероятнее всего должны прерываться в момент ожидания сообщения или проведения операциий вв/выв.
Общий алгоритм планирования для систем на базе Windows.
Системы: Win32, Win95, Win98, Win NT3.5(4.0), Win CE.
Существует 4 класса приоритетов: LOW – 4 (номер приоритета), NORMAL – 8, HIGH – 13, REALTIME – 24.
При запуске программа первоначально утанавливается с приоритетом NORMAL.
Приоритеты потоков: Lowest – -2, Below-normal – -1, Normal – 0, Above-normal – +1, Idle, Realtime.
В Win32 ДП выбирает из очереди процесс с наивысшим приоритетом и передает ему управление. После завершения кванта времени ДП снова выбирает процесс с наивысшим приоритетом. Получается, что процессы с более низким приоритетом никогда не получат управление, но на практике процессы чаще всего находятся в состоянии ожидания – после того как процессы с наивысшим приоритетом все станут в очередь ожидания, управление будет передано процессам с более низким приоритетом.
Распределение процессорного времени Win32 разбивается на 2 этапа:
1. Присвоение приоритета процессу.
2. Присвоение приоритета потоку.
Изначально приоритет потока равен приоритету процесса, но в дальнейшем он м/б несколько изменен. Для активного потока с-ма динамически изменяет приорите на 2 ед. и в дальнейшем постепенно снижает его до базового.
Функции диспетчера-планировщика (ДП).
1. Приостановка. Если ресурс занят или не требуется производить каких-либо действий, то процесс может приостановить свою работу до момента активизации его другим процессом.
2. Активизация. Процесс активизируется путем постановки его блока данных в очередь на выполнение.
3. Запуск подпроцесса. Для какой-либо обработки или выполнения запроса вв/выв м/б запущен процесс. В этом случае необходимо сообщить вызвавшему процессу о завершении работы подпроцесса.
Управление процессом.
Для управления процессами необходимо уметь их запускать, останавливать, подделживать связь м/у ними и запрашивать информацию об их состоянии. Может существовать один главный и несколько второстепнных процессов.
1. Создание процесса. Процесс м/б создан как уникальный процесс или подпроцесс. При этом ОС выделяет под него ресурсы (ОП) и блок данных. Поржденный процесс м/б создан трех видов: а) как независимый процесс, б) необходимо сообщить о завершении процесса в) «родитель» — приостанавливается до тех пор, пока порожденный процесс не будет завершен.
2. Удаление процесса. Процесс м/б удален вследствие ошибки или остановки другим процессом, нормально завершен, может удалить сам себя.
3. Идентификация процесса – выяснение состояния процесса.
4. Задержка процесса. Процесс м/б приостановлен на некоторое время. В случае периодичности выполняемых процессом действий, он может активизироваться только в определенные моменты времени. Все останольное время он находится вочереди задержки.
5. Изменение приоритета. Процесс может изменить свой приоритет на определенное значение, зависящее от конкретной ОС.
Процессы в Win32.
Счётчик использований определяет, когда будет уничтожен этот объект ядра. Первоначальное значение 0. Объект будет уничтожен, когда счетчик использований опять будет равным 0.
Когда создаётся объект ядра, при помощи специальных функций в таблицу описателей вставляется новая запись, описывающая новый объект. Номер этой записи будет возвращён, как описатель объекта ядра.
Объекты ядра создаются при помощи функций, которые начинаются со слова create…(CreateProcess). Возвращают HANDLE. Уничтожение объектов ядра производится при помощи функции CloseHandle.
Прототип: BOOL CloseHandle(HANDLE).
Функция CloseHandle уменьшает значение счётчика использования на 1, если счётчик =0, то объект уничтожается.
В случае, если необходимо продублировать описатель объекта ядра, то используется функция DuplicateHandle
HANDLE DuplicateHandle( HANDLE srcProcess, HANDLE srcHandle, HANDLE targetProcess, HANDLE targetHandle, DWORD Access, BOOL InheritHandle, DWORD Options). Options-DUPLICATE_SAME_ACCESS.
Задача функции DuplicateHandle скопировать объект ядра и получить описатель вновь полученной копии. Функция копирует описатель из одного процесса в другой с указанием прав доступа по умолчанию, если использовать DUPLICATE_SAME_ACCESS либо можно задать свои права. В качестве4-го параметра используется адрес переменной, в которую заносится описатель копии системного объекта. В дальнейшем необходимо уведомить targetProcess о изменении в его таблице описателей и передать ему содержимое targetHandle для того, чтобы он мог использовать созданную копию, например при помощи сообщений.
О наследовании процессов ядра.
Когда 1 процесс создаётся из другого, то порождённому процессу могут быть переданы объекты ядра, принадлежащие родительскому процессу, при этом порождённый процесс получает возможность полностью использовать эти объекты ядра. Наследоваться будут только те описатели родительского процесса, у которых флаг наследования установлен в TRUE.
Атрибуты безопасности.
typedef struct Security_attributes
{
DWORD nLenght;
LPVOID lpSecurityDescriptor;
BOOL InheriHandle;
} security_attributes;
1-длина структуры, 2- указатель на структуру, которая описывает права доступа,3- показывает является ли данный описатель наследуемым.
Security_attributes sa;
sa.nlenght=sizeof(sa);
sa.lpSecurityDescriptor=NULL;
sa.bInheritHandle=FALSE;
