Что касается первого вопроса:
Простого способа думать об этом ...
вашего компьютера имеет множество компонентов. CPU, жесткий диск, сетевую карту, звуковую карту, gpu и т. Д. Все они работают параллельно и независимо друг от друга. Они также обычно медленнее, чем процессор.
Это означает, что всякий раз, когда процесс совершает вызов, который по линии линии (на стороне ОС) заканчивает связь с внешним устройством, нет смысла, чтобы ОС застревала в ожидании результата, поскольку время, которое требуется для этого операция для завершения - это, вероятно, вечность (в точке зрения процессора).
Таким образом, ОС запускает любую связь, запрашиваемую процессом (вызывают ее запрос ввода-вывода), помещает процесс в ожидании ввода-вывода и переключает выполнение на другой процесс, поэтому процессор может сделать что-то полезное вместо того, чтобы сидеть в заблокированном ожидании ввода-вывода запрос на заполнение.
Когда внешнее устройство завершает выполнение любой операции, оно генерирует прерывание, поэтому операционная система информируется о том, что работа выполнена, и затем она может снова заблокировать процесс блокировки.
Это, конечно, очень упрощенный вид, но это основная идея. Это позволяет ЦП делать полезную работу, а не ждать завершения запросов ввода-вывода.
Что касается второго вопроса:
Это сложно, даже для отдельных машин процессора, и зависит от того, как операционная система обрабатывает прерывания.
Для простоты кода простая ОС может, например, всякий раз, когда прерывание выполняет процесс прерывания за один раз, затем возобновляет любой процесс, который он считает подходящим, когда обработка прерываний выполняется. Поэтому в этом случае никакой другой процесс не будет выполняться до тех пор, пока обработка прерываний не будет завершена.
На практике все становится несколько более сложным с точки зрения производительности и латентности.
Если вы считаете, что срок службы прерывания является просто еще одной задачей для CPU (с момента начала прерывания до того, как ОС считает, что обработка завершена), вы можете эффективно кодировать обработку прерываний, чтобы работать параллельно с другими вещами.
Просто подумайте о прерывании в качестве уведомления для ОС, чтобы запустить другую задачу (обработку прерывания). Он захватывает любой контекст, который ему нужен, в момент начала прерывания, а затем обрабатывает эту задачу параллельно с другими процессами.
звучит так, как будто вам нужна помощь в выполнении домашней работы! – Shaunak
@ Shaunak-Это не домашнее задание, –