16-разрядные процессоры

   В июне 1978 г. корпорация Intel выпустила процессор 8086, а ровно через год – 8088, которые и положили начало эры персональных компьютеров в современном понимании этого термина.
   Процессоры 8086/8088 (рис. 2.5) стали сердцем компьютеров – сначала IBM PC, а потом и IBM PC XT. Их конкуренты, а их было немало, просто по экономическим причинам оказались не в состоянии конкурировать с Intel, IBM и фирмами Юго-Восточной Азии, занимавшимися клонированием популярных изделий.
   Рис. 2.5. Процессор 8086/8088
 
   На момент выпуска процессора 8086 его тактовая частота составляла 5 МГц, скорость выполнения операций достигала 0,33 млн. операций в секунду. Далее были выпущены более быстрые процессоры с тактовой частотой 8 и 10 МГц, у которых производительность возросла соответственно до 0,66 и 0,75 млн. операций в секунду.
   Количество транзисторов на кристалле процессора 8086/88 достигло 29 000, что просто поражало воображение. В производстве использовалась технология 3 мкм, проводники такой толщины уже не видны невооруженным глазом.
   Еще большее изумление вызвала возможность адресовать 1 Мбайт оперативной памяти, используя шестнадцатиразрядную шину данных. Фактически, такими возможностями тогда обладали большие вычислительные машины. В то время, например, размер оперативной памяти в 64 Кбайт казался верхом совершенства.
   Можно сказать, что появление первого шестнадцатиразрядного процессора, который позволял использовать столько оперативной памяти, хотя это и было преждевременно, открывало перед программистами колоссальное поле деятельности. То есть в руки рядовых программистов попадал компьютер, не уступавший по своим возможностям труднодоступным машинам вычислительных центров.
   Понимая, что шестнадцатиразрядная шина появилась преждевременно, т. к. требовала удвоенного количества интерфейсных микросхем, в июне 1979 г. корпорация Intel объявила о выпуске процессора 8088. Разница между ним и процессором 8086 состояла в том, что разрядность шины данных была сокращена до 8 битов. Это позволяло сохранять некоторую преемственность между конструкциями на восьмиразрядных процессорах и первыми процессорами линейки х86. Естественно, уменьшалась цена компьютеров, собранных на процессоре 8088, что, в общем-то, и определило успех компьютера IBM PC и его клонов.
   Процессор 8088 выпускался с тактовыми частотами 5 МГц (0,33 млн. операций в секунду) и 8 МГц (0,75 млн. операций в секунду). Все остальные параметры соответствовали его предшественнику.
   По мере снижения стоимости интерфейсных микросхем и увеличения их сложности процессор 8088 уступил место в компьютерах своему предку.
Процессор 80186
   Для применения в различных контроллерах корпорацией Intel на базе процессора 8086/8088 в 1982 г. были выпущены процессоры 80186/80188, у которых на одном кристалле находился не только центральный процессор, но и периферийные устройства. Так как предполагалось использовать эти микропроцессоры в качестве встроенных интеллектуальных устройств для самых различных промышленных систем, то интегрированные в него периферийные устройства имели интерфейсы, не совместимые со спецификацией IBM PC.
   На кристалле процессора 80186/80188 удалось расположить контроллеры прерываний и прямого доступа к памяти, трехканальный таймер и генератор синхроимпульсов. Процессоры 80C186/80C188, изготовленные по более современной технологии, имели не только пониженную потребляемую мощность, но и систему управления энергопотреблением.
   Присутствие на одном кристалле всех необходимых периферийных устройств позволило использовать эти микропроцессоры для управления самыми разнообразными устройствами. Например, модемы фирмы U.S. Robotics не в малой степени обязаны своей популярностью именно применением в них микропроцессоров 80186/80188. Это позволило не только удешевить конструкцию и повысить надежность работы сложного электронного устройства, но и очень быстро, за счет смены микропрограммы, выпускать на рынок новые типы модемов.
