Аппаратное прерывание происходит на аппаратном уровне. Это могут быть такие вещи, как прерывания и остановки, когда процессор сам сохраняет свое состояние и ожидает ввода или выполняет что-то еще, что не обязательно было частью исходной программы (т. Е. Если вы делите на ноль, ваш процессор должен сделать то, что было не собирается делать во время нормального выполнения программы).
Возможно, более важно то, что аппаратное прерывание позволяет процессору не тратить время на так называемые циклы опроса. Представьте, нужно ли вам было видеть, нажимал ли пользователь клавишу. Есть два способа сделать это. Во-первых, очень часто проверяя и нажимая клавишу. Хотя это будет работать, это расточительно, так как в большинстве случаев проверка возвращается отрицательной. Прерывание позволяет самому нажатию клавиши изменять состояние программы, чтобы она получала "уведомление" при нажатии клавиши. Второй способ явно более эффективен во многих случаях.
Под программным прерыванием обычно подразумевается переключение контекста, и оно выполняется операционной системой. В некоторых случаях это означает не что иное, как обмен операционной системой, какая программа выполняется в данный момент (если на вашем компьютере запущено 50 процессов, если у вас нет 50 ядер / потоков, тот факт, что одновременное выполнение программ является иллюзией), так что что-то похожее на приведенный выше пример с клавиатурой, где он ожидает какого-то события (подробнее о программировании на основе событий здесь (из Википедии))
Важно отметить, что хотя во многих случаях программирование на основе прерываний является хорошей идеей, в приложениях, где существует много программ на основе прерываний, это хорошая идея, но если это происходит слишком часто, оно может быть менее эффективным и, возможно, даже привести к сбою системы. ,