7. Как мой компьютер делает несколько дел сразу?

На самом деле это не так. В каждый момент времени компьютеры могут выполнять только одну программу или процесс (process). Но компьютеры могут переключаться между программами очень быстро и обманутые медленные люди начинают думать, что они делают несколько дел одновременно. Это называется разделение времени (timesharing).

Одна из забот ядра — управлять разделением времени. В ядре есть часть, называемая планировщик (scheduler), который хранит в себе информацию обо всех других процессах (не ядра) в вашем зоопарке. Каждую 1/60 долю секунды таймер системных часов обращается к ядру, генерируя прерывание. Планировщик останавливает любой выполняющийся в данный момент процесс, оставляет его в подвешенном состоянии, и передаёт управление другому процессу.

Может показаться, что 1/60 доля секунды это немного. Но для современных микропроцессоров этого достаточно, чтобы выполнить тысячи машинных инструкций, которые сделают большую часть работы. Таким образом, если у вас запущено много процессов, каждый из них может делать свою работу в отведённые для него отрезки времени.

На практике, программа может даже полностью не использовать целиком отведённый для неё отрезок времени. Если поступит запрос на прерывание от устройства ввода/вывода, ядро полностью остановит текущую программу, выполнит обработчик прерывания, и вернётся к выполнению прерванной задачи. Шквал прерываний с высоким приоритетом, называемый thrashing (дребезг), может нарушить нормальное выполнение процессов, к счастью, современные Unix привести к этому очень тяжело.

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

Поэтому операционная система может запросто поддерживать большое количество одновременно выполняющихся процессов, это называется «многозадачностью» («multitasking»). При создании операционных систем семейства Unix изначально в основу была положена многозадачность, и они очень хороши в этом, и гораздо эффективнее чем Windows или старые Mac OS, в которых идея худо-бедно втиснуть многозадачность пришла уже после разработки. Эффективная, надёжная многозадачность — это большая часть того, что делает Linux превосходной для работы в сети, решения задач коммуникации и Web-сервисов.