Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Ошибки процессоров Pentium




Процессоры Pentium, как и любые сложные изделия, кроме штатных свойств имеют и недокументированные возможности, и, к сожалению, ошибки или опе­чатки (Erratum). Первая из серьезных обнаруженных ошибок — математичес­кая — относилась к FPU процессора Pentium и известна под названием «floating point flaw». Эта ошибка выражалась в потере точности при выполнении деления с некоторыми сочетаниями операндов. Ошибка могла появляться от 4 до 19 разряда после десятичной точки. С начала 1995 года процессоры выпускались уже без ошибок. Статистические исследования показывают, что ошибка может проявляться раз в несколько лет. Тем не менее фирма Intel до сих пор обеспе­чивает бесплатную замену уже проданных процессоров с ошибкой на исправ­ленные версии, но без апгрейда на более современные модели. Процессоры с ошибкой могут быть выявлены с помощью утилиты CPUIDF.EXE, которую можно получить на Web-сервере компании.

Весной 1997 года в процессорах Pentium Pro и Pentium II была обнаружена ошибка формирования флагов FPU при преобразовании форматов больших от­рицательных чисел, в результате чего поведение FPU в некоторых случаях не подчиняется требованиям стандарта IEEE для обработки чисел с плавающей точкой. Этой ошибке, называемой в прессе «Dan-0411» по имени и дате ее первооткрывателя, фирма Intel дала официальное название «Flag Erratum».

Осенью 1997 года обнаружилась более серьезная ошибка, которая поначалу поставила под сомнение возможность применения процессоров Pentium (вклю­чая ММХ) в многопользовательских системах. Суть ошибки заключается в том, что любая задача может остановить процессор, независимо от уровня привиле­гий, что противоречит принципам защиты, провозглашенным для 32-разрядных процессоров. Штатным образом процессор останавливается по инструкции HALT, которая в защищенном режиме является привилегированной и не исполняется на уровне пользователя. Однако к блокировке процессора, оказывается, приво­дит и исполнение ошибочной инструкции, заданной последовательностью кодов F0 0F С7 С8. Этот код расшифровывается как инструкция LOCK: CMPXCHG8B ЕАХ (некорректная, поскольку пытается сравнить 32-битный операнд с 64-битным), доступная на любом уровне привилегий. Последний байт инструкции может принимать любое значение в диапазоне F8-FF, что будет соответствовать другим регистрам. Вместо вырабатывания исключения неверного кода инструк­ции процессор блокируется. Таким образом, любой пользователь многопользова­тельской системы может умышленно остановить компьютер-сервер. Эта ошибка, названная «Pentium FO bug», имеется во всех процессорах Pentium и Pentium ММХ. В процессорах Pentium Pro и Pentium II ее нет, как нет и в процессорах 5-6 поколений от AMD и Cyrix. Впоследствии оказалось, что все не так трагично. Если обработчик исключения находится в первичном кэше, блокировки не проис­ходит. В принципе, обработчик можно навечно «поселить» в кэше — для этого после обращения к его коду, приводящему к его считыванию из ОЗУ в кэш, нужно установить бит CD (Cache Disable) в управляющем регистре CRO. Но при этом кэш превратится в «замороженную» область внутренней статической памяти и, естественно, по прямому назначению (кэшированию текущих обращений) работать не будет. Как это скажется на производительности компьютера, догадаться не сложно (можно ради интереса поработать на компьютере, у которого в BIOS Setup запрещена работа первичного кэша). Есть и другой способ «лечения» ошибки, который и применяют в многопользовательских ОС, — в дескрипторе обработчика исключений установить флаг недействительности страницы памя­ти, что приводит к двойному исключению, которое, к счастью, обрабатывается без блокировки. Однако такой обход ошибки может вызвать сложности при работе с отладчиками.

Поделиться:





Читайте также:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...