[uquote="Bill_",url="/forum/viewtopic.php?p=4395011#p4395011"]Главное отличие Гарвардской архитектуры от фон-Неймановской - отсутствие принципа однородности памяти. Т.е. память для команд и память для данных в Гарвардской архитектуре разные.[/uquote] Да нет же! Отсутствие принципа однородности памяти заключается вовсе не в разделении на команды и данные, ибо данные от команд отличить невозможно в принципе. Любая команда, обращающаяся к данным, просто обязана содержать где-то в себе поле адреса, и этот адрес никак не является командой, а является уже данным для обращения к другому данному. Принципиально возможно разделить данные по критерию константы/переменные (то есть ПЗУ и ОЗУ), но отделить адреса от команд невозможно в принципе. Я уж не говорю о командах, содержащих в своём теле сразу данные. Команды переходов сюда же.
В МК это можно сделать достаточно просто: ПЗУ - для команд, ОЗУ для данных.
Весьма некорректно говорить о принципе, ссылаясь на конкретные примеры. В математике это называется индукцией. Она не всегда приводит к правильным результатам. Ваш печальный опыт работы с ПИКами лишь подтверждает это. Вы наткнулись на отсутствие нужной команды в системе команд конкретного МК и сделали вывод о принадлежности его к той или иной архитектуре. А это всего лишь система команд, но не архитектура.
[uquote="Jack_A",url="/forum/viewtopic.php?p=4394931#p4394931"]В Гарвардской принципиально невозможна ситуация, когда при ошибке в программе управление может быть передано в область данных, содержимое которой может быть воспринято как программный код с непредсказуемыми последствиями.[/uquote] Тёзка, как это невозможна?! Да легко! Если программа состоит из команд разной длины, то никто не мешает организовать переход на середину команды, и процессор будет вынужден воспринять эту середину (а там запросто может быть, например, адрес) как собственно команду. Ну и если программа занимает не весь объём памяти программ, то организовать переход в "чистую" область тоже не проблема. И это если мы ещё допускаем отсутствие использования памяти программ под хранение данных, ну то есть старательно пытаемся соблюдать принцип гарвардской архитектуры.
Чтобы застраховаться от указанной тобой ошибки, гарвардцы должны дополнить принцип разделения памяти ещё и принципом одинаковой длины всех команд. И всё равно даже это не защитит их от непреднамеренного уничтожения данных или от выполнения "чистого" куска памяти программ, а только исключит возможность выполнения команд с середины.
А вот принципиальное различие между этими архитектурами в том, что гарвардцы могут одновременно извлекать из одной памяти команду, а из другой - данные. Это увеличивает быстродействие, грубо говоря, вдвое. У фон Неймана извлечение команды и данных всегда будет последовательным, неодновременным.
Разделение же памяти на ПЗУ и ОЗУ, столь принципиальное для гарварда, никто не запрещает использовать и у фон Неймана (и на практике оно широко используется!), так что на этом изначально принципиальном моменте я бы сто лет спустя не стал бы заострять внимание.
Всего доброго.
Евгений.