Внутренние прерывания вызываются
событиями, которые связаны с работой процессора
и являются синхронными с его операциями,
например:
- нарушение адресации;
- наличие в поле адреса несуществующей инструкции;
- деление на нуль;
- переполнение или исчезновение порядка;
- ошибка четности;
- ошибка в работе различных аппаратных устройств.
Собственно программные прерывания
происходят по соответствующей команде прерывания,
то есть по этой команде процессор производит
те же действия, что и при обычных внутренних
прерываниях. Данный механизм введен для того,
чтобы переключение на системные программные модули
происходило не как переход в подпрограмму,
а как обычное прерывание. Этим обеспечивается
автоматическое переключение процессора
в привилегированный режим с возможностью
выполнения всех команд.
Сигналы, вызывающие прерывания,
формируются в процессоре или вне его, они могут
возникнуть одновременно. Выбор одного
их них происходит на основе приоритетов,
установленных для каждого их них. Наивысшим приоритетом
обладают прерывания от схем контроля
процессора. Учет приоритетов может быть
встроен в технические средства или может
определяться операционной системой.
Программно-аппаратное управление порядком
обработки сигналов прерывания позволяет
применять различные дисциплины обслуживания
прерываний.
Распределение прерываний по
уровню приоритета (от низкого к высокому):
- программные прерывания;
- прерывания от внешних устройств: терминалов;
- прерывания от внешних устройств: сетевого оборудования;
- прерывания от внешних устройств: магнитных дисков;
- прерывания от системного таймера;
- прерывания от средств контроля процессора.
Процессор может обладать средствами
защиты от прерываний:
- отключение системы прерываний;
- маскирование (запрет) отдельных видов прерываний.
Обычно операция прерывания
выполняется только после завершения выполнения
текущей команды.
Сигналы прерывания возникают
в произвольные моменты времени, поэтому
к моменту обработки может накопиться несколько сигналов.
Сигналам прерывания присваиваются приоритеты,
в первую очередь обрабатывается сигнал
с более высоким приоритетом.
Программное управление специальными
регистрами маски (маскирование сигналов
прерывания) позволяет реализовать различные дисциплины
обслуживания:
- с относительными приоритетами, обслуживание не прерывается даже при наличии запросов с более высоким приоритетом. В программе обслуживания данного запроса следует наложить маски на все остальные сигналы прерывания или просто отключить систему прерываний;
- с абсолютными приоритетами, обслуживается прерывание с наибольшим приоритетом. В программе обслуживания прерываний следует наложить маски на сигналы прерывания с более низким приоритетом. Возможно многоуровневое прерывание, то есть прерывание программы обработки прерывания, число уровней меняется и зависит от приоритета запроса;
- по принципу стека (последним пришел – первым обслужен), запросы с более низким приоритетом могут прервать обработку прерывания с более высоким приоритетом. В программе обслуживания прерываний не следует накладывать маски ни на один сигнал прерывания и отключать систему прерываний.
Управление ходом выполнения
задач со стороны ОС заключается:
- в организации реакций на прерывание;
- в организации обмена информацией;
- в предоставлении необходимых ресурсов;
- в динамике выполнения задачи;
- в организации сервиса.
Причины прерываний определяет
ОС (супервизор прерываний) и выполняет действия,
необходимые при данном прерывании и в данной
ситуации.
Супервизор прерываний выполняет
следующие действия:
- сохраняет в дескрипторе текущей задачи рабочие регистры процессора, определяющие контекст прерванной задачи;
- определяет программу, обслуживающую текущий запрос на прерывание;
- устанавливает необходимый режим обработки пребывания;
- передает управление подпрограмме обработки прерывания.
После выполнения подпрограммы
обработки прерывания управление передается
супервизору в модуль управления диспетчеризацией
задач
При появлении запроса на прерывание
система прерываний идентифицирует сигнал
и, если прерывание разрешено, управление
передается на соответствующую подпрограмму
обработки прерываний.
Подпрограмма обработки прерываний
состоит их трех секций:
1)отключение прерываний,сохранение контекста
прерванной программы, установка режима
работы системы прерываний;
2) собственно тело программы обработки
прерываний;
3)восстановление контекста
прерванной ранее программы, установка
прежнего режима работы системы прерываний.
1-я и 3-я секции подпрограммы обработки
прерываний –служебные, сохраняют и восстанавливают
контекст задач. Поскольку эти действия необходимо
выполнять практически в каждой подпрограмме
обработки прерывания, во многих ОС первые
секции подпрограмм обработки прерываний
выделяются в специальный системный модуль
– супервизор прерываний.
1.3 Архитектура
процессора
Одним из немаловажных факторов
повышающих производительность процессора,
является наличие кэш-памяти, а точнее
её объём, скорость доступа и распределение
по уровням.
Кэш-память – это сверхбыстрая
память используемая процессором, для
временного хранения данных, которые наиболее
часто используются. Вот так, вкратце,
можно описать данный тип памяти.
Кэш-память построена на триггерах,
которые, в свою очередь, состоят из транзисторов.
Группа транзисторов занимает гораздо
больше места, нежели те же самые конденсаторы,
из которых состоит оперативная память. Это тянет
за собой множество трудностей в производстве,
а также ограничения в объёмах. Именно
поэтому кэш память является очень дорогой
памятью, при этом обладая ничтожными
объёмами. Но из такой структуры, вытекает
главное преимущество такой памяти –
скорость. Так как триггеры не нуждаются
в регенерации, а время задержки вентиля,
на которых они собраны, невелико, то время
переключения триггера из одного состояния
в другое происходит очень быстро. Это
и позволяет кэш-памяти работать на таких
же частотах, что и современные процессоры.
Также, немаловажным фактором
является размещение кэш-памяти. Размещена
она, на самом кристалле процессора, что
значительно уменьшает время доступа
к ней. Ранее, кэш память некоторых уровней,
размещалась за пределами кристалла процессора,
на специальной микросхеме SRAM где-то на
просторах материнской платы. Сейчас же,
практически у всех процессоров, кэш-память
размещена на кристалле процессора.
Как уже упоминалось выше, главное
назначение кэш-памяти – это хранение
данных, которые часто используются процессором.
Кэш является буфером, в который загружаются
данные, и, несмотря на его небольшой объём,
(около 4-16 Мбайт) в современных процессорах, он
дает значительный прирост производительности
в любых приложениях.
Чтобы лучше понять необходимость
кэш-памяти, давайте представим себе организацию
памяти компьютера в виде офиса. Оперативная
память будет являть собою шкаф с папками,
к которым периодически обращается бухгалтер,
чтобы извлечь большие блоки данных (то
есть папки). А стол, будет являться кэш-памятью.
Есть такие элементы, которые
размещены на столе бухгалтера, к которым
он обращается в течение часа по несколько
раз. Например, это могут быть номера телефонов,
какие-то примеры документов. Данные виды
информации находятся прямо на столе,
что, в свою очередь, увеличивает скорость
доступа к ним.
Точно так же, данные могут добавиться
из тех больших блоков данных (папок), на
стол, для быстрого использования, к примеру,
какой-либо документ. Когда этот документ
становится не нужным, его помещают назад
в шкаф (в оперативную память), тем самым
очищая стол (кэш-память) и освобождая
этот стол для новых документов, которые
будут использоваться в последующий отрезок
времени.
Также и с кэш-памятью, если
есть какие-то данные, к которым вероятнее
всего будет повторное обращение, то эти
данные из оперативной памяти, подгружаются
в кэш-память. Очень часто, это происходит
с совместной загрузкой тех данных, которые
вероятнее всего, будут использоваться
после текущих данных. То есть, здесь присутствует
наличие предположений о том, что же будет
использовано «после». Вот такие непростые
принципы функционирования.
Современные процессоры, оснащены
кэшем, который состоит, зачастую из 2 –ух
или 3-ёх уровней. Конечно же, бывают и исключения,
но зачастую это именно так.
В общем, могут быть такие уровни:
L1 (первый уровень), L2 (второй уровень),
L3 (третий уровень). Теперь немного подробнее
по каждому из них:
1. Кэш первого уровня (L1) –
наиболее быстрый уровень кэш-памяти,
который работает напрямую с ядром процессора,
благодаря этому плотному взаимодействию,
данный уровень обладает наименьшим временем
доступа и работает на частотах близких
процессору. Является буфером между процессором
и кэш-памятью второго уровня.
Мы будем рассматривать объёмы
на процессоре высокого уровня производительности
Intel Core i7-3770K. Данный процессор оснащен
4х32 Кб кэш-памяти первого уровня 4 x 32 КБ
= 128 Кб. (на каждое ядро по 32 КБ)
2. Кэш второго уровня (L2) –
второй уровень более масштабный, нежели
первый, но в результате, обладает меньшими
«скоростными характеристиками». Соответственно,
служит буфером между уровнем L1 и L3. Если
обратиться снова к нашему примеру Core
i7-3770 K, то здесь объём кэш-памяти L2 составляет
4х256 Кб = 1 Мб.
3. Кэш третьего
уровня (L3) – третий уровень, опять же,
более медленный, нежели два предыдущих.
Но всё равно он гораздо быстрее, нежели
оперативная память. Объём кэша L3 в i7-3770K
составляет 8 Мбайт. Если два предыдущих
уровня разделяются на каждое ядро, то
данный уровень является общим для всего
процессора. Показатель довольно солидный,
но не заоблачный. Так как, к примеру, у
процессоров Extreme-серии по типу i7-3960X, он
равен 15Мб, а у некоторых новых процессоров
Xeon, более 20.
Рассмотрим CISK и RISK архитектуру.
CISC — концепция проектирования процессоров, которая характеризуется
следующим набором свойств:
нефиксированное значение длины
команды;
арифметические действия кодируются
в одной команде;
небольшое число регистров,
каждый из которых выполняет строго определённую функцию.
Типичными представителями являются
процессоры на основе команд x86 (исключая
современные Intel Pentium 4, Pentium D, Core, AMD Athlon, Phenom, которые являются гибридными) и процессоры Motorola MC680x0.
Наиболее распространённая архитектура
современных настольных, серверных и мобильных
процессоров построена по архитектуре
Intel x86 (или х86-64 в случае 64-разрядных процессоров).
Формально, все х86-процессоры являлись
CISC-процессорами, однако новые процессоры,
начиная с Intel Pentium Pro, являются CISC-процессорами
с RISC-ядром. Они непосредственно перед
исполнением преобразуют CISC-инструкции
процессоров x86 в более простой набор внутренних инструкций
RISC.
В микропроцессор встраивается аппаратный
транслятор, превращающий команды x86 в
команды внутреннего RISC-процессора. При
этом одна команда x86 может порождать несколько
RISC-команд (в случае процессоров типа P6
— до четырёх RISC-команд в большинстве
случаев). Исполнение команд происходит
на суперскалярном конвейере одновременно по несколько
штук.
Это потребовалось для увеличения скорости
обработки CISC-команд, так как известно,
что любой CISC-процессор уступает RISC-процессорам
по количеству выполняемых операций в
секунду. В итоге, такой подход и позволил
поднять производительность CPU.
Недостатки CISK архитектуры:
высокая стоимость аппаратной
части;
сложности с распараллеливанием
вычислений.
Методика построения системы команд
CISC противоположна другой методике - RISC.
Различие этих концепций состоит в методах
программирования, а не в реальной архитектуре
процессора. Практически все современные
процессоры эмулируют наборы команд как
RISC так и CISC типа.
В рабочих станциях, серверах среднего
звена и персональных компьютерах используются
процессоры с CISC. Наиболее распространенная
архитектура команд процессоров мобильных
уcтройств - SOC и мэйнфреймов - RISC. В микроконтроллерах
различных устройств RISC используется
в подавляющем большинстве случаев.
RISC — архитектура процессора, в которой быстродействие
увеличивается за счёт упрощения инструкций,
чтобы их декодирование было более простым,
а время выполнения — короче. Первые RISC-процессоры
даже не имели инструкций умножения и
деления. Это также облегчает повышение тактовой
частоты и делает более эффективной суперскалярность (распараллеливание инструкций между
несколькими исполнительными блоками).