Разница между системным вызовом и прерыванием

Системный вызов против прерывания

Типичный процессор выполняет инструкции одну за другой. Но могут быть случаи, когда процессор вынужден временно останавливаться и удерживать текущую инструкцию и выполнять какую-то другую программу или сегмент кода (находясь в каком-то другом месте). После этого процессор возвращается к нормальному выполнению и продолжает с того места, на котором остановился. Системный вызов и прерывание - такие случаи. Системный вызов - это вызов подпрограммы, встроенной в систему. Прерывание - это прерывание управления программой, вызванное внешними аппаратными событиями..

Что такое системный вызов?

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

Что такое прерывание?

Во время обычного выполнения компьютерной программы могут быть события, которые могут привести к временной остановке ЦП. Такие события называются прерываниями. Прерывания могут быть вызваны программными или аппаратными сбоями. Аппаратные прерывания называются (просто) прерываниями, а программные прерывания называются исключениями или прерываниями. При возникновении прерывания (программного или аппаратного) управление передается в специальную подпрограмму, называемую ISR (подпрограмма обслуживания прерываний), которая может обрабатывать условия, возникающие из-за прерывания..

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

В чем разница между системным вызовом и прерыванием?

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