Як мій комп’ютер робить кілька речей одночасно?
Насправді, він і не робить. Комп’ютер, в один момент часу, може виконувати лише одне завдання (себто програму, процес). Попри те, він має здатність дуже швидко переключатись між різними завданнями, створюючи враження, ніби він дійсно робить кілка речей одночасно. Лише нові комп’ютери, обладнані кількома процесорами, або ж одним багатоядерним, можуть виконувати кілька процесів паралельно, але не без певних обмежень. Виконання кількох програм на одному (одноядерному) процесорі називається розподіленням часу^1.
Одним із завдань ядра є слідкування за цим розподіленням. У нього є частина, яка називається «планувальник». Він знає все про всі інші (тобто «не-ядрові») процеси у вашому комп’ютерному зоопарку. Насупне твердження потребує експертної оцінки чи перевірки на актуальність: Кожну 1/60 частку секунди спеціальний таймер викликає ядро, генеруючи перепин таймера. Ядро перериває поточний процес, ставить його на місце і запускає інший.
1/60 частка секунди може здатися вам дуже малим відрізком часу, але в сучасних мікропроцесорах цього часу цілком достатньо для того, щоб виконати кілька десятків, а то й сотень ТИСЯЧ операцій. Тож, навіть якщо ви маєте дуже багато запущених процесів, кожен з них може встигнути чимало в кожному з таких часових відрізків.
На практиці багато програм можуть не отримати їхнього шматка часу повністю. Якщо від якогось пристрою надходить перепин, ядро зупиняє активний процес, запускає підхоплювач цього перепину, а після виконання ним роботи продовжує виконання призупиненого процесу. Збурення високопріоритетних пепинів може ускладнити стабільну роботу; це хуліганство називається «трешинґ»^2 проте у сучасними *nix системах трешинґу досягнути дуже важко.
Насправді швидкість програм дуже рідко обмежується тією кількістю машинного часу (часу процесора), яку вони отримують (є всього кілька винятків з цього правила, як-от відтворення звуку чи моделювання тривимірної графіки). Значно частіше затримки викликаються, коли програма повинна чекати на дані, котрі знаходяться на диску чи десь в мережі.
Операційна система, котра може підтримувати виконання кількох завдань одночасно називається багатозадачною^3. Сімейство nix було від самого початку призначене для підтримки багатозадачності, і тому вони з цим досить ефективно справляються, значно краще, аніж Windows чи старі версії MacOS, у котрі мультизадачність вмонтовувалася значно пізніше і зроблено це було не так вдало, як у nix. Ефективна багатозадачність – це одна з вирішальних переваг, котра вивела Linux наперед у сфері мереж, веб-сервісів та комунікацій.