Как я могу запрограммировать прерывание программного обеспечения на C? Я знаю, что нужно написать процедуру обслуживания прерываний, а затем прервать процессор так, чтобы подпрограмма могла быть вызвана, но я не знаю, как это сделать в C. Кроме того, я не знаю, как зарегистрировать эту процедуру с дескриптором прерывания Таблица. У меня есть процессор x86-64 (AMD Turion64 X2), и я использую gcc-компилятор. Любая помощь будет оценена по достоинству.Программное прерывание
ответ
sigaction
. См. man 2 sigaction
.
Чтобы вызвать прерывание, используйте raise
или kill
.
Я не думаю, что это именно то, о чем спрашивает ОП. –
Это не делает работу, она не делает реального прерывания. Если я не понял, я должен прервать процессор, а не приложение. – protector
Операционная система скрывает реальные прерывания от приложений. Насколько я знаю, это невозможно, если вы не работаете на уровне ядра (кольцо 0?)
Концепция прерываний не включена в спецификацию C (а также в некоторой степени зависит от процессора). Большинство компиляторов, включая GCC, позволяют писать встроенный ассемблерный код (или вы можете, конечно, связать файл, написанный в сборке, с вашей программой). Но большая проблема в том, что обычные операционные системы (особенно те, которые работают в 64-битном режиме) не позволят вам изменить таблицу прерываний. Я думаю, ваш лучший выбор - искать простую ОС с открытым исходным кодом и либо установить обработчик прерываний из обычной программы (если это позволяет ОС), либо добавить код в ядро. Причина, по которой вы не можете просто запустить небольшой фрагмент кода в симуляторе процессора (или виртуальной машине), состоит в том, что для работы в 64-разрядном режиме процессору требуется довольно немного настройки. И точные данные о том, как вы изменяете таблицу прерываний, зависят от этой настройки.
Написание ISR не является вопросом языка. да, вы можете это сделать в C.
Это вопрос понимания вашего ядра ОС, о процедурах, которые вызывают для регистрации вашего ISR на определенной строке прерывания с GIC или другими контроллерами прерываний и создания записи в таблице дескрипторов прерываний , Как с Linux на ARM .. Его request_irq() регистрирует ISR с контуром IRQ и делает запись в таблице IRQ_DESC.
Так что предлагаю сначала проверить структуру ISR вашей соответствующей ОС.
- 1. Программное прерывание сетевого трафика
- 2. Программное прерывание в freeRTOS
- 3. Программное обеспечение вызвало прерывание соединения: recv failed
- 4. jvisualvm: Программное обеспечение вызвало подключение прерывание: разъем Ошибка записи
- 5. java.net.SocketException: программное обеспечение вызвало прерывание соединения: ошибка записи сокета
- 6. Java ошибка - Программное обеспечение вызвало подключение прерывание: RECV не удалось
- 7. Причина «Программное обеспечение вызвало подключение прерывание: RECV не удалось»
- 8. Как исправить java.net.SocketException: Программное обеспечение вызвало прерывание соединения: recv failed
- 9. java SocketException: программное обеспечение вызвало прерывание соединения: recv failed
- 10. jcenter Программное обеспечение вызвало прерывание соединения: ошибка записи сокета
- 11. Android Bluetooth: программное обеспечение вызвало прерывание соединения IOException?
- 12. Официальные причины «Программное обеспечение вызвало подключение прерывание: Ошибка сокета записи»
- 13. Программное обеспечение Android вызвало прерывание соединения и задачу Async
- 14. java.net.SocketException: Программное обеспечение вызвало подключение прерывание: RECV не удалось
- 15. Программное обеспечение вызвало прерывание соединения: ошибка записи сокета
- 16. Прерывание/прерывание VBA-Loop
- 17. BB10 Webworks упаковка Прерывание (прерывание)
- 18. Исключение и Прерывание
- 19. Прерывание не прерывание потока, принудительное прекращение
- 20. Прерывание Queue.get
- 21. Прерывание IntentService
- 22. Прерывание winProgressbar
- 23. Прерывание функции
- 24. Прерывание анимации
- 25. Прерывание urllib.read
- 26. Прерывание animateWithDuration
- 27. Прерывание accept()
- 28. STM32L-Discovery EXTI Прерывание прерывания
- 29. Прерывание рекурсивное .AsParallel
- 30. Как распознается программное обеспечение прерывания?
То, о чем вы просите, как это сделать, это вещи, которые вы делаете при написании операционной системы, а не в приложении. Не могли бы вы объяснить немного больше о том, чего вы пытаетесь достичь? –
На самом деле, я работаю над заданием для своего преподавателя, мне нужно изучить инструкцию IRET, поэтому мне нужна процедура обслуживания прерываний. После того, как я его написал, я должен «играть» с шестнадцатеричным кодом исполняемого файла и изменять IRET (удалять его или что-то еще), чтобы увидеть, что происходит. – protector
Вы не можете писать ISR в C, это требует (некоторой) сборки. Вы не можете тестировать ISR в операционной системе с защищенным режимом. Изменение IRET приведет к краху кода. Поговорите со своим педагогом об этом задании. –