[МУЗЫКА]
[МУЗЫКА] Невозможно
завершить курс архитектуры ЭВМ без каких-то конкретных примеров.
Я расскажу вам два примера: архитектуру IBM/360 как
пример самой старой из ныне живущих архитектур,
и архитектуру ARM, как пример самой массовой в настоящее время архитектуры.
Итак, начнем с IBM/360.
Серия IBM/360 была объявлена в 1964 году.
Это была революционная серия машин по нескольким причинам.
Во-первых, это была именно серия машин, то есть не одна,
а примерно десять разных машин с одинаковой архитектурой,
с одинаковой системой команд но различающихся по возможностям,
по производительности и, главное, по цене.
В результате пользователи могли отлаживать программы на дешевых маленьких ЭВМ,
а когда они завершали отладку, они могли взять ту же самую колоду карт,
поместить ее в большую дорогую машину и вести счет уже там.
Сами понимаете, что отладка — это такое медленное, «человеческое» время.
А счет — это нужна «молотилка», которая действительно быстро работает.
Поэтому возможность использовать и маленькие,
и большие машины с одинаковой архитектурой — это важное достижение.
Второе, в этих машинах была операционная система,
без которой машина работать вообще не могла.
И третье — это массовое использование каналов ввода/вывода.
И каналы ввода/вывода, и операционные системы та же фирма IBM в каких-то
отдельных случаях применяла и ранее.
Но впервые они вошли в такой комплекс, как IBM/360.
Здесь вообще надо сказать, что, во-первых, операционная система OS/360...
делал Фредерик Брукс, который вошел в классику нашей науки,
который написал книгу «Мифический человеко-месяц»,
как создаются большие программные комплексы.
Я рекомендую всем студентам ее прочитать и вам, уважаемые слушатели,
тоже очень настойчиво рекомендую эту книгу.
Эта вся книга разошлась на цитаты.
Как возникает отставание на два года?
Ответ: сначала возникло отставание на один день.
Почему вымерли динозавры?
Потому что была асфальтовая топь, они могли вынуть три ноги и стоять на одной,
но они не могли вынуть четыре ноги, поэтому погибли.
Это все имеет прямое отношение к технологиям программирования.
И под руководством Брукса была создана одна из крупнейших
и самых богатых по возможностям операционных систем OS 360.
И когда завершилась работа над серией 360, он, грубо говоря,
ушел на пенсию, или как там у них это называется, в общем, покинул фирму и стал
профессором в университете в Чапел-Хилл, в штате Северная Каролина.
Я с ним лично знаком и пару раз там бывал, мне было интересно с ним поговорить.
В частности, я его спрашивал: «Все признают,
что ваша книга — книга номер один в нашей науке.
А какую книгу вы признаете номером два?» Он, ни секунды не задумываясь,
сказал: «Книга ДеМарко
"Peopleware"», то есть как организовать общение между людьми в коллективе.
Кстати, эта книга тоже переведена на русский язык, и я тоже ее вам рекомендую.
IBM имела длинную историю, я уже говорил,
больше 100 лет, и она переживала разные периоды.
Были периоды,
когда IBM несколько кварталов подряд терпела миллиардные убытки.
И в 1993 году совет директоров IBM
пошел на беспрецедентный шаг, который вошел сейчас во все учебники менеджмента.
Обращаю ваше внимание: не программирования, а менеджмента.
Но, тем не менее, поскольку это связано с крупнейшей в истории компьютерной фирмой,
эту историю стоит рассказать.
Так вот, когда они терпели убытки, они прогнали старого
генерального директора и пригласили на этот пост Лу Герстнера.
Почему это странный шаг?
Почему об этом так много говорили?
Дело в том, что Лу Герстнер и не инженер, и не программист.
Он был генеральный директор большой компании по фасованным товарам,
а до этого еще вообще какие-то печенюшки производил, еще что-то.
И вот такой человек пришел в компьютерную фирму и сумел за короткий
срок восстановить ее прибыльность.
Как это объяснялось?
Почему это вошло именно в учебники менеджмента?
Потому что никто из старослужащих не мог к нему подойти, похлопать по плечу
и сказать:«Пойдем, поланчуем вместе?» То есть это был человек со стороны,
у него не было никаких внутренних связей.
И поэтому он имел возможность, и так и сделал: разогнал половину менеджмента,
многих инженеров.
У него были консультанты-специалисты в этой области.
Он их внимательно слушал.
Принимал решения, конечно, он один, но, тем не менее,
он довольно сильно переориентировал IBM, и IBM из компьютерной фирмы стала,
скорей, софтверной компанией.
И потом он девять лет был директором этой компании,
и довольно успешным, при нем она всегда была прибыльная.
Так вот, еще раз повторяю.
IBM дала нам не только примеры машин, винчестеров,
других техник, но и некоторые важные примеры из теории управления.
Теперь перейдем к более детальному рассмотрению архитектуры IBM/360.
Прежде всего, в этой машине есть 16 целых
регистров общего значения по 32 разряда каждая.
Кроме того, в ней есть четыре плавающих регистра, и есть специальное слово PSW,
Program status word, — слово состояния программы, в котором отражаются
информация о маскировании прерываний, адрес следующей команды к исполнению.
И два разряда кодов условия CC PSW, Condition code Program status word.
В этих двух разрядах отображается информация о
результатах предыдущей команды: «нуль»,
«меньше нуля», «больше нуля», «переполнение».
Причем у них есть специальное кодирование: «00», эти два разряда, это «нуль
или равно», «01» — «отрицательный», «10» — «положительный», «11» — «переполнение».
Соответственно, есть специальная команда Branch on Codition, переход по условию.
И накладывается специальная маска.
Я ее даже как-то применял в курсе, но давайте сейчас подробней разберем,
что значит маска.
Если «1000», то это значит маска «00»,
то есть маска «нуля или равно».
Если «0100» — это «меньше», «0010» — это «больше»,
наконец, «0001» — это «переполнение».
И вы можете собрать любой набор из этих масок.
Наберите «1000» и «0100» — это будет переход по «меньше или равно».
Наберите «1000» и «0010» — это будет переход по «больше или равно».
И так далее.
Для команд условного перехода это достаточно удобно, но,
как я уже говорил, для булевских формул это чрезвычайно неудобно.
Первым байтом команды всегда является код операции, он занимает всегда восемь битов.
В современных архитектурах довольно часто код операции «размыт» по команде:
два бита здесь, два бита здесь, сколько-то битов еще.
Это чрезвычайно неудобно для изучения, но зато это экономит память,
и более плотные команды получаются.
В IBM все просто: один байт — это код операции,
других битов никогда не занимается.
Регистровые команды занимают два байта: один байт — код операции,
и один байт — это два по четыре бита номера регистров.
Первый регистр является первым операндом, и в него же пишется результат,
а второй регистр — это второй операнд.
Например, как на слайде приведена SR, это вычитание регистровое.
1, 2 — это значит, из первого регистра вычесть значение второго
регистра и записать снова в первый.
Команды формата «память-память» занимают шесть байтов: код операции,
длина и потом два адреса.
Вот команда MVC, move character,
8 a, b означает — переслать 8 байтов из b в a.
Всегда из второго операнда пишется в первый.
Самые частые команды в этой архитектуре — это четырехбайтовые команды формата
регистра памяти.
Например, L 1, a.
Это что значит?
Load, загрузить в первый регистр содержимое слова по адресу a.
A 1, a — это к первому регистру добавить содержимое слова по адресу a.
Есть еще один пример четырехбайтовой команды.
Рассмотрим команду MVI, как на слайде приведена.
MVI 255, a — это означает, что непосредственный операнд 255,
это как раз код FF, все единички в одном байте, загрузить в байт по адресу a.
То есть это команда с непосредственным операндом.
Я все время употребляю слово «адрес».
Пора все-таки сказать, что такое адрес в IBM/360.
Это всегда базовый регистр на четыре бита и смещение 12 битов.
Подразумевается, что вся память разбита на страницы фиксированного размера: 4K,
четыре тысячи байтов, возможно, с большими перекрытиями.
Никто не говорит, чтобы страницы были вот так.
Они могут быть вот так, так — как угодно.
То есть важно, что непосредственно можно добраться до адреса только
когда у вас есть базовый регистр, который указывает на начало страницы,
и смещение внутри этой страницы.
Берете значение вашего адреса, добавляете к нему смещение,
у вас получается искомый адрес, по которому вы хотите работать.
Ну и, наконец, общий вид самого частого формата — регистра памяти.
Поглядите, пожалуйста, на слайд.
Сначала идет код операции, как обычно, 8 бит.
Потом номер регистра от первого операнда и он же результат 4 бита.
Потом еще 4 бита — номер индексного регистра,
чтобы можно было в циклах работать по массивам.
Номер индексного регистра тоже 4 бита.
Наконец, сам адрес — номер базового регистра 4 бита и смещение 12 бит.
На самом деле — это довольно неудачная структура команды,
и я попытаюсь объяснить, почему.
Дело в том, что мы к моменту получения
ЕС ЭВМ в 1974-м году на матмехе, мы уже имели довольно большой
опыт работы на оригинальной американской машине IBM 360 модель 50.
Две штуки, какими-то правдами-неправдами, чуть ли не через Южную Африку, которая в
то время была такой фашистской страной, то есть наши сумели достать две машины,
поскольку американцы не хотели нам продавать современную технику,
тогда действовало так называемое ограничение КоКом.
То есть вот современную технику в страны восточного лагеря
американцы и европейцы продавать не хотели.
Так вот наши спецслужбы действительно вот скорее неправдами,
чем правдами, но сумели две штуки купить и поставить их в институте
НИИЦЭВТ — Научно-исследовательский центр электронно-вычислительной техники в
Москве, на Варшавском шоссе.
Поскольку мы имели договор с НИИЦЭВТом на разработку трансляторов Алгола-68
для будущей ЕС ЭВМ — ее еще тогда не было, а уже программное обеспечение для нее
готовилось — нам предоставляли время, но естественно, спорт любят только москвичи,
поэтому днем работали москвичи, а нам предоставляли только ночное время.
Я с несколькими молодыми сотрудниками буквально каждую неделю ездил на
три на четыре дня в Москву и работали ночами, а днем спали.
И к моменту появления ЕС ЭВМ уже советской копии, клона, на матмехе в 1974-м году,
опять-таки я уже говорил, но с удовольствием повторю еще раз, это была,
по сообщениям газет, первая машина такого класса в открытой организации.
До этого такие машины ставились только в военной организации.
И вот, когда поставили нам, наконец, ЕС ЭВМ,
мы уже были асами в этой операционной системе, мы хорошо все знали, к нам ходили
бесконечное количество ходоков с просьбой помочь, оказать содействие, дать совет.
Университет — открытая организация, двери всегда открыты, даже лучше, чем сейчас,
когда есть пропуска там какие-то, вертушки, а так — заходи, кто хочешь.
И правда, много народу приходило, и мы отвечали на вопросы,
иногда не глядя в программу, потому что мы уже знали типовые ошибки.
Люди обижались, потом мы говорили: «Ну, чего, тут же все понятно,
я тебе сказал — вот иди и исправляй».
И всегда все уходили, никто не возвращался, все понятно, правда, было.
Так вот, и тогда хороших отладчиков не было.
И когда у нас что-то ломалось, было непонятно, что происходит,
мы делали такие распечатки, в шестнадцатеричном виде,
просто вот память вся распечатывается, и команды, и данные,
и потом с карандашом и с ручкой в руках там шарят по этой распечатке, что-то ищем.
И вот уже тогда нас страшно раздражало,
что в этой распечатке было огромное количество нолей, больше половины.
То есть большинство битов в командах не использовалось.
Вот посудите сами, индексный регистр далеко не часто бывает,
а 4 бита занимает всегда.
Базовый регистр 4 бита, а нужно-то всего 1 или 2 бита,
потому что больше одного-двух базовых регистров никогда не бывает.
Смещение.
Для локальных данных процедур это слишком много — 4096 смещений.
Ну потому что в процедуре 5–10 параметров, поэтому 4 битов для
смещения внутри локальных данных хватило бы за глаза и за уши.
А для глобальных данных 4096 слишком мало, потому что глобальные данные,
обычно же, они много тысяч байтов и 4096 исчезающе мало.
В результате, мы поняли, что нужна какая-то другая...
другое формирование структуры команды, чтобы таких потерь огромных не было.
И, естественно,
мы этот опыт потом использовали в нашей собственной машине УВК Самсон.
Итак, я вам рассказал про архитектуру IBM 360.
Еще раз повторю, что объявленная в 1964-м году,
но под разными именами она выпускается до сих пор.
Более того, я хочу вам сказать, что если раньше слово мэйнфрейм было таким общим
— мэйнфрейм это большая машина — и были Siemens,
были Fujitsu были английская System-4,
потом все потихонечку вымерли, а IBM живет.
И сегодня слово мейнфрейм — это синоним IBM...
машины-мейнфрейм IBM.
И сегодня IBM выпускает мейнфреймы, и сегодня с маленькими с
маленькими расширениями эти машины имеют ровно такую же систему команд,
ровно такой же язык управления заданиями, ровно такую же архитектуру.
И хотя я уже лет 20–30 на ЕС ЭВМ не программировал, когда мне приходится
что-то смотреть в IBM 360, я все понимаю, потому что ничего не изменилось.
Это пример такой удивительной живучести и удивительной...
ну, значит, была удачная архитектура...
я только что ее критиковал, но тем не менее надо признать, что, видимо,
это удачная архитектура, раз она выдержала больше полувека.