Системное программное обеспечение

Вид материалаДокументы

Содержание


Вопрос №14. Прерывания. Классификация. Виды прерывания, обработка программных прерываний.
Прерывание – это принудительная передача управления от выполняемой программы к операционной системе, которая происходит при возн
Уровень приоритета прерываний
Схема.Обработка прерывания операционной системой
Вопрос № 15. Связь логического и физического представления данных на МД. Кэширование информации.
Зависимость размера кластера от размера тома
Подобный материал:
1   2   3   4   5   6   7   8   9   10

Вопрос №14. Прерывания. Классификация. Виды прерывания, обработка программных прерываний.


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

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

Типы (классы) прерываний

Прерывания можно разделить на два основных класса: внешние (называют асинхронными) и внутренние (синхронные).

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

Синхронные (внутренние) прерывания можно разделить на две части – программные и остальные:
    • при нарушении адресации (выход за пределы программы за пределы массива);
    • при возникновении в поле кода операции, которого нет на данной вычислительной системе;
    • при делении на нуль;
    • при переполнении, исчезновении порядка;
    • при обнаружении ошибок четности;
    • другие … (например, прерывания супервизора);
    • масса программных прерываний.

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

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

Для управления системой прерываний существуют специальные команды, которые позволяют управлять работой системы прерываний. Маскирование некоторых прерываний может осуществить пользователь, но в этом случае за верную работу процессора он и несет ответственность. Маскирование сигналов прерываний осуществляется при помощи регистров маски, а программное управление позволяет реализовать различные дисциплины обслуживания:
  • с относительными приоритетами. При этой дисциплине обслуживания, если обрабатывается прерывание, то его обработка продолжится до окончания и только после этого произойдет переход на обработку прерывания (конечно, если оно есть) с наивысшим приоритетом;
  • с абсолютным приоритетом. В этом случае, если во время обработки прерывания поступает прерывание с более высоким приоритетом, то происходит прерывание самой программы обработки прерывания с меньшим приоритетом;
  • по принципу стека (дисциплина LCFS – last come first served) – последним пришел – первым обслужен). При этой дисциплине обслуживания запросы на прерывания с более низким приоритетом могут прерывать обработку прерывания с более высоким приоритетом.



Контроль процессора

Повышение приоритета прерывания


Системный таймер


Магнитные диски


Сетевое оборудование


Терминалы


Программные прерывания



Уровень приоритета прерываний


Программно-аппаратное управление обработкой прерываний

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

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

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

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

Механизм обработки прерываний независимо от архитектуры вычислительной системы имеет семь шагов:
  1. Устанавливается факт поступления сигнала прерывания и его идентификация супервизором прерываний;
  2. Запоминается состояние прерванного процесса. Это достигается пересылкой содержания регистров процессора в стек. Его вы определяли в ассемблерной программе. Стек создается для любой программы, написанной на любом языке программирования. В программах на языках высокого уровня функцию создания стека берет на себя система, в Ассемблере его создает сам программист. Адрес этого стека записывается в дескрипторе прерываний.
  3. Управление аппаратно передается программе обработки прерываний.
  4. Сохраняется информация о прерванной программе, которая не сохранялась на втором этапе. В некоторых вычислительных системах запоминается большой объем информации о прерванном процессе.
  5. Происходит обработка прерывания. Иногда эту функцию выполняет сама программа обработки прерывания, но часто ОС передает управление какой-либо подпрограмме (например, драйверу определенного устройства).
  6. Восстанавливается информация прерванного процесса.
  7. Происходит возврат в прерванную программу.

Шаги 1 – 3 реализуются аппаратно, а 4 – 7 – программно.

Что же происходит при прерывании? Сохраняется информация о прерванной программе, а это значит, что в стек этой программы отправлена информация, которая находилась на момент прерывания в регистрах процессора: IP – в этом регистре адрес следующей команды, которая должна быть выполнена после прерывания; SS, DS, CS – в этих регистрах адреса начала сегментов; AX, BX, CX, DX – в этих регистрах рабочая информация; SI, DI – информация о смещении (индексные регистры). После обработки прерывания все эти регистры восстанавливаются из стека и состояние процессора точно такое же, как и до прерывания (как будто бы его и не было) и программа продолжается.


Программа обработки прерывания


Программа


Прерывание

Супервизор прерываний

Выполнение кода программы обработки прерываний







Сохранение данных идущего процесса (задачи)

Определение адреса программного модуля обработки прерывания. Передача ему управления.









Диспетчер задач


Выбор готовой к выполнению программы

Передача ей управления

…………………………..

Выбор по заданной очеред-ности нашей прерванной задачи. Восстановление режима работы и передача ей управления



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


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

В защищенном режиме (32-х разрядный процессор и многозадачный режим работы) при прерывании имеем дело с таблицей дескрипторов прерываний (IDT – interrupt descriptor table). К этой таблице имеет доступ только операционная система и она определяет адрес программы обработчика прерывания.

Дескриптор прерываний может принадлежать к одному из трех типов:
  • коммутатор прерываний (interrupt gate);
  • коммутатор перехвата (trap gate);
  • коммутатор задачи (task gate).

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

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

Вопрос № 15. Связь логического и физического представления данных на МД. Кэширование информации.


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

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

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

