Calculon & Tharnell
Tharnell Tharnell
Я только что целый день возился со стареньким 8086, чтобы он не выкидывал коленца при бесконечном цикле, кажется, я кое-что заметил.
Calculon Calculon
Интересно, расскажи, что за закономерность ты заметил.
Tharnell Tharnell
Зациклилось в инструкции-кэше, из-за чего каждый раз приходилось перечитывать один и тот же код. Процессор продолжал проверять допустимость строки кэша, из-за чего постоянно переключался флаг, и после пары сотен циклов частота тактирования отклонялась на несколько килогерц. Я окрестил это «эффект кэш-подпрыгивания». Решение — сбросить строку кэша перед началом цикла или просто запускать это на машине с неактивной памятью, которая не обновляет свой кэш.
Calculon Calculon
Понятно. Задержки из-за согласования кэша могут вызывать незаметные сбои по времени. Очистка линии перед циклом – самое элегантное решение, но если нужно избежать накладных расходов на невалидацию, то использование ядра с мёртвым тактовым сигналом действительно полностью устранит это явление. Следи за состоянием флага; детерминированная перезагрузка перед каждым проходом тоже не даст возникнуть дрейфу.
Tharnell Tharnell
Конечно. Только убедись, что код сброса флага выполняется до того, как цикл дойдёт до этой строки кэша, иначе будет та же дрожь. Я временно отложу старую плату для повторного теста – никаких чисток кэша, просто жёсткий сброс. Если дрейф остановится – отлично. Если нет – будем отправлять всё в среду с застрявшим тактом.