Структура программного обеспечения персонального компьютера.
Структура программного обеспечения персонального компьютера.
Компьютерная система состоит из:
- аппаратуры (hardware)
- системных программ (system programms) – для обеспечения удобства выполнения приклидных программ
-- ОС
-- Оболочки ОС (командный интерпретатор)
-- Системные программы (сюда входят средства разработки ПО)
- компилятор
- редактор
- интерпретатор команд
- компоновщик
- отладчик
- прикладных программ (application programms)
Основные функциональные компоненты ОС.
Функции ОС группируются:
- по типам локальных ресурсов
- по задачам, применимым ко всем ресурсам
Группы функций называют подсистемой.
Наиболее важные подсистемы:
- управления процессами
- памятью
- файлами
- внешними устройствами
Для всех ресурсов:
- Подсистема пользовательского интерфейса
- Защиты данных
- Администрирования
Подсистема управления процессами
Процесс – заявка на потребление системных ресурсов. Ему нужна область оперативной памяти для размещения кодов и данных проги, процессорное время и разные вспомогательные ресурсы (файлы, внешние устройства и тд);
При создании процесса система создает информационную структуру процесса, где хранит данные о:
- его потребностях
- фактически выделенных ресурсах
- историю пребывания процесса в системе
- его текущее состояние (активное, заблоченное)
- приоритет
- и тд.
Процессы бывают пользовательские и системные.
У каждого процесса есть свое адресное пр-во, надо следить, чтобы они не пересекались – защита ресурсов процесса.
В процессе работы системы выполнение процесса прерывается и возобновляется много раз – необходимо сохранять все регистры, программный счетчик, указатели на открытые файлы и тд – сохранять и переключать контекст процесса.
Также процессы надо синхронизировать.
Итого – подсистема управления процессами:
- планирует выполнение процессов
- распределяет процессорное время
- создает и уничтожает процессы
- обеспечивает их ресурсами
- синхронизирует
- обеспечивает взаимодействие между процессами
Управления памятью
Процесс может выполняться, только если его коды и данные находятся в памяти.
Системе нужно:
- распределять физическую память между процессами
- загружать в нее коды и данные
- настраивать адресно-зависимые части прог на физические адреса
- защищать память каждого процесса
Распределение памяти идет по разным алгоритмам
По количеству выделяемых областей:
- непрерывная область
- несколько несмежных областей
По степени свободы границы областей:
- жестко зафискированная
- динамически перемещается
По размеру:
- фиксированные страницы
- сегменты переменной длины
Также ОС организует виртуальную память: подгружает и выгружает нужные страницы и транслирует виртуальные адреса в физические адреса оперативной памяти.
ОС занимается защитой памяти: память выделенная одной задачей не должна быть затронута другой.
Итого, ОС:
- отслеживает свободную и занятую память
- выделяет память процессам и освобождает ее по завершении их работы
- вытесняет процессы из оперативы на диск, когда оперативы не хватает и загружает обратно
- настраивает адреса проги на конкретную область физической памяти
Пользовательский интерфейс
CUI – юзер использует набор команд и работает через командный интерпретатор.
GUI – окна, мышь и все такое.
Требования к современным операционным системам.
Главные требование к ОС
- выполнение ею своих функций эффективного управления ресурсами и
- обеспечение удобного интерфейса для пользователей и прикладных программ.
От современных ОС ожидается:
- мультипрограммная обработка
- виртуальная память
- свопинг
- многооконный ГАЙ
Это все требования ФУНКЦИОНАЛЬНОЙ полноты.
Но кроме этого есть еще ЭКПЛУАТАЦИОННЫЕ требования
Расширяемость.
Ось живет десятки лет, а новые устройства появляются ежедневно. Ось должна легко расширяться поддержкой новых сетевых технологий, новых внешних устройств.
Достигается это за счет модульной структуры ОС, где ОС делится на набор изолированных модулей, взаимодействующих исключительно через функциональный интерфейс (инкапсуляция, короче).
Переносимость.
Иначе – многоплатформенность. ОС должна безболезненно переноситься с одного железа на другое, с проца одного типа- на другой, с одной аппаратной платформы (с одной архитектурой) – на другую с совсем другой архитектурой.
Совместимость.
ОС должна поддерживать работу привычных для пользователя другой системы приложений.
Безопасность ОС
- Защита от несанкционированного доступа:
* аутентификация – определение легальности юзеров
* авторизация – предоставление легальным юзерам разных прав доступа к ресурсам
* аудит – фиксация всех подозрительных событий
- Для сетевых ОС – защита данных, передаваемых по сети.
Производительность
ОС должна по максимуму использовать производительность железа, на котором она стоит.
Минусы
- снижается производительность(обращение прикладной программы идет последовательно по слоям)
Слои (снизу вверх)
- Машинно-зависимые компоненты (то, что выполняется непосредственно железом);
- Базовые механизмы ядра (самые примитивные операции: переключение контекстов, диспетчеризация прерываний, подкачка страниц);
- Менеджеры ресурсов (управляют основными ресурсами компа: файловой системой, процессами, вводом-выводом)
- Интерфейс системных вызовов – АПИ, обслуживает системные вызовы.
-3) Микроядерная архитектура:
Принцип – минимизировать ядро. Построена по принципу клиент-серверной организации.
· То, что отвечает за работу аппаратуры + базовые операции = ЯДРО
· Менеджеры ресурсов и все прочее вынесены за его пределы в виде приложений, работающих в пользовательском режиме. Они обслуживают прикладные программы и устроены так, что могут принимать запросы и отвечать на них, посылая сообщения.
Плюсы:
- ядро превратилось в микроядро, это повышает надежность.
- гибкая структура, легко расширяется. Очень удобна для распределенных систем.
- надежная система (все серверы работают в своем адресном пространстве + крах одного сервера не затрагивает работу других)
- поддерживает распределенные вычисления
- хорошая переносимость(весь машинно зависимый код изолирован в микроядре)
Минусы:
- Вместо одного переключения – 2 – снижается производительность.
Системы пакетной обработки.
Главная цель – максимальная загрузка ЦП, минимизация простоев. Максимальная пропускная способность – к-во задач / единицу времени.
Перед началом работы формируется пакет заданий, каждое из которых содержит требования к системным ресурсам. Из этого пакета на одновременное выполнение выбираются задачи, предъявляющие разные требования к ресурсам, что обеспечивает сбалансированную загрузку ЦП.
Выбирается самое выгодное задание – невозможно гарантировать выполнение задания за какой-то определенный промежуток времени.
Способы совмещения работы ЦП и ввода-вывода:
1) Канальный –у компа есть свой проц ввода-вывода (канал). Он умеет выполнять свои операции. ЦП дает ему параметры и указывает, какую именно инструкцию надо выполнить, после чего они работают параллельно.
2) На основе контроллеров. Внешние устройства управляются собственными контроллерами. Контроллер отрабатывает команды, поступившие от ЦП, но делает это медленнее, чем ЦП (т.к. устройства внешние - электромеханические). За счет этого достигается параллелизм.
Переключение с задачи на задачу в системах пакетной обработки –невытесняющее, по инициативе самой задачи, которая добровольно отказывается от процессора, когда ей нужно устройство ввода – вывода.
Задача может надолго занять процессор – это снижает эффективность работы пользователя, но повышает эффективность использования аппаратуры.
Системы разделения времени
Цель – удобство работы пользователя.
Одному или нескольким юзерам предоставляется возможность работать сразу с несколькими приложениями. Поэтому время работы каждого приложения ограничивается – ОС приостанавливает его выполнение по истечении кванта процессорного времени.
Т.о. ни одна задача не занимает ЦП надолго, и время ответа приложения остается приемлемым для юзера, который общается с системой через терминал. У всех пользователей складывается впечатление, что они используют систему единолично.
Такие системы обладают меньшей пропускной способностью, производительность системы снижается из-за более частых переключений процессора.
Системы реального времени
Предназначены для управления разными техническими объектами (спутники, станки, и тд). Существует предельно допустимое время, в течение которого должна быть выполнена та или иная задача. Иначе возникнет сбой с тяжелыми последствиями.
Критерий эффективности – способность выдерживать заранее заданные интервалы между запуском программы и получением результата – реактивность системы.
В системах реального времени мультипрограммная смесь состоит из фиксированного набора заранее разработанных программ (с известным временем их выполнения).
Запуск задач на выполнение осуществляется по прерываниям:
- либо исходя из текущего состояния объекта
- либо по плановому расписанию
Скорость ответа системы зависит от скорости обработки прерываний (опрос тысячи потенциальных устройств не подойдет). Это главный критерий выбора процессора для такой системы.
Загружать процессор по максимуму в этих системах нельзя, нужно оставлять запас вычислительной мощности на случай непредвиденной пиковой нагрузки. То, что вероятность ее возникновения крайне мала – здесь не аргумент, т.к. именно в этот момент больше всего понадобится адекватная реакция системы, от которой будет зависеть слишком многое (пример – зашкаливание датчиков при аварии на АЭС).
12. Понятия процесса и потока. Состояния потока. Планирование и диспетчеризация потоков в многопоточных системах (с использованием не вытесняющих алгоритмов, на основе квантования, на основе приоритетов, смешанные алгоритмы планирования).
Понятие процесса и потока
Процесс – деятельность ОС, связанная с выполнением программы и собственно выполнение этой программы.
Процесс – сущность, рассматриваемая как единица работы ОС.
Процесс – это динамичное понятие. Одна программа, запущенная дважды – это два процесса. Программа – понятие статичное.
Поток – это поток команд, выполняемый процессором.
Это сущность, которая используется системой для распределения процессорного времени.
Все ресурсы в системе, кроме процессорного времени, выделяются для процесса:
- память
- адресное пространство
- возможность доступа к файлам тд
Процессорное время выделяется потоку. Т.о мультипрограммирование реализовывается на уровне потоков, а не процессов.
Для создания процесса система создает ОПИСАТЕЛЬ ПРОЦЕССА – информационную структуру, содержащую все сведения о процессе: его id, приоритет, права доступа, данные о расположении в памяти его кода и данных.
После того, как создан новый описатель процесса, система принимает вновь появившийся процесс при планировании распределения своих ресурсов.
Для того, чтобы создать процесс, нужно загрузить коды и данные исполняемой программы в оперативную память (при использовании витруальной памяти в оперативную память загружается только часть процесса, остальные подкачиваются при необходимости.)
При создании процесса ОС создает для него как минимум 1 поток выполнения, для чего генерируется специальная структура – ОПИСАТЕЛЬ ПОТОКА. Сюда записывается информация о id потока, его приоритете, правах доступа и состоянии и тд. Вновь созданный поток находится в приостановленном состоянии и становится в очередь на выполнение в соответствии с определенными правилами системы.
При работе с процессами система использует понятия ДЕСКРИПТОР ПРОЦЕССА (он же описатель, см. выше ) и КОНТЕКСТ ПРОЦЕССА.
· Дескриптор процесса содержит информацию, необходимую ядру в течение всего жизненного цикла процесса (не важно, в памяти он сейчас или выгружен из нее).
Дескрипторы объединяются в ТАБЛИЦУ ПРОЦЕССОВ, которая хранится в ядре. На основании информации из таблицы процессов осуществляется планирование и синхронизация процессов.
· Контекст процесса содержит более объемную и не такую важную информацию: содержимое регистров, указатели на открытые файлы и тд и тп.Контекст не хранится в области ядра, а выгружается на диск при необходимости (транзитный).
Состояния потока
ОС осуществляет планирование потоков в соответствии с их состоянием
Поток может находиться в одном из 3 основных состояний (есть еще и промежуточные)
1) Выполнение (поток юзает процессор)
2) Готовность (поток мог бы выполняться, но проц занят)
3) Ожидание или блокировка (потоку что-то надо: ждет данные, операцию ввода вывода или еще чего);
Переход из одного состояния в другое осуществляется в соотсветствии с алгоритмом планирования конкретной ОС.
Итак.
- Поток создан – в состоянии готовности, ждет очереди на выполнение.
- Поток выбран на выполнение – выполняется, пока сам не отдаст проц, или пока квант времени не истечет
- Потом – снова в готовность.
- Потоку понадобилась инфа – он идет в ожидание.
- Поток получил нужную инфу – он идет в готовность и в очередь.
Существует переходное состояние ПЕРВООЧЕРЕДНОЙ ГОТОВНОСТИ – когда поток готов получить ресурсы (между блокировкой и готовностью).
В состоянии выполнения может находиться только 1 поток (в однопроцессорной системе);
В ожидании и готовности – много. Тут процессы образуют очереди, организованные в виде однонаправленного списка. Это позволяет легко их переупорядочивать при необходимости.
Планирование и диспетчеризация потоков
От планирования потоков зависит эффективность работы системы. Критерии эффективности бывают разные (см. выше).
В самом общем случае алгоритмы планирования можно разделить
По степени централизации механизма планирования на:
- вытесняющие (preemptive) – поток выполняется, пока сам не решит отдать процессор другому
Есть плюсы:
- исключаются нерациональные прерывания программ в неудобное время
- нет проблем совместного использования данных
- более высокая скорость работы (не надо переключаться туда-сюда)
Но больше минусов
- неудобно для пользователя
- головная боль для программиста (ему нужно решать вопросы планирования, он должен быть очень высококвалифицированным)
Пример – файл-серверы NetWare
- невытесняющие (non-preeemptive) – решение о переключении процессора принимает ОС. Так работает большинство современных ОС, особенно пользовательских.
Невытесняющиеалгоритмы планирования:
А) FIFO (First in first out) || FCFS (First come first served);
- Справедливо
- Просто
Но есть convoy effect – короткие процессы, выполняемые после длинных, увеличивают общее время ожидания.
Б) SJFS – shortest job first served – короткая задача обслуживается первой.
- без опережения (процесс не прерывается если уж пошел на исполнение)
- с опережением (прерывается, если появляется поток с еще более минимальным временем исполнения)
В) SRTF – shortest remaining time first – первым идет поток, которому меньше осталось.
- оптимален в системах реального времени
Оценка длины среднего периода активности вычисляется по формуле:
T (n + 1) = a*tn + (1 - a)*tn
T – текущее значение энного CPU burst
T (n + 1) – следующее его значение, которое мы предсказываем
А – коэффициент старения информации (от 0 до 1);
Вытесняющие алгоритмы планирования бывают разные:
- на основе квантования
- на основе приоритетов
- смешанные
1) Квантование – каждому потоку последовательно выделяется квант процессорного времени.
Смена потоков происходит при:
- поток завершился и покинул систему
- произошла ошибка
- поток перешел в заблокированное состояние
- поток исчерпал свой квант (переходит в состояние готовности)
Кванты бывают:
- одинаковые для всех потоков.
- разные
Длина кванта – q. Количество потоков – n. Поток ждет (n-1)*q времени. Чем больше потоков, тем больше ждет, но если квант достаточно маленький – это время ожидания все равно не заметно для пользователя. Обычно оно составляет десятки миллисекунд.
Но чем больше квант – тем больше вероятность, что поток все сделает в первом же цикле, и зависимость времени ожидания потока от времени выполения снижается. Если квант совсем большой – то система превращается в систему линейной обработки.
Кванты для одного потока бывают:
- фиксированной величины
- изменяться в течение жизни потока. (Например, сначала дают большой квант, а потом все меньше и меньше. Короткие задачи выполняются сразу, а длинные вычисления идут в фоновом режиме.)
Система может формировать несколько очередей готовых к выполнению потоков, в зависимости от того, сам ли поток отдал квант или его у него забрали (использован квант до конца или нет), и первыми брать на выполнение из очереди, где собрались потоки, недоиспользовавшие свои кванты.
При алгоритмах, основанных на квантовании, совершенно не учитывается предварительная инфа о задачах (длинные или короткие, важные или нет, сколько они будут использовать процессор, а сколько – устройства ввода-вывода).
2) Алгоритмы планирования, основанные на приоритетах
При приоритетном обслуживании каждый поток обладает изначально известной характеристикой – приоритетом.
Приоритет – число, характеризующее степень привилегированности потока при использовании процессорного времени. Чем выше приоритет – тем выше привилегии, тем меньше поток стоит в очередях.
Приоритет может быть целым, дробным, положительным, отрицаетельным, чем меньше – тем больше, чем больше – тем меньше и тд, в разных системах.
Приоритет потока непосредственно связан с приоритетом процесса, который назначался ему системой при его создании. Система при создании процесса, анализирует, системный он или пользовательский, каковы права пользователя, создавшего его, были ли явные указания на повышение приоритета – и на основании этого назначает потоку определнный приоритет.
Приоритеты бывают:
- фиксированные (один раз назначен – и до конца процесса не меняется)
- динамические (меняются в течение жизни потока)
- по инициативе юзера (он выполняет нужную команду) – в современных системах этого стараются избегать, повышать приоритеты потока могут только админы, и то в определенных пределах.
- по инициативе самого потока (обращается с вызовом к ОСи);
- по инициативе ОС в зависимости от ситуации в системе.
Приоритетное обслуживание бывает:
- с относительными приоритетами
Поток выбран и исполняется, хот гром греми.
Подходит для систем пакетной обработки
- с абсолютными приоритетами
Поток исполняется, пока в очереди не появится процесс с более высоким приоритетом.
Подходит для систем, где нужна быстрая реакция на событие.
3) Смешанные алгоритмы планирования
Используется как система квантования, так и система приоритетов. Например, в основе лежит квантование, но величина кванта и порядок выбора потока на исполнение определяется его приоритетами. Большинство ОС работают так.
13. Приоритеты и концепции планирования потоков в Windows 2000, ОС Unix System V и OS/2.
Процессы системного класса
- стратегия фиксированных приоритетов. Приоритет однажды назначается ядром и больше не меняется.
Процессы реального времени:
- стратегия фиксированных приоритетов, но пользователь может их менять.
- для каждого уровня приоритета процессов этого класса предусмотрен свой квант времени
- при наличии готовых к выполнению процессов реального времени, другие процессы не рассматриваются(поэтому их надо тщательно планировать)
Процессы разделения времени:
- долго были единственными в этой ОС, и по умолчанию любой процесс создается именно этого класса
- стратегия динамическихприоритетов
- величина приоритета состоит из пользовательской и системной части:
* пользовательская часть может быть снижена пользователем или админом (не повышена)
* системная часть может быть снижена, если процесс долго занимает процессор, не уходя в ожидание и повышении процессам, которые часто уходят в состояние ожидания.
Система OS/2
Планирование на основе квантования и абсолютных динамических приоритетов
Существует 4 приоритетных класса:
- критический(time critical) – потоки, выполняющие задачи управления сетью и тд
- серверный (server) – обслуживают серверные приложения
- стандартный (regular) – обслуживают пользовательские программы
- остаточный (idle) – экранная заставка, например.
В каждом классе – 32 приоритетных уровня.
· Поток из менее приоритетного класса не может быть выбран, пока есть поток более приоритетного класса.
· Внутри класса потоки выбираются по приоритетам.
· Потоки с одинаковым приоритетом – в циклическом порядке.
Планировщик динамически меняет приоритеты потоков, если
· Поток ожидает больше, чем прописано в специальной переменной. (Его приоритет повышается, но не выше чем нижняя граница диапазона критического класса)
· Поток ушел на ввод-вывод. Когда вернется – у него будет максимальный для своего класса приоритет
· Поток поступил на выполнение
Величина кванта времени здесь тоже динамическая (зависит от загрузки системы и интенсивности подкачки) – от 32 мс до 65536 мс. Если поток был прерван до истечения кванта, то в след раз квант увеличится на 1 таймер (около 32 мс), и так пока не достигнет предела, прописанного в текущих настройках системы.
Система Windows 2000
Система с приоритетам и квантованием, вытесняющая многозадачность.
Приоритеты имеют 32 уровня (0- 31 включительно).
Делятся на 3 диапазона:
- 0 – системный поток для очистки страниц памяти. Готовит страницы памяти, нужен для виртуализации, для гарантированной защиты информации.
-1 – 15 вкл – диапазон динамических приоритетов (могут меняться в процессе работы в зависимости от параметров)
- 16-32 вкл – диапазон статических приоритетов (в процессе работы не меняются)
В зависимости от использования выделяется ряд классов приоритетов процессов:
1) Фоновые потоки (Idle class ) – уровень 4
2) – ниже нормального (Below normal class) – уровень 6
3) Нормальный (Normal class) – уровень 8
4) – выше нормального (Above normal class ) – уровень 10
5) Высокий (High class) – уровень 13
___________________________
6) Реальное время (Real time class)– уровень 24
2 и 4 появились начиная с Винды 2000;
Приоритет каждого потока = приоритет его процесса + относительный приоритет самого потока. Существует 7 относительных приоритетов потоков:
· Normal: такой же как и у процесса;
· Above normal: +1 к приоритету процесса;
· Below normal: -1;
· Highest: +2;
· Lowest: -2;
· Time critical: устанавливает базовый приоритет потока для Real time класса в 31, для остальных классов в 15.
· Idle: устанавливает базовый приоритет потока для Real time класса в 16, для остальных классов в 1.
Для процессов класса NORMAL_PRIORITY_CLASS при переключении из фонового режима в режим переднего плана и в ряде других случаев приоритет потока, с которым создано окно переднего плана, повышается. Так работают все клиентские операционные системы от Microsoft. Серверные операционные системы оптимизированы для выполнения фоновых приложений.
К тому же Windows 2000 Professional и Windows 2000 Server имеют разные алгоритмы выделения квантов времени. Первая — клиентская — операционная система выделяет время короткими квантами переменной длины для ускорения реакции на приложения переднего плана (foreground). Для сервера же более важна стабильная работа системных служб, поэтому во второй ОС система распределяет длинные кванты постоянной длины.
Планирование процессов и потоков в системах реального времени.
Главный критерий эффективности в этих системах – реактивность, обеспечение временных характеристик вычислительного процесса и быстрая реакция на управляющие сигналы.
Но задача облегчается, тем, что:
- заранее известен весь набор выполняемых задач
- есть четкая информация о сроках и задачах, на ее основе можно
- создать статическое расписание
- создать нужный динамический алгоритм
В зависимости от последствий ошибки, системы делятся:
- системы жесткого реального времени (запуск спутника, АЭС)
- системы мягкого реального времени (система бронирования билетов)
ЖЕСТКОГО РВ
Для систем жесткого реального времени время выполнения КАЖДОЙ из критических задачдолжно быть гарантировано при ЛЮБОМ сценарии поведения системы.
Этого можно добиться:
- исчерпывающим тестированием системы
- статическим расписанием
- составлением математически обоснованного динамического алгоритма
Возможность составить статическое расписание есть не всегда, и эта возможность просчитывается сложными математическими вычислениями.
Один из критериев такой возможности – время вычисления задачи должно быть меньше предельного срока на ее выполнение.
МЯГКОГО РВ
Время иногда может быть нарушено, не страшно.
___
Типы задач в системе РВ:
- периодические – можно определить все будущие моменты запроса задачи
- спорадические – время запросов заранее не известно
Также задачи бывают:
- независимые
- зависимые
Планирование зависимых задач важнее, чем планирование независимых задач, и сложнее.
Можно:
- разделить планирование на 2 части, одну из них выполнять заранее, а вторую – во время работы системы. Например, предварительно можно вычислить временные интервалы, в которые нельзя назначать выполнение задач, содержащих критические секции.
- ввести ограничения на поведение набора задач
Классический алгоритм для жестких систем реального времени разработан в 1973 году Лью и Лейландом.
Этот алгоритм основан на статических приоритетах
- запросы на выполнение всех задач набора, имеющих жесткие ограничения на время реакции, являются периодическими
- Все задачи независимы
- Срок выполнения каждой задачи равен ее периоду
- Максимальное время выполнения каждой задачи известно и постоянно
- Максимальный коэффициент загрузки процессора не превышает 0.7
Задачам назначаются статические приоритеты в зависимости от величины их периода выполнения: чем он короче, тем больше приоритет.
Существуют также алгоритмы, основанные на динамических приоритетах, назначаются в соответствии с текущими состояниями задачи (дедлайном).
Чем меньше время у задачи до дедлайна, тем выше ее приоритет.
15. Обработка прерываний (назначение, типы, механизм, маскирование). Диспетчеризация и приоритеты прерываний. Централизованная схема диспетчеризации прерываний на примере Windows NT. Отложенный (DPS) и асинхронный (APS) вызовы процедур для обработки прерываний. Выполнение обработки прерываний в контексте и вне контекста процесса.
Прерывания – основная движущая сила любой ОС.
Назначение
Система прерываний переводит процессор на выполнение потока команд, отличного от того, который на нем выполнялся до сих пор с последующим возвратом к исходному потоку.
Т.о. механизм прерываний очень похож на механизм вызова процедур, однако переключение по прерываниям непредсказуемо, с отличие от вызова процедуры, планируемого программистом.
Типы прерываний, в зависимости от источника, таковы:
- внешние
- внутренние
- программные
Внешние = аппаратные – это действия пользователя или поступление сигналов от внешних устройств. Являются асинхнонными по отношению к выполняемой проге.
Внутренниепрерывание (исключения) –происходят, если в процессе исполнения программы возникает аварийная ситуация (выход за границы массива, деление на 0 и тд);
Программные прерывания – не настоящие прерывания, а сознательная имитация таковых в заранее запланированных местах программы.
Механизм прерываний
Существует 2 способа, с помощью которых шины выполняют прерывания:
- Векторный
- Опрашиваемый
При использовании векторных прерываний устройствам назначается вектор прерываний (электрический сигнал, несущий инфу об определенном номере, закрепленном за определенным устройством). Устройство запрашивает прерывание. Процессор подтверждает запрос и выполняет цикл подтверждения прерывания, в котором устройство должно себя идентифицировать. Для этого оно выставляет свой вектор прерываний, а процессор, используя этот вектор, находит соответствующий обработчик прерываний.
При использовании опрашиваемых прерываний процессор получает от устройства только инф-ю об уровне приоритета прерывания. С каждым уровнем может быть связано несколько устройств, и чтобы определить нужное, процессор вызывает все обработчики прерываний для данного типа приоритета, пока один из них не «распознает» свое прерывание.
Упорядочивание обработки прерываний достигается за счет приоритезации и маскирования
Приоретизация:
Каждому источнику прерываний назначается класс, каждому классу соответствует свой уровень приоритета.
Приоритеты могут быть:
- относительные (прерывание выбрано на обработку и обрабатывается хоть гром греми)
- абсолютные (прерывание начало обрабатываться, но при поступлении более приоритетного прерывания его обработка прекращается). Это достигается тем, что есть переменная, в которую записывается приоритет прерывания, которое сейчас обрабатывается. С ней сравнивается значение приоритета вновь поступивших прерываний.
Маскирование (собственно, оно есть и в только что описанной схеме приоретизации) – запросы на прерывания маскируются, то есть не обслуживаются. Маскирование предполагает возможность маскирования прерываний любого уровня, вне зависимости от их приоритета.
Основы синхронизации процессов и потоков. Понятие гонок. Критическая секция кода и исключение гонок. Блокирующие переменные. Понятие семафора и его использование для целей синхронизации. Синхронизация и проблема тупиков. Синхронизирующие объекты в операционных системах.
Понятие гонок
Если пренебрегать синхронизацией, то может возникнуть ситуация гонок, что может привести к ошибкам в работе программы и даже к краху системы.
Пример ситуации гонок: База данных, хранящая инфу о заказах и оплате клиента. С БД работает 2 потока: один пишет инфу о заказах, второй об оплате.
Итак:
1) Работает поток А: сделал А1 и А2, считал инфу в буфер, но в файл пока ничего не сохранил, в файле нет инфы о заказе.
2) Работает поток Б: сделал Б1 и Б2, в его буфере нет ничего про заказ клиента (инфа о нем хранится в буфере потока А)
3) Поток А выполнилА3 и записал в файл свою информацию
4) Поток Б выполнил Б3 записал в файл свою устаревшую информацию, затерев ту, что была записана – инфа о заказе потеряна.
Сложность проблемы заключается в нерегулярности ее возникновения.
Гонки – это ситуация, когда 2 или более потоков обрабатывают разделяемые данные и результат работы зависит от соотношения скоростей потоков (кто успел – обогнал, тот и съел);
Блокирующие переменные
Для синхронизации прогер может использовать глобальные блокирующие переменные. К ним имеют доступ все потоки и с ними программист работает, обращаясь к системным вызовам ОС.
Для каждого набора критических данных заводится своя двоичная переменная, которая устанавливается в 0, когда поток входит в КС, и в 1 – когда он ее покидает.
Блокирующие переменные могут быть использованы при работе с любыми разделяемыми ресурсами.
Но нельзя прерывать поток между выполнением проверки состояния переменной и установки ее значения. Для этого можно:
- использовать встроенную в процессор единую команду анализа и присвоения значения логической переменной
- а если такой нет, специальными системными примитивами запрещать в это время все прерывания.
Недостаток такой системы:
Второй поток, который тоже хочет поработать с критической секцией кода, должен постоянно опрашивать переменную на предмет ее состояния.
В ОС Windows NT взаимное исключение реализовано похожим образом, но от этого недостатка избавились: при переводе второго жаждущего потока в ожидание