Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Покрытие кода



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

Тестировщики могут использовать результаты теста покрытия кода для разработки тестов или тестовых данных, которые расширят покрытие кода на важные функции.

Как правило, инструменты и библиотеки, используемые для получения покрытия кода, требуют значительных затрат производительности и/или памяти, недопустимых при нормальном функционировании ПО. Поэтому они могут использоваться только в лабораторных условиях.


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

Назначение и функции ОС.

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

Т.О. назначение ОС:

1) Предоставление польз-лю или прогр-сту вместо реальной аппаратуры ПК расширенную интеллектуальную машину.

2) Улучшение эфф-ти использования ПК путем рационального управл его ресурсами в соответствии с его критериями.

Функции ОС:

- обеспечивать загрузку пользовательских программ в оперативную память и их исполнение

- обеспечивать работу с устройствами долговременной памяти, такими как магнитные диски, ленты, оптические диски и т.д. Как правило, ОС управляет свободным прост-вом на этих носителях и структурирует пользовательские данные

- предоставлять более или менее стандартный доступ к различным устройствам ввода/вывода, таким как терминалы, модемы, печатающие устройства

- предоставлять пользовательский интерфейс.

Существуют ОС, функции которых этим и исчерпываются. Одна из хорошо известных систем такого типа - дисковая операционная система MS DOS.

Более развитые ОС предоставляют также следующие возможности:

- параллельное исполнение нескольких задач

- распределение ресурсов компьютера между задачами

- организация взаимодействия задач друг с другом

- организация межмашинного взаимодействия и разделения ресурсов

- защита системных ресурсов, данных и программ пользователя, исполняющихся процессов и самой себя от ошибочных и зловредных действий пользователей и их программ

Классификация операционных систем по поддержке многозадачности, многонитевости, многопользовательского режима, реализации многозадачности и организация вычислительного процесса в системе с многопроцессорной архитектурой.

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

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

1). Поддержка многозадачности. По числу одновременно выполняемых задач операционные системы могут быть:

ü однозадачные (например, MS-DOS, MSX);

ü многозадачные (OC EC, OS/2, UNIX, Windows 95).

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

2). Поддержка многопользовательского режима. По числу одновременно работающих пользователей ОС делятся на:

ü однопользовательские (MS-DOS, Windows 3.x, ранние версии OS/2);

ü многопользовательские (UNIX, Windows NT).

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

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

ü невытесняющая многозадачность (NetWare, Windows 3.x);

ü вытесняющая многозадачность (Windows NT, OS/2, UNIX).

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

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

5). Многопроцессорная обработка. Другим важным свойством ОС является отсутствие или наличие в ней средств поддержки многопроцессорной обработки - мультипроцессирование. Мультипроцессирование приводит к усложнению всех алгоритмов управления ресурсами. В наши дни становится общепринятым введение в ОС функций поддержки многопроцессорной обработки данных. Такие функции имеются в операционных системах OS/2 фирмы IBM, Windows NT фирмы Microsoft и NetWare 4.1 фирмы Novell.

Многопроцессорные ОС могут классифицироваться по способу организации вычислительного процесса в системе с многопроцессорной архитектурой:

Асимметричная ОС целиком выполняется только на одном из процессоров системы, распределяя прикладные задачи по остальным процессорам.

Симметричная ОС полностью децентрализована и использует весь пул процессоров, разделяя их между системными и прикладными задачами.


8.Требования предъявляемые к ОС. Ресурсы и их распределение в операционной системе.

Требования предъявляемые к ОС.

Очевидно, что главным требованием, предъявляемым к операционной системе, является способность выполнения основных функций: эффективного управления ресурсами и обеспечения удобного интерфейса для пользователя и прикладных программ. Современная ОС, как правило, должна реализовывать мультипрограммную обработку, виртуальную память, свопинг, поддерживать многооконный интерфейс, а также выполнять многие другие, совершенно необходимые функции. Кроме этих функциональных требований к операционным системам предъявляются не менее важные рыночные требования. К этим требованиям относятся:

