SVC () — інструкція процесора мейнфреймів 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 можуть працювати у двох режимах: так званий проблемний режим () — за сучасною термінологією «режим користувача», у якому запускаються прикладні програми («програми, що вирішують проблеми користувача»), і режим супервізора (), призначений для системного програмного забезпечення. Додатково визначаються 16 так званих «ключів доступу до пам'яті» (). У «проблемному режимі» програма може використовувати не всі інструкції процесора — деякі так звані привілейовані інструкції доступні лише у режимі супервізора. Код супервізора, для якого поточне значення ключа доступу до пам'яті дорівнює 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 є прямі виклики за визначеними адресами ().
У різних операційних системах IBM сумісність у семантиці викликів SVC вкрай незначна.
У системах, що додали підтримку апаратної віртуалізації (таких, як VM/370 і z/VM) інструкція DIAG є схожою за ідеєю на SVC, але призначена для переходу з режиму супервізора до режиму гіпервізора.
Системні виклики OS/360 У системі OS/360 і її наступниках виклики, нумеровані від 0 до приблизно 127 означені самою IBM, а від 255 і «униз» — доступні для використання у конкретній інсталяції системи. У z/OS розподіл змінився: номери від 0 до приблизно 200 — для IBM, від 255 униз — для інсталяцій як «додаткові системні сервіси» (наприклад, підтримка шифрування і дешифрування). Власне процедури-обробники SVC повинні мати назви модулів, що починаються на IGC.
Термін «заблоковані» () означає, що системний виклик заборонений (фізично) для всіх переривань за винятком переривань контролю машини у системах, раніших 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 байт Реентрантна процедура Дозволяє переривання Вміст регістрів ЦП на вході Регістри 3, 4, 5, 6, 7 і 14 містять вказівники на різні ділянки обміну; регістри 0, 1 і 15 для параметрів. Можуть мати переміщувані дані Можуть передавати керування іншим типам SVC-підпрограм будь-які Можуть викликати WAIT colspan="3" , використовуючи WAIT (SVC 1) Можуть викликати POST , при використанні точки входу Post colspan="3" , використовуючи POST (SVC 2) Можуть диспетчеризувати синхронний вихід , при використанні точки входу Exit Effector colspan="3" , використовуючи SYNCH (SVC 12) Можуть викликати аварійне закінчення , при використанні точки входу Abterm colspan="3" , використовуючи ABEND (SVC 13)
Список системних викликів у OS/360 версії 21.6 У таблиці наведено системні виклики операційної системи OS/360 версії 21.6, описані у публікації «IBM Field Engineering Handbook: System/360 Operating System» (липень 1971-го року). № Назва Тип R0 R1 Модуль Призначення 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 2 IEAATC00 / IEAQLK00 7 XCTL 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 2 ↑PP список параметрів IEAAAT00 / IEAQAT00 Створення нової задачі 43 CIRB 2 ↑точка входу розмір робочої області; якщо значення негативне: DIRB IEAAEF00 44 CHAP 1 Пріоритет ↑TCB NOP/IEAQT800 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 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 2 66 BTAM TEST 4 67 QPOST 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 адреса області збереження
Виноски
Джерела
Примітки