Процессор 80286
   Второе поколение 16-битных процессоров в линейке x86 – это 80286, о котором объявили в феврале 1982 г. Для него впервые стало использоваться сокращенное обозначение – 286-й процессор (подобная практика использовалась потом и для процессоров 80386 и 80486, кстати, Pentium – это тот же 586).
   Хотя процессор 80286 получился со многими недоработками и в большинстве случаев использовался как быстрый 8086, его появление обеспечило победу IBM PC совместимым компьютерам и операционной системе MS-DOS в конкурентной борьбе с другими фирмами.
   Процессор 80286 (рис. 2.6) выпускался с тактовыми частотами 6, 10 и 12 МГц, что составляло скорость выполнения 0,9, 1,5 и 2,66 млн. операций в секунду. Количество транзисторов превысило 134 000 (использовалась технология 1,5 мкм).
   Рис. 2.6. Процессор 80286
 
   Основная задача, которую хотели решить инженеры корпорации Intel,  – это создание процессора для многопользовательских и многозадачных систем. Для этого в процессор была встроена четырехуровневая система защиты, механизм переключения задач и поддержка виртуальной памяти. Режим работы с такими возможностями был назван защищенным режимом виртуальной адресации (Protected Virtual Address Mode), сегодня для него используется термин – «защищенный режим» (Protected Mode). В этом режиме работают все многозадачные операционные системы, в том числе и Windows.
   Суть этого режима вот в чем. Многопользовательский режим в однопроцессорных компьютерах реализуется на принципе выделения выполняемым задачам (программам) небольших квантов времени, в течение которых все разрешенные для данной задачи ресурсы процессора и внешних устройств принадлежат конкретной задаче. При переключении по сигналу таймера на другую задачу все текущие данные, относящиеся к первой задаче, сохраняются в специально выделенной памяти (обычно это стек), а процессор начинает выполнять инструкции другой программы. Когда приходит время выполнения первой задачи, сохраненные ранее ее текущие данные загружаются из стека, что создает видимость непрерывного выполнения задачи. Процессор продолжает выполнять прерванную задачу с того момента, когда она была отложена.
   Чтобы прерванная задача могла без проблем продолжать свою работу, требуется защитить данные, которые она использует, от воздействия любых других задач. В первую очередь должны быть защищены блоки оперативной памяти, с которыми работает данная программа (отсюда и пошло название режима). Во-вторых, надо присвоить каждой задаче определенный уровень привилегий (возможность использовать те или иные ресурсы компьютера).
   В защищенном режиме 24-разрядная шина адреса позволила программисту использовать 16 Мбайт памяти, а при включении механизма страничной адресации отображать до 1 Гбайт так называемой виртуальной памяти.
   Для использования новых возможностей была расширена система команд 8086, что дало толчок началу процесса "простого" добавления новых команд к старым.
   Если до появления чипа 80286 любая ошибка в конструкции какого-либо микропроцессора приводила к его провалу на рынке, то, начиная с этого процессора корпорации Intel, несуразицы в конструкции стали использоваться программистами и разработчиками. А самое удивительное, в последующих версиях процессоров корпорации Intel и их аналогов от других производителей такие просчеты закреплялись как стандарт de-facto. Только грубые (очевидные) ошибки исправлялись, и корпорация брала на себя обязательства по замене дефектных чипов.
   Вот тут можно сказать, что случайно допущенные ошибки в архитектуре этого микропроцессора дали возможность программистам принимать весьма оригинальные решения при создании программного обеспечения. Поэтому, в дальнейшем, новые процессоры корпорации Intel и все IBM PC совместимые компьютеры вынуждены были поддерживать проблемы архитектуры 80286.
   Наиболее очевидная, причем грубая ошибка – это неправильная адресация памяти в реальном режиме. Но она оказалась настолько "удачной", что ее восторженно приняли программисты, которым уже не хватало ресурсов памяти стандартной архитектуры 8086. А вот защищенный режим адресации памяти в 286 процессоре остался, в большинстве случаев, не востребованным – слишком много оказалось технических проблем, а, точнее, недоработок, которые мешали использовать такую возможность.
   В заключение следует обратить внимание, что два процессора из линейки х86 – 8088 и 80386SX, являются переходными моделями, т. к. были разработаны в целях удешевления персональных компьютеров, собранных на их основе. Оба микропроцессора были как бы шагом назад по сравнению с базовым аналогом. Сохраняя все программные возможности, они имели укороченную в два раза шину данных. Такое техническое решение позволяло удешевить производство персональных компьютеров – 8088 имел 8-разрядную шину данных, сохраняя 16-разрядную архитектуру, a 80386SX для совместимости с 80286, которой на самом деле не оказалось, получил 16-разрядную шину данных.
   Так как выпуск 16-разрядных процессоров был пионерской разработкой, которая внесла в компьютерный мир много нового, то именно архитектуре этих процессоров стали подражать большинство разработчиков микросхем. Теперь можно сказать, что процессор 8086 стал родоначальником семейства процессоров х86, которое явилось эталоном для подражания.
   К сожалению, новые идеи и конструкции всегда несут в себе ошибки и проблемы. Не стал исключением и 8086, который как бы заложил мину замедленного действия для своих потомков.
   В первую очередь – сумбурную, сложную и малопонятную систему команд, которая сегодня заставляет использовать в современном процессоре х86 две системы команд – одну для ядра, которое выполняет основные операции в процессоре, а вторую для общения с внешним миром. Отсюда необходимость специальных блоков внутри процессоров для перевода команд из одной системы в другую.
   Второй серьезный недостаток – малое количество оперативных регистров – ячеек внутри процессора, которые служат для запоминания команд и операндов. Для текстового режима, в котором работали в то время все компьютеры, регистров и их размерности хватало, но в графическом режиме такая архитектура требует много лишних команд для пересылки данных из регистров в оперативную память и обратно.
   Если проанализировать дальнейшее развитие семейства х86, то основные направления совершенствования, в большинстве случаев, касались преодоления проблем архитектуры 8086. Сегодня можно констатировать, что современные Pentium обладают самой сложной, не поддающейся логическому объяснению системой команд. Правда, в процессоре Pentium 4 наметились новые подходы решения накопившихся проблем.

