Аппаратные Прерывания IRQ




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

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

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

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

Прерывания имеют приоритеты: наибольший приоритет имеют прерывания с наименьшим номером. Если новый IRQ имеет более высокий приоритет, он может прервать обработку текущего прерывания.

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

Шина PCI изначально подразумевает возможность общего использования одного прерывания. Фактически, все устройства на шине PCI используют единое прерывание с индексом A – оно закреплено за самой шиной.

Конфликты, возникающие между прерываниями для ISA и PCI, нередко возникали в ранних поколениях ПК и доставляли немало проблем. Даже появление ОС Windows 95 с технологией Plug and Play не смогло устранить проблему конфликта прерываний.

Прерывания

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


IDT


Все адреса обработчиков прерываний хранятся в IDT. Это таблица, в которой хранятся 256 (можно больше или меньше, но б о льшие значения просто игнорируются) ячеек (векторы прерываний) с типом и атрибутами прерывания, одним просто нулевым значением, собственно адресом обработчика прерываний и селектором кода в GDT или LDT, который будет использовать данный вектор прерываний. Теперь немного о типе и атрибутах.
Тип прерывания и атрибуты занимают 8 бит. Первые 4 бита занимают тип:

· 0b0101: 32-битный гейт задачи, при появлении такого прерывания происходит хардверное переключение задачи (да-да, есть и такое, но его уже давно не используют)

· 0b0110: 16-битный гейт прерывания

· 0b0111: 16-битный гейт trap'a (я не знаю, как это перевести на русский язык, извините)

· 0b1110: 32-битный гейт прерывания

· 0b1111: 32-битный гейт trap'a


Далее идут атрибуты. Первым атрибутом является 1 бит, который задан в 0 для гейтов прерывания и в 1 для остальных. Далее идет уровень привилегий дескриптора — 2 бита, задающие минимальный уровень привилегий для вызова прерываний, и 1 бит, заданный в 0 для неиспользуемых прерываний.
Теперь о том, как процессор вызывает обработчики.
Допустим, что вы вызвали инструкцию int 0 в ассемблере. Это даст сигнал процессору, что надо вызвать прерывание 0, если это возможно. Вот последовательность действий, которые происходят при этом.

1. Поиск вектора №0 в IDT.

2. Сравнение уровня привилегий дескриптора и текущего уровня привилегий процессора.

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

4. Происходит сохранение адреса возвращения, регистра (E)FLAGS и другой информации.

5. Происходит переход на адрес, указанный в векторе №0 IDT.

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

 


Исключения


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

· Деление на ноль. Генерируется при, собственно, делении на ноль.

· Отладочное исключение. Генерироваться само не может, используется для, собственно, отладки.

· Немаскируемое прерывание. Генерируется при ошибках ОЗУ и невосстановимых ошибках «железа». Их невозможно замаскировать с помощью PIC (Programmable Interrupt Controller — программируемый контроллер прерываний), так как оно идет сразу в процессор, минуя PIC, но можно просто отключить.

· Точка останова. Тоже используется для отладки, потому что его опкод занимает всего 1 байт, в отличии от остальных INT N. Переназначалось DOS-отладчиками для своих целей.

· Переполнение. Генерируется инструкцией INTO, если в (E)FLAGS включен бит переполнения.

· Выход за пределы. Генерируется при ошибке инструкции BOUND.

· Недопустимый опкод. Генерируется при попытке выполнения недопустимого кода операции.

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

· Double fault. Сложно перевести название. Ошибка невосстановима, происходит при невозможности вызвать обработчик исключения.

· Переполнение сегмента сопроцессора. Больше не используется.

· Недопустимый TSS. Сегмент состояния задачи задан неправильно.

· Сегмент отсутствует. Возникает при попытке загрузки сегмента с битом Present == 0.

· Ошибка сегмента стека. Возникает при попытке загрузки сегмента с битом Present == 0 или переполнении стека.

· Общая ошибка защиты. Генерируется в очень большом числе случаев, среди них есть ошибка сегмента, попытка выполнения инструкции без необходимых прав, запись туда, куда не надо, попытка доступа к нулевому дескриптору GDT и многое другое.

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

· Ошибка с плавающей точкой. Происходит при выполнении инструкции FWAIT или WAIT с битом №5 в CR0 == 0.

· Ошибка при проверке на выравнивание. Происходит только в третьем кольце привилегий процессора, если эта ошибка, конечно, включена.

· Ошибка при проверке машины. Генерируется процессором при обнаружении «железных» ошибок.

