Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.63/40: Рейтинг темы: голосов - 40, средняя оценка - 4.63
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484

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

17.08.2019, 19:09. Показов 9281. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как вызвать программное прерывание? Читаю книгу по системному программированию и в ней сейчас "прохожу тему" системных вызовов и там есть описание как они вызываются и обрабатываются ,так вот
Если программе нужно сделать системный вызов то она вызывает программное прерывание int со значением 0x80 ,далее вызывается обработчик прерываний ,для 0x80 обработчик системных вызовов и далее уже обрабатывается вызов.
Каким образом вызывается(или создается) программное прерывание?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.08.2019, 19:09
Ответы с готовыми решениями:

Програмные требования
Допустим я создал в MS Visual Studio 2012 проект, зарелизил .exe, какие системные требовани будут у этой программы? Я собираюсь её...

програмные файлы, что делать?
при после компиляции программы, если удалить папку debug, то прога не запускается, выдает ошибку, как это исправить? #include...

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

25
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
17.08.2019, 19:21
Не совсем понял, о чем Вы, но если имеется ввиду исключение,
то делайте примерно так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void f()
{
   ...
   if(....)
     throw (значение переменной какого-нибудь типа);
   ....
   return; 
}
try
{
   .... 
  f();
  ....
}
catch(тип имя_переменной_такого-же_типа)
{
    cout<<"вызвано исключение "<<имя_переменной_такого_же_типа<<endl;
}
0
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
17.08.2019, 19:26  [ТС]
zss, программное прерывание вызывается с помощью исключений?

Добавлено через 1 минуту
Вот с stackoverflow - To execute a system call, user process will copy desired system call number to %eax and will execute 'int 0x80'.
Что значит will execute int 0x80?

Добавлено через 3 минуты
zss, или вот с той книги
On i386, for example, a user-space application exe‐
cutes a software interrupt instruction, int , with a value of 0x80 . This instruction causes
a switch into kernel space, the protected realm of the kernel, where the kernel executes
a software interrupt handler—and what is the handler for interrupt 0x80 ? None other
than the system call handler!

executes a software interrupt instruction, int , with a value of 0x80
0
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
17.08.2019, 19:37
Я не вдавался в подробности, как это делается на аппаратном уровне,
но, если это не то, то прошу прощения.
0
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
17.08.2019, 20:00  [ТС]
zss, как оказалось
INT is an assembly language instruction for x86 processors that generates a software interrupt. It takes the interrupt number formatted as a byte value.
С С++ это не связанно.
0
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
17.08.2019, 20:32
Я так и подумал, и, скорее всего, механизм исключений как раз и реализует такое прерывание.
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
18.08.2019, 09:02
Лучший ответ Сообщение было отмечено ReYalp как решение

Решение

Цитата Сообщение от ReYalp Посмотреть сообщение
Что значит will execute int 0x80?
Изнасилование трупа оно означает.
У процессора есть таблица обработчиков процессорных событий, они собственно прерываниями и называются. Задумывалась табличка под нужды процессора. Но хитрые разработчики Доисторической Операционной Системы (сокращенно DOS) подумали что и давайте мы в табличку и системные вызовы пристроим. Ну а че, там же 256 позиций, большую часть процессор не использует, чего добру пропадать. Для этого и была придумана команда int.

Со времен Доисторической Операционной Системы для int придумали множество альтернатив, начиная с "подключу системную DLL, экспортирую из нее Си-интерфейс и пусть у него о всех этих sysenter башка болит". Однако, некоторые некрофилы, оказывается. продолжали использовать этот их int.

Короче, закопайте обратно. Вам это с вероятностью 99% не потребуется.
Цитата Сообщение от zss Посмотреть сообщение
Я так и подумал, и, скорее всего, механизм исключений как раз и реализует такое прерывание.
Исключения никакого отношения к прерываниям не имеют.
2
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
18.08.2019, 11:57  [ТС]
Renji,
Цитата Сообщение от Renji Посмотреть сообщение
Короче, закопайте обратно. Вам это с вероятностью 99% не потребуется.
мне было интересно как оно работает и не больше,просто в книге с языком С автор пишет о execute int и для меня это было странно,
насколько я понимаю такое решение уже не используется в современных системах? Что-то читал о SYSENTER/SYSEXIT,Вы слышали об этом?