32-разрядные процессоры

   Сегодня программисты обычно уже не вспоминают о 16-разрядных процессорах и разрабатывают новые программы с учетом того, что они будут использоваться на компьютере с процессором не ниже 80386 (конечно, с тактовой частотой 33 или 40 МГц). К тому же, только в последних моделях процессоров Intel и AMD внутренняя архитектура перестает быть улучшенным вариантом 286/386. Можно сказать, что сейчас происходит не просто увеличение разрядности процессоров и смена их поколений, а идет мучительный поиск наиболее оптимальных принципов работы будущих компьютеров.
   Если вспомнить, то именно неудачная архитектура 80286 и защищенного режима, который, как надеялись разработчики, позволит реализовать для персональных компьютеров многозадачную работу, заставила инженеров корпорации Intel очень серьезно подойти к разработке архитектуры 32-разрядного процессора. Перед ними стояла непростая задача – сохранить возможность использования уже наработанного программного обеспечения и предусмотреть удобное применение процессора в многозадачных системах.
   Использование в новом процессоре полной 32-разрядной архитектуры, конечно, было не совсем оправданным, но закладывало необычайно большой резерв возможностей, на которые можно будет опереться в будущем. Это подтвердил тот факт, что только Windows 95 стала первой массовой операционной системой, использовавшей все возможности Intel 386, а до этого основной режим, для которого создавалось подавляющее число программ, был 16-разрядным.
   Когда, 17 октября 1985 г., было объявлено о начале выпуска 32-разрядного процессора Intel 80386, особого интереса это событие в то время не вызвало. Программистам вполне хватало возможностей 80286 процессора, а 32-разрядная арифметика считалась непозволительной роскошью. Тогда никто из рядовых пользователей не думал, что архитектура и принципы Intel 386 станут образцом на долгие годы, утвердив доминирование корпорации Intel в компьютерном мире. Только на переломе веков, спустя 15 лет, стали производиться 64-разрядные процессоры, предназначенные для применения в персональных компьютерах.