- Расширяемость. Код должен быть написан таким образом, чтобы можно было легко внести дополнения и изменения (например, поддержка новых устройств, возможность связи с сетями нового типа, использование более чем одного процессора), если это потребуется, и не нарушить целостность системы. Это может достигаться за счет модульной структуры ОС, при которой программы строятся из набора отдельных модулей, взаимодействующих только через функциональный интерфейс. Новые компоненты могут быть добавлены в операционную систему модульным путем, они выполняют свою работу, используя интерфейсы, поддерживаемые существующими компонентами. Так же прекрасные возможности для расширения предоставляет подход к структурированию ОС по типу клиент-сервер с использованием микроядерной технологии. В соответствии с этим подходом ОС строится как совокупность привилегированной управляющей программы и набора непривилегированных услуг-серверов. Основная часть ОС может оставаться неизменной в то время, как могут быть добавлены новые серверы или улучшены старые;

- Переносимость. Код должен легко переноситься с процессора одного типа на процессор другого типа и с аппаратной платформы (которая включает наряду с типом процессора и способ организации всей аппаратуры компьютера) одного типа на аппаратную платформу другого типа;

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

- Совместимость. ОС должна иметь средства для выполнения прикладных программ, написанных для других операционных систем. Кроме того, пользовательский интерфейс должен быть совместим с существующими системами и стандартами;

- Безопасность. ОС должна обладать средствами защиты ресурсов одних пользователей от других. Правила безопасности определяют такие свойства, как защита ресурсов одного пользователя от других и установление квот по ресурсам для предотвращения захвата одним пользователем всех системных ресурсов (таких как память).Иерархия уровней безопасности помечает низший уровень безопасности как D, а высший - как А:

1) В класс D попадают системы, оценка которых выявила их несоответствие требованиям всех других классов;

2) Основными свойствами, характерными для С-систем, являются: наличие подсистемы учета событий и избирательный контроль доступа. Уровень С делится на 2 подуровня: уровень С1, обеспечивает защиту данных от ошибок пользователей, но не от действий злоумышленников. На уровне С2 должны присутствовать средства секретного входа, обеспечивающие идентификацию пользователей путем ввода уникального имени и пароля перед тем, как им будет разрешен доступ к системе и т.д;

3) Системы уровня В, в отличие от уровня С, защищает систему от ошибочного поведения пользователя;

4) Уровень А является самым высоким уровнем безопасности, он требует в дополнение ко всем требованиям уровня В выполнения формального, математически обоснованного доказательства соответствия системы требованиям безопасности.

- Производительность. Система должна обладать настолько хорошим быстродействием и временем реакции, насколько это позволяет аппаратная платформа.

Ресурсы и их распределение в операционной системе.

Ресурс – это продолжительность использования какого-то объекта или объём работы, выполненной объектом до момента достижения им некого предельного состояния, при котором дальнейшее использование объекта нежелательно или невозможно;

Системные ресурсы – совокупность аппаратных ресурсов и системных сервисов. Основными потребителями системных ресурсов являются процессы, выполняемые в системе.

Свойства и классификация ресурсов

1) по реальности существования

ü физический – реально существует, обладает всеми физ. свойствами;

ü виртуальный – представляет модель физического и реализуется программным путём;

3) по степени активности

ü активный – выполняет действия по отношению к другим и самому себе (процессор);

ü пассивный (память);

4) по времени существования

ü временный (появляется и уничтожается);

ü постоянный – существует после процесса;

5) по степени важности

ü главный – если процесс без него протекать не может (процессор, память);

ü второстепенный;

7) по структуре

ü составные – могут быть в нескольких состояниях (свободен – частично занят - занят);

ü простые (свободен - занят);

9) характер использования

ü параллельно - используются несколькими процессами одновременно (память);

ü последовательно (запрос à исполнение à освобождение);

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

ü планирование ресурса - то есть определение, кому, когда, а для делимых ресурсов и в каком количестве, необходимо выделить данный ресурс;

ü отслеживание состояния ресурса - то есть поддержание оперативной информации о том, занят или не занят ресурс, а для делимых ресурсов - какое количество ресурса уже распределено, а какое свободно.

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

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

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

Взаимоблокировки могут возникать между различными машинами. Во многих офисах, где есть локальная сеть, включающая в себя множество компьютеров. Часто такие устройства, как сканеры, устройства записи компакт-дисков, принтеры и накопители на магнитной ленте, присоединены к сети как ресурсы совместного доступа, то есть, доступны любому пользователю на любой машине.

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

Ресурс - объекты предоставления доступа. Ими может быть аппаратное устройство или часть информации.

Обнаружение и устранение взаимоблокировок

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

Избежание взаимоблокировки

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

Предотвращение взаимоблокировок

Как мы видели, уклонение от взаимоблокировок, в сущности невозможно, потому что оно требует наличия никому не известной информации о будущих процессах.

