В. Що зупиняє збір програми на збої операційної системи?
А. Нічого.
Однак багато дуже розумні програмісти протягом багатьох років дуже намагалися зробити це все складніше. На жаль, для кожного розумного програміста є багато, багато інших, хто між ними креативніший, амбітніший, а іноді і щасливіший, ніж розумний. Кожен раз, коли розумний програміст каже, що ніхто не повинен, хотів чи міг щось зробити, хтось там знайде спосіб це зробити. Microsoft Windows (як приклад) існує вже майже 35 років, і у нас все ще є BSoD (Blue Screens of Death), які є лише інструкціями, які розбивали операційну систему.
Почнемо з невеликої термінології. Все, що працює на комп’ютері, робить це в машинному коді. Біт, який читає натискання клавіш або рух вказівника миші, біт, який змінює колір пікселя на дисплеї або зчитує байт з файлу, і біт, який обчислює, чи потрапила ваша куля в бійці, або біт, який вирішує якщо заявку на вашу кредитну карту буде прийнято, всі виконуються як послідовність інструкцій машинного коду. Деякі завдання є настільки поширеними і виконуються так часто, що є сенс скласти інструкції, необхідні для їх виконання, і всі мають використовувати цю збірку. Купу цих завдань, які дозволяють або допомагають іншим користуватися комп'ютером, як правило, називають операційною системою, але між ними і будь-якими іншими програмами немає нічого принципово різного. Всі вони - лише послідовності інструкцій машинного коду.
Те, що робить операційні системи складнішими (і тому схильними до збоїв), полягає в тому, що вони повинні враховувати речі, про які зазвичай не потрібно думати. Візьмемо для прикладу найпростіші завдання. Я хочу написати повідомлення в кінець файлу. Мовою високого рівня ви б написали щось на зразок:
with open("myFile.txt", "w+") as f:
# do some really clever things
f.write("Goodbye cruel world!")
Дозволяє ігнорувати всі подробиці про те, як доступні та змінені фізичні стани або як вони інтерпретуються як біти та байти або як ці байти передаються в пам'ять і процесор, а також довіряють, що все, що обробляється програмами, які надає ОС за лаштунками. Давайте просто подумаємо про те, як ви додасте до кінця файлу. 1) Дізнайтеся, де знаходиться кінець файлу, 2) щось запишіть у цьому місці. Що може піти не так? Власне, досить багато. Подумайте, що ще відбувається на комп’ютері, поки ви робите розумні речі. Якщо що-небудь, що робиться кимось іншим (включаючи саму операційну систему), будь-яким чином змінює файл, над яким ви працюєте, то ця справді проста робота раптом стає набагато складнішою. Файл довший, файл - коротший. Файлу вже немає. Диск повний,