bash.im ithappens.me zadolba.li
12571

Верхи хотят, низы не могут

Когда-то компания «Интел» создала первый процессор 8086. У него был свой, отдельный набор команд, несколько регистров, сегментная адресация памяти и своя тактовая частота.

Работы над процессорами продолжались, и вот появились 80186, 80286, 80386, 80486, и наконец — Пентиум с его суперскалярной архитектурой.

Росло число и разрядность регистров, увеличивалось количество команд процессора, добавлялись новые режимы работы, с плоской 32-разрядной адресацией вместо устаревшей сегментной.

Но и на этом развитие не остановилось: появилось расширение команд процессора MMX — по этому поводу даже крутили по ТВ рекламные ролики, — затем появились SSE, SSE2, SSE3, 3DNow, и ещё, и ещё, и ещё; регистры стали 64-битными, появились многоядерные модели.

Каждый новый набор команд позволял какой-то тип операций выполнять чуть быстрее — достаточно было пересобрать программу на новой версии компилятора с поддержкой нового набора команд процессора.

Вместе с тем программам требовалась обратная совместимость: в идеале любая, даже новейшая программа должна бы уметь работать на самом старом процессоре. Но чудес не бывает: если программе нужен расширенный режим работы с 32-битной адресацией, её никак не заставишь работать на устаревшем 16-битном процессоре, разве что пересобрать, да и то не всегда это возможно.

То же самое относится к наборам команд процессора: если используется SSE — ну никак оно не заработает на железе, где SSE нет, разве что за счёт отказа от использования новых возможностей.

Создатели программ и операционных систем по-разному решали эту проблему. Некоторые ОС, например, категорически отказываются работать, если процессор не соответствует их высоким требованиям к нему, в то время как другие более толерантны к устаревшим процессорам.

В этом смысле Линукс всегда старался быть по мере возможности современным, но в то же время не оставлять за бортом и владельцев всякого хлама, ведь не каждый пользователь имеет самое новое оборудование. Но целенаправленный отказ от новых возможностей — это не только поддержка владельцев хлама, но и ущемление интересов владельцев более новых систем, ведь выходит, что возможности их оборудования просто не задействованы. Поэтому рано или поздно наступает момент, когда обновлённая программа может и не заработать на откровенно устаревшем процессоре, система команд которого уже не отвечает среднестатистическим современным требованиям. И тогда после обновления ядра пользователя ждёт эпик фейл, он же kernel panic. А виноват, конечно же, «кривой Линукс».

И как другие люди ухитряются не встречать этого загадочного «паника»?