Pull to refresh

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

Reading time4 min
Views48K


В прошлой статье я описал линейку 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 можно говорить очень много, поэтому если будет интерес, я продолжу тему в следующей статье.
Tags:
Hubs:
+39
Comments23

Articles

Change theme settings