«Зависший» невовремя компьютер в наши дни знаком абсолютно всем и каждому. Как это происходит?
Работу цифрового компьютера можно представить себе в виде огромного офисного здания с длинными коридорами и комнатами. По этим коридорам бегает (очень быстро!) человечек и выполняет довольно простые команды, которые лежат в конвертах на столах внутри каждой комнаты. Скажем, в комнате №1 человечек открывает конверт с командой «беги в комнату №18». В комнате №18 он находит команду «Возьми число из конверта на столе в комнате №51». А в комнате №51 – инструкцию «Сложи это число с числом из конверта в комнате №223, а результат положи в конверты в комнатах №8, №9 и №11» и так далее.
Иногда бывает очень сложно поверить, что «изнутри» работа компьютера состоит из настолько простых операций. Мы играем в сложные видеоигры с шикарной графикой, делаем на компьютерах рисунки, набираем текст, монтируем видео, пишем музыку – однако за всем этим на самом деле стоят миллиарды и триллионы элементарных действий с цифрами.
Представим теперь ситуацию, что такой вот человечек находит в комнате №1 команду «беги в комнату №5». А в комнате №5 – команду «беги в комнату №1». И опять, и снова... Что при этом произойдёт? Правильно, наш компьютер «зависнет»!
Само собой, существуют и другие варианты. Скажем, современные компьютеры способны одновременно выполнять множество программ – то есть «человечков» у нас может быть несколько десятков и даже сотен; по тем или иным причинам один из человечков вдруг начинает мешать другим или попадать не в те комнаты – и вот вам снова «зависший компьютер». Может случиться и «аппаратный сбой», например, перегрев процессора – образно выражаясь, наши человечки «перегреваются от жары» и «падают в обморок».
Сейчас это кажется чем-то невероятным, однако было время, когда компьютеры не зависали практически никогда.
Зависание было случаем экстренным, исключительно редким, настоящим ЧП, и вызвать его могла только ошибка программиста. Обычно такие ошибки тщательно устранялись ещё на этапе создания и отладки программы – а дальше компьютер уже работал без сбоев, «как часы». Надёжность электроники была невероятно высокой! Как же получилось, что современные компьютеры (быстрые, мощные, намного более совершенные!) превратились в регулярно «зависающие» или пугающие пользователей «синим экраном смерти» устройства?
Дело в том, что у старых компьютеров была совсем маленькая память, а все программы писались «на низком уровне», то есть программист работал с компьютерным «железом» напрямую. Это было сложно, это требовало огромных знаний – не только программирования, но и электроники! – однако надёжность компьютеров была выше любых похвал. Программисты даже соревновались – кто сумеет, скажем, написать некую программу как можно меньшего размера, с меньшим числом команд? Короче программа – проще контроль, быстрее отладка, надёжнее результат...
Однако шло время, память и быстродействие росли, программы становились всё сложнее. Работы одного программиста стало не хватать – и программисты стали использовать программные библиотеки, созданные другими программистами. Затем появились целые «программные среды», которые позволяли составлять сложные программы быстро – но при этом «отобрали» у программистов возможность контролировать все «железные» параметры компьютера самостоятельно... В итоге стало невероятно сложно отслеживать возможные ошибки – и компьютеры начали «виснуть» регулярно.
Когда мы восхищаемся достижениями космической техники 60-х – 70-х годов прошлого века, мы почему-то забываем, насколько простыми – а потому надёжными! – тогда были компьютеры и управляющие ими программы. Скажем, основная управляющая программа (Computer Command System, CCS) американского космического аппарата «Вояджер», отправленного к Юпитеру, Сатурну, Урану и Нептуну, работала с памятью объемом 70 килобайт и использовала 4 регистра (разрядностью 18, 12 и 4 бита – сравните с современными 64-битными системами!).
Два процессора работали с тактовой частотой 2.4 тысяч герц (даже в домашних компьютерах у современных процессоров тактовая частота измеряется миллиардами герц, если вы этого не знаете). Весь код CCS был написан на «древнем» и «примитивном» языке Фортран 5. Такую программу было можно: а) сделать работающей идеально, без ошибок; б) в случае аварии успешно «обновить» и «исправить ошибки» непосредственно с Земли, несмотря на расстояние в миллиарды километров. Запущенный в 1977 году аппарат прекрасно работает до сих пор, представляете? А сейчас учёные грустно шутят, что если бы на «Вояджере» была установлена современная операционная система типа «Windows » (или аналогичная), он не смог бы долететь даже до Луны...