Amigo писал(а):
А я чего то не могу себе представить три таких экземпляра. Не поможите?
Отчего же не помочь хорошему человеку?
Представьте себе: три процессора, общие 3 банка по 1 ХБ памяти . Для процессоров определены «левый» и «правый» «друг». Вся память уложена в адресное пространство каждого из процессоров просто: 0X — свой банк, 1Х — память левого друга, 2Х — память правого друга. (Это легко — с точностью до арбитрирования доступа — делается на схемном уровне.) В каждый банк загружается одна и та же программа. Всё, полетели.
PAV писал(а):
Но все равно есть некоторая команда, которая выполняется самой первой (если действительно речь идет о линейных программах). Испортить ее - и все полетит в тартарары.
Отчасти — смотри ответ выше. От другой части — на самом деле, полная робастность системы обычно практически не интересна. Интересна после некоторой стадии инициализации, после того, как система выдала сигнал готовности. То есть, первая команда не рассматривается как точка уязвимости.
Иначе мы начинаем раскручивать необходимость самолечащего BIOS'а, за ним — микрокода, и т.п. На практике — не интересно: если мы не можем
включить прибор/систему, пусть катится в тартарары: может быть неисправно железо, и что тогда? Лучше уж и не пытаться пользоваться, искать какой-либо вариант выживания без него.
[offtop]
Дней минувших анекдот: показывал я заказчику систему в DOS, написанную на Clipper'е. Уж не знаю почему, но он решил придраться — смотрите, говорит, на Ctrl-D система вылетает. Действительно, по Ctrl-D система входит в отладчик (из которого легко выйти). Объясняем. Нет, говорит, убрать. Мы спрашиваем: а Ctrl-Alt-Del? Шумит: тоже убрать! Мы (уже иронически): а как насчет Reset? (Это уже не так-то просто: перехватить Reset в принципе можно, при этом сохраняется состояние памяти, но теряется (по-моему, годы прошли) указатель стека. Так что, попотеть пришлось бы изрядно). Заказчик (облизываясь): убрать! Мы: а если Вы вилку из розетки выдерните? Тут до заказчика начало доходить... Договорились, как же не договорится: ему нужны программы, нам — деньги.[/offtop]
~~~~~~
Немного наблюдений: как правило, ремонтируют данные. Т.е., каким-либо образом находят ошибки в данных и их исправляют. Программа, с точки зрения компа — это разновидность данных. Этой разновидности, в последнее время, уделяется всё больше внимания. Это и управление исполнением данных (и на процессорном уровне, и на уровне OS), и верификация байт-кода (по меньшей мере, популяризованное Java). Это первое, что делает любой компилятор: рассматривает текст (данные) как исполняемую программу. И 50+ лет назад никто не рассматривал самомодифицирующуюся программу как нечто экзотическое: System/360 имела поддержку самомодификации в архитектуре процессора. Времена меняются, и, тем не менее, самолечащая программа занимает свое место в одном ряду с программой, печатающей свой текст (упражнение для первокурсников), вирусами (программами, воспроизводящими свой код в других программах), червями (программами, передающими свой код по сети).