Атака условия взаимного исключения

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

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

Атака условия удержания и ожидания

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

Атака условия отсутствия принудительной выгрузки ресурса

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

Атака условия циклического ожидания

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


9.Архитектура ОС. Микроядерная архитектура.

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

Монолитные системы

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

Для построения монолитной системы необходимо скомпилировать все отдельные процедуры, а затем связать их вместе в единый объектный файл с помощью компоновщика (примерами могут служить ранние версии ядра UNIX или Novell NetWare). Каждая проц-ра видит любую другую процедуру.

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

1. Главная программа, которая вызывает требуемые сервисные процедуры.

2. Набор сервисных процедур, реализующих системные вызовы.

3. Набор утилит, обслуживающих сервисные процедуры.

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

Многоуровневые системы

  Интерфейс пользователя
  Управление i/o
  Драйвер устройства связи оператора и консоли
  Управление памятью
  Планирование задач и процессов
  Hardware

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

Слоеные системы хорошо модифицируются. При необходимости можно заменить лишь один слой, не трогая остальные.

Но слоеные системы сложны для разработки: тяжело правильно определить порядок слоев и что к какому слою относится. Слоеные системы менее эффективны, чем монолитные. Так, например, для выполнения операций ввода-вывода программе пользователя придется последовательно проходить все слои от верхнего до нижнего. Использован при реализации различных вариантов ОС UNIX.

Модель клиент-сервер и микроядра

Модель клиент-сервер - это еще один подход к структурированию ОС. В широком смысле модель клиент-сервер предполагает наличие программного компонента - потребителя какого-либо сервиса - клиента, и программного компонента - поставщика этого сервиса - сервера. Взаимодействие между клиентом и сервером стандартизуется, так что сервер может обслуживать клиентов, реализованных различными способами и, может быть, разными производителями. При этом главным требованием является то, чтобы они запрашивали услуги сервера понятным ему способом. Инициатором обмена обычно является клиент, который посылает запрос на обслуживание серверу, находящемуся в состоянии ожидания запроса. Один и тот же программный компонент может быть клиентом по отношению к одному виду услуг, и сервером для другого вида услуг. Модель клиент-сервер является скорее удобным концептуальным средством ясного представления функций того или иного программного элемента в той или иной ситуации, нежели технологией. Эта модель успешно применяется не только при построении ОС, но и на всех уровнях программного обеспечения, и имеет в некоторых случаях более узкий, специфический смысл, сохраняя, естественно, при этом все свои общие черты.

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

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

Микроядро реализует жизненно важные функции, лежащие в основе операционной системы. Это базис для менее существенных системных служб и приложений. Именно вопрос о том, какие из системных функций считать несущественными, и, соответственно, не включать их в состав ядра, является предметом спора среди соперничающих сторонников идеи микроядра. В общем случае, подсистемы, бывшие традиционно неотъемлемыми частями операционной системы - файловые системы, управление окнами и обеспечение безопасности - становятся периферийными модулями, взаимодействующими с ядром и друг с другом.

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

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

Виртуальные машины

Программа пользователя Программа пользователя Программа пользователя
MS-DOS Linux Windows
Виртуальное Hardware Виртуальное Hardware Виртуальное Hardware
Реальная ОС
Реальное Hardware

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

«–» снижение эффективности вирт машин по сравнению с реальным компьютером, и, как правило, они очень громоздки.

«+» использование на одной ВС программ, написанных для разных ОС.

Микроядерная архитектура ОС – разбиение ОС на несколько процессов – серверов, менеджеров, приложений, каждый из которых выполняет отдельный набор сервисных функций.

Компоненты системы взаимодействуют друг с другом путем передачи сообщений через микроядро.

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

Главный принцип: включать в микроядро только те функции, которым необходимо исполняться в привилегированном режиме – поддержка нескольких процессоров, некоторые функции управления процессами, устройствами ввода-вывода, обработка прерываний, функции связанные с загрузкой команд в регистры.

«+» высокая степень модульности ядра ОС. Это упрощает добавление в него новых компонентов, можно, не прерывая работы ОС, загружать и выгружать новые драйверы, файловые системы. повышает надежность системы, поскольку ошибка на уровне непривилегированной программы менее опасна, чем отказ на уровне режима ядра.

«–» дополнит накладные расходы, связанные с передачей сообщ, что влияет на производительность.

Смешанные системы

В большинстве случаев современные ОС используют различные комбинации этих подходов.

