Системный вызов и прерывание
Типичный процессор выполняет инструкции одну за другой. Но могут быть случаи, когда процессор должен временно остановиться, удерживать текущую инструкцию и выполнять какую-то другую программу или сегмент кода (находящийся в другом месте). После этого процессор возвращается к обычному выполнению и продолжает с того места, на котором остановился. Системный вызов и прерывание являются такими случаями. Системный вызов - это вызов подпрограммы, встроенной в систему. Прерывание - это прерывание управления программой, вызванное внешними аппаратными событиями.
Что такое системный вызов?
Системные вызовы предоставляют программам, работающим на компьютере, интерфейс для взаимодействия с операционной системой. Когда программе необходимо запросить службу (для которой у нее самой нет разрешения) у ядра операционной системы, она использует системный вызов. Процессы уровня пользователя не имеют тех же разрешений, что и процессы, напрямую взаимодействующие с операционной системой. Например, для связи с внешним устройством ввода/вывода или для взаимодействия с любыми другими процессами программа должна использовать системные вызовы.
Что такое прерывание?
Во время нормального выполнения компьютерной программы могут возникнуть события, которые могут привести к временной остановке процессора. Такие события называются прерываниями. Прерывания могут быть вызваны как программными, так и аппаратными сбоями. Аппаратные прерывания называются (просто) прерываниями, а программные прерывания называются исключениями или ловушками. После возникновения прерывания (программного или аппаратного) управление передается специальной подпрограмме, называемой ISR (подпрограмма обслуживания прерываний), которая может обрабатывать условия, возникающие в результате прерывания.
Как упоминалось выше, термин «Прерывание» обычно зарезервирован для аппаратных прерываний. Это прерывания управления программой, вызванные внешними аппаратными событиями. Здесь внешний означает внешний по отношению к ЦП. Аппаратные прерывания обычно поступают из множества различных источников, таких как микросхема таймера, периферийные устройства (клавиатуры, мыши и т. д.), порты ввода-вывода (последовательные, параллельные и т. карта и др.). Это означает, что аппаратные прерывания почти никогда не происходят из-за какого-либо события, связанного с исполняемой программой. Например, такое событие, как нажатие клавиши на клавиатуре пользователем или истечение времени внутреннего аппаратного таймера, может вызвать прерывание такого типа и может сообщить ЦП, что определенное устройство требует некоторого внимания. В такой ситуации ЦП остановит все, что он делал (т.е. приостановит текущую программу), предоставит услугу, требуемую устройством, и вернется к нормальной программе.
В чем разница между системным вызовом и прерыванием?
Системный вызов - это вызов подпрограммы, встроенной в систему, а Прерывание - это событие, которое заставляет процессор временно приостановить текущее выполнение. Однако одно существенное отличие заключается в том, что системные вызовы синхронны, а прерывания - нет. Это означает, что системные вызовы происходят в фиксированное время (обычно определяемое программистом), но прерывания могут происходить в любое время из-за непредвиденного события, такого как нажатие клавиши на клавиатуре пользователем. Следовательно, всякий раз, когда происходит системный вызов, процессор должен помнить только, куда вернуться, но в случае прерывания процессор должен помнить и место, куда нужно вернуться, и состояние системы. В отличие от системного вызова прерывание обычно не имеет ничего общего с текущей программой.