Процессор Intel 386
   Процессор 80386 выпускался достаточно долгое время в самых различных модификациях. Первая версия процессора имела тактовую частоту 16 МГц, выполняя от 5 до 6 млн. операций в секунду. В 1987 г. тактовая частота увеличилась до 20 МГц (от 6 до 7 млн. операций в секунду). Планка в 25 МГц была взята в 1988 г. (8,5 млн. операций в секунду). Дальнейшее улучшение технологии позволило в 1989 г. достичь частоты в 33 МГц (11,4 млн. операций в секунду).
   Количество транзисторов в процессоре 80386 (рис. 2.7) достигло рекордной для того времени величины – 275 000 (вначале использовалась технология 1,5 мкм, а в дальнейшем – 1 мкм).
   Рис. 2.7. Процессор 386
 
   С помощью нового процессора стало возможным адресовать 4 Гбайт памяти, а размеры виртуальной памяти достигли 64 Тбайт (терабайт). В 1985 г. такие возможности были просто ошеломляющи, но посмотрите на свой персональный компьютер – сегодня винчестер в 4 Гбайт явно маловат для мультимедийных применений!
   Процессор 80386 выпускался не только корпорацией Intel, но и многими другими фирмами в самых разных модификациях. Например, наиболее популярным вариантом корпуса стал пластмассовый с планарными выводами, которые припаивались к материнской плате, что не допускало смены процессора. А компьютеры с таким типом процессора, которые до сих пор с успехом используются, имеют тактовые частоты 33 и 40 МГц. Заметим, что для промышленных компьютеров даже сейчас выпускаются не только процессоры 386, но и 16-разрядные 8088 и 80286.
   Несмотря на тщательность проработки конструкции, к великому сожалению, в первых версиях процессора Intel 386 содержалась ошибка, касающаяся выполнения 32-разрядных арифметических операций. Поэтому на корпуса процессоров, которые неправильно функционируют в 32-разрядном режиме, нанесена маркировка "16 bit operations only". То есть такие процессоры могут правильно выполнять только программы, работающие в 16-разрядном режиме, а, например, установить Windows 95 на компьютер с таким процессором не удастся.
   Так как многие возможности Intel 386 довольно долгое время были не востребованы широким кругом пользователей, то для уменьшения цены на компьютеры в 1988 г. был выпущен процессор, который маркировался суффиксом SX. Процессор Intel 386SX, как и 8088, обладал сокращенной в два раза шиной данных, а для адресации ячеек памяти использовалось всего 24 разряда вместо 32-х. После выхода Intel 386SX полноразрядные варианты стали носить название Intel 386DX.
   Для портативных компьютеров в 1990 г. был выпущен процессор Intel 386SL. Он полностью повторял основные технические характеристики Intel 386SX. Для целей энергосбережения использовались технические решения, которые позволяли отключать неиспользуемые внутренние блоки. Кроме того, в архитектуру процессора включили кэш-память и средства управления памятью. Количество транзисторов в процессоре увеличилось до 855 000 (технология 1 мкм).