Монолитная система с элементами микроядерной архитектуры (Linux). При компиляции ядра можно разрешить динамическую загрузку и выгрузку многих компонентов ядра –модулей. В момент загрузки модуля его код загружается на уровне системы и связывается с остальной частью ядра. Внутри модуля могут использоваться любые экспортируемые ядром функции.

ОС с монолитным ядром под управлением микроядра (MkLinux). Микроядро обеспечивает управление виртуальной памятью и работу низкоуровневых драйверов. Все остальные функции осуществляются монолитным ядром.

Элементы микроядерной архитектуры и элементы монолитного ядра переплетены в ядре Windows NT. Компоненты ядра Windows NT располагаются в вытесняемой памяти и взаимодействуют друг с другом путем передачи сообщений, как и положено в микроядерных ОС. В то же время все компоненты ядра работают в одном адресном пространстве и активно используют общие структуры данных, что свойственно ОС с монолитным ядром.

10.Понятие вычислительного процесса и потока. Управление процессами. Планирование и диспетчеризация процессов и потоков.
Понятие вычислительного процесса и потока. Управление процессами.

Важнейшей частью операционной системы, непосредственно влияющей на функционирование вычислительной машины, является подсистема управления процессами.

Процесс - это совокупность машинных команд и данных, исполняющаяся в рамках ВС и обладающая правами на владение некоторым набором ресурсов. Эти права могут быть эксклюзивными, когда ресурс принадлежит только этому процессу. Некоторые из ресурсов могут разделяться, т. е. одновременно принадлежать двум и более процессам, в этом случае мы говорим о разделяемых ресурсах.

Процесс включает в себя следующее:

- исполняемый код;

- собственное адресное пространство, представляющее собой совокупность виртуальных адресов, которые может использовать процесс;

- ресурсы системы, которые назначены процессу операционной системой;

- хотя бы одна выполняемая нить

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

Процесс может находиться в нескольких состояниях:

- Выполнение – состояние, в котором процесс обладает всеми необходимыми ресурсами и непосредственно выполняется на процессоре;

- Ожидание – пассивное состояние, процесс заблокирован, он не может выполняться по своим внутренним причинам, он ожидает наступление некоторого события или освобождения ресурса;

- Готовность – пассивное состояние, процесс заблокирован в связи с внешними к нему обстоятельствами: процесс имеет все необходимые ему ресурсы, но процессор занят выполнением другого процесса.

В ходе жизненного цикла процесс неоднократно переходит из одного состояния в другое в соответствии с реализованным в ОС алгоритмом планирования процессов.

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

Под управление процессами понимается:

1) Управление использованием времени центрального процессора. Это ещё иногда называют планированием ЦП, то есть управление тем, в какой момент времени какая из задач или какой из процессов будет владеть активностью ЦП: на какой из процессов будет работать ЦП.

2) Управление «подкачкой» и буфером ввода. Процессором обрабатывается несколько процессов, и перед нами стоит задача освободить реальную оперативную память для других задач. В этом случае возникает необходимость какие-то из обрабатываемых задач откачать на внешнее запоминающее устройство. Как более или менее выгодно организовать процесс откачки является одной из задач ОС. Если в системе образовывается масса задач, то вся вычислительная система не может принять для работы в мультипрограммном режиме все задачи. В этом случае образуется, так называемый, буфер ввода задач, или буфер ввода процессов, то есть буфер, в котором аккумулируются те процессы, которые ожидают начала своей обработки процессором. Возникает проблема очередности выбора процессов из этого буфера для начала обработки. Это задача планирования буфера.

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

Потоки (нити, треды)

Желательно иметь возможность задействовать внутренний параллелизм в процессах. Такой внутренний параллелизм встречается достаточно часто и его использование позволяет ускорить их решение. Например, некоторые операции, выполняемые приложением, могут требовать для своего исполнения достаточно длительного использования центрального процессора. В этом случае при интерактивной работе с приложением пользователь вынужден долго ожидать завершения заказанной операции и не может управлять приложением до тех пор, пока операция не выполнится до самого конца. Если же программные модули, исполняющие такие длительные операции, оформлять в виде самостоятельных «подпроцессов» (легковесных или облегченных процессов — потоков, можно также воспользоваться термином задача), которые будут выполняться параллельно с другими «подпроцессами» (потоками, задачами), то у пользователя появляется возможность параллельно выполнять несколько операций в рамках одного приложения (процесса). Легковесными эти задачи называют потому, что операционная система не должна для них организовывать полноценную виртуальную машину. Эти задачи не имеют своих собственных ресурсов, они развиваются в том же виртуальном адресном пространстве, могут пользоваться теми же файлами, виртуальными устройствами и иными ресурсами, что и данный процесс. Единственное, что им необходимо иметь, — это процессорный ресурс. В однопроцессорной системе треды (задачи) разделяют между собой процессорное время так же, как это делают обычные процессы, а в мультипроцессорной системе могут выполняться одновременно, если не встречают конкуренции из-за обращения к иным ресурсам.

