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 можна говорити дуже багато, тому якщо буде інтерес, я продовжу тему в наступній статті.