Мини-ЭВМ, микроЭВМ и микропроцессоры
Доступность недорогих малых ЭВМ, стоимостью порядка 1 К долл., сделала их привлекательными для использования при управлении экспериментом и технологическими процессами, для накопления данных и выполнения оперативных вычислений. Малые ЭВМ широко используются в лабораторных исследованиях и промышленности, поэтому информация об их потенциальных возможностях, языках программирования и способах сопряжения с внешними устройствами составляет существенную часть электронного «ноу-хау».
МикроЭВМ эволюционировали от ранней мини-ЭВМ — малой электронно-вычислительной машины, центральный процессор (ЦП) которой был собран на микросхемах малой и средней степени интеграции, как правило расположенных на одной или нескольких больших печатных платах. По мере совершенствования микросхем БИС стало возможно реализовать рабочие характеристики центрального процессора мини-ЭВМ на одном кристалле высокой степени интеграции; таким образом, микроЭВМ — это электронно-вычислительная машина, центральный процессор которой собран на нескольких, а зачастую на одной микросхеме БИС, а тип микросхемы ЦП или соответствующий микропроцессорный комплект определяет тип микроЭВМ. Например, на смену популярным мини-ЭВМ фирмы DEC PDP-11, ЦП которых занимал несколько печатных плат, пришло семейство ЭВМ под таким же названием, ЦП которых был собран на нескольких микросхемах БИС, заменивших большое количество микросхем малой и средней степени интеграции; приблизительно в то же время фирма Motorola представила высокопроизводительный микропроцессор МП (серии 68000), несомненно испытавший влияние PDP-11, рабочие характеристики которого во многом были сходны с характеристиками ЦП этой ЭВМ.
В основе большинства современных малых ЭВМ, являющихся на самом деле микроЭВМ, лежат впечатляющие характеристики современного поколения микропроцессоров. Не так давно возникло идиоматическое выражение «супермини-ЭВМ», по-видимому, для того, чтобы выделить класс ЭВМ, имеющих более высокие технические характеристики и подчас конкурирующих с большими и дорогостоящими ЭВМ, построенными в соответствии с традиционными техническими решениями. В некоторых случаях различия между ними относятся скорее к габаритным размерам или количеству внешних устройств, чем к степени интеграции ЦП.
Более существенно различие между микроЭВМ и микроконтроллерами. Термин микроконтроллер использован для обозначения устройства, в котором микропроцессор вместе с небольшим по объему ЗУ и другими необходимыми элементами используют для специализированного управления процессом или аппаратом. В такой ситуации микропроцессор да несколько подходящих микросхем плюс ПЗУ могут с успехом заменить сложную комбинационную схему, состоящую из логических элементов, триггеров, аналого-цифровых и цифро-аналоговых преобразователей; это надо иметь ввиду, как только вы включаетесь в крупный технический проект.
Для такого рода приложений разработаны специализированные МП, характеризующиеся тем, что такие узлы, как тактовые генераторы, схемы ввода-вывода и некоторые другие, обычно собираемые с использованием дополнительных микросхем, реализованы на том же кристалле, что и собственно микропроцессор за счет вычислительной мощности и большого адресного пространства, которые характеризуют МП, предназначенные для построения микроЭВМ, ориентированных на вычислительные задачи.
В этой главе мы опишем архитектуру и программирование микроЭВМ, а также их сопряжение с внешними устройствами на примерах полезных и простых способов подключения внешних устройств к IBM PC/XT. Здесь мы ссылаемся на стандартную PC-магистраль и ее модификации, такие как магистраль PC/AT и совместимых с ней ЭВМ, а также младших моделей линии PS/2. Большинство изложенных в настоящей главе идей будет перенесено в следующую главу, где мы углубимся в обстоятельное обсуждение по поводу проектирования и конструирования схем и целых систем на основе МП, а для примеров будем использовать МП «Motorola 68008» из серии 68000, которая совместно с серией Intel 8086 господствует в малых ЭВМ. Говоря о микроЭВМ в целом, надо отметить, что проектирование собственно ЭВМ, включая ОЗУ, внешние запоминающие устройства, устройства ввода-вывода, а также системное программирование и разработка сервисных программ являются предметом заботы изготовителя, а также его коллег, производящих комплектующие аппаратные и программные средства. Пользователю надо только позаботиться о специализированных интерфейсах и программировании своих прикладных задач. Напротив, в специализированных МП-системах выбор типа ЗУ, схемных и программных решений, вообще говоря, должен быть сделан проектировщиком. Изготовители микроЭВМ, как правило, принимают на себя вопросы разработки системного и сервисного программного обеспечения, как части вычислительной системы в целом (часто-совместно с внешними устройствами), тогда как изготовители МП-комплектов и интегральных микросхем сосредоточены на вопросах проектирования и сбыта как собственно МП, так и вспомогательных микросхем. В настоящей главе мы рассмотрим архитектуру и программирование микроЭВМ и сосредоточимся на подробностях внутренних связей и сопряжений с внешними устройствами.
10.01. Архитектура микроЭВМ
Рисунок 10.1 представляет типовую обобщенную схему большинства микроЭВМ. Рассмотрим эту схему.
Рис. 10.1. Блок-схема компьютера.
Центральный процессор. Центральный процессор — это сердце ЭВМ. Компьютеры выполняют вычисления в центральном процессоре над порциями данных, организованных как машинные слова. Размер слова может составлять от 4 до 32 бит и более, наиболее популярные современные микроЭВМ имеют 16-битовое слово. Восемь бит составляют байт, а половину байта-четыре бита-иногда называют «нибл». Часть ЦП, называемая дешифратором команд, интерпретирует последовательные команды, выбираемые из памяти, выясняя тем самым, что надлежит делать процессору в каждом случае. В состав ЦП входит арифметическое устройство, которое может выполнять такие операции, как сложение, нахождение дополнения, сдвиг, пересылку и некоторые другие над числами, находящимися в регистрах, а в некоторых случаях и в памяти. Программный счетчик постоянно отслеживает ход выполнения программы. Обычно значение программного счетчика инкрементируется после выполнения очередной команды, но оно может получить другое значение в результате выполнения команд безусловного перехода или ветвления — условного перехода. Управляющие линии магистрали обеспечивают сопряжение с памятью и устройствами ввода-вывода. Большинство компьютеров (и чем дальше - тем больше) имеют также регистр указателя стека и несколько флажков (переноса, нуля, знака), проверяемых при выполнении условных переходов. В состав многих высокопроизводительных процессов входит также сверхоперативная память (кэш-память), которая для ускорения доступа содержит величины, незадолго до этого извлеченные из памяти.
Значительная активность наблюдается в области экспериментов с параллельными процессами, где вы соединяете между собой много ЦП с целью достижения потрясающей вычислительной мощности. Со временем в области высокопроизводительной обработки такая тенденция может стать определяющей. В наше же время, однако, стандарт архитектуры микро-ЭВМ представлен однопроцессорными ЭВМ, которые выполняют команды последовательно.
Память. Все компьютеры имеют некоторый объем быстрой памяти с произвольным доступом, такую память, бывало, называли «сердцем» компьютера, поскольку запоминали и сохраняли данные малюсенькие магнитные сердечники - по одному на каждый запоминаемый бит. В большой микроЭВМ объем ОЗУ может достигать 10 Мбайт и более, хотя типичным значением является 1 Мбайт, а в микроконтроллерах объем ОЗУ может составлять всего 16 Кбайт. (Когда память измеряют в единицах К, это означает не 1000 байт, а 1024 или 210 байт; таким образом, 16 Кбайт на самом деле составляют 16 384 байт. Для обозначения 1000 мы употребляем строчную букву к.) Для того чтобы записать в такую память какой-либо код или считать его, обычно требуется около 100 не. Память с произвольным доступом почти всегда «разрушаема», это означает, что, когда электропитание отключается, информация улетучится (возможно, эту характеристику следовало бы назвать «забывчивостью»). Поэтому все компьютеры в своем составе имеют и неразрушаемую память, обычно доступную только для чтения (ПЗУ) и предназначенную для того, чтобы «завести»[2] машину, находящуюся до включения питания в состоянии полной амнезии.
В дополнительное ПЗУ часто записывают системные и графические процедуры, а также другие программы, которые должны быть доступны в любой момент.
Для того чтобы считать из памяти или сохранить в памяти ту или иную информацию, ЦП «адресует» то слово (памяти), какое пожелает. Большинство компьютеров адресует память побайтно, начиная с нулевого байта и последовательно перебирая байты вплоть до последнего в памяти. Поскольку машинное слово большинства компьютеров составляет несколько байт, обычно за один раз вы заносите в память или извлекаете из нее группу байт; обычно необременительно иметь шину данных с разрядностью в несколько байт. Например, микроЭВМ, которые построены на МП 80386 или 68020, имеют 32-разрядную шину данных (что равно 4 байт), так что 32-разрядное слово может быть записано в память или считано из нее за один цикл выборки. Для того чтобы указать длину последовательности передаваемых байт, используют управляющие сигналы, причем даже для «солидных» шин вам на это потребуется всего 1–2 байт.
В компьютере с большим количеством сегментов памяти для указания произвольного адреса памяти необходимо 3–4 байт. Поскольку большинство адресов памяти в реальной программе обычно близко, все компьютеры поддерживают упрощенные модели адресации: «относительная» адресация определяет адрес по удалению его от текущей команды в памяти; «косвенная» адресация использует содержимое регистра ЦП для указания ячейки в памяти; «страничная» адресация использует укороченные адреса для указания на заданную ячейку памяти в пределах малого диапазона (страницы); «прямая» или «абсолютная» адресация использует несколько следующих за командой байт для указания адреса. Современные ЦП венчают этот краткий список «индексной», «автоинкрементной» и другими полезными способами адресации, которых мы коснемся в следующей главе.
Во время выполнения программы в памяти находятся как собственно программа, так и данные. Центральный процессор извлекает команды из памяти, выясняет, что они означают и поступает соответственно, при этом часто требуется сохранить данные где-нибудь в памяти. Обычно неспециализированные универсальные компьютеры хранят программы и данные в одной и той же памяти, причем компьютер на самом деле не отличает одних от других. Если программа пойдет не туда и начнет «исполнять» данные, могут начаться забавные вещи!
Поскольку компьютерные программы большую часть своей жизни проводят в циклах, состоящих из сравнительно коротких последовательностей команд, вы можете увеличить производительность машины, используя малую по объему, но быструю кэш-память, в которую вы просто заносите копии ближайших используемых ячеек памяти. Центральный процессор с кэш-памятью сначала обращается именно к ней, перед тем, как осуществить выборку из более медленной основной памяти, когда циклы «крутятся» по одним и тем же адресам; часто можно достичь рекордной эффективности использования кэш-памяти до 95 % и выше, разительно увеличивая быстродействие.
Массовая память. Компьютеры, предназначенные для разработки программ или вычислений, в противоположность специализированным управляющим процессорам, обычно имеют одно или более запоминающее устройство достаточной емкости, называемое устройством массовой памяти. Жесткие диски (именуемые также «винчестерскими») и гибкие диски (флоппи-диски или дискеты) — вот типичные представители устройств массовой памяти, емкость которых изменяется от нескольких сотен килобайт до нескольких мегабайт для гибких дисков, и от нескольких десятков до нескольких сотен мегабайт для жестких дисков. Наиболее полно экипированные компьютеры имеют в своем составе дополнительно одно или два устройства ввода-вывода на магнитную ленту, конструкция которых может быть различна-от простого кассетного «стриммера» до магнитофона, рассчитанного на большие катушки 9-дорожечной полудюймовой стандартной ленты, те самые, которые всегда вращаются на заднем плане в научно-фантастических кинофильмах. Более современная технология, используя 8-мм видеокассеты, те же самые, что обитают в легких переносных видеокамерах, позволяет записать на одну такую кассету 1 Гбайт. Последним достижением в разработке массовой памяти являются компакт-диски, предназначенные только для чтения и использующие ту же технологию производства оптических дисков, что и при изготовлении аудио компакт-дисков; их емкость составляет 600 Мбайт на сторону 5-дюймового пластикового диска, обладающего к тому же гораздо меньшим временем доступа, чем любая магнитная лента.
В отличии от аудио компакт-дисков существуют такие устройства массовой памяти на компакт-дисках, которые позволяют как считывать, так и записывать информацию путем образования на пустом ровном компакт-диске ямок за счет лазерного нагрева; такие устройства называют WORM от английской аббревиатуры «записать однажды - читать многократно». Более того, сейчас доступны также устройства внешней памяти на магнитооптических дисках, поддерживающие операции чтения-записи и позволяющие полностью обновлять содержимое таких дисков.
По сравнению с ОЗУ произвольного доступа устройства массовой памяти, вообще говоря, обладают меньшим быстродействием, причем самыми медленными являются устройства на магнитных лентах (их время доступа достигает многих секунд), а самыми быстрыми (и дорогими) — жесткие диски (среднее время доступа порядка десятков миллисекунд). Скорость обмена данными для всех устройств массовой памяти высока и составляет от 10 Кбайт до 100 Кбайт в секунду и более, без учета задержки доступа к устройству. Как правило, вы храните программы, файлы данных, в том числе файлы графической информации, на некотором устройстве массовой памяти и загружаете их в ОЗУ только на время вычислений. С одним диском одновременно могут работать несколько пользователей; средних размеров оптический диск может хранить несколько копий Британской энциклопедии.
Если ваш компьютер имеет ОЗУ достаточно большого объема, элегантный способ поднять быстродействие компьютера, в том случае, если он часто обращается к диску, заключается в том, чтобы организовать псевдодиск путем загрузки всех необходимых дисковых файлов в ОЗУ в начале работы. Таким образом, вы можете загрузить в ОЗУ текстовый редактор, компилятор, редактор связей, загрузчик, после чего можно обращаться к такому диску для чтения или записи без потерь времени на ожидание. Тем не менее будьте бдительны: если компьютер отключится, ничто из результатов вашей работы не будет сохранено на внешнем носителе и вы потеряете всю наработку.
Алфавитно-цифровой и графический ввод-вывод. Замечательно иметь мощный компьютер, способный выполнять миллионы интеллектуальных вычислений в секунду, но если он все результаты держит в себе, вам от этого мало проку. Такие внешние устройства, как клавиатура с экраном, составляющие вместе терминал, «мышь», печатающее устройство и другие обеспечивают общение человека с машиной и существенны для любой «дружественной» по отношению к пользователю вычислительной системы. Эти устройства ориентированы в основном на программирование, редактирование текстов, работу с электронными таблицами и на графику; вы используете их, когда пишете, отслеживаете и распечатываете программу, вводите и печатаете документы, манипулируете числами или изображениями, играете в компьютерные игры. Такие внешние устройства вкупе с соответствующей интерфейсной частью легко найти у многих поставщиков, включая фирмы-изготовители собственно компьютеров.
Ввод-вывод в реальном времени. В лабораторных исследованиях, управлении технологическими процессами, при сборе данных или для таких экзотических приложений, как синтез речи или музыки, вам необходимы аналого-цифровые и цифро-аналоговые устройства, которые могут общаться с компьютером в реальном масштабе времени, т. е. в то же самое время, когда продолжается процесс, контролируемый этими устройствами. Возможности здесь практически безграничны; если взять хотя бы набор мультиплексируемых АЦП общего назначения, немного быстрых ЦАПов и несколько цифровых «портов» (последовательных или параллельных) для обмена данными, это уже обеспечит массу интересных приложений. Для наиболее популярных стандартов внутренней магистрали компьютеров подобная периферия общего назначения коммерчески доступна. Если же вы хотите от этих устройств чего-нибудь более причудливого, например, улучшенных характеристик (повышенного быстродействия, увеличенного числа каналов) или специализированных функций (генерации звуков, частотного синтеза, генерации временных интервалов и т. п.), вам придется сделать такие устройства самостоятельно. Вот здесь-то сведения об организации магистрали компьютера и технике программирования существенны, хотя подобные сведения полезны всегда.
Сетевой протокол. Даже мощные настольные компьютеры приобретают дополнительные возможности в тех случаях, когда они могут обмениваться файлами с другими ЭВМ. Один из способов сделать так — это подключиться к удаленной ЭВМ по телефонной сети и затем, по мере необходимости, использовать ресурсы этой ЭВМ. Таким образом можно получить доступ к большой базе данных или к каким-либо специализированным программам, мощной суперЭВМ, электронной почте, а также к файлам с текстами или данными ваших коллег по службе. Для этого вам требуется «модем» (модулятор-демодулятор), который либо подсоединяется непосредственно к внутренней магистрали вашего компьютера, либо подключается снаружи к последовательному порту. Подробнее об этом мы поговорим ниже.
Другим путем расширения сферы действия вашего компьютера является использование локальной вычислительной сети (ЛВС) для совместного объединения группы ЭВМ. Примером такой сети является ЛВС (Ethernet), которая обеспечивает передачу данных между машинами сети со скоростью до 10 Мбит/с по одному коаксиальному кабелю. Локальная вычислительная сеть позволяет вам обмениваться файлами с любой ЭВМ, включенной в эту сеть; на самом деле, работая в хорошо организованной сети, вы скорее всего приумножите ресурсы своего компьютера, совместно с другими ЭВМ используя быстрый диск большой емкости, дорогостоящие графопостроители и печатающие устройства и т. д. В этом случае каждая рабочая станция ЛВС может иметь внешнюю память весьма ограниченной емкости, зато обладать значительными вычислительными возможностями. Такая идеология организации ЛВС является идеальной, например, для издательств, где в процессе подготовки рукописи к публикации с ней работают разные люди. Для большинства компьютеров разработаны интерфейсы их подключения к Ethernet или другим ЛВС.
Магистраль данных. Для обмена данными между ЦП и ОЗУ или адаптерами внешних устройств все компьютеры используют магистраль — набор обобщенных «линий» (проводников), по которым осуществляется обмен двоичными словами. (Многие магистрали допускают также обмен данными непосредственно между адаптерами внешних устройств, хотя такие возможности используются менее часто.) Использование магистрали с обобщенными линиями значительно упрощает межсоединения, поскольку в противном случае вам потребовались бы многожильные кабели, соединяющие каждую пару взаимодействующих друг с другом устройств. Немного внимания как при проектировании самой магистрали, так и при подключении к ней — и все работает отлично. Магистраль состоит из набора линий данных (их обычно столько же, сколько разрядов (бит) составляет слово данных-8 для микроконтроллера и ПЭВМ с невысокими рабочими характеристиками, 16 или 32-для более сложных микрокомпьютеров), нескольких линий адреса для определения того, какое устройство будет «вещать», а какое - «слушать», подключившись к соответствующим линиям, а также набора управляющих линий, которые определяют, какое действие выполняется (передача данных от или к ЦП, обработка прерываний, прямой доступ к ОЗУ и т. п.). Все линии данных, равно как и ряд других линий, являются двунаправленными - они либо подключены к выходу элементов с тремя состояниями, либо в некоторых случаях к открытому коллекторному выходу логических элементов с нагрузочными резисторами (эти резисторы обычно устанавливают на конце магистрали, при этом они дополнительно выполняют функцию согласования для уменьшения отражений сигналов в линиях магистрали, см. также разд. 13.09); нагрузочные резисторы могут оказаться необходимыми и в случае применения устройств с тремя состояниями в том случае, когда магистраль имеет большую физическую длину.
Элементы с тремя состояниями или с открытым коллектором подключаются таким образом, чтобы их можно было перевести в отключенное состояние, поскольку при нормальной работе магистрали в каждый момент времени только одно устройство должно выставлять данные на соответствующие линии данных. Каждая ЭВМ придерживается тщательно разработанного протокола для определения того, какое устройство выставляет данные и когда. Если этого не сделать, возникает полный беспорядок, когда все кричат одновременно. (Компьютерщики не могут устоять перед искушением одушевить свои ЭВМ, а также их периферийные устройства и другие узлы. Инженеры идут дальше и обращаются как с живыми с триггерами и другими логическими схемами. Мы, естественно, будем следовать этой традиции.)
Среди разных типов внутренних магистралей компьютеров существует одно интересное различие. Они могут быть либо синхронными, либо асинхронными, в популярных микрокомпьютерах можно найти примеры каждого типа. Что это значит, вы увидите, когда мы будем детально рассматривать взаимодействие отдельных узлов компьютера через магистраль.
Мы вернемся к подробному рассмотрению магистрали с примерами соответствующих интерфейсов, рассматривая популярное семейство IBM PC/XT. Однако сначала нам необходимо познакомиться с набором команд ЦП.