· Исключение с плавающей точкой SIMD. Генерируется при ошибках с 128-битными числами с плавающей точкой.

· Ошибка виртуализации.

· Ошибка безопасности.

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

 


IRQ


Существует особый тип прерываний — IRQ (Interrupt ReQuest), или же аппаратные прерывания, но я буду их для краткости называть просто IRQ. Технически они почти не отличаются от любых других прерываний, но генерируются не процессором или самим кодом, а устройствами, подключенными к компьютеру. К примеру, IRQ №0 генерируется PIT (таймер с программируемым интервалом), IRQ 1 генерируется при нажатии клавиши на клавиатуре, а IRQ 12 — при действии с PS/2-мышью.


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


Еще есть так называемые программные прерывания. Их, как понятно из названия, программа должна вызывать сама — никто их за нее не вызывает. Таковыми являются, например, системные вызовы в некоторых системах. В Linux, например, они висят на векторе 0x80. Во многих хобби-ОС они тоже висят на векторе 0x80. Теперь немного отсебятины — я думаю, что сисвызовы сделаны в виде прерываний из-за того, что 1) их так очень легко вызывать, 2) их можно вызвать из любого кода, работающего в ОС — IDT-то одна на всю систему.

 

 


Средства прерывания работы процессора внешними устройствами освобождают его от периодической проверки необходимости обслуживания устройств (циклического опроса). Микропроцессор имеет два входа, по которым внешние устройства могут привлечь его внимание: вход NMI немаскируемого прерывания и вход INTR маскируемого прерывания.

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

Если катастрофических событий нет, внешнее устройство может прервать процессор по входу INTR. Процессор может игнорировать этот сигнал. Это зависит от состояния флага IF: если IF = 0 (процессор не реагирует на прерывания), если IF = 1 - реагирует.

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

При поступлении сигнала INTR (IF = 1) процессор завершает текущую команду и готовится выполнить процедуру прерывания. Прежде всего он сохраняет в стеке текущее состояние регистра флагов и регистров CS и IP. Затем процессор получает от внешнего устройства номер прерывания и помещает в IP и CS вектор прерывания по соответствующему номеру. Когда приходит прерывание по входу NMI (независимо от флага IF), процессор производит аналогичные действия, за исключением получения номера прерывания, так как причина прерывания по входу NMI всегда одна. Для процедуры прерывания NMI отведён элемент с номером 2 в таблице прерываний.

Выше речь шла о прерываниях, формируемых внешними устройствами, так называемых внешних прерываниях. Но процессор сам генерирует внутренние прерывания, если при выполнении некоторых команд происходит что-то неожиданное. Это так называемые особые случаи, которые свидетельствуют о серьёзной ошибке. Первый 32 элемента в таблице прерываний зарезервированы для внутренних прерываний и прерывания NMI. Процессор 8086 и все последующие в реальном режиме работы генерирует только первые 5 номеров прерываний. Процедура прерывания заканчивается выполнением команды IRET (возврат из прерывания), которая восстанавливает из стека содержимое IP, CS и флагов.

Некоторые процедуры прерываний удобно вызывать и тогда, когда прерываний нет (например функции DOS или BIOS). Поэтому было бы хорошо иметь команду, которая делала бы то, что делает процессор при распознавании прерываний, за исключением одного - номер прерывания содержится в команде, а не выдаётся внешним устройством. Такой командой и является команда INT n, где n - целое число от 0 до 255. Перечень команд прерываний приведен в таблице 2.17.

Таблица 2.17. Перечень команд прерываний.

Мнемоника Описание
INT n Прерывание типа n (длина 2 байта)
INT Прерывание типа 3 (один байт) применяется в отладчиках для реализации останова)
INTO (IF = 1, OF = 1) Прерывание по переполнению (если OF=1) генерирует прерывание №4
IRET Возврат из прерывания
HLT Останов. Прекращает все действия процессора, пока не будет произведен аппаратный сброс или не придет внешнее прерывание (NMI всегда выводит из состояния прерывания, остальные- только если IF=1)  

При установке точки останова в отладчике, требуется поместить в точку останова какую-либо команду, которая передала бы управление отладчику. Для этой цели подошла команда INT, которая сохраняет регистры CS и IP. Так как тип прерывания для этой цели не надо передавать, то используют однобайтную форму команды. Отладчик использует команду INT для генерирования прерывания типа 3 при отладке программ, следовательно в наших программах не следует использовать это прерывание.

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

2.5.7.Новые команды микропроцессора 80486

