В. Что мешает сборочной программе привести к сбою операционной системы?
А. Ничего
Однако многие очень умные программисты на протяжении многих лет очень старались сделать его все более и более сложным. К сожалению, для каждого умного программиста есть много, много других, которые между ними более креативны, более амбициозны, а иногда просто счастливее умных. Каждый раз, когда умный программист говорит, что никто не должен, не мог или не мог бы что-то сделать, кто-то там найдет способ сделать это. 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) напишите что-нибудь в этой позиции. Что возможно могло пойти не так? На самом деле, довольно много. Подумайте о том, что еще происходит на компьютере, пока вы делаете умные вещи. Если что-либо еще, сделанное кем-либо еще (включая саму операционную систему), каким-либо образом изменяет файл, над которым вы работаете, то эта действительно простая работа внезапно становится намного более сложной. Файл длиннее, файл короче. Файл больше не существует. Диск заполнен,