Информация на МД размещается блоками. Каждый такой блок называется сектором. Сектора находятся на концентрических дорожках поверхности диска и их размер – 512 байт.

Несколько секторов могут быть объединены логически в единое целое и составят кластер.

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

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

По адресу [0-0-1] магнитного диска расположена простейшая программа, с помощью которой можно находить и загружать программы ОС и информацию о структуре данных.

Дорожка находится под определенным положением магнитной головки при вращении. НМД может содержать 1 или более дисков. Группы дорожек одного радиуса – это цилиндр. Современные жесткие диски могут иметь несколько десятков тысяч цилиндров, а дискета 1,44 Мб имеет всего 80. Здесь 2 поверхности по 18 секторов:

2 * 80 * 18 * 512 =1 474 560 = 1,44 Мб

Сектор можно сделать и большего размера, но в большинстве современных ОС он выбран 512 байт. Физический адрес сектора определяется при помощи 3х «координат» [c-h-s], где с – номер цилиндра, h – номер рабочей поверхности, s – сектор.

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

Разделы могут быть двух типов – primary (первичный) и extended (расширенный). Максимальное число primary-разделов – 4, причем присутствие 1-го обязательно и extended.

Если первичных разделов несколько, то один из них может быть активным. При включении ПЭВМ именно из активного раздела начинается выполняться программа загрузки ОС. До загрузки ОС система управления файлами не работает, используются абсолютные номера в форме [c-h-s].

По адресу [0-0-1] на винчестере располагается главная загрузочная запись (master boot record, MBR). Эта запись занимает 1 сектор и размещается в памяти с адреса 0:7000. Затем задействуется код, который содержится в MBR и выполняется дальнейшая загрузка.

В MBR находятся три важных элемента:
  • Программа начальной загрузки (она запускается BIOS после ее загрузки в ОП). Она загружает чуть более сложную программу – стартовый сектор ОС – и передает ему управление.
  • Таблица описания разделов диска, которая занимает 64 байта, и находится сигнатура MBR.
  • Сигнатура MBR. Последние два байта MBR – это код АА55h. По ней BIOS проверяет, что чтение 0 и 1 идет нормально и блок информации передан верно, цепи передачи информации в исправном состоянии.

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

При такой схеме запуска компьютера мы всегда будем попадать в одну и ту же ОС. Иногда это плохо. Но разработаны менеджеры загрузки (boot-менеджеры), которые позволяют загрузить нужную ОС. Такие менеджеры входят в состав утилит OS/2 как отдельный раздел, который является активным.

Есть разные менеджеры: System commander (он расположен в разделе FAT) и Boot manager (в составе OS/2).

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

В начале винчестера находится таблица соответствия кластеров. Каждая запись этой таблицы соответствует кластеру винчестера. Она состоит из двух частей – первая указывает состояние кластера (плохой, свободный, занят файлом, последний в файле), вторая часть содержит адрес – ссылку на следующий кластер. Размер записи таблицы соответствия кластеров зависит разрядности процессора. В 16-и разрядном процессоре на номер кластера отведено 16 бит. Количество кластеров, к которым может адресоваться процессор равно 65536. Если винчестер большой емкости, то и кластер будет содержать большее число секторов. Например, размер кластера в файловой системе Windows – 2000, в зависимости от размера тома, представлен в таблице:


Зависимость размера кластера от размера тома

Размер тома

Количество секторов в кластере

Размер кластера

<= 512 Мбайт

1

512 байт

512 Мбайт – 1 Гбайт

2

1 Кбайт

1 Гбайт – 2 Гбайт

4

2 Кбайт

2 Гбайт – 4 Гбайт

8

4 Кбайт

4 Гбайт – 8 Гбайт

16

8 Кбайт

8 Гбайт – 16 Гбайт

32

16 Кбайт

16 Гбайт – 32 Гбайт

64

32 Кбайт

> 32 Гбайт

128

64 Кбайт


Кэширование

В современных ПК средняя длительность выборки при чтении – 20 мс. Это намного больше выборки из ОП и тем более из КЭШ. После выборки данные читаются большим пакетом (сразу несколько секторов в 512 байт). Скорости при выборке из ОП на 2-3 порядка выше.

Чтобы сгладить такое несоответствие используется буферизация или кэширование данных.

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

КЭШ – некий пул буферов, управляемый системным процессом. Программа считывает запись, но в буфер их считывается сразу много.

При записи данных из программы данные поступят в буфер и попадут на МД при его заполнении или окончании задачи. Эта операция отложенной записи («ленивая запись»). Плохо: при отключении питания – данные буфера пропадают.

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

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

В системах Windows 95/98 и следующих такая возможность есть, но ограниченная. Можно указать объем памяти для кэширования и объем порций данных, из которых набирается КЭШ.

В файле SYSTEM.INI в секции [VCAHCE] можно, например, написать:

[VCAHCE]

Minfilecache = 4096;

Maxfilecache = 32768;

Chunksize = 512;

Здесь: минимально под КЭШ выделено 4 Мб, но при необходимости он может возрасти до 32 Мб.

Размер данных, которыми манипулирует менеджер КЭШа, равен сектору.

Кэширование информации значительно повышает производительность вычислительной системы.