Глава 21 Шины
Несмотря на основополагающую роль процессора, им устройство компьютера не ограничивается. Помимо него компьютеру требуется оперативная память (RAM) для хранения машинного кода, который будет выполнять процессор. Кроме того, компьютер должен предусматривать способ записи этого кода в память (устройство ввода) и отображения результатов работы программы (устройство вывода). Как вы помните, память RAM является энергозависимой: ее содержимое теряется при отключении питания. Так что еще один полезный компонент компьютера — долговременное запоминающее устройство, в котором код и данные могут храниться после его выключения.
Все интегральные схемы (ИС), из которых состоит компьютер, монтируются на печатных платах. В некоторых небольших компьютерах все ИС могут поместиться на одной плате. Однако гораздо чаще различные компоненты размещаются на двух или более платах, которые обмениваются данными с помощью шины. Шина — это просто набор цифровых сигналов, передаваемых по различным средам, которые подаются на каждую из плат компьютера. Эти сигналы делятся на четыре категории:
адресные сигналы — сигналы, генерируемые микропроцессором и используемые в основном для адресации оперативной памяти; они также применяются для обращения к другим подключенным к компьютеру устройствам;
сигналы вывода данных — эти сигналы тоже генерируются микропроцессором и используются для записи данных в оперативную память или их передачи в другие устройства; будьте осторожны с терминами «ввод» и «вывод»: сигнал вывода данных микропроцессора — сигнал ввода данных для оперативной памяти и других устройств;
сигналы ввода данных — сигналы, которые генерируются другими компонентами компьютера и считываются микропроцессором; сигналы ввода данных чаще всего возникают на выходах RAM, благодаря чему микропроцессор считывает содержимое памяти, однако и другие компоненты также генерируют сигналы ввода данных для микропроцессора;
управляющие сигналы — разнообразные сигналы, которые обычно соответствуют управляющим сигналам конкретного микропроцессора, на базе которого построен компьютер; управляющие сигналы могут генерироваться в микропроцессоре или в других устройствах, которым требуется передать данные в микропроцессор; пример управляющего сигнала — сигнал, с помощью которого микропроцессор указывает на необходимость записи некоторых данных в конкретную ячейку памяти.
В дополнение к этому шина подает питание на различные платы, входящие в состав компьютера.
Одной из первых популярных шин для ПК была модель S-100, представленная в 1975 году в качестве компонента первого персонального компьютера «Альтаир» компании MITS. Несмотря на то что эта шина разрабатывалась для микропроцессора 8080, позднее она была адаптирована под другие процессоры, такие как 6800. Размер платы S-100 составляет 13,4 ? 25,4 сантиметра. Одна из сторон печатной платы вставляется в разъем, который имеет 100 контактов (отсюда и название).
Компьютер с шиной S-100 включает в себя большую плату, называемую материнской, которая содержит несколько (около двенадцати) связанных друг с другом гнезд для плат S-100. Эти гнезда иногда называются слотами расширения, в них вставляются платы S-100, или платы расширения. Одну плату S-100 занимает микропроцессор 8080 и вспомогательные чипы (о некоторых я упомянул в главе 19). Оперативная память занимает одну или несколько других плат.
Поскольку шина S-100 разрабатывалась для микросхемы 8080, она имеет 16 адресных линий, восемь линий для ввода и восемь линий для вывода данных. Как вы помните, в самом процессоре 8080 линии для ввода и вывода данных объединены. Сигналы разделяются на входные и выходные с помощью других микросхем, установленных на той же плате, что и процессор 8080. Шина также предусматривает восемь линий для прерываний сигналов, генерируемых другими устройствами, когда им требуется привлечь внимание центрального процессора. Как мы увидим далее, клавиатура может генерировать сигнал прерывания при нажатии клавиши. В ответ на это процессор 8080 выполняет короткую программу, чтобы определить, какая клавиша была нажата, и предпринять соответствующее действие. Для обработки прерываний к плате с процессором 8080 обычно также подключается чип Intel 8214 (устройство для управления приоритетными прерываниями). Когда возникает прерывание, этот чип генерирует для процессора 8080 должный сигнал. Когда последний подтверждает получение запроса на прерывание, чип посылает команду RST (Restart — перезапуск), которая заставляет микропроцессор сохранить текущее значение счетчика команд и в зависимости от полученного прерывания перейти к команде в ячейке 0000h, 0008h, 0010h, 0018h, 0020h, 0028h, 0030h или 0038h.
Если бы вы разработали новую компьютерную систему с шиной нового типа, нужно было бы решить, опубликовать ли технические характеристики шины или сохранить их в тайне.
Если их опубликовать, то другие, так называемые сторонние, производители смогут проектировать и продавать платы расширения, совместимые с этой шиной. Доступность дополнительных плат расширения делает компьютер более функциональным, следовательно, на него растет спрос. Рост продаж компьютеров ведет к увеличению рынка для плат расширения. Это побуждает разработчиков большинства небольших компьютерных систем придерживаться принципа открытой архитектуры, что позволяет другим производителям создавать периферийные устройства. Со временем шина может превратиться в отраслевой стандарт, а стандарты имеют большое значение для индустрии персональных компьютеров.
Самым известным ПК с открытой архитектурой был первый IBM PC, выпущенный осенью 1981 года. Компания IBM опубликовала технический справочник, содержащий полные электрические схемы этого компьютера и всех плат расширения. Этот справочник стал важным инструментом, позволившим многим производителям создать не только свои платы расширения для IBM PC, но и клоны, которые были практически идентичны этому компьютеру и использовали то же программное обеспечение.
На долю многочисленных потомков первого компьютера IBM PC в настоящее время приходится 90% рынка[25]. Несмотря на то что IBM принадлежит лишь небольшая доля этого рынка, она могла бы быть еще меньше, если бы архитектура ее первого компьютера была закрытой. Архитектура компьютера Apple Macintosh изначально была закрытой. Несмотря на редкие эксперименты с открытой архитектурой, это принятое в самом начале решение, вероятно, объясняет, почему на долю Macintosh приходится менее 10% рынка настольных ПК. При этом закрытая архитектура компьютерной системы не мешает сторонним компаниям писать для нее программное обеспечение. Только производители некоторых видеоигровых консолей запрещают другим компаниям создавать программы для своих систем.
В первом компьютере IBM PC использовался микропроцессор Intel 8088, позволявший адресовать один мегабайт памяти. Несмотря на то что микропроцессор 8088 — 16-разрядный, обмен данными с памятью он осуществляет фрагментами по восемь бит. Шина, которую компания IBM разработала для своего первого компьютера, теперь носит название ISA (Industry Standard Architecture — архитектура промышленного стандарта). Такая шина предусматривает 62 линии, из которых 20 адресных, восемь используются для ввода и вывода данных, шесть — для запросов на прерывания, три — для запросов на прямой доступ к памяти (Direct Memory Access, DMA). Режим DMA позволяет ускорить работу устройств для хранения данных. Обычно чтение и запись данных в память осуществляет микропроцессор. Благодаря режиму DMA другое устройство может перехватить управление шиной и произвести обмен данными непосредственно с памятью, минуя микропроцессор.
В системе S-100 все компоненты размещены на платах расширения. В компьютере IBM PC микропроцессор, некоторые вспомогательные чипы и часть оперативной памяти содержались на плате, которую компания назвала системной, хотя эта плата также часто именуется материнской, или главной.
В 1984 году IBM представила персональный компьютер PC/AT, в котором использовался 16-разрядный микропроцессор Intel 80286, позволявший адресовать 16 мегабайт памяти. IBM установила ту же шину, но добавила еще один 36-контактный разъем, который включал семь адресных линий (хотя требовалось всего четыре), восемь линий для ввода и вывода данных, пять линий для запросов на прерывания и четыре линии для запросов на прямой доступ к памяти.
Шины необходимо модернизировать или заменять по мере того, как микропроцессоры перерастают их по разрядности данных (например, при увеличении с 8 до 32 бит), по количеству адресных линий или по быстродействию. Первые шины создавались для микропроцессоров, работавших с тактовой частотой в несколько мегагерц, но точно не в несколько сотен. Когда шина работает на скоростях, для которых не предназначена, она может стать источником высокочастотных помех, вызывающих статический или другой шум в работающих поблизости радиоприемниках и телевизорах.
В 1987 году IBM выпустила шину MCA (Micro Channel Architecture — микроканальная архитектура). Некоторые аспекты этой шины были запатентованы, что позволило компании получать лицензионные платежи. Вероятно, именно по этой причине шина MCA не стала отраслевым стандартом. А в 1988 году консорциум из девяти компаний (в который IBM не вошла) изготовил альтернативную 32-разрядную шину EISA (Extended Industry Standard Architecture — расширенная архитектура промышленного стандарта). В конце 1990-х годов в IBM-совместимых компьютерах широко использовалась разработанная компанией Intel шина PCI (Peripheral Component Interconnect — взаимосвязь периферийных компонентов).
Чтобы понять, как работают различные компоненты компьютера, снова следует вернуться в середину 1970-х, когда все было очень просто. Представим разработку плат для компьютера «Альтаир» или для нашего собственного компьютера на базе процессора 8080 либо 6800. Для него нам, вероятно, потребуется собрать массив RAM, клавиатуру для ввода данных, экран для их вывода, а также некое устройство, позволяющее хранить информацию после выключения. Рассмотрим различные интерфейсы, которые можем создать для подключения перечисленных компонентов к нашему компьютеру.
Как вы помните из главы 16, массив RAM предусматривает адресные входы, входы для ввода и вывода данных, а также сигнал, используемый для записи данных в память. От количества адресных входов зависит количество отдельных значений, которые можно сохранить в массиве RAM:
Количество значений в массиве RAM = 2 количество адресных входов.
Количество входов для ввода и вывода данных определяет разрядность сохраняемых значений.
В середине 1970-х годов в домашних компьютерах часто применялась микросхема памяти 2102.
Микросхема 2102 была создана по технологии МОП (металл — оксид — полупроводник), или MOS (metal-oxide-semiconductor), как и сами микропроцессоры 8080 и 6800. Микросхемы МОП можно легко подключить к микросхемам ТТЛ; от последних они отличаются более высокой плотностью транзисторов. К тому же они работают не так быстро.
Если подсчитать количество адресных входов (A0–A9) и обратить внимание, что здесь только один вход для ввода (DI) и один вход для вывода (DO) данных, вы поймете, что емкость этой микросхемы ограничена 1024 бит. В зависимости от типа используемой микросхемы 2102 время доступа, то есть время, прошедшее между подачей адреса на адресные входы и выводом соответствующих данных на выход DO, составляет от 350 до 1000 наносекунд. При считывании информации из памяти сигнал R/(чтение/запись) обычно равен 1. Когда вам требуется записать данные в микросхему, этот сигнал должен быть равен 0 на протяжении от 170 до 550 наносекунд, опять же в зависимости от типа используемой микросхемы 2102.
Особый интерес представляет сигнал(Chip Select — выбор микросхемы). Когда этот сигнал равен 1, микросхема не выбрана, значит, она не реагирует на сигнал R/. Сигналоказывает на микросхему и другое важное влияние, о котором расскажу чуть позже.
Разумеется, если вы собираете массив памяти для 8-разрядного микропроцессора, необходимо организовать эту память так, чтобы в ней хранились 8-битные, а не однобитные значения. Для сохранения целых байтов придется объединить по крайней мере восемь таких микросхем, подключив их адресные входы, сигналы R/и друг к другу. Результат можно изобразить следующим образом.
Это массив RAM 1024 ? 8 емкостью один килобайт.
С практической точки зрения эти микросхемы памяти нужно монтировать на печатную плату. Сколько их может поместиться на одной плате? Если размещать их максимально близко, то на одну плату S-100 можно установить 64 такие микросхемы, которые обеспечат восемь килобайт памяти.
Попробуем обойтись памятью в четыре килобайта, используя только 32 чипа. Каждый набор микросхем, соединенных между собой для хранения целого байта (как показано выше), называется банком. Плата памяти емкостью четыре килобайта содержит четыре банка, каждый из которых состоит из восьми микросхем.
В таких 8-разрядных микропроцессорах, как 8080 и 6800, используются 16-разрядные адреса, с помощью которых можно адресовать 64 килобайта памяти. Когда вы подключаете плату памяти емкостью четыре килобайта, содержащую четыре банка микросхем, 16 адресных сигналов платы памяти выполняют следующие функции.
Десять адресных сигналов, с A0 по A9, напрямую подключены к микросхемам RAM. Адресные сигналы A10 и A11 позволяют выбрать, к какому из четырех банков осуществляется обращение. Адресные сигналы с A12 по A15 определяют, какие адреса относятся к конкретной плате, то есть на какие адреса эта плата реагирует. Наша плата памяти емкостью четыре килобайта может занимать один из шестнадцати 4-килобайтных диапазонов во всем адресном пространстве процессора емкостью 64 килобайта:
от 0000h до 0FFFh;
от 1000h до 1FFFh;
от 2000h до 2FFFh;
…
от F000h до FFFFh.
Предположим, мы решили, что к этой плате памяти емкостью четыре килобайта будут относиться адреса в диапазоне от A000h до AFFFh. Значит, адреса с A000h по A3FFh будут заняты первым банком однокилобайтных микросхем, с A400h по A7FFh — вторым, с A800h по ABFFh — третьим, с AC00h по AFFFh — четвертым.
Обычно 4-килобайтная плата памяти предусматривает возможность изменения диапазона адресов, на которые она реагирует. Для этого используется так называемый DIP-переключатель (Dual Inline Package), представляющий собой набор крошечных переключателей (от двух до двенадцати) в корпусе с двухрядным расположением выводов, который вставляется в обычное гнездо для интегральной микросхемы.
Можно подключить его к четырем старшим адресным разрядам шины, используя схему компаратор.
Как вы помните, выход вентиля Искл-ИЛИ равен 1 только тогда, когда на его входы подаются разные значения. Выход вентиля Искл-ИЛИ — 0, если оба входных значения одинаковы.
Например, замыкание переключателей, соответствующих линиям A13 и A15, приведет к тому, что плата памяти будет реагировать на адреса с A000h по AFFFh. Когда значения адресных сигналов шины A12, A13, A14 и A15 равны значениям, установленным с помощью переключателей, выходы всех четырех вентилей Искл-ИЛИ равны 0, значит, выход вентиля ИЛИ-НЕ равен 1.
Затем вы можете объединить этот сигнал «Равно» с дешифратором «2 на 4», чтобы генерировать сигналыдля каждого из четырех банков памяти.
Если сигнал A10 равен 0, а A11 — 1, значит, выбран третий банк.
Если вы еще помните сложный процесс сборки массивов RAM из главы 16, можете предположить, что нам нужно использовать восемь селекторов «4 на 1» для выбора правильных выходных сигналов от четырех банков памяти. Однако в данном случае они не потребуются, и вот почему.
Как правило, выходные сигналы интегральных схем, совместимых с ТТЛ-чипами, принимают значения либо более 2,2 вольта (логическая единица), либо менее 0,4 вольта (логический ноль). Что произойдет, если вы попытаетесь соединить эти выходные сигналы? Например, к чему приведет соединение выходного сигнала, равного 1, одной схемы и выходного сигнала, равного 0, другой? Определенно ответить на этот вопрос нельзя, поэтому выходы интегральных схем обычно не соединяются друг с другом.
Выходной сигнал микросхемы 2102 известен как сигнал с тремя состояниями. Помимо логических 0 и 1, для этого выходного сигнала предусмотрено третье состояние, соответствующее отсутствию какого-либо сигнала, будто этот вывод микросхемы вообще ни к чему не подключен. Выходной сигнал микросхемы 2102 переходит в это третье состояние, когда вход CS равен 1. Это означает, что мы можем соединить соответствующие выходные сигналы всех четырех банков и использовать эти восемь комбинированных выходов в качестве восьми линий шины для ввода данных.
Заостряю ваше внимание на выходном сигнале с тремя состояниями, потому что он играет важную роль в работе шины. Практически все платы, подключенные к шине, используют ее линии ввода данных. В любой момент только одна подключенная к шине плата может задействовать эти линии. При этом выходные сигналы остальных плат должны находиться в третьем состоянии.
Микросхема 2102 — это статическая память с произвольным доступом, или SRAM (Static Random Access Memory), которая отличается от динамической памяти с произвольным доступом, или DRAM (Dynamic Random Access Memory). Памяти SRAM обычно требуется четыре транзистора для хранения одного бита (это не так много, как в триггерах из главы 16). Памяти DRAM для этого нужен только один транзистор. Однако недостаток памяти DRAM — необходимость использования более сложных вспомогательных схем.
Содержимое памяти SRAM, например микросхемы 2102, сохраняется только при наличии питания. Если питание отключается, содержимое исчезает. Это касается и памяти DRAM, однако микросхема DRAM также требует периодического считывания данных, даже если в них нет необходимости. Такой цикл обновления должен повторяться несколько сотен раз в секунду. Это все равно что периодически тормошить человека, чтобы он не заснул.
Несмотря на сложности, связанные с использованием памяти DRAM, постоянно увеличивающаяся емкость этих микросхем сделала их стандартом. В 1975 году компания Intel представила микросхему DRAM емкостью 16 384 бит. В соответствии с законом Мура емкость микросхем DRAM увеличивается в четыре раза каждые три года. Современные компьютеры обычно предусматривают гнезда для памяти прямо на системной плате, куда вставляются небольшие платы, называемые модулями памяти SIMM (Single Inline Memory Module) или DIMM (Dual Inline Memory Module), с несколькими микросхемами DRAM.
Теперь вы знаете, как создавать платы памяти, однако не стоит заполнять памятью все адресное пространство микропроцессора. Нужно выделить некоторую его часть для устройства вывода.
Электронно-лучевая трубка (ЭЛТ) была наиболее распространенным устройством вывода для компьютеров. ЭЛТ, подключенная к компьютеру, обычно называется дисплеем, или монитором; электронный компонент, подающий дисплею сигнал, именуется видеоадаптером. Часто видеоадаптер занимает в компьютере отдельную видеокарту.
Несмотря на то что двумерное изображение дисплея или телевизора может показаться сложным, на самом деле оно создается одним непрерывным лучом света, который быстро пробегает по экрану. Луч начинает свое движение в верхнем левом углу и перемещается по экрану вправо, после чего возвращается к левому краю, чтобы начать следующую горизонтальную линию, известную как строка развертки. Перемещение луча справа налево к началу очередной строки — обратный ход по горизонтали. Когда луч заканчивает последнюю строку, он возвращается из нижнего правого в верхний левый угол экрана (обратный ход по вертикали), и весь процесс начинается снова. По американским стандартам телевизионного вещания это должно происходить 60 раз в секунду. Такая частота развертки достаточно высока, чтобы изображение не мерцало.
Телевизор устроен сложнее из-за использования чересстрочной развертки. Один кадр — отдельное неподвижное изображение — разбивается на два поля из четных строк (первое) и нечетных (второе). Частота строчной развертки, или частота следования строк, составляет 15 750 герц. Если разделить это число на 60 герц, получим 262,5 строки в одном поле кадра. Целый кадр содержит в два раза больше, то есть 525 строк развертки[26].
Вне зависимости от вида развертки дисплея непрерывный луч света, порождающий видеоизображение, управляется одним непрерывным сигналом. Хотя аудио- и видеосигналы телевизионной программы объединяются при трансляции или передаче через систему кабельного телевидения, в итоге они разделяются. Видеосигнал, который я опишу, идентичен сигналу, подающемуся на соответствующие входы и выходы видеомагнитофонов, камер и некоторых телевизоров.
В случае черно-белого телевидения этот видеосигнал достаточно прост и понятен. (Цвет все усложняет.) Шестьдесят раз в секунду в этот сигнал записывается импульс вертикальной синхронизации, который указывает на начало поля. Этот импульс — подача нулевого напряжения (земля) на протяжении 400 микросекунд. Импульс горизонтальной синхронизации указывает на начало каждой строки развертки: 15 750 раз в секунду в течение пяти микросекунд подается нулевое напряжение. Между импульсами горизонтальной синхронизации значение сигнала варьируется от 0,5 вольта (черный) до двух вольт (белый), оттенки серого соответствуют значениям от 0,5 до 2 вольт[27].
Таким образом, изображение телевизора является отчасти цифровым, отчасти аналоговым. Это изображение разделено по вертикали на 525 строк, однако внутри каждой из строк развертки напряжение непрерывно меняется, что обусловливает вариации яркости. Однако напряжение не может изменяться произвольно. Существует предельная скорость, с которой телеэкран может реагировать на изменение сигнала. Этот показатель называется «пропускная способность».
Пропускная способность — чрезвычайно важная концепция в сфере связи, поскольку определяет, какой объем информации можно передать по конкретному каналу. В случае телевизора пропускная способность — предельная скорость, с которой видеосигнал может измениться от уровня черного до уровня белого, а затем снова до уровня черного. По американским стандартам телевизионного вещания полоса пропускания примерно равна 4,2 мегагерца[28].
Когда дисплей необходимо подключить к компьютеру, его неудобно представлять в виде гибрида аналогового и цифрового устройства. Его легче рассматривать как полностью цифровое устройство. С точки зрения компьютера видеоизображение удобнее отобразить как прямоугольную сетку с дискретными точками, называемыми пикселами (pixel от picture element — «элемент изображений»).
Полоса пропускания видеодисплея ограничивает количество пикселов в горизонтальной строке развертки. Я определил полосу пропускания как скорость, с которой видеосигнал может измениться от уровня черного до уровня белого, а затем снова до уровня черного. Полоса пропускания телевизоров, равная 4,2 мегагерца, допускает создание двух пикселов 4,2 миллиона раз в секунду. Если разделить произведение 2 ? 4 200 000 на 15 750 (частота строчной развертки), получим 533 пиксела в каждой строке. Однако примерно треть этих пикселов оказывается невидимой из-за их нахождения на дальних концах изображения или из-за обратного хода луча по горизонтали. Таким образом, каждая строка — это примерно 320 пикселов.
Точно так же по вертикали не насчитывается 525 пикселов. Некоторые из них теряются в верхней и нижней части экрана и во время обратного хода луча по вертикали. Кроме того, не следует полагаться на чересстрочную развертку при использовании телевизора в качестве дисплея. Таким образом, реальное количество пикселов по вертикали равно приблизительно двумстам.
Итак, можно сказать, что разрешение примитивного видеоадаптера, подключенного к обычному телевизору, составляет 320 пикселов по горизонтали на 200 пикселов по вертикали, или 320 ? 200.
Чтобы определить общее количество пикселов в этой сетке, можете подсчитать их или просто перемножить числа 320 и 200, получив 64 тысячи пикселов. В зависимости от того, как вы сконфигурировали видеоадаптер (о чем расскажу чуть позже), каждый пиксел может быть либо черным, либо белым (черно-белое изображение), либо обладать определенным цветом (цветное изображение).
Предположим, нам нужно отобразить на этом дисплее некоторый текст. Сколько текста может на нем уместиться?
Очевидно, все зависит от того, сколько пикселов используется для отображения каждого текстового символа. Далее представлен один из возможных подходов, при котором для каждого символа используется сетка 8 ? 8 (64 пиксела).
Эти символы соответствуют кодам ASCII с 20h по 7Fh. Коды ASCII с 00h до 1Fh отведены под неотображаемые символы.
В приведенном примере каждый символ соответствует не только 7-битному ASCII-коду, но и 64 битам на экране, определяющим его внешний вид. Эти 64 бита тоже можно рассматривать в качестве своеобразного кода.
При таком способе представления символов вы можете уместить на видеодисплее с разрешением 320 ? 200 пикселов 25 строк по 40 символов. Этого достаточно, например, для короткого стихотворения Эми Лоуэлл.
Видеоадаптер потребляет некоторое количество оперативной памяти для хранения содержимого дисплея, а микропроцессор должен иметь возможность записывать данные в эту память для изменения изображения на этом дисплее. Удобнее всего, когда память RAM является частью общего адресного пространства процессора. Сколько же оперативной памяти потребуется видеоадаптеру, который я описываю?
Это непростой вопрос! Значение может варьироваться от 1 до 192 килобайт!
Сначала оценим нижний предел. Один из способов уменьшения требований к памяти заключается в том, чтобы ограничить возможности адаптера только отображением текста. Мы уже выяснили, что можем отобразить 25 строк по 40 символов, или 1000 символов. В памяти RAM на видеоплате должны храниться только 7-битные ASCII-коды соответствующих символов. Тысяча 7-битных значений — приблизительно 1024 байт, или один килобайт.
Такая плата видеоадаптера также должна оснащаться генератором символов, содержащим точечные шаблоны всех символов ASCII — вроде тех, которые были показаны на одном из предыдущих изображений. Как правило, генератор символов — это постоянное запоминающее устройство, или ПЗУ (Read-Only Memory, ROM), интегральная схема, изготовленная таким образом, что в ответ на обращение к конкретному адресу всегда выдаются одни и те же данные. В отличие от памяти RAM, ПЗУ не предусматривает никаких сигналов для ввода данных.
Память ПЗУ можно считать схемой, преобразующей один код в другой. ПЗУ, в котором хранятся точечные шаблоны (8 ? 8 пикселов) для 128 символов ASCII, может предусматривать семь адресных входов (для ASCII-кодов) и 64 выхода для данных. Таким образом, ПЗУ преобразует 7-битный ASCII-код в 64-битный, определяющий внешний вид символа. Однако наличие 64 выходов сделали бы чип слишком громоздким! Гораздо удобнее использовать десять адресных входов и восемь выходов. Семь адресных сигналов указывают на конкретный ASCII-символ. (Эти семь битов адреса подаются с выходов RAM на видеоплате.) Другие три адресных сигнала определяют строку. Например, биты адреса 000 соответствуют верхней строке точечного шаблона, а биты 111 — нижней строке, восемь выходных битов — восьми пикселам каждой строки.
Предположим, что ASCII-код равен 41h. Этот код сопоставим с заглавной буквой A. Ее точечный шаблон состоит из восьми строк по восемь бит. В следующей таблице приведены 10-битные адреса (пробел отделяет ASCII-код от кода строки) и сигналы на выходах для данных, соответствующие заглавной букве A.
Адрес
Сигнал на выходе
1000001 000
00110000
1000001 001
01111000
1000001 010
11001100
1000001 011
11001100
1000001 100
11111100
1000001 101
11001100
1000001 110
11001100
1000001 111
00000000
Вы видите букву A, нарисованную единицами на фоне нулей?
Видеоадаптер, воссоздающий только текст, также должен предусматривать возможность отображения курсора — черточки в том месте экрана, где появится следующий введенный с клавиатуры символ. Номера строки и столбца, совпадающие с позицией курсора, обычно хранятся в двух 8-битных регистрах на видеоплате, в которые микропроцессор может записывать значения.
Если плата видеоадаптера не ограничивается воспроизведением текста, она называется графической. Записывая данные в оперативную память графической платы, микропроцессор может выводить на экран изображения, а также отображать текст разных размеров и стилей. Графическим платам требуется больше памяти, чем текстовым. При разрешении 320 ? 200 изображение состоит из 64 тысяч пикселов. Если каждый пиксел соответствует одному биту памяти, такой плате требуется 64 тысячи бит, или 8000 байт, оперативной памяти. Это, конечно, абсолютный минимум. То, что один бит памяти равен одному пикселу, позволяет использовать только два цвета, например черный и белый. Значение ноль бит может соотноситься с черным пикселом, а один бит — с белым.
Разумеется, черно-белые телевизоры отображают не только черные и белые пикселы. Они также способны воспроизводить множество оттенков серого. Чтобы графическая плата могла передать оттенки серого, для каждого пиксела обычно отводится целый байт памяти RAM, причем значение 00h соответствует черному цвету, FFh — белому, а все промежуточные значения — разнообразным оттенкам серого. Видеоплате, отображающей 256 оттенков серого на дисплее с разрешением 320 ? 200, требуется 64 тысячи байт памяти. Это почти все адресное пространство одного из 8-битных микропроцессоров, о которых я говорил ранее!
Использование полноцветного режима предполагает выделение трех байтов на каждый пиксел. Если вы рассмотрите экран телевизора или компьютерного дисплея через увеличительное стекло, то обнаружите, что каждый цвет создается различными комбинациями основных цветов: красного, зеленого и синего. Чтобы отобразить весь диапазон, требуется по одному байту для указания интенсивности каждого из трех основных цветов, то есть 192 тысячи байт памяти RAM. (В последней главе я подробно остановлюсь на графике.)
Количество различных цветов, которые способен отобразить видеоадаптер, определяется количеством битов, выделенных для каждого пиксела. Это соотношение может показаться знакомым, поскольку в нем используется степень двойки:
Количество цветов = 2 количество битов на пиксел.
Разрешение 320 ? 200 пикселов максимально для типичного телевизора. Именно поэтому мониторы, созданные специально для компьютеров, имеют гораздо более широкую полосу пропускания, чем телевизионные экраны. Первые мониторы, которые продавались с компьютером IBM PC в 1981 году, могли отображать 25 строк по 80 символов. Именно такое количество символов воспроизводилось дисплеями CRT, которые использовались с большими и дорогими мейнфреймами IBM. Для компании IBM число 80 имеет особое значение. Почему? Именно столько символов умещалось на перфокарте IBM! Действительно, поначалу дисплеи CRT, подключенные к мейнфреймам, часто использовались для просмотра содержимого перфокарт. Даже сегодня кое-кто продолжает называть строки дисплея, отображающего только текст, картами.
На протяжении многих лет видеоадаптеры совершенствовались в плане разрешения и цветопередачи. Важная веха была достигнута в 1987 году, когда в персональных компьютерах IBM серии Personal System/2 и Apple Macintosh II начали применяться видеоадаптеры, способные отображать 640 пикселов по горизонтали и 480 пикселов по вертикали. С тех пор этот показатель — минимальное стандартное разрешение для видео.
Это может показаться невероятным, но причина важности разрешения 640 ? 480 связана с работой Томаса Эдисона! Примерно в 1889 году, когда Эдисон и его инженер Уильям Диксон работали над кинокамерой «Кинетограф» и проектором «Кинетоскоп», они решили сделать так, чтобы ширина движущегося изображения на треть превосходила его высоту. Соотношение ширины и высоты изображения называется характеристическим отношением. Соотношение, которое выбрали Эдисон и Диксон, обычно выражается как 1,33 : 1, или 4 : 3. На протяжении более 60 лет это соотношение использовалось при производстве кинофильмов и конструировании телевизоров. Только в начале 1950-х голливудские студии начали снимать фильмы в широкоэкранном формате, что и составило конкуренцию телевидению благодаря выходу за рамки соотношения 4 : 3.
Большинство компьютерных мониторов (и телевизоров) имеет характеристическое отношение 4 : 3[29], в чем вы можете убедиться с помощью линейки. Разрешение 640 ? 480 также соответствует отношению 4 : 3. Это значит, что горизонтальная линия, состоящая, например, из 100 пикселов, имеет ту же физическую длину, что и вертикальная линия из 100 пикселов. Таким образом, пикселы являются квадратными, что считается предпочтительным для компьютерной графики.
Видеоадаптеры и мониторы практически всегда имеют разрешение 640 ? 480, однако они также способны работать в видеорежимах с разрешением 800 ? 600, 1024 ? 768, 1280 ? 960 и 1600 ? 1200.
Обычно компьютерный дисплей и клавиатура кажутся нам связанными, поскольку символы, введенные с клавиатуры, отображаются на экране. Однако на самом деле они, как правило, не зависят друг от друга.
Каждая клавиша на клавиатуре, по сути, простой переключатель. При нажатии клавиши переключатель замыкается. Первые клавиатуры напоминали пишущую машинку и состояли всего из 48 клавиш; клавиатура современных персональных компьютеров часто насчитывает более 100 клавиш.
Клавиатура, подключенная к компьютеру, должна предусматривать некоторое оборудование, предоставляющее уникальный код для каждой нажатой клавиши. Вы можете предположить, что этот код является ASCII-кодом, соответствующим символу на клавише. Однако разрабатывать аппаратные средства, определяющие ASCII-код, непрактично и нежелательно. Например, клавиша A может соответствовать ASCII-коду 41h или 61h в зависимости от того, нажимается ли вместе с ней клавиша Shift. Кроме того, на современных компьютерных клавиатурах есть множество клавиш, которые не соответствуют символам ASCII. Код, предоставляемый аппаратным обеспечением клавиатуры, называется скан-кодом. Для определения соответствия нажатой клавиши какому-либо ASCII-коду используется небольшая компьютерная программа.
Чтобы схема аппаратного обеспечения клавиатуры не стала чересчур запутанной, будем считать, что она состоит всего из 16 клавиш. При нажатии клавиши аппаратное обеспечение должно сгенерировать 4-битный код, принимающий двоичные значения в диапазоне от 0000 до 1111.
Аппаратное обеспечение клавиатуры содержит уже знакомые нам компоненты.
Шестнадцать клавиш представлены в виде простых переключателей в нижней левой части схемы. Четырехбитный счетчик многократно и быстро перебирает 16 кодов, соответствующих клавишам. Он должен делать это быстрее, чем человек нажимает и отпускает клавишу.
Выходные сигналы 4-битного счетчика подаются на входы Sel дешифратора «2 на 4» и селектора «4 на 1». Если не была нажата ни одна клавиша, ни один из входов селектора не будет равен 1. Следовательно, и выход не будет равен 1. Однако если нажата конкретная клавиша, то при соответствующем ей значении выходного сигнала 4-битного счетчика выход селектора будет равен 1. Например, при нажатии второй сверху и справа клавиши и выходном сигнале счетчика 0110 выход селектора будет равен 1.
Это код, соответствующий данной клавише. Когда клавиша нажата, ни одно другое значение выходного сигнала счетчика не приведет к тому, что выход селектора станет равным 1. Для каждой клавиши предусмотрен собственный код.
Если клавиатура состоит из 64 клавиш, вам понадобится 6-битный скан-код и 6-битный счетчик. Вы можете организовать клавиши в массив 8 ? 8, используя дешифратор «3 на 8» и селектор «1 на 8». Если клавиатура имеет от 65 до 128 клавиш, потребуется 7-битный код. Клавиши можно организовать в массив 8 ? 16 и использовать дешифратор «4 на 16» и селектор «8 на 1» (или дешифратор «3 на 8» и селектор «16 на 1»).
То, что происходит дальше в этой схеме, зависит от сложности интерфейса клавиатуры. Аппаратное обеспечение может предусматривать для каждой клавиши один бит оперативной памяти. Память RAM будет адресоваться счетчиком, а содержимым этой памяти может стать 0, если клавиша не нажата, и 1 — если нажата. Эту память RAM также может считывать микропроцессор для определения состояния каждой из клавиш.
Одна из полезных функций интерфейса клавиатуры — сигнал прерывания. Как вы помните, микропроцессор 8080 предусматривает входной сигнал, который позволяет внешнему устройству прерывать работу микропроцессора. В ответ на этот сигнал процессор считывает команду из памяти. Обычно это команда RST, заставляющая процессор перейти к определенной ячейке, где хранится программа для обработки прерывания.
Последнее периферийное устройство, которое опишу в этой главе, — устройство для долговременного хранения данных. Как вы помните, оперативная память вне зависимости от того, из чего она собрана (реле, вакуумных ламп или транзисторов), теряет свое содержимое при отключении питания. По этой причине компьютеру требуется устройство для долговременного хранения данных. Один проверенный временем способ — пробивание отверстий в бумажных или картонных картах, вроде перфокарт IBM. На заре эры небольших компьютеров для сохранения и последующей загрузки программ и данных отверстия пробивались в рулонах бумажной ленты.
Недостатки перфокарт и бумажной ленты в том, что их нельзя использовать повторно. Пробитое отверстие непросто заклеить. Еще один дефект — невысокая эффективность. Сейчас, если вы можете увидеть бит невооруженным глазом, можете с уверенностью сказать: «Он занимает слишком много места!»
По этим причинам гораздо чаще встречаются магнитные накопители. Принцип их работы был описан еще в 1878 году американским инженером Оберлином Смитом (1840–1926). Однако первое работающее устройство было создано только 20 лет спустя, в 1898 году, датским изобретателем Вальдемаром Поульсеном (1869–1942). Поначалу «телеграфон» Поульсена предназначался для записи телефонных сообщений, если никто не мог взять трубку. Для записи звука на стальной проволоке применялся электромагнит — вездесущее устройство, с которым мы познакомились, когда рассматривали телеграф. Электромагнит намагничивал проволоку в соответствии с изменениями формы звуковой волны, а для воспроизведения звука проволока с той же скоростью протягивалась вдоль обмоток электромагнита, индуцируя в них ток. Электромагнит, созданный для хранения и считывания информации, называется головкой вне зависимости от типа магнитного накопителя.
В 1928 году австрийский изобретатель Фриц Пфлеумер (1881–1945) запатентовал магнитное записывающее устройство, в котором использовалась бумажная лента с металлическим напылением, сделанная по технологии, разработанной для металлизированных полосок на сигаретах. Вскоре бумагу заменила более прочная ацетилцеллюлозная основа, благодаря чему родился один из самых надежных и хорошо известных носителей информации. Магнитная лента, теперь упакованная в пластиковые кассеты, нашла применение в записи и воспроизведении музыки и видео.
Первая коммерческая система для записи цифровых компьютерных данных на магнитную ленту была представлена компанией Remington Rand в 1950 году. В то время на катушке ленты шириной в полдюйма (1,27 сантиметра) могло поместиться несколько мегабайт. На заре эры домашних компьютеров люди превращали обычные кассетные магнитофоны в устройства для записи. С помощью небольших программ содержимое блока памяти записывалось на ленту, а позднее считывалось с нее. Первые компьютеры IBM PC предусматривали разъем для кассетного накопителя. Магнитная лента употреблялась для долгосрочного архивирования данных. Тем не менее этот носитель не идеален из-за невозможности быстрого перехода к нужному месту на ленте. Обычно для этого требуется перемотать ее вперед или назад, а это занимает время.
Носителем, обеспечивающим более быстрый доступ к данным, является диск. Сам диск вращается вокруг своей оси, пока над ним перемещается штанга с одной или несколькими головками, благодаря чему доступ к любой области диска осуществляется очень быстро.
Магнитные диски фактически использовались для звукозаписи еще до магнитной ленты. Однако первый диск для хранения компьютерных данных был изобретен в компании IBM в 1956 году. Дисковая система памяти RAMAC (Random Access Method for Accounting and Control) содержала 50 металлических дисков диаметром 60 сантиметров и могла хранить пять мегабайт.
С тех пор размер дисков значительно уменьшился, а емкость увеличилась. Диски обычно делятся на гибкие (floppy, дискеты) и жесткие (hard, несъемные диски). Дискета — это пластиковый диск, заключенный в корпус (корпус поначалу делали картонным, затем — пластиковым). Пластиковый корпус не дает дискете гнуться, поэтому она уже не такая гибкая, как раньше, хотя и продолжает называться гибким диском. Для записи и чтения данных с дискеты ее необходимо поместить в специальное устройство под названием флоппи-дисковод. Диаметр первых гибких дисков составлял около 20 сантиметров. В первых компьютерах IBM PC устанавливались гибкие диски диаметром около 13 сантиметров; затем дискеты диаметром около девяти сантиметров. Возможность извлекать эти гибкие диски из дисковода позволяет с их помощью переносить данные с одного компьютера на другой. Кроме того, на дискетах распространялось коммерческое программное обеспечение.
Жесткий диск обычно состоит из нескольких металлических дисков, встроенных в дисковод. Как правило, жесткие диски работают быстрее и вмещают больше данных, чем дискеты, однако их невозможно извлечь.
Поверхность диска разделена на концентрические кольца, называемые дорожками. Каждая дорожка разделена на сектора, которые хранят определенное количество данных, обычно 512 байт. Флоппи-дисковод первого компьютера IBM PC использовал лишь одну сторону 13-сантиметровой дискеты и разделял ее на 40 дорожек по восемь секторов, каждый из которых хранил 512 байт. Таким образом, на каждой дискете находились 163 840 байт, или 160 килобайт. Дискеты 3,5 дюйма, использовавшиеся в PC-совместимых компьютерах, имели две стороны по 80 дорожек и по 18 секторов на дорожку. Каждый сектор такой дискеты хранил 512 байт, что обеспечивало общую емкость в 1 474 560 байт, или 1440 килобайт.
Емкость первого жесткого диска, представленного в 1983 году IBM в компьютере PC/XT, составляла десять мегабайт. В 1999 году менее чем за 400 долларов можно было приобрести жесткий диск емкостью 20 гигабайт (20 миллиардов байт).
Как правило, дискета или жесткий диск предусматривает собственный электронный интерфейс, однако для обмена данными с микропроцессором требуется еще один. Наиболее популярные стандарты интерфейсов для жестких дисков — SCSI (Small Computer System Interface), ESDI (Enhanced Small Device Interface) и IDE (Integrated Device Electronics)[30]. Все эти интерфейсы используют прямой доступ к памяти (DMA) для того, чтобы перехватить управление шиной и осуществлять обмен данными непосредственно между оперативной памятью и диском, минуя микропроцессор. При этом обмен информацией происходит фрагментами, соответствующими размеру дискового сектора, который обычно равен 512 байт.
Многие начинающие пользователи домашних компьютеров, наслушавшись разговоров о мегабайтах и гигабайтах, начинают путать полупроводниковую оперативную память с жестким диском. В последние годы появилось правило, позволяющее избежать путаницы в терминологии. Согласно ему слово «память» следует использовать только для обозначения полупроводниковой оперативной памяти, а термины «накопитель» и «запоминающее устройство» — для обозначения всего остального, то есть дискет, жестких дисков и магнитной ленты. В этой книге я старался придерживаться этого принципа.
Наиболее очевидное различие между памятью и накопителем в том, что память является энергозависимой: она теряет свое содержимое при отключении питания. Накопитель не зависит от питания. Данные сохраняются на дискете или жестком диске до тех пор, пока пользователь не сотрет их или не перезапишет. Тем не менее существует еще одно значительное различие, которое можно заметить, только поняв принцип работы микропроцессора. При подаче адресного сигнала микропроцессор всегда обращается к памяти, а не к запоминающему устройству.
Перемещение данных из накопителя в память для их последующего использования микропроцессором требует дополнительных действий. Для этого микропроцессор должен выполнить небольшую программу, которая осуществляет обращение к диску.
Чтобы понять разницу между памятью и накопителем, можно использовать следующую аналогию: память похожа на рабочий стол. Вы можете работать со всем, что находится на столе. Накопитель подобен шкафу с папками. Если нужна какая-то из папок, вы должны встать, подойти к шкафу, достать нужную и положить ее на стол. Когда на вашем столе оказывается слишком много папок, нужно убрать некоторые из них обратно в шкаф.
Данные на диске хранятся в виде так называемых файлов. За сохранение и извлечение файлов отвечает чрезвычайно важная программа — операционная система.