SVC (мейнфрейми IBM)

SVC (англ. Supervisor Call) — інструкція процесора мейнфреймів IBM System/360 і сумісних з ними, а також подальших серій, аж до поточної IBM Z, призначена для виклику сервісів операційної системи.

Крім оригінальної System/360, інструкція присутня також у мейнфреймах Amdahl (470V, 580/5880, 5990 та інших), Univac 90/60, 90/70 та 90/80, а також Fujitsu M180/M200.

Обгрунтування

Мейнфрейми IBM System/360 можуть працювати у двох режимах: так званий проблемний режим (англ. problem state) — за сучасною термінологією «режим користувача», у якому запускаються прикладні програми («програми, що вирішують проблеми користувача»), і режим супервізора (англ. supervisor state), призначений для системного програмного забезпечення. Додатково визначаються 16 так званих «ключів доступу до пам'яті» (англ. storage access keys). У «проблемному режимі» програма може використовувати не всі інструкції процесора — деякі так звані привілейовані інструкції доступні лише у режимі супервізора. Код супервізора, для якого поточне значення ключа доступу до пам'яті дорівнює 0, має доступ до всієї пам'яті комп'ютера.

Коли прикладна програма бажає здійснити системний виклик, вона викликає машинну інструкцію SVC, у другому байті якої кодується номер потрібного виклику. У OS/360 немає обмежень на те, які виклики дозволені програмі. Наступні операційні системи, такі як OS/VS1, SVS і MVS/370 додали процедуру авторизації, яку повинна пройти програма перед здійсненням деяких викликів. Авторизація здійснюється такими сервісами, як DEBCHK (номер 117), TESTAUTH (номер 119) і деякими іншими.[уточнити]

У OS/VS1, VS2 і MVS/370 додано спеціальний сервіс MODESET (номер 107), який значно спростив процедуру одночасної зміни режиму (проблемний на супервізора) і ключа доступу (ключі 8-15 призначено для користувацьких програм, а 0-7 — для системних).

Типові програми для мейнфреймів є синхронними, в той час як операційна система є за своєю сутністю асинхронною. Якщо прикладна програма здійснює системний виклик, що є за сутністю асинхронним (такий, наприклад, як процедура канального вводу-виводу), стають потрібні процедури для синхронізації стану програми зі станом пристроїв вводу-виводу. Такими процедурами є, наприклад, WAIT (зупинка програми до настання деякої події), POST (сигналізація того, що сталася деяка подія, після якої прикладна програма може продовжити виконання), і SYNCH (зміна режиму роботи з режиму супервізора у режим користувача, і від системного ключа до ключа користувача).

У таблиці, наведеній нижче, наведено умови, за яких дані механізми синхронізації можуть використовуватися.

Реалізація

SVC є двобайтовою інструкцією з кодом операції 0A0x, де x — номер системного виклику. Обробник SVC є обробником переривання. Інформація до і від обробника передається у регістрах процесора або у оперативній пам'яті.

Виклики супервізора поділяються на кілька типів, спочатку пронумерованих від 1 до 4. MVS/370 додала ще один «тип 6».

Для операційних систем, розроблених у IBM, повернення з обробника для викликів типу 2, 3 і 4 здійснюється функцією EXIT, яка теж має свій номер системного виклику (SVC 3). Для інших типів повернення до прикладної програми здійснюється інструкцією процесора LPSW. OC, розроблені іншими фірмами, використовують винятково LPSW для повернення.

У ОС MVS/370 і пізніших альтернативою викликам SVC є прямі виклики за визначеними адресами (англ. branch and link entry points).

У різних операційних системах IBM сумісність у семантиці викликів SVC вкрай незначна.

У системах, що додали підтримку апаратної віртуалізації (таких, як VM/370 і z/VM) інструкція DIAG є схожою за ідеєю на SVC, але призначена для переходу з режиму супервізора до режиму гіпервізора.

Системні виклики OS/360

У системі OS/360 і її наступниках виклики, нумеровані від 0 до приблизно 127 означені самою IBM, а від 255 і «униз» — доступні для використання у конкретній інсталяції системи. У z/OS розподіл змінився: номери від 0 до приблизно 200 — для IBM, від 255 униз — для інсталяцій як «додаткові системні сервіси» (наприклад, підтримка шифрування і дешифрування). Власне процедури-обробники SVC повинні мати назви модулів, що починаються на IGC.

Термін «заблоковані» (англ. disabled) означає, що системний виклик заборонений (фізично) для всіх переривань за винятком переривань контролю машини у системах, раніших MVS/370, і заборонений за методом local lock для даного адресного простору у MVS/370 і новіших системах. У кожного адресного простору MVS/370 є свій local lock.

У OS/360 означалися чотири типи процедур SVC, MVS/370 додав «тип 6», аналогічний типові 1, але з фізичним блокуванням. «Тип 5» ніколи не означався.

У наступній таблиці наводяться типи процедур SVC і їх особливості.