Главное, что обеспечивает многопоточность, — это возможность параллельно выполнять несколько видов операций в одной прикладной программе. Параллельные вычисления (а следовательно, и более эффективное использование ресурсов центрального процессора, и меньшее суммарное время выполнения задач) теперь уже часто реализуется на уровне тредов, и программа, оформленная в виде нескольких тредов в рамках одного процесса, может быть выполнена быстрее за счет параллельного выполнения ее отдельных частей. Например, если электронная таблица или текстовый процессор были разработаны с учетом возможностей многопоточной обработки, то пользователь может запросить пересчет своего рабочего листа или слияние нескольких документов и одновременно продолжать заполнять таблицу или открывать для редактирования следующий документ.

Потребность в потоках (threads) возникла еще на однопроцессорных вычислительных системах, поскольку они позволяют организовать вычисления более эффективно. Для использования достоинств многопроцессорных систем с общей памятью треды уже просто необходимы, так как позволяют не только реально ускорить выполнение тех задач, которые допускают их естественное распараллеливание, но и загрузить процессорные элементы работой, чтобы они не простаивали. Заметим, однако, что желательно, чтобы можно было уменьшить взаимодействие тредов между собой, ибо ускорение от одновременного выполнения параллельных потоков может быть сведено к минимуму из-за задержек синхронизации и обмена данными.

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

Планирование и диспетчеризация процессов и потоков.

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

Распределение процессов между имеющимися ресурсами носит название планирование процессов. Одним из методом планирования процессов, ориентированных на эффективную загрузку ресурсов, является метод очередей ресурсов. Новые процессы находятся во входной очереди, часто называемой очередью работ – заданий. Входная очередь располагается во внешней памяти, во входной очереди процессы ожидают освобождения ресурса — адресного пространства основной памяти. Готовые к выполнению процессы располагаются в основной памяти и связаны очередью готовых процессов. Процессы в этой очереди ожидают освобождения ресурса процессорное время. Процесс в состоянии ожидания завершения операции ввода - вывода находится в одной из очередей к оборудованию ввода - вывода. При прохождении через компьютер процесс мигрирует между различными очередями под управлением программы, которая называется планировщик. Операционная система, обеспечивающая режим мультипрограммирования, обычно включает два планировщика — долгосрочный и краткосрочный.

Основное отличие между долгосрочным и краткосрочным планировщиками заключается в частоте запуска, например: краткосрочный планировщик может запускаться каждые 100 мс, долгосрочный — один раз за несколько минут.

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

Рассмотрим стратегии планирования:

1) Первый пришел — первый обслуживается (FIFO) - является наиболее простой стратегией планирования процессов и заключается в том, что процессор передается тому процессу, который раньше всех других его запросил. Среднее время ожидания часто весьма велико и зависит от порядка поступления процессов в очередь готовых процессов. Данной стратегии присущ так называемый “эффект конвоя”. В том случае, когда в компьютере имеется один большой процесс и несколько малых, то все процессы собираются в начале очереди готовых процессов, а затем в очереди к оборудованию. Таким образом, “эффект конвоя” приводит к снижению загруженности как процессора, так и периферийного оборудования;

2) Наиболее короткая работа (SJF, Shortest Job First) - одним из методов борьбы с “эффектом конвоя” является стратегия, позволяющая малым процессам из очереди выполняться первыми. Она снижает время ожидания очереди. Наибольшая трудность в практической реализации SJF заключается в невозможности заранее определить величину времени последующего обслуживания. Поэтому стратегия SJF часто применяется в долгосрочных планировщиках, обслуживающих пакетный режим. В этом случае вместо величины времени последующего обслуживания используется допустимое максимальное время выполнения задания, которое программист должен специфицировать перед отправкой задания в пакет;

