| Предыдущая глава |
↓ Содержание ↓
↑ Свернуть ↑
| Следующая глава |
Еще был ряд процессоров (сделанных на однокристальных процессорах серии
1801) использовавшихся в "диалоговых вычислительных комплексах" (ДВК),
задуманных как ПЭВМ. И содержащих на "целой" (т.е. размером с две "половинки")
плате не только процессор и память, но и вообще всё, что ДВКашке нужно для
жизни: и последовательный интерфейс для консольного терминала, и параллельный
— для принтера, и средство связи с ГМД-70-12 — дисковода для восьмидюймовых
гибких дисков, и контроллер для пятидюймовых (собственного контроллера не
имеющих), и даже вроде что-то для грядущего винчестера... Для ДВК-1 этот
процессор засовывался внутрь "фрязинского" дисплея (Электроника-15-ИЕ-00-13),
сделанного на такой же корзине — там как раз было полтора свободных места.
ДВК-2, если ничего не путаю, дополнялась еще половинной платой контроллера
графического дисплея (КГД), подмешивающего к выдаваемому на монитор
видеосигналу, формируемому алфавитно-цифровым дисплеем, еще и бинарную
графическую картинку (1 бит на точку). Доступ со стороны процессора к этой
картинке — элементарно, через два регистра: в первый — номер слова, а через
второй можно это слово прочитать или перезаписать. ДВК-3 уже комплектовался
контроллером цветного графического дисплея (КЦГД), каковой представлял из себя
еще одну такую-же машинку как и основной процессор ДВКашки, связанную с ним
через последовательный интерфейс. Память у этой второй машинки была 18-и
разрядная: каждой точке соответствовало одно слово, по 6 бит на цвет. И слов
таких у неё было то ли 64К, то ли 128К, что давало возможность хранить
картинку с разрешением по-больше, чем у как раз появившихся примерно в то же
самое время писишных контроллеров EGA. Основная проблема (ну или если хотите -
особенность) всего семейства PDP-11 — малый объём адресного пространства -
всего 2^16=64Kб. В это адресное пространство 128К видеоОЗУ поместиться
конешно-же не могло, и включалось только краешком (вроде как только первые 32Кб,
и разумеется только 16 бит из 18). А всё целиком — через два регистра, так же
как и у КГД. (Некоторые КГДшные графические игрушки, малость переделанные под
КЦГД, загонялись прямо в контроллер и позволяли гонять чертей по экрану без
участия центрального процессора. А центральный процессор ДВК-3, если ничего не
путаю, вполне мог быть уже М4, т.е. с полноценным диспетчером памяти. То есть на
этом процессоре уже можно было запускать например ОС UNIX (который, как
известно, без аппаратной поддержки механизма виртуальной памяти работать не
может). Тем паче некоторые экземпляры стали уже оснащаться как раз появившимися
тогда у нас винчестерами...
К сожалению эта машина элементарно опоздала. Пойди она в серию буквально на
пару лет раньше (и/или будь на то государственная воля) — удалось бы избежать
наплыва писишек: в качестве ПЭВМ её хватило бы еще надолго. А дальше (в плане
решения проблем с маленьким адресным пространством) возможны варианты от
микро-VAX`а — следующей уже 32-х разрядной разработки той же фирмы, до
собственной оригинальной многопроцессорной системы МАРС (ориентированной на ЯВУ,
в частности Модула-2), которая к тому моменту уже выпускалась мелкой серией и
выполнена была как раз в том же самом конструктиве...
В семействе аналогов PDP-11 имелся так-же совсем маленький и дешевый
"бытовой" компьютер БК-00-10 (и его развитие БК-00-11) — ценой примерно как у
телевизора — коробка с плёночной клавиатурой прямо на верхней крышке
(по-мне так жутко неудобной). В качестве дисплея к нему подключался
обыкновенный телевизор, а в качестве средства хранения данных — бытовой
магнитофон.
Имелось для учебных целей нечто подобное (названия не припомню), но
двухпроцессорное. Второй процессор — для графики и интерфейсов, в т.ч.
локальной сети на предмет подключить целый класс таких машинок к более мощной
(и главное — снабженной дисководами) учительской машине (типа той-же ДВК) на
предмет загрузки программного обеспечения, ну и сохранения (а так же контроля)
чего там ученики понапишут.
Имела место быть так же и цельнотянутая с Professional-350 полномасштабная
ПЭВМ Электроника-85. Ни с чем кроме самоё себя аппаратно не совместимая,
закрытая конструкция по габаритам не отличающаяся от писишки и в точности так-же
снабженная цветным графическим дисплеем и винчестером. Правда не очень
большим — всего на 5 Мб (какие тогда были). Однако чтобы развести там UNIX
(точнее ОС Демос-1) этого вполне хватало, но юзерам приходилось ходить со
своими дискетками. (Нам, избалованным терабайтами, сейчас уже сложно оценить
много это 5 мегабайт или мало? Для мелкой одно— (точнее полутора-задачной)
операционной системы реального времени типа RT-11 (не просто аналог, а еще и
"бабушка" МС-ДОС`а) — очень много. Ощущение подобное описанному в своё время
Николаем Василичем (правда по другому поводу): "...а печатной бумаги развелось
столько, что и не придумаешь скоро, что бы такое еще в неё завернуть". Но UNIX -
это ведь БОЛЬШАЯ операционная система (говорили: "самая маленькая из больших") и
на пяти мегабайтах ей тесновато. Однако дистрибутив того же самого первого
Демоса вместе со всеми описаниями и всеми исходными текстами абсолютно всего что
в нём было — занимал всего одну десяти-мегабайтную ленту. (Правда для второго -
три ленты, хоть и неполные.) А СМ-1420 с приводом DM на 14 Мбайт (и парой DK на
два с половиной) под управлением второго Демоса уверенно обслуживала
терминал-класс на шестнадцать посадочных мест. (Именно столько в одном
мультиплексоре каналов.) И там на нехватку дискового пространства уже никто не
жаловался...
Еще в оном семействе были какие-то ни разу не попадавшиеся мне на глаза
специализированные ЭВМ, в т.ч. для управления станками с ЧПУ.
Но всё это, так сказать, вид снаружи.
Рассмотрим (наконец!) что же такое из себя PDP-11 представляла изнутри.
Итак: PDP-11 это ЭВМ изначально предназначенная для решения задач
управления чем ни будь железным в реальном масштабе времени. (Всё ихнее
"третье поколение" — т.н. "мини-ЭВМ" именно под это и заточено.)
Основное требование — быстрая реакция на внешние события. Следовательно -
развитый механизм прерываний. Так-же необходимость подключения самого
различного оборудования, в т.ч. и существенно нестандартного. Отсюда -
"открытая" архитектура в виде интерфейса "общая шина", которая и соединяет
собою всё что в эту машину входит — и процессор и память и все контроллеры
внешних устройств. (Каждое устройство выглядит со стороны этого интерфейса в
точности так же как и память — в виде одной или нескольких адресуемых ячеек.)
Решение задач вычислительного характера — по остаточному принципу. Поэтому
разрядность машинного слова по сравнению с "бухгалтерскими" машинами второго
поколения значительно снижена, что позволило сократить объём, стоимость и
повысить надежность аппаратуры. Система команд тоже ужата до необходимого
минимума и сделана по-возможности "ортогональной" — т.е. такой что
неукоснительно соблюдаются несколько принципов как-бы "перпендикулярных" друг к
другу. (Например чтобы любая команда была применима к любому имеющемуся в
процессоре регистру с использованием любого "метода адресации".)
Но так как к задачам "реального времени" относится и реакция на
кнопконажимание пользователей, рассевшихся за терминалами, т.е. "диалоговые"
задачи, то данный класс машин стал постепенно захватывать и эту область
(изначально бывшую вотчиной "больших" ЭВМ), для чего стали появляться
"старшие" модели с расширенным набором команд, средствами ускорения вычислений
и защиты памяти. И вообще с повышенным количеством ресурсов всех видов.
Центральной частью вычислительной системы, связывающей её в единое целое,
является магистральный интерфейс, известный как "общая шина". Она включает шину
данных Д (16 разрядов), шину адреса А (16, 18 или 22 разряда — у старших
моделей) и различные управляющие сигналы. (Всего что-то типа 56 линий.) В том
числе два особо важных: СИА — "синхронизация активного устройства" и СИП -
"синхронизация пассивного". Т.е. одно из устройств является "активным" -
инициатором обмена данными. Его еще иногда называют "задатчиком". (Чаще всего
это центральный процессор, но не обязательно.) Оно выставляет адрес. А то
устройство, чей это адрес, выступает в роли "пассивного", его еще иногда
называют "исполнителем".
Обмен информацией по магистрали происходит асинхронно — по принципу
"рукопожатие". Начинается он с того, что задатчик выставив на шину А адрес,
извещает всех об этом передним фронтом сигнала СИА. (Говорит: эй ты, такой-то
такой-то!) Обнаружив это, каждое пассивное устройство должно проверить — не к
нему ли задатчик обращается? Если да, то ответить передним фронтом сигнала СИП.
(Типа: я вас слушаю, сэ-э-эр!) Активное устройство ждёт появления СИП в течении
некоторого "времени таймаута" (довольно большого: шина может быть длиной до десяти
метров). Если не дождалось — считает что устройства с таким адресом нет, и
предпринимает меры. (Это вам не писишка с синхронной шиной: в первом тактовом
интервале задатчик выставил адрес, а во втором тупо считал что-то с шины данных.
А уж выставил туда кто-то что либо осмысленное или нет — его не касается.)
Если устройство откликнулось — дальше всё зависит от намерений задатчика.
Каковых может быть три, известных как циклы шины: "чтение", "запись" и
"чтение-пауза-запись". Задатчик извещает всех об этом заранее, выставляя
соответствующий 2-х битный код одновременно с адресом.
Если предполагается запись, то задатчик выставляет данные на шину Д
одновременно с адресом, а исполнитель передним фронтом СИП извещает его, что
данные считаны и их можно убирать. Услышав это, задатчик убирает сигнал СИА
и теперь ему остаётся дождаться заднего фронта СИП — и можно переходить к
следующему обращению. (Хотя здесь я не очень уверен: вполне возможно, что для
унификации с циклом "чтение-пауза-запись" брать информацию с шины Д исполнителю
надлежит не по переднему, а по заднему фронту СИА. Для магистрали с раздельными
шинами адреса и данных это без разницы, но есть вариант магистрали с
совмещенными шинами (вот как раз у Э-60) — там выставить одновременно и адрес и
данные никак не получится — шина-то одна. Поэтому там всё сложнее.)
Если предполагается чтение, то исполнитель должен выставить слово данных
вместе с передним фронтом СИП, а задний фронт СИА указывает ему что их можно
уже убирать.
Третий тип цикла шины заточен под такие машинные команды, в которых
результат помещается по адресу операнда. И к тому-же использует особенности
энергонезависимых запоминающих устройств на ферритовых колечках: у них чтение -
разрушающее. То есть информация там хранится в виде направления намагниченности.
И чтобы считать информацию — надо перемагнитить все колечки в одну сторону.
Тогда с тех, что были намагничены по-другому будет импульс, а с тех чьё
состояние не изменилось — нет. И вот после этого надо записать только-что
считанную информацию обратно. Но ведь записать можно уже новое значение, только
чуть-чуть подождав до окончания вычислений. (Тем паче что память всегда
работает медленнее чем процессор.) Здесь, как и при чтении, исполнитель
выставляет старое значение вместе с передним фронтом СИП, а новое должен
прочитать по заднему фронту СИА. Но ведь старое значение он с шины Д еще не
убрал! Убирает, ждёт некоторое время чтобы закончились переходные процессы,
считывает и использует по назначению новое значение с шины Д и только после
этого убирает сигнал СИП — сигнал для активного устройства, что значение с
шины Д можно наконец убирать.
Таким образом в течении некоторого времени на шину Д выставляют информацию
одновременно два устройства. Это вполне допустимо, т.к. шина организована по
принципу "монтажное ИЛИ" (на элементах "с открытым коллектором"). Т.е. её линии
подтянуты к питанию специальными резисторами, находящимися на их концах. (И
служащими так-же в качестве "терминаторов", предотвращающих отражение
электромагнитной волны от конца линии.) В результате логический ноль
обозначается высоким уровнем сигнала, а логическая единица образуется если
"посадить" линию на землю. Что без всякого ущерба друг для дружки могут
одновременно сделать несколько устройств.
Это-же активно используется, например, при требовании прерывания:
устройство, желающее чтобы его обслужили, просто сажает общую для всех линию
требования прерывания на землю. И отпускает только когда его обслужат. Но
процессору надо узнать, кого обслуживать — для этого и служат "вектора
прерывания". Номер своего вектора устройство сообщает получив сигнал
"подтверждение прерывания" — просто выставляет соответствующее число на
шину данных (после чего снимает требование). Но сигнал подтверждения прерывания
разрывный: если устройству ничего от процессора не надо, оно просто
воспроизводит на выход (следующему устройству в цепочке) то что пришло ему по
этой линии. А если оно желает прерывания — то не воспроизводит. Свой вектор
выставит то устройство (из желающих оного), до которого это "подтверждение"
дошло. Т.е. приоритет убывает по мере удалённости от процессора. Как
регламентируются моменты выставления и убирания номера вектора и какие сигналы
в этом участвуют, вспоминать не буду — догадайтесь сами.
У младших моделей — одна, общая для всех линия запроса прерывания; у старших
моделей несколько — с разным уровнем приоритета.
Активным устройством может быть не только процессор, но и кто угодно — для
этого на шине имеется специальное устройство — "арбитр", заведующий
предоставлением доступа к ней. Что даёт возможность как "прямого доступа к
памяти" для особо продвинутых устройств, так и возможность для совместной
работы нескольких процессоров. Как конкретно производится доступ желающих к
управлению магистралью вспоминать не будем — для дальнейшего изложения это не
принципиально.
Внимание: я рассказал только общий принцип передачи данных по общей шине как
сам его помню. В реальности её протокол несколько сложнее. Особенно для варианта
с совмещенной шиной адреса и данных. В частности, там есть отдельный сигнал,
указывающий на передачу одного байта (а не целого слова), и отдельный сигнал,
указывающий что обращение идёт к внешнему устройству (для упрощения дешифратора
адреса). И главное — данные там выставляются и убираются не по фронтам сигналов
| Предыдущая глава |
↓ Содержание ↓
↑ Свернуть ↑
| Следующая глава |