Сопроцессоры
   Прежде чем мы перейдем к обсуждению процессоров Intel 486, которые относятся ко второму поколению 32-разрядных процессоров, надо вспомнить еще об одной линии компьютерных микросхем – математических сопроцессорах, предназначенных для использования в компьютерах.
   Когда-то тема использования сопроцессора была так же актуальна, как сегодня диспут о различных ускорителях для видеокарт. Теперь же, когда в процессорах Pentium сопроцессор встроен непосредственно в ядро, являясь одним из его многочисленных логических блоков, о нем вспоминают только программисты. Но поскольку принципы работы встроенного сопроцессора остались неизменными, и с учетом того, что в процессорах Pentium ММХ регистры сопроцессора используются по другому назначению, то кратко рассмотрим историю развития и этого семейства микросхем.
   У компьютеров минимальная единица данных – это бит, который может быть равен 0 или 1. Наиболее популярное машинное слово – байт, в котором 8 битов. Если в байте все биты равны нулю, то считается, что в байте записано число 0.
   Добавляя по 1 к содержимому байта, мы получим ряд:
   • 0000 0001 – десятичное число 1;
   • 1111 1111 – десятичное число 255 (в ряде случаев компьютер считает, что это минус единица).
   Получается ряд целых чисел: 0, 1, 2, 3, …, 100, …, 255.
   Микросхемы процессоров, рассматриваемые в этой книге, могут отлично проводить арифметические действия с любыми целыми числами: сложение, вычитание, умножение и деление. Но если попросить разделить, например пять на два, то процессор честно ответит – два. Оказывается, число 1,5 неизвестно процессору, т. к. оно является дробным числом.
   Сделаем здесь небольшое отступление и рассмотрим используемые в информационных технологиях системы счисления. В компьютерной литературе широко используется двоичная и шестнадцатеричная системы счисления. Для непрограммиста такой подход несколько неожидан, т. к. в реальной жизни используется десятичная система счисления, например нумерация страниц этой книги. Правда, современный человек вполне усвоил, что компьютеры оперируют двоичной системой счисления: да – нет или 0–1, а вот шестнадцатеричная система счисления вызывает множество вопросов. Но тут следует сказать, что для описания работы современных процессоров такая система счисления дает возможность легко понимать содержимое регистров и разбираться с адресной информацией.
   Для удобства запоминания связи между разными системами счисления рассмотрите табл. 2.1 и попробуйте перевести, не смотря уже в таблицу, несколько десятичных чисел, например 11 и 68, в разные системы счисления.
   Обозначают, в какой системе счисления записано число, несколькими способами. Для шестнадцатеричных чисел наиболее очевиден вариант, когда к числу добавляется приставка Hex или Н. Но программисты обычно используют другой способ, который применяется в листингах программ и конфигурационных файлах. В этом случае шестнадцатеричное число начинается символами "0х", например 0x1, 0x367, 0xFF71.
   К двоичные числам добавляется символ "Ь", например 100111b.
   Для обозначения десятичных чисел в большинстве случаев не применяют дополнительных символов, хотя иногда может добавляться символ "D". В основном, такой способ выделения десятичных чисел применяется в литературе по языку Ассемблера.
Таблица 2.1. Системы счисления
   Итак, возвращаясь к процессорам, заметим, что для вычисления дробных чисел используются специальные подпрограммы, которым требуется не один машинный такт, за который процессор может сложить два целых числа, а значительно больше. То есть при использовании в прикладной программе дробных чисел скорость работы компьютера резко снижается. Еще хуже дело обстоит, когда нужно рассчитать траекторию точек на окружности, используя тригонометрические функции – компьютер может задуматься очень надолго.
   Для ускорения работы компьютера уже в эру процессора 8086 выпускались математические сопроцессоры, которые умели быстро выполнять операции с дробными числами, плавающей точкой, вычислять тригонометрические, экспоненциальные и логарифмические функции. На старых системных платах рядом с процессором (его также называют центральным процессором), всегда находился сокет для математического сопроцессора.
   Аппаратный интерфейс позволял подключать сопроцессор непосредственно к выводам центрального процессора. Если в процессе работы программе надо было использовать сопроцессор, то центральный процессор передавал данные сопроцессору. Шина данных, когда это было нужно, переходила в распоряжение сопроцессора.
   Математические сопроцессоры выпускались для процессоров 8086/8088, 80256, 80386 и имели маркировку 8087, 80287 и 80387. С первыми процессорами 486, в которых не было блока сопроцессора, можно было использовать сопроцессор 80387.
   Пользователь для ускорения работы своего персонального компьютера мог купить сопроцессор и самостоятельно установить его в соответствующий сокет. Так как сопроцессоры были дорогими, то вместо микросхемы 80287 можно было установить 8087, а вместо 80387 – 80287.