Угода Тип 1 / тип 6 тип 2 тип 3 тип 4
Частина резидентного ядра ОС Так Так Ні Ні
Розмір коду будь-який будь-який Один модуль завантаження
≤ 1024 байт
Кожен модуль завантаження
≤ 1024 байт
Реентрантна процедура Опційно Так Так Так
Дозволяє переривання Ні Так Так Так
Вміст регістрів ЦП на вході Регістри[a] 3, 4, 5, 6, 7 і 14 містять вказівники на різні ділянки комунікації; регістри 0, 1 і 15 для параметрів.
Можуть мати переміщувані дані Так Так Ні Ні
Можуть передавати керування іншим типам SVC-підпрограм Не з'являється будь-які
Можуть викликати WAIT Ні Так, використовуючи WAIT (SVC 1)
Можуть викликати POST Так, при використанні точки входу Post Так, використовуючи POST (SVC 2)
Можуть диспетчеризувати синхронний вихід Так, при використанні точки входу Exit Effector Так, використовуючи SYNCH (SVC 12)
Можуть викликати аварійне закінчення Так, при використанні точки входу Abterm Так, використовуючи ABEND (SVC 13)
Таблицю створено на основі довідника IBM System/360 Operating System: System Programmer's Guide C28-6550-2[1]

Список системних викликів у OS/360 версії 21.6

У таблиці наведено системні виклики операційної системи OS/360 версії 21.6, описані у публікації «IBM Field Engineering Handbook: System/360 Operating System» (липень 1971-го року)[2].

Назва Тип R0 R1 Модуль[b] Призначення
0 EXCP 1 ↑IOB IEAAIH00 / IEAAQFX00 Виконання програми каналу
1 WAIT 1 лічильник подій ↑ECB IEAPWT00 / IEAQSY50 Чекання на подію
2 POST 1 comp code ↑ECB IEAAPTOO / IEAQSY50 Інформування про подію
3 EXIT 1 IEAAT00 / IEAQSY50 Завершення програми
4 GETMAIN 1 ↑список параметрів IEAAMS00 / IEAQGM00 Виділення пам'яті
5 FREEMAIN 1 ↑список параметрів IEAAMS00/ IEAQGM00 Звільнення пам'яті
6 LINK[c] 2 IEAATC00 / IEAQLK00
7 XCTL[c] 2 IEAATC00 / IEAQLK00 Скорочення від «transfer control»
8 LOAD 2 ↑(↑точка входу) ↑DCB IEAATC00 / IEAQLK00 Завантаження програми
9 DELETE 1 ↑ім'я програми IEAHDL00 / IEAQLK00
10 REGMAIN 1 Subpool No. (0), Length (1-3) ↑область пам'яті для звільнення IEAAMS00 / IEAQGM00
11 TIME 1 Time Units Code IEA0RT00 / IEAQRT00 або RT10
12 SYNCH 2 вміст регістра R15 адреса переходу IEAASY00 / IEAQLK00
13 ABEND 4 код завершення IEAGAB00 / IEAQAB00 Аварійне завершення програми
14 SPIE 3 ↑PICA IEAAPX00 / IEAQTB00
15 ERREXCP 1 ↑RQE IEAAIH00 / IEAQFX00
16 PURGE 2 ↑список параметрів IECIPR12 / IECIPR16
17 RESTORE 3 ↑ланцюжок IOB IGC0001G
18 BLDL 2 ↑список побудови ↑DCB IGC0I8 / IECPFND1
19 OPEN 4 ↑список параметрів L -IGCOOOH
20 CLOSE 4 ↑список параметрів L -IGCOO020
21 STOW 3 ↑список параметрів ↑DCB L -IGCOO02A
22 OPEN TYPE=J 4 ↑список параметрів L -IGCOO02B
23 CLOSE TYPE=T 4 ↑список параметрів L -IGCOO02C
24 DEVTYPE 3 ↑DD NAME L -IGCOO02D
25 TRKBAL 3 ↑DCB IGC0002E Баланс треку: кількість байтів, що залишилися на треку після запису
26 CATALOG 4 ↑список параметрів L -IGCOO02F
27 OBTAIN 3 ↑список параметрів L -IGCOO02G
28 CVOL 4 ↑DCB або UCB L -IGCOO02H
29 SCRATCH 4 ↑UCB ↑список параметрів L -IGCOO021
30 RENAME 4 ↑UCB ↑список параметрів IGC00030
31 FEOV 4 ↑DCB
32 ALLOC 4 ↑список UCB
33 IOHALT 3 ↑UCB
34 MGCR 4 індикатор індикатор IEE0303D
35 WTO 4 ↑повідомлення IEECVWTO
36 WTL 4 ↑повідомлення IEE0303F
37 SEGLD 2 якщо 0, SEGLD ↑ім'я сегмента
38 TTROUTER 2 IGC038
39 LABEL 3 ↑список параметрів IGC00031
40 EXTRACT 1 ↑список параметрів IEAAXR00 / IEAQTR00
41 IDENTIFY 3 ↑точка входу ↑точка входу IEAAID00 / IEAQTD00
42 ATTACH[c] 2 ↑PP список параметрів IEAAAT00 / IEAQAT00 Створення нової задачі
43 CIRB 2 ↑точка входу розмір робочої області; якщо значення негативне: DIRB IEAAEF00
44 CHAP 1 Пріоритет ↑TCB NOP/IEAQT800[d]
45 OVLYBRCH 2
46 TTIMER 1
47 STIMER 2
48 DEQ 2
49 TTOPEN 3
50 NOP -
51 SNAP 4
52 RESTART 4
53 RELEX 3
54 DISABLE[e] 2
55 EOV 4
56 ENQ 2
57 FREEDBUF 3
58 RELBUF 1
59 OLTEP 3
60 STAE 3
61 TTSAV 3
62 DETACH 1
63 CHKPT 4
64 RDJFCB 3
65 QWAIT[f] 2
66 BTAM TEST 4
67 QPOST[f] 2
68 SYNADEF 4 код завершення ↑буфер IGC0006H
69 BSP 3 ↑DCB IGC00061
70 GSERV 2 ↑список параметрів IGC070 Використовувався у Graphics Access Method System Product (GAM/SP)
71 BUFSERVICE 3 ↑список параметрів IGC0007A Пізніші назви: ASGNBFR/BUFINQ/RLSEBFR
72 CHATR 4 ↑список параметрів IEECMCTR
73 SPAR 3 ↑список параметрів L -IGCOO07C
74 DAR 3 ↑список параметрів L -IGCOO07D
75 DQUEUE 3 ↑список параметрів L -IGCOO07E
76 IFBSTAT 3 L -IFBSTAT
77 QTAM TEST 4 ↑список параметрів L -IGCOOO7G
78 DISP SPACE 3 ↑UCB ↑MSG L -IGCOO07H Area
79 STATUS 1 Mask (0-1), Type (2-3) ↑TCB L -IEAQSETS
80 IKASVC 3 ↑список параметрів CCT L -IKASVC
81 SETPRT 4 ↑список параметрів -IGCOOO8A
82 DASDR 4 ↑список параметрів IGC0008B
83 SMFWTM 3 ↑повідомлення IEESMF8C
84 GRAPHICS 1 ↑UCB IGC084
85 SWAP IGC0008E
86 ATLAS 4 ↑список параметрів IGC0008F
87 DOM 3 IFZERO/IFNEG MSGID L -IEECXDOM tMSG List
88 MOD 88 3 Routing Code ↑DCB IGC0008H
89 EMSRV 3 ↑список параметрів IGCOO081
90 XQMNGR 4 ↑список ECB/IOB ↑QMPA L -IEFXQMOO
91 VOLSTAT 3 ↑DCB (0: close issued; non-0: EOV issued) -IGCOO09A
92 TCB-EXCP адреса TCB адреса IOB Time Sharing Option
93 TGET/TPUT
94 Q Control EC Parm Address адреса параметрів
95 TSIP TJID/EC
96 STAX адреса параметрів
97 TEST адреса EC/TCB адреса параметрів
98 PROTECT адреса параметрів
99 DYNAMIC DD адреса параметрів
100 FIB Caller ID адреса параметрів
101 QTIP EC адреса області збереження

Виноски

  1. Використання регістрів процесора для SVC у OS/360 і MVS:
    • R3: адреса CVT
    • R4: адреса TCB
    • R5: адреса RB
    • R6: точка входу (лише для MVS)
    • R7: адреса ASCB (лише для MVS)
    • R14 адреса повернення
  2. Перша назва — файл початкового коду, друга — лінкера
  3. а б в R15: список параметрів
  4. У MFT з підзадачами — IEAQCH00
  5. R2: ↑DECB
  6. а б R2: ↑QUEUE

Джерела

  • IBM System/360 Operating System: Programmer's Guide to Debugging (OS Release 21.7) (PDF) (англ.). IBM. April 1973. Архів оригіналу (PDF) за 29 січня 2020. Процитовано 15 квітня 2020.
  • OS Release 21: IBM System/360 Operating System Supervisor Services and Macro Instructions (PDF) (англ.). IBM. September 1974. Архів оригіналу (PDF) за 29 січня 2020. Процитовано 17 квітня 2020.
  • SVC descriptions (англ.). IBM. Архів оригіналу за 27 жовтня 2016. Процитовано 18 квітня 2020.

Примітки

  1. IBM Corporation (1967). IBM System/360 Operating System System Programmer's Guide (PDF). с. 33. Архів оригіналу (PDF) за 2 квітня 2020. Процитовано 14 квітня 2020.
  2. IBM Field Engineering Handbook: System/360 Operating System (PDF) (англ.). IBM. July 1971. Архів оригіналу (PDF) за 2 грудня 2019. Процитовано 14 квітня 2020.