3) Приоритетное планирование - предполагает, что каждому процессу приписывается приоритет, определяющий очередность предоставления ему CPU. Например, стратегия FIFO предполагает, что все процессы имеют одинаковые приоритеты, а стратегия SJF предполагает, что приоритет есть величина, обратная времени последующего обслуживания. Приоритеты определяются исходя из совокупности внутренних и внешних по отношению к операционной системе факторов. Внутренние факторы могут использоваться для автоматического назначения приоритетов самой операционной системой, а внешние для принудительного, с помощью оператора.

4) “Карусельная” (RR, Round Robin) - применяется в системах разделения времени. Определяется небольшой отрезок времени, названный квантом времени (10..100 мс). Очередь готовых процессов рассматривается как кольцевая. Процессы циклически перемещаются по очереди, получая CPU на время, равное одному кванту. Новый процесс добавляется в хвост очереди. Если процесс не завершился в пределах выделенного ему кванта времени, его работа принудительно прерывается, и он перемещается в хвост очереди;

5) Планирование с использованием многоуровневой очереди - разработана для ситуации, когда процессы могут быть легко классифицированы на несколько групп, например, часто процессы разделяют на две группы: интерактивные (процессы переднего плана) и пакетные (фоновые). Стратегия многоуровневой очереди разделяет очередь готовых процессов на несколько очередей, в каждой из которых находятся процессы с одинаковыми свойствами, и каждый из которых может планироваться индивидуальной стратегией. Взаимодействие очередей осуществляется по следующим правилам: ни один процесс с более низким приоритетом не может быть запущен, пока не выполнятся процессы во всех очередях с более высоким приоритетом; Диспетчеризация - это реализация решения, найденного в результате планирования

Операционная система идентифицирует и отслеживает каждую нить по её блоку управления процессом PCB (Process Control Block).Задачи диспетчеризации:

- Сохранение контекста текущего потока

- Загрузка контекста нового потока

- Запуск нового потока на выполнение

Контекст потока можно разделить на общую часть для всех потоков данного процесса и часть, относящуюся только к данному потоку

Иерархия контекстов ускоряет переключение потоков

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

Для работы определенных программ может организовываться более одного процесса или один и тот же процесс может исполнять последовательно несколько различных программ.

В процессе может выполняться часть кода ядра ОС.

Состояния процесса

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

Инициатором рождения нового процесса после старта ОС может выступить либо процесс пользователя, совершивший специальный системный вызов, либо сама ОС.

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

ОС переводит его в состояние исполнение – выполнение программного кода процесса.

Процесс через некоторое время может быть завершен или приостановлен ОС.

Приостановка процесса происходит по двум причинам: для его дальнейшей работы потребовалось какое-либо событие (например, завершение операции ввода-вывода) или истек временной интервал, отведенный операционной системой для работы данного процесса.

Из состояния ожидание процесс попадает в состояние готовность после того, как ожидаемое событие произошло, и он снова может быть выбран для исполнения.

При завершении своей деятельности процесс из состояния исполнение попадает в состояние закончил исполнение.

В ходе жизненного цикла процесс неоднократно переходит из одного состояния в другое в соответствии с реализованным в ОС алгоритмом планирования процессов.

Windows NT содержит 7 различных состояний, а Unix – 9.

Изменением состояния процессов занимается ОС, совершая операции над ними. Удобно объединить их в три пары:

· создание – завершение процесса;

· приостановка (перевод из И в Г) – запуск процесса (перевод из Г в И);

· блокирование процесса (перевод из И в О) – разблокирование процесса (О в Г).

Контекст процесса – структура данных, содержащая информацию, специфичную для процесса:

· состояние, в котором находится процесс;

· программный счетчик процесса (адрес следующей команды);

· содержимое регистров процессора;

· данные, необходимые для планирования использования процессора и управления памятью (приоритет процесса, размер и расположение адресного пространства и т. д.);

· учетные данные (идентификационный номер процесса, какой пользователь инициировал его работу, общее время использования процессора данным процессом и т. д.);

· сведения об устройствах ввода-вывода, связанных с процессом (например, какие устройства закреплены за процессом, таблицу открытых файлов).

Вся информация, необходимая для совершения операций над процессом, хранится в одной структуре данных: PCB (Process Control Block) – блок управления процессом. Информацию делят на 3 части:

· регистровый контекст процесса – содержимое всех регистров процессора (включая значение программного счетчика)

· пользовательский контекст – код и данные, находящиеся в адресном пространстве процесса

· системный контекст процесса – все остальное.

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

Переключение контекста

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

