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 байт |
Реентрантна процедура | Опційно | Так | Так | Так |
Дозволяє переривання | Ні | Так | Так | Так |
Вміст регістрів ЦП на вході | Регістри[lower-alpha 1] 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) | ||
Список системних викликів у OS/360 версії 21.6
У таблиці наведено системні виклики операційної системи OS/360 версії 21.6, описані у публікації «IBM Field Engineering Handbook: System/360 Operating System» (липень 1971-го року)[2].
№ | Назва | Тип | R0 | R1 | Модуль[lower-alpha 2] | Призначення |
---|---|---|---|---|---|---|
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[lower-alpha 3] | 2 | IEAATC00 / IEAQLK00 | |||
7 | XCTL[lower-alpha 3] | 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[lower-alpha 3] | 2 | ↑PP список параметрів | IEAAAT00 / IEAQAT00 | Створення нової задачі | |
43 | CIRB | 2 | ↑точка входу | розмір робочої області; якщо значення негативне: DIRB | IEAAEF00 | |
44 | CHAP | 1 | Пріоритет | ↑TCB | NOP/IEAQT800[lower-alpha 4] | |
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[lower-alpha 5] | 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[lower-alpha 6] | 2 | ||||
66 | BTAM TEST | 4 | ||||
67 | QPOST[lower-alpha 6] | 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 | адреса області збереження |
Примітки
-
Використання регістрів процесора для SVC у OS/360 і MVS:
- R3: адреса CVT
- R4: адреса TCB
- R5: адреса RB
- R6: точка входу (лише для MVS)
- R7: адреса ASCB (лише для MVS)
- R14 адреса повернення
- Перша назва — файл початкового коду, друга — лінкера
- R15: список параметрів
- У MFT з підзадачами — IEAQCH00
- R2: ↑DECB
- R2: ↑QUEUE
Джерела
- IBM Corporation (1967). IBM System/360 Operating System System Programmer's Guide. с. 33.
- IBM Field Engineering Handbook: System/360 Operating System (англ.). IBM. July 1971.
- IBM System/360 Operating System: Programmer's Guide to Debugging (OS Release 21.7) (англ.). IBM. April 1973.
- OS Release 21: IBM System/360 Operating System Supervisor Services and Macro Instructions (англ.). IBM. September 1974.
- SVC descriptions (англ.). IBM.