Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Использование прерываний в ОС




Модульная структура построения ОС

ПРИНЦИПЫ ПОСТРОЕНИЯ ОС

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

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

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

Этими подсистемами являются:

n файловые системы;

n подсистема управления устройствами;

n подсистема управления оперативной памятью;

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

n подсистема интерфейса с пользователем;

n подсистема управления задачами и диспетчеризацией;

n подсистема ведения времени и обслуживания таймеров.

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

 

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

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

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

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

<вызвать подпрограмму> имя подпрограммы

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

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

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

INT номер

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

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

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

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

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

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

 




Поделиться с друзьями:


Дата добавления: 2014-01-05; Просмотров: 754; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.014 сек.