Для корректного переключения процессора с одного процесса на другой необходимо сохранить контекст исполнявшегося процесса и восстановить контекст процесса, на который будет переключен процессор. Такая процедура сохранения / восстановления работоспособности процессов называется переключением контекста.

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

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

Под управлением процессами понимается:

1) Управление использованием времени центрального процессора. В какой момент времени какой из процессов будет владеть активностью ЦП: на какой из процессов будет работать ЦП.

2) Управление «подкачкой» и буфером ввода. Процессором обрабатывается несколько процессов, и необходимо освободить реальную оперативную память для других задач – откачать на внешнее ЗУ.

Если в системе образовывается масса задач, то образуется буфер ввода процессов, ожидающих начала обработки процессором. Возникает проблема очередности выбора процессов из этого буфера.

3) Управление разделяемыми ресурсами. Проблема с простым устройством легко решается, а вот если две программы имеют общий фрагмент оперативной памяти, то управление таким разделяемым ресурсом - сложная задача.

Потоки (нити, треды)

Процесс – совокупность взаимодействующих нитей и выделенных ему ресурсов.

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

Нити процесса разделяют его программный код; глобальные переменные; системные ресурсы; адресное пространство.

Каждая нить имеет собственный программный счетчик; свое содержимое регистров; свой стек.

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

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

11.Механизм прерываний. Способы выполнения прерываний. Приоретизация и маскирование прерываний. Диспетчеризация прерываний в операционной системе.

Механизм прерываний. Способы выполнения прерываний. Приоритизация и маскирование прерываний.

Прерывание прерывает «нормальную» работу системы и переводит процессор на выполнение другого потока команд с последующим возвращением к исходному процессу. Механизм реализации прерываний в чём-то схож с процессом вызова процедур, но отличается тем, что:

1) переключение по команде перехода (вызов процедуры) предусмотрен в коде приложения;

2) прерывание может произойти в произвольный момент времени и от одного из нескольких возможных источников;

Классы прерываний (в зависимости от источника):

1) внешние (аппаратные): возникают в результате действия пользователей или поступления сигналов от аппаратуры (н-р, завершение операции ввода/вывода). Система после обработки прерывания восстанавливает процесс с того места, на котором он был прерван;

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

3) программные: не являются в полном смысле прерываниями; возникают при выполнении особых команд процессора, которые инициируют прерывания;

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

- Прерывания обрабатываются модулями операционной системы, т.к. действия по обработке прерываний относятся к управлению разделяемыми ресурсами системы;

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

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

Способы выполнения прерываний

В обоих способах процессор получает информацию о приоритете прерывания на шине подключения внешнего устройства.

1) векторный (vectored) - в процессор передаётся информация о начальном адресе процедуры обработки прерывания (обработчика прерывания). Устройству, использующему этот способ обработки прерываний, назначается вектор прерывания (электрический сигнал, доставляемый на соответствующие шины процессора) и несущий в себе информацию об определённом уникальном номере устройства, который может быть идентифицирован соответствующим обработчиком прерываний. При получении сигнала запроса на прерывание, процессор выполняет специальный цикл подтверждения прерывания, в котором запрашивающее устройство должно быть идентифицировано. В течении цикла устройство отвечает, выставляя на шину вектор прерывания, а затем процессор использует этот вектор для поиска обработчика прерываний.

2) опрашиваемый (polled) - при использовании этого метода процессор получает от устройства, запросившего прерывание, только информацию об уровне приоритета прерываний. С каждым уровнем приоритета может быть связано несколько устройств (в общем случае – источников прерываний) и, соответственно, несколько обработчиков. При появлении прерывания процессор должен определить, какое именно устройство из связанных с данным уровнем приоритета действительно запросило прерывание. Это достигается вызовом всех обработчиков для данного уровня приоритета, пока один из них не подтвердит, что прерывание запрашивает обслуживаемое им устройство.

Механизм обработки прерываний

1) при возникновении сигнала аппаратного прерывания или условий для внутреннего прерывания, происходит первичное аппаратное распознавание типа прерывания. Если прерывания данного типа в настоящий момент запрещены, то процессор продолжает поддерживать естественный ход выполнения команд, иначе, в зависимости от поступившей информации происходит автоматический вызов процедуры обработки прерывания, адрес которой находится в специальной таблице ОС – таблице векторов прерываний. Эта таблица используется для того, чтобы связать адрес обработчика прерывания с номером прерывания;

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

3) временно запрещаются прерывания данного типа, чтобы не было очереди потоков одной и той же процедуры;