В системе команд микропроцессора 80486 появились новые команды BSWAP, XADD, CMPXCHG.

1. BSWAP reg 32- обмен байт в операнде.

(0¸7) разряды «(24¸31) разрядами,

(8¸15) разряды «(16¸23) разрядами.

Используется для преобразования форматов данных с различной адресацией: с младшей стороны и со старшей стороны.

2. XADD mem 8/ 16/ 32(приемник), reg 8/ 16/ 32(источник)

источник= приемнику,

приемник= приемник + источник

3. CMPXCHG mem 8/ 16/ 32 (приемник), reg AL/ AX/ EAX (ист.)

Если приемник= АХ, то приемник= источнику, иначе АХ=приемнику и ZF=0. Используется для проверки и модификации семафоров.

 

 

https://support.microsoft.com/ru-ru/help/323423/how-to-use-device-manager-to-configure-devices-in-windows-server-2003

 

Системные платы Адреса портов ввода-вывода Подробности Родительская категория: Системные платы Категория: Системные ресурсы Порты ввода-вывода позволяют установить связь между устройствами и программным обеспечением в компьютере. Если вы хотите отправить какую-либо информацию в последовательный порт, то должны знать, какой порт ввода-вывода (радиоканал) он прослушивает. Аналогично, если нужно получить данные из последовательного порта, следует прослушивать тот адрес, на который они передаются. В отличие от прерываний IRQ и каналов прямого доступа к памяти, в персональных компьютерах существует великое множество портов ввода-вывода. Существует 65535 портов, пронумерованных от 0000h до FFFFh, и это, пожалуй, самый удивительный артефакт в процессоре Intel. Хотя многие устройства используют до восьми портов, все равно их доступного количества более чем достаточно. Самая большая проблема состоит в том, чтобы двум устройствам случайно не назначить один и тот же порт. Современные системы, поддерживающие спецификацию Plug and Play, автоматически разрешают любые конфликты из-за портов, выбирая альтернативные порты для одного из конфликтующих устройств. Хотя порты ввода-вывода обозначаются шестнадцатеричными адресами, подобными адресам памяти, они не являются памятью, они — порты. Различие состоит в том, что данные, отправленные по адресу памяти 1000h, будут сохранены в модуле памяти SIMM или DIMM. Если вы отсылаете данные по адресу 1000h порта ввода-вывода, то они попадают на этот “канал” шины, и любое устройство, прослушивающее канал, может их принять. Если никакое устройство не прослушивает этот адрес порта, то данные достигнут конца шины и будут поглощены ее нагрузочными резисторами. Специальные программы — драйверы — взаимодействуют с устройствами, используя различные адреса портов. Драйвер должен знать, какие порты использует устройство, чтобы работать с ним. Обычно это не составляет проблемы, поскольку и драйвер, и устройство, как правило, поставляются одним и тем же производителем. Системная плата и набор микросхем системной логики обычно используют адреса порто ввода-вывода от 0h до FFh, а все другие устройства — от 100h до FFFFh. Чтобы выяснить, какие адреса порта используются в конкретной системной плате, загляните в прилагаемую к ней документацию или же воспользуйтесь диспетчером устройств Windows. Устройства на шине, как правило, используют адреса, начиная с 100h.

Источник: https://perscom.ru/system-plates/49-sistemnie-resursi/211-2012-02-22-21-13-02

 

 

 

 

Чтобы точно знать, какие адреса используют ваши устройства, настоятельно рекомендую обратиться к документации или просмотреть информацию об устройстве в диспетчере устройств Windows. Практически все устройства на системных шинах используют адреса портов вводавывода. Большинство из них стандартизировано, поэтому, как правило, каких-либо конфликтов или проблем с адресами портов для этих устройств не возникает.

Источник: https://perscom.ru/system-plates/49-sistemnie-resursi/211-2012-02-22-21-13-02

 

Список портов TCP и UDP

Толкование

·

·

·

·

·

·

·

·



Список портов TCP и UDP

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

В данной статье приведён список портов TCP и UDP, которые используются в различных программах.

В компьютерных сетях из стека сетевых протоколов транспортного уровня чаще всего используются протоколыTCP и UDP, а также другие протоколы, которые используют идентификацию структуры данных спредставлением конечных точек (хостов) в виде числовой последовательности. Такие конечные точкиназываются портами и идентифицируются согласно номерам портов. Номера портов, используемые дляконкретных специфических целей, выделяет и регистрирует IANA (Internet Assigned Numbers Authority).



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-11-11 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: