0,0
рейтинг
1 мая 2014 в 20:43

IBM System/360 — продолжаем разговор



В прошлой статье я описал линейку IBM System/360 «в целом», не вдаваясь особо в подробности реализации. В этот раз мы продолжим разговор об этой ЭВМ и рассмотрим ее внутреннюю архитектуру.

Разумеется, никакой революции System/360 не смогла бы совершить, если бы у нового семейства ЭВМ не было тщательно продуманной и спроектированной архитектуры (потом позаимствованной и советскими разработчиками). Два основных руководства назывались «IBM System/360 Principles of Operation» и «IBM System/360 I/O Interface Channel to Control Unit Original Equipment Manufacturers' Information manuals».



Что предлагалось разработчикам в System/360? Шестнадцать 32-битных регистров общего назначения, именовавшихся от R0 до R15. Четыре 64-битных регистра для чисел с плавающей запятой, они именовались FP0, FP2, FP4 и FP6. Один 64-битный регистр состояния (Program Status Word или PSW), помимо прочего содержащий 24-битный адрес инструкции.

Кроме адреса текущей исполняемой инструкции, PSW сохранял биты, разрешающие/запрещающие прерывания, состояние программы, защитный ключ для сравнения с ключами устройств и другие важные параметры. Привилегированная команда LPSW позволяла целиком загрузить значение этого регистра и использовалась в основном для возврата из обработчика прерывания, восстанавливая то состояние, которое было до вызова обработчика. Так же ряд команд позволял манипулировать отдельными флагами этого регистра, не вызывая переходов в другие участки кода.

Прерывания делились на 5 «классов» в зависимости от приоритета. С каждым классом были ассоциированы две ячейки памяти размером в двойное слово: старый PSW и новый PSW. Когда происходило прерывание, текущее значение PSW вместе с кодом прерывания сохранялось на место старого PSW, а в сам регистр загружалось значение из нового PSW, вызывая переход в обработчик. Классы прерываний были следующими (в порядке возрастания приоритета).

Прерывания ввода/вывода: сигнализировали о разнообразных событиях ввода-вывода, в том числе и таких затратных по времени как, например, завершение перемотки пленки.

Программные прерывания. Сигнализировали о возникновении одного из 15 исключений в ходе выполнения программы. Некоторые из этих прерывания могли быть подавлены с помощью сброса соответствующих флагов в PSW.

Прерывание вызова супервайзора. Происходило в результате выполнения инструкций, обращенных к супервайзору.

Внешние прерывания. Происходили в результате внешних событий, таких как срабатывание таймера или нажатие кнопки прерывания.

Прерывание машинной проверки, происходило в случаях аппаратных сбоев, например при ошибке четности при проверке содержимого регистров.

Как уже понятно, для адресации памяти использовались 24 бита, что позволяло адресовать 16 мегабайт памяти, но начиная с модели 67 появилась возможность 32-битной адресации, что расширило объем адресуемой (теоретически) памяти до 4 гигабайт. Использовался big-endian порядок, то есть от старшего к младшему. Различные инструкции позволяли работать с байтами, полу-словами (2 байта), полными словами (4 байта), двойными и четверными словами (соответственно 8 и 16 байт).

Штатно поддерживались следующие типы данных:

Целые числа длиной в половину или целое слово
Два вида упакованных в бинарный формат десятичных чисел
Дробные числа с плавающей запятой (нюансы реализации зависели от версии)
Символы, хранились в одном байте каждый

Адресация чаще всего использовалась «усеченная»: инструкции не содержали полный адрес, а только смещение, относительно базового адреса, содержащегося в одном из регистров общего назначения.

Инструкции могли быть длиной 2, 4 или 6 байт, при этом код операции хранилися в нулевом байте, а остальное занимало описание операндов. Инструкции выравнивались по границам полуслова, поэтому самый младший бит в адресе текущей инструкции всегда был равен нулю.

Интересно в System/360 был реализован ввод-вывод. Операции ввода-вывода выполнялись концептуально обособленными процессорами, которые назывались «Каналами». У каналов были собственные наборы инструкций, и они работали с памятью независимо от программы, выполнявшейся центральным процессором. В недорогих моделях для поддержки каналов использовался «движок» микрокода центрального процессора, в более дорогих — каналы размещались в собственных шкафах.



Очень необычно в IBM подошли к управлению своей ЭВМ. Они определили определенный набор функций, не уточняя при этом с помощью каких именно физических средств они должны реализовываться. Это позволило сделать управление универсальным, не зависящим от конкретного железа, для отдачи команд и вывода результатов в ход могло идти любое оборудование: кнопки, наборные диски, клавиатуры, текст и графика на мониторах и т.п. Любая отсылка к «кнопке» или «переключателю» могла означать любой из возможных вводов, начиная со светового пера и заканчивая выбором опции на экране с помощью ввода с клавиатуры.

В различных моделях System/360 использовались разные дополнительные возможности, расширявшие базовые.

Защита записи. Если система поддерживала эту опцию, то каждому блоку внешних хранилищ размером в 2 Кб присваивался ключ, который проверялся при записи на это хранилище каналом. То есть каждый канал мог писать только в «свои» блоки. Обычно канал с нулевым адресом использовался самой операционной системой, и для него проверка ключа не осуществлялась. Этот подход позволял защитить системные файлы от стирания пользовательскими программами. В очень редких моделях так же была возможность выставить и защиту от чтения.

Поддержка мультисистемности. Расширение набора команд, позволявшее работать нескольким процессорам одновременно.

Прямой контроль. Эта опция обеспечивала поддержку 6 внешних сигнальных линий, которые могли быть использованы для нужд пользователя.

Интервальный таймер. С этой опцией процессор осуществлял периодический декремент слова, находящегося в памяти по адресу 0x50, когда это значение достигало нуля, происходило прерывание. Младшие модели уменьшали число с частотой, совпадавшей с частотой электрической сети (50 или 60 Гц), старшие модели были оснащены таймерами с куда более высоким разрешением.

В общем, про System/360 можно говорить очень много, поэтому если будет интерес, я продолжу тему в следующей статье.
Александр Зейников @alexzeynikov
карма
72,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое

Комментарии (23)

  • +3
    Поправки: во-первых 32-битные адреса использовались только в 65-ой и 67-ой моделях (для интерактивных систем), дальше они не прижились из-за проблем с совместимостью и сомнением, что такая большая память кому-нибудь понадобится. В старших моделях и S/370 адреса были 24-битные. Во-вторых BCD был двух типов: пакованный (4 бита на цифру) и зонный (байт на цифру, старшие нибблы равны нулю).
    • 0
      BCD был двух типов

      в статье:
      Два вида упакованных в бинарный формат десятичных чисел


      я бы сказал что это скорее не поправка с вашей стороны а дополнение

      • 0
        упакованных в бинарный формат
        — Я об этом. Упакован только один. Но это так — занудство с моей стороны, и не более.
      • +1
        упакованных в бинарный формат десятичных чисел

        В русском языке всё же принят термин двоично-десятичный код".
  • +5
    Спасибо за статью!

    Прозвучит, конечно, диковато, но часть описания лично мне (и, подозреваю, не только мне) не сказала ровно ничего на тему, почему же System/360 была революционной. Количество регистров сегодня вряд ли выглядит показателем революционности. Вот что был указан «определенный набор функций, не уточняя при этом с помощью каких именно физических средств они должны реализовываться» — это выглядит новаторски.

    В общем, не хочется выглядеть Незнайкой, но было бы неплохо хоть как-то объяснять, (чуть не написал «когда хлопать») что из написанного и почему должно считаться прорывом. Тем более, что в семействе System/360 было, как Вы же и описывали, далеко не одна модель, и младшие от старших отличались весьма заметно — т.е., вероятно, что-то было такое, что выделяло это семейство на фоне других вычислительных систем того времени.
    • +1
      Выделяло наличие младших и старших моделей (собственно совместимость), плюс регистровая архитектура (я не уверен, что S/360 — первая система с РОН, но во всяком случае первая широко распространенная). Но вообще говоря, выделял тот факт, что ей широко пользовались.
    • +11
      Вот собственно наличие семейства и есть самое главное. Шесть совместимых моделей. Младшай от старшей по скорости отличается в 200 раз (!). Но при этом общие программы, общая периферия, одна система команд.

      Это была революция просто фантастических масштабов. Это сейчас когда вы покупаете новый китайский телефон за $100 и на нём вдруг не идёт ваша любимая игрушка вы плюётесь и клянёте Google, китайцев и всех на свете. Вам даже в голову не приходит что это чудо: вы купили железяку другой компании, выпущенную совсем другими людьми — и вам не придётся весь софт с нуля переписывать. А тогда — это было в порядке вещей. Не только OS и программы приходилось переписывать. Файлы с данными было нельзя перенести, так как у разных машин были разные не то, что наборы символов, а и разные машинные слова: 12 бит, 18 бит, 36 бит. Собственно сам 8-битный байт — это тоже инновация, введённая в IBM/360!
      • +1
        Вот! Об этом я и говорю: у Хабра есть свой уровень аудитории, ниже которого писать как-то не комильфо, но и выше которого статью поймут далеко не все. Вы сейчас в 50 словах изложили хоть какую-то базу, так почему это — в комментах, а не во вводной к статьях?

        Если писать для Хабра, то, может быть, все же ориентироваться на аудиторию, а не изложение для некоего виртуального общества «знаталов старой техники»? :)
        • +1
          В посте есть ссылка на "прошлую статью", где всё написано:
          Первой инновацией IBM, использующейся до сих пор, стал анонс целой линейки компьютеров, отличавшихся по цене, размеру и производительности, но использовавших общий набор команд (кроме нескольких моделей для специфичных рынков). Это позволяло компаниям приобрести модель попроще, а по мере роста потребностей, осуществить «апгрейд» железа, без необходимости переписывания уже отлаженного ПО.
  • +1
    Насчёт защиты памяти хочу сделать некоторую коррекцию.
    Насколько я помню, каждой прикладной программе (а не
    каналу ввода-вывода) присваивался
    уникальный ключ от 1 до 15 (нулевой ключ был зарезервирован
    за системой) и при обращении к памяти этот ключ сравнивался с
    дескриптором блока памяти.
    Все эти системные команды вроде присвоения ключа производились
    в режиме супервизора, в режим которого можно было попасть с
    помощью волшебной команды MODESET.
    A, поскольку, эта команда не на всех компьютерах была разрешена,
    существовали недокументированные возможности получения
    режима супервизора.
    А ещё существовала система Примус, разработанная в нашем институте…
    Одним словом, IBM360/370 — это целая эпоха.
    • 0
      MODESET
      — В PoOps об этом ничего нет. Может быть, это особенность ЕС ЭВМ?
      • 0
        Это такая макрокоманда, которая вызывала
        определённый SVC.
    • 0
      > А ещё существовала система Примус

      Напрасно ты винишь в непостоянстве рок,
      Что не внакладе ты. Глупец, тебе и невдомёк —
      Когда б он в милости своей был постоянен,
      Ты б очереди ждать своей до смерти мог.

      :)

      TRY SHARE
    • 0
      В некоторых местах Примус еще жив, а в старых залах стоят забытые железные призраки прошлого. Было очень интересно увидеть их своими глазами.
  • +1
    Да, забыл добавить, что диски были на 7 и 29 мегабайт и
    каждую дорожку (и даже сектор) можно было форматировать
    по-своему. И висли они (ЕС ЭВМ) каждые полчаса, а когда машина
    висла, выходил обсолютно пьяный техник, с важным видом смотрел на
    лампочки на пульте управления и нажимал кнопку перезагрузки.
    А ещё у этой серии не было постоянной памяти (ПЗУ).
    И для начальной загрузки процессор эмулировать команду ввода
    для одного из каналов. А ещё была документация, которая у
    на занимала длинную полку…
    Много можно рассказывать.
  • +4
    До сих пор распространённый символ базы данных в виде цилиндра появился благодаря дисковому пакету IBM/360:


    Один мой одногруппник после выпуска попал на военный ВЦ, и в его обязанности входил «перенос базы данных». Это было не совсем то, что вы подумали. Перенос производился так: он шёл в секретную часть, получал там (с соблюдением всех формальностей режима секретности) этот пакет, переносил его на ВЦ и устанавливал на время работы программы. Потом, соответственно, снимал, переносил и сдавал обратно.
    • 0
      Знакомая штука, помню, что у родителей на балконе хранилась парочка таких кожухов, без ленты. В них складывалась всякая мелочевка.
      • 0
        Скорее это диски из которых любили телеантенны делать.
        • 0
          И то, и другое: диски собраны в пакет, а он помещён в прозрачный кожух.
        • 0
          Из них получается хороший подшипник азимутальной оси крупноразмерной монтировки Добсона. К сожалению, их запас практически иссяк — большая часть была уничтожена как раз на антенны.
  • +3
    Шестнадцать 32-битных регистров общего назначения, именовавшихся от R0 до R15. Четыре 64-битных регистра для чисел с плавающей запятой, они именовались FP0, FP2, FP4 и FP6
    .
    В программах на ассемблере они просто нумеровались 0 до 15 и 0 до 6 соответственно:

    LR 3, 4 загрузить в регистр 3 (Load Register) содержимое регистра 4
    А 3,=F’123’ увеличить значение регистра 3 на 123

    Путаницы между регистрами для целочисленной арифметики и плавающей арифметики не возникало, потому что с ними работали разные команды.
    Один 64-битный регистр состояния (Program Status Word или PSW), помимо прочего содержащий 24-битный адрес инструкции.

    В System/370 адрес был уже 32-х битный.
    Адресация чаще всего использовалась «усеченная»: инструкции не содержали полный адрес, а только смещение, относительно базового адреса, содержащегося в одном из регистров общего назначения.

    Ещё надо заметить, что все регистры общего назначения были равноправны, кроме нулевого. Если нулевой регистр участвовал в адресации, то это означало, что используется не содержимое нулевого регистра, а используется 0. Поясню: если в качестве операндов при формировании адреса были указаны регистры 11 и 12, то адрес — это сумма содержимого регистров 11 и 12. Если указаны 0 и 12, то адрес брался только из регистра 12.

    Из недостатков системы команд System/360/370 следует отметить отсутствие концепции стека. Согласно легенде, главный архитектор IBM/360 за этот просчёт был отправлен во внутрифирменный аналог Сибири.

    не сказала ровно ничего на тему, почему же System/360 была революционной.

    что из написанного и почему должно считаться прорывом.

    Революционным в этой серии оказалось то, что программное обеспечение могло работать на всех моделях, просто на одних медленнее, а на других быстрее. Сейчас это кажется само собой разумеющимся, но тогда это был прорыв. В те времена если взамен старого компьютера ставили новый, то приходилось заново переписывать ПО. Программы для БЭСМ-3 не работали на БЭСМ-6, не говоря уже о том, что программы для «Урала» не работали на «Минске». Унификация – вот что было революционным. Не только в ПО, но в периферийном оборудовании: одинаковые для всех моделей АЦПУ, диски, ленты и т.д. До этого был зоопарк. Что тут говорить, у «БЭСМ» байт был 6-разрядный, а у «Минск» — 7-разрядный. Вас такие факты убеждают в творившемся «зоопарке»?

    Ну и революция состояла в эволюционном развитии ОС: сперва пакетная обработка программ, затем ОС с фиксированным числом задач в режиме разделения времени, потом с переменным числом задач. Затем система с виртуальной памятью, после неё – система виртуальных машин.
    • +1
      Ну и революция состояла в эволюционном развитии ОС: сперва пакетная обработка программ, затем ОС с фиксированным числом задач в режиме разделения времени, потом с переменным числом задач. Затем система с виртуальной памятью, после неё – система виртуальных машин.
      — Не совсем эволюция: VM вообще возникла раньше MVS.
      Из недостатков системы команд System/360/370 следует отметить отсутствие концепции стека. Согласно легенде, главный архитектор IBM/360 за этот просчёт был отправлен во внутрифирменный аналог Сибири.
      — IMHO, не более чем легенда. В шестьдесят четвертом стека не было почти ни у кого. А у тех, у кого он был, не было регистров. Известно, что инженеры IBM потратили много времени на выбор между арифметическим стеком и gpr. А чистый стек вызовов, как у современных машин, в те времена был редкостью.

      В System/370 адрес был уже 32-х битный.
      — Нет, до S/370-XA адреса были 24-битные (кроме 206x процессоров).
    • 0
      Да, стека не было. Вместо него использовался 13-й регистр,
      который указывал на область сохранения.
      И надо было не забыть выделить эту область в начале
      каждой процедуры.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.