Процессор Intel 486
   10 апреля 1989 г. было объявлено о выпуске процессора Intel 486DX. Архитектура процессора не была повторением или улучшением Intel 386, а представляла совершенно оригинальное решение. Фактически, это была настоящая вычислительная машина, выполненная на одном кристалле кремния, у которой имелась оперативная память, периферийные устройства и даже набор микропрограмм для обработки внешних команд. По сути это означало возможность совершенствования внутреннего устройства микросхемы процессора, не меняя внешнего интерфейса. То есть появлялась возможность многократно увеличивать производительность компьютера, меняя только процессор (для компьютеров с процессором Intel 386, например, нужно было повышать тактовую частоту, но это требовало серьезной доработки системной платы, поэтому чаще всего процессор с частотой 33 и 40 МГц припаивался, а не устанавливался в сокет).
   Если рассмотреть внутреннее устройство нового процессора, то оказывалось, что он только внешне напоминал Intel 386, хоть и работал с системой команд х86. "Внутри" использовался RISC-процессор, который имел сокращенный набор команд х86, а остальные команды, которые он не мог выполнять непосредственно, преобразовывались вспомогательными блоками в цепочку инструкций. Такое оригинальное решение было вызвано тем, что программисты использовали, в большинстве случаев, ограниченный набор команд процессоров х86 (CISC-процессоров), а остальные появлялись в программах крайне редко. Поэтому использование ядром сокращенного набора команд позволяло упростить конструкцию микросхемы и увеличить скорость работы процессора.
   Примечание
   CISC (Complex Instruction Command Set)  – процессор с полным набором команд, в частности, это процессоры семейства х86. Набор команд CISC (концепция CISC) был разработан для удобства программистов, которые в те давние времена вынуждены были писать программы для маломощных компьютеров на языке Ассемблера (очень кропотливая и нудная работа!). Для ускорения процесса разработки программ в систему команд CISC были введены удобные команды, которые как бы представляли собой маленькие подпрограммы. В итоге, команды CISC-процессора имеют разную длину и время выполнения. К тому же CISC-процессор не отличается высокой производительностью, т. к. для выполнения некоторых команд требуется несколько машинных тактов.
   RISC (Reduced Instruction Set Computer)  – процессор с сокращенным набором команд. В процессорах с набором команд (концепцией) RISC все команды имеют одинаковую длину и формат, а также простую адресацию памяти. Каждая команда выполняет только простые действия за один такт. Программный код для таких процессоров легко поддается оптимизации, поэтому удается получить большую производительность для одной и той же технологии.
   Разделение внутренней архитектуры на ядро и периферийные блоки в дальнейшем позволило организовать работу ядра на повышенной частоте. То есть интерфейс процессора работал на тактовой частоте, которую поддерживала системная плата, а ядро функционировало на более высокой, например, удвоенной или утроенной тактовой частоте.
   Так как использование математического сопроцессора в компьютерах оказалось отличным способом повышения производительности, то в процессоре Intel 486 его разместили непосредственно на кристалле, сохранив программную совместимость с сопроцессором 80387.
   Дополнительным способом повышения производительности оказалось решение разместить на кристалле также и кэш первого уровня. Теперь кэш второго уровня, который оставался на системной плате, использовался только тогда, когда не хватало объема внутреннего кэша.
   Кроме изменения внутренней архитектуры, в процессоре Intel 486 появилась возможность работать с внешней памятью в пакетном режиме. Данный режим характеризуется тем, что процессор может прочитать или записать данные в ОЗУ целым блоком, не указывая каждый раз конкретную ячейку памяти. Так, указав адрес начала требуемого блока памяти чипсету (микросхемам системной платы, которые отвечают за работу с памятью и интерфейсами), процессор последовательно обращается к ячейкам памяти, тем самым сокращая время для пересылки данных.