4) после обработки прерываний ядром ОС, контекст прерванного процесса восстанавливается и его работа возобновляется с прерванного места; также снимается блокировка прерываний данного типа.

Приоритезация прерываний.

Аппаратные прерывания вырабатываются устройствами компьютера, когда возникает необходимость их обслуживания. Например, по прерыванию таймера соответствующий обработчик прерывания увеличивает содержимое ячеек памяти, используемых для хранения времени. В отличие от программных прерываний, вызываемых запланировано самой прикладной программой, аппаратные прерывания всегда происходят асинхронно по отношению к выполняющимся программам. Кроме того, может возникнуть одновременно сразу несколько прерываний!

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

Система приоритетов реализована на двух микросхемах Intel 8259. Каждая микросхема обслуживает до восьми приоритетов. Микросхемы можно объединять (каскадировать) для увеличения количества уровней приоритетов в системе.

Уровни приоритетов обозначаются сокращенно IRQ0 - IRQ15.

Примеры приоритетов прерываний:

- IRQ0 – прерывание системного таймера (самый высокий приоритет)

- IRQ1 – прерывание от клавиатуры (и т.д.)

Маскирование прерываний.

Часто при выполнении критических участков программ для того, чтобы гарантировать выполнение определенной последовательности команд целиком приходится запрещать прерывания. Это можно сделать командой CLI (clear interruptions). Ее нужно поместить в начало критической последовательности команд, а в конце расположить команду STI (set interruptions), разрешающую процессору воспринимать прерывания. Команда CLI запрещает только маскируемые прерывания, немаскируемые всегда обрабатываются процессором. К немаскируемым прерываниям относят несколько источников аппаратных прерываний, которые не могут быть маскированы и обрабатываются всегда (н-р, от системного таймера).

Если вы используете запрет прерываний с помощью команды CLI, следите за тем, чтобы прерывания не отключались на длительный период времени, так как это может привести к нежелательным последствиям. Например, будут отставать часы.

Если вам надо запретить не все прерывания, а только некоторые, например, от клавиатуры, то для этого надо воспользоваться услугами контроллера прерываний: выдачей в этот контроллер определенной управляющей информации можно замаскировать прерывания от отдельных устройств. Для этого предназначен специальный регистр IMR (interruption mask register), который отвечает за маскирование прерываний от отдельных источников и представляет собой битовую маску. Каждому биту соответствует один источник прерываний, который можно маскировать.

Диспетчеризация прерываний в операционной системе.

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

Операционная система не может терять контроль над ходом выполнения системных процедур, вызываемых по прерываниям. Она должна упорядочивать их во времени так же, как планировщик упорядочивает многочисленные пользовательские потоки. Кроме того, сам планировщик потоков является системной процедурой, вызываемой по прерываниям (аппаратным — от таймера или контроллера устройства ввода-вывода, или программным — от приложения или модуля ОС). Поэтому правильное планирование процедур, вызываемых по прерываниям, является необходимым условием правильного планирования пользовательских потоков. В противном случае в системе могут возникать, например, такие ситуации, когда операционная система будет длительное время заниматься не требующей мгновенной реакции задачей управления стримером, архивирующим данные, в то время, когда высокоскоростной диск будет простаивать и тормозить работу многочисленных приложений, обменивающихся данными с этим диском. Еще один пример такой ситуации иллюстрирует рис. 4.12. В данном случае обработчик прерываний принтера блокирует на длительное время обработку прерывания от таймера, в результате чего системное время на некоторое время «замирает» и поток 2, критически важный для пользователя, не получает управление в запланированное время. Остроту проблемы несколько смягчает то обстоятельство, что во многих случаях обработка прерывания связана с выполнением всего нескольких операций ввода-вывода и поэтому имеет очень небольшую продолжительность. Тем не менее ОС всегда должна контролировать ситуацию и выполнять критичную работу вовремя, а не полагаться на волю случая.
Для упорядочения работы обработчиков прерываний в операционных системах применяется тот же механизм, что и для упорядочения работы пользовательских процессов — механизм приоритетных очередей. Все источники прерываний обычно делятся на несколько классов, причем каждому классу присваивается приоритет. В операционной системе выделяется программный модуль, который занимается диспетчеризацией обработчиков прерываний. Этот модуль в разных ОС называется по-разному, но для определенности будем его называть диспетчером прерываний.





Дата публикования: 2015-10-09; Прочитано: 622 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.056 с)...