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