Добавлено через 2 минуты
точнее насколько я понял Вы слышали об этом,чем оно отличается от int?
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
18.08.2019, 12:06
Цитата Сообщение от ReYalp Посмотреть сообщение
мне было интересно как оно работает и не больше,просто в книге с языком С автор пишет о execute int и для меня это было странно,
насколько я понимаю такое решение уже не используется в современных системах?
Используется для совместимости, но устарело. На Хабре есть статья пробегающаяся по вариантам системных вызовов. Но за техническими подробностями вам в документацию на процессоры.
0
923 / 639 / 198
Регистрация: 08.09.2013
Сообщений: 1,693
18.08.2019, 14:15
Цитата Сообщение от Renji Посмотреть сообщение
Однако, некоторые некрофилы, оказывается. продолжали использовать этот их int.
Если речь о архитектуре i386, то sysenter появился только в Pentium II. Для более ранних CPU int 0x80 - практически единственная реализация системных вызовов для OS, требующих переключения контекста.
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
18.08.2019, 14:41
Цитата Сообщение от gng Посмотреть сообщение
Если речь о архитектуре i386, то sysenter появился только в Pentium II.
Этож больше двадцати лет тому назад было. А в книжках, оказывается, все еще про int пишут.
0
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
18.08.2019, 14:47  [ТС]
Renji, Роберт Лав Системное программирование, там как пример работы в i386 int приведён, а Вы не подскажете как это работало?
Каким образом именно после запуска int 0x80 срабатывало переключение в режим ядра? Никогда не имел дело напрямую с этим, очень интересно.
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
18.08.2019, 15:06
Цитата Сообщение от ReYalp Посмотреть сообщение
Renji, Роберт Лав Системное программирование, там как пример работы в i386 int приведён, а Вы не подскажете как это работало?
Каким образом именно после запуска int 0x80 срабатывало переключение в режим ядра?
У процессора в таблице прерываний написано, куда там управление перебросить надо. Вам туда писать не дадут, соответственно, произвольный код в режиме ядра вы выполнить не сможете. Только вызвать те функции, которые ОС милостиво разрешила вызывать.
0
923 / 639 / 198
Регистрация: 08.09.2013
Сообщений: 1,693
18.08.2019, 15:33
Цитата Сообщение от ReYalp Посмотреть сообщение
там как пример работы в i386 int приведён, а Вы не подскажете как это работало?
Это и сейчас работает - как на i386, так и на x86_64 архитектурах,
причем и на уровне ОС (только что в linux 4.19 64 бит вывел строку в терминал через int 80)
1
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
18.08.2019, 15:41  [ТС]
gng, меня интересует именно принцип работы,я не совсем понимаю как все происходит после запуска int 0x80 (к примеру),к примеру если взять текст с книги
On i386, for example, a user-space application exe‐
cutes a software interrupt instruction, int , with a value of 0x80 . This instruction causes
a switch into kernel space, the protected realm of the kernel, where the kernel executes
a software interrupt handler—and what is the handler for interrupt 0x80 ? None other
than the system call handler!

Запуск инструкции 0x80 влечет за собой переключение в пространство ядра,что это значит и как это происходит? Именно это переключение в пространство ядра,почему в него так легко можно переключится?
0
923 / 639 / 198
Регистрация: 08.09.2013
Сообщений: 1,693
18.08.2019, 15:44
Цитата Сообщение от ReYalp Посмотреть сообщение
Именно это переключение в пространство ядра,почему в него так легко можно переключится?
Так инструкция процессора int для этого и предназначена.
0
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
18.08.2019, 15:47  [ТС]
gng, Тоесть процессор "видит" что была вызвана int и потом вызывает обработчик int? Это если вкратце?
0
923 / 639 / 198
Регистрация: 08.09.2013
Сообщений: 1,693
18.08.2019, 15:51
Цитата Сообщение от ReYalp Посмотреть сообщение
Тоесть процессор "видит" что была вызвана int и потом вызывает обработчик int? Это если вкратце?
int - это и есть инструкция (команда) процессора, наряду с move, add ...
0
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
18.08.2019, 15:54  [ТС]
gng, мало знаком с ассемблером,в универе не приделил ему должного внимания и все что я знаю о move add это то что одна добавляет данные в регистр,другая убирает(вроде так,не уверен),а понятия даже не имею как они работают на уровне железа

Добавлено через 1 минуту
и насколько я помню там не move а mov?
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
18.08.2019, 15:57
Цитата Сообщение от ReYalp Посмотреть сообщение
Запуск инструкции 0x80 влечет за собой переключение в пространство ядра,что это значит и как это происходит? Именно это переключение в пространство ядра,почему в него так легко можно переключится?
Еще раз. У процессора есть таблица прерываний. В таблице прерываний написано что если произошло такое-то прерывание, надо пнуть такую-то функцию. И поднять ей приоритет выполнения до ядра. Конкретно вас никто и никуда не переключает. Переключают внесенную в табличку функцию.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.08.2019, 15:57
Помогаю со студенческими работами здесь

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

Прерывания asm
Не могу использовать прерывания(int) в встроенном ассемблере. Вылезает ошибка доступа. Помогите пожалуйста помогите.

Таблица векторов прерывания
Здравствуйте, на одном сайте видел следующую запись: static void (* near const _vect)(void) @0xFFC0 = { Dummy_ISR, //...

Условие прерывания цикла
Из-за чего происходит(условие прерывания) выход из цикла? Мои предположения что пока b не равно 0, то цикл выполняется, как только...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 31.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru