[МУЗЫКА] [МУЗЫКА] Сейчас я предлагаю заглянуть немножко внутрь ЭВМ, как они устроены внутри. Первые ЭВМ имели прямую аппаратную организацию. То есть каждое действие имело отдельную электрическую схему, которая делалась только в этом месте. Если вам надо было для каких-то операций сделать десять сложений, то, значит, было десять сумматоров и они не могли переиспользоваться. И, кстати, это, конечно, объёмно, затратно, много устройств, много тока потребляет. Но до сих пор все современные суперЭВМ работают именно так, потому что это именно самый быстрый способ реализации тех действий, о которых мы с вами говорили: арифметика, логика, передача управления, и так далее. В 1951 году англичанин Морис Винсент Уилкс предложил принципиально другое решение, он предложил создавать такие мелкие кирпичики — микрокоманды, из которых можно формировать микропрограммы, реализующие команды внешнего уровня, то есть команды, которые видит программист на машине. Он описал это в виде книжки довольно тоненькой, и книга была издана в 1951 году. Представляете, в своё время, когда кибернетика была лженаукой американских мракобесов, тем не менее, поскольку наши военные понимали, что компьютеры, вычислительные машины — это вещь важная, книга была немедленно переведена на русский язык и в том же 1951 году издана. Поверьте, и в советское время в конце 80-ых годов это было немыслимо, когда книга появлялась на Западе, и в этом же году она появлялась на русском языке у нас в стране. А эта книга появилась, я даже держал это издание в руках. Как всё это реализуется? Аппаратно реализованы только самые мелкие кирпичики: один плюс, один, скажем, умножить, одно логическое И/ИЛИ, и так далее. И они так оформили, что из этих кирпичиков можно собирать сложные действия. Каждое действие, которое проводится — один такт, называется микрокомандой. Микрокоманды хранятся в микропамяти. Она маленькая, но очень быстрая микропамять и, кстати, очень дорогая. Представьте себе память, у которой ширина 60-100 битов. И вот скажем таких слов 4000, вот это микропамять. И дальше всё происходит следующим образом. ЭВМ выбирает код операции, дошифрирует его и в результате дошифрации получает адрес в микропамяти первой микрокоманды, где начинается микропрограмма в соответствии этой команде внешней архитектуры. Дальше начинают работать микропрограммы, выполняя микрокоманды одна за другой. Как это происходит, в свою очередь? В ЭВМ есть специальный регистр, у которого ширина совпадает с шириной микрокоманды, те самые 60-100 битов, и вот в каждом такте этот регистр проверяет работы всей машины. Регистр микрокоманд разбит по полям. Вот это поле управляет арифметико-логическим устройством, это — управляет памятью, это — управляет таймером, это — управляет выборкой следующей микрокоманды, и так далее. И в результате каждый такт регистра микрокоманд управляет всем компьютером, всей ЭВМ, а потом, в конце, выбираются следующие микрокоманды. Там тоже есть определённый водопровод, то есть когда исполняется одна микрокоманда, следующие микрокоманды во многих случаях могут быть прочитаны из микропамяти с тем, чтобы не тратить время на ожидание выборки микрокоманды. Итак, ещё раз повторю, что группа микрокоманд, которая реализует одну команду внешнего уровня, называется микропрограммой. В старые времена микропрограммирование было очень тяжёлой работой, сами представьте, чтобы человек написал без ошибок такую длинную последовательность ноликов и единичек, все эти микрокоманды, которые правильно устроены, правильно пролинкованы, просто немыслимо. Так вот чуть позже появились микроассемблеры, самый известный из них AMD, Advanced Micro Devices фирма. На этом микроассемблере стало немножко легче писать микропрограммы, но, всё равно, ошибка на ошибке и ошибкой погоняет. И с этой историей у меня связана личная история. Я в этом курсе часто буду вставлять личные истории. Когда мы сделали свою машину «Самсон» — я о ней буду говорить в этом курсе — мы знали, что такое микропрограммирование, знали, что это очень трудная задача, и стали ездить по заводам Советского Союза, изучать, где кто как работает. Например, побывал я на заводе имени Орджоникидзе в городе Минске. В те годы это, признаться, лучший завод по производству ЭВМ. По крайней мере, когда президент Burroughs приехал с визитом в СССР, попросил показать ему завод ЭВМ, его повезли не в Москву, не в Казань, а именно в Минск, поскольку это был самый продвинутый на то время завод ЭВМ. И вот мы съездили туда, поговорили, там была руководительница отдела по фамилии Романовская, я помню. У неё есть 40 человек подчинённых, и они для машины ЕС-1035 делали микропрограммы два года, 40 человек — два года. И даже этим коллективом умудрились сделать ошибки. Все знали, что умнажать на −256 нельзя в этой машине, сломается. Ну это мелочь, конечно, но, тем не менее, ошибка была и трудно было её исправить. И мы стали ломать голову, как из этой ситуации выйти, потому что, представьте себе, у меня вся лаборатория была 15 человек. И мы делали и аппаратуру, и трансляторы, и операционные схемы, поэтому, представьте себе, что мы выделим 40 человек на микропрограммирование и два года — ну просто немыслимо! И вот в нашем коллективе один мой ученик — тогда ещё очень молодой, теперь он уже... он всего лет на пять моложе меня — Николай Фоминых придумал систему микропрограммирования на языках высокого уровня. Это в каком-то смысле революционная идея. И даже сегодня это нисколько не устарело, хотя он это сделал 30 лет назад. То есть каждая микрокоманда пишется по-прежнему отдельно, отдельно строчкой, но на языке Алголе-68. Он написал более 100 операций, несколько десятков типов данных, там что такое пересылка по шине. Вот плюс — это не сложение как два плюс три равно пять, а плюс — это некоторая операция, которая допустима в микросхеме АЛУ. И причём так, там есть входы А и Б, вот из Б вычесть А можно, из А вычесть Б нельзя. Вот у Коли все эти операции, все эти проверки выполнялись. То есть основной объём его системы был проверки. В результате он создал такую схему, что... Опять-таки, личная история, но она имеет прямое отношение к этому вопросу. У меня есть традиция, что когда мы строим какую-то новую технологию, я всегда требую, чтобы первым пользователем был я. А вдруг технология барахло? Тогда над нами будут смеяться. А я этого не люблю. Поэтому я все новые технологии всю жизнь проверяю первым. Так вот когда Коля сделал систему микропрограммирования, я сказал: Хорошо, теперь я попробую написать микропрограмму «Самсона». Коля даже рассердился, обиделся. Как так? Я сам хотел! Ну вот, я настоял. Так вот, мне удалось одному за месяц написать все микропрограммы «Самсона», все! Я принёс их Коле показать. Он мельком глянул, говорит: Барахло! Иди, это не микропрограмма. Я так рассердился, говорю: Коля, так, вообще-то, можно и в глаз получить, и, вообще, как-то неприлично так начальнику говорить, своему учителю. Да ты не обижайся, говорит, но микропрограмма должна быть широкой вот такой, чтобы много было действий в каждом такте. А ты написал колбаску тоненькую, и у тебя в каждом действии выполняется либо АЛУ, либо память. Так не делается, микропрограмма должна быть широкой, чтобы каждый такт встроен как можно больше устройств задействовать. А, хорошо, понял. Ушёл. Через две недели пришёл. Я там писал, вот так двигал всё это, это очень тяжёлая работа. Но за две недели я написал новый вариант, пришёл к Коле. Он: Ты знаешь, это уже прилично, это уже похоже на микропрограмму. Ну смотри, у нас чтение занимает три такта, запись занимает четыре такта, сделай мне, пожалуйста, программу «пересылка длинного массива из памяти в память», чтобы внутренний цикл был только семь тактов: три на чтение и четыре на запись. Я говорю: Коля, ты смеёшься, так не бывает. Надо же адрес «откуда» писать, подвинуть, адрес «куда» писать, подвинуть, из счётчика единицу вычесть, больше нуля проверить. Где это всё разместить? А это твои проблемы. Ты взялся — ты и делай! Я ещё две недели писал одну эту программу, микропрограмму. Написал. Это был жуткий какой-то изврат такой, я до сих пор помню, как я страдал. Пришёл, показываю своему ученику Коле. Он говорит: Слушай, я над тобой подшутил. Я думал, что это невозможно. В общем, такой вот случай. Тем не менее, послушайте. Всё это байки, но факт-то налицо. Я за месяц — ну, с месяцем ещё доработки — один написал все микропрограммы машины HLL-компьютера, машины, ориентированной на языки высокого уровня. А там 40 человек в Минске, например, писали два года. Так что действительно показано, что технология Коли Фоминых — это прорывная технология, она действительно даёт возможности. Давайте, я вам, чтобы не быть голословным, приведу какой-нибудь пример. Вот вам микропрограмма чтения. Вот команда «читать», указывается смешение от регистра L. То есть надо прочитать на стек слово из памяти по адресу регистра L плюс смещение. Так вот я его откорректирую сразу по тексту. ВД1→АЛУ. Это значит из водопровода взять очередной байт и отправить его по шине машины в АЛУ, в арифметико-логическое устройство. В АЛУ происходит регистр Д, это регистр входных данных. Ему добавить L. Д + L, это здесь происходит. В это смещение добавил L, и в этом же такте во втором полутакте послать в буфер адреса. Посылка в буфер адреса в памяти означает начало работы памяти. И, значит, конечно, микрокоманды. В следующем такте в АЛУ делается одна операция — поднять стек на одну позицию вверх. Третий такт — из буфера данных памяти в АЛУ послать данные, но тут конец микропрограммы условный, по триггеру готовности памяти. БД это триггер готовности памяти. Если память готова, то микропрограмма закончена. Таким образом, срабатываются три такта. Но память, бывает, работает два такта, бывает, три такта, в зависимости от refresh. Есть такое понятие в динамической памяти, я об этом уже говорил, что заряд с конденсаторов стекает, поскольку не бывает идеальных диэлектриков. Поэтому приходится регулярно все колонки памяти читать и писать заново. Так вот, если нарвался на refresh, вероятность одна шестая у нас на машине была, будет три такта, если не нарвался, будет два такта. Ну вот, поэтому у меня повторена последняя команда ещё раз, но уже тут уже точно безусловно конец микропрограммы. Смотрите, это просто полный текст микропрограммы. И, на самом деле, этот текст на языке Алгол 68. И трансляции Алгол 68, исполнив эту программу, получит не число, а как раз много битовых шкал, микрокоманд. Должен вам признаться в одной такой преподавательской вредности, что-ли сказать. Когда я читаю лекции студентам от меха, они сдают экзамен — архитектура ЭВМ. Вот если кто-то плохо отвечает, я говорю: Хорошо, вот иди возьми такую-то книгу. Называю автора. Иди в библиотеку программистов. Возьми такую книгу. В сделующий раз придёшь пересдавать, и будешь мне отвечать только микропрограммирование. Я тебе заранее задаю вопрос — микропрограммирование. Но не как Коля Фоминых сделал, а как принято во всём мире. Было сделано за 20 лет попытки три, никто не сумел освоить. Вы должны понять. Кто хочет, проверьте, откройте любую книгу по архитектуры ЭВМ и прочитайте, как устроены микропрограммы. Попробуйте попрограммировать, как в мире микропрограммируют. Сумеете? Напишите мне письмо, я вас поздравлю, как-нибудь отмечу. Я считаю, что Коля Фоминых — великий человек. Он придумал такую технологию микропрограммирования, которая существенно в десятки раз повысила производительность труда микропрограммистов. Понимаете, это стало настолько такой обыденностью, commodity, по-английски. Диплом разрешили защитить по микропрограммам только одному человеку, первому, Боре Кривошеему. Он теперь директор департамента в нашем предприятии. А дальше мы даже диплом не давали, если человек пишет какую-то микропрограмму для какого-то компьютера, курсовая — это ещё куда ни шло, но никак не диплом. Мы считаем это совсем простой работой, которая не может быть удостоена дипломной работы. Вот такая технология Коли Фомина.