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)
Таблицю створено на основі довідника 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].

НазваТипR0R1Модуль[lower-alpha 2]Призначення
0EXCP1↑IOBIEAAIH00 / IEAAQFX00Виконання програми каналу
1WAIT1лічильник подій↑ECBIEAPWT00 / IEAQSY50Чекання на подію
2POST1comp code↑ECBIEAAPTOO / IEAQSY50Інформування про подію
3EXIT1IEAAT00 / IEAQSY50Завершення програми
4GETMAIN1↑список параметрівIEAAMS00 / IEAQGM00Виділення пам'яті
5FREEMAIN1↑список параметрівIEAAMS00/ IEAQGM00Звільнення пам'яті
6LINK[lower-alpha 3]2IEAATC00 / IEAQLK00
7XCTL[lower-alpha 3]2IEAATC00 / IEAQLK00Скорочення від «transfer control»
8LOAD2↑(↑точка входу)↑DCBIEAATC00 / IEAQLK00Завантаження програми
9DELETE1↑ім'я програмиIEAHDL00 / IEAQLK00
10REGMAIN1Subpool No. (0), Length (1-3)↑область пам'яті для звільненняIEAAMS00 / IEAQGM00
11TIME1Time Units CodeIEA0RT00 / IEAQRT00 або RT10
12SYNCH2вміст регістру R15адреса переходуIEAASY00 / IEAQLK00
13ABEND4код завершенняIEAGAB00 / IEAQAB00Аварійне завершення програми
14SPIE3↑PICAIEAAPX00 / IEAQTB00
15ERREXCP1↑RQEIEAAIH00 / IEAQFX00
16PURGE2↑список параметрівIECIPR12 / IECIPR16
17RESTORE3↑ланцюжок IOBIGC0001G
18BLDL2↑список побудови↑DCBIGC0I8 / IECPFND1
19OPEN4↑список параметрівL -IGCOOOH
20CLOSE4↑список параметрівL -IGCOO020
21STOW3↑список параметрів↑DCBL -IGCOO02A
22OPEN TYPE=J4↑список параметрівL -IGCOO02B
23CLOSE TYPE=T4↑список параметрівL -IGCOO02C
24DEVTYPE3↑DD NAMEL -IGCOO02D
25TRKBAL3↑DCBIGC0002EБаланс треку: кількість байтів, що залишилися на треку після запису
26CATALOG4↑список параметрівL -IGCOO02F
27OBTAIN3↑список параметрівL -IGCOO02G
28CVOL4↑DCB або UCBL -IGCOO02H
29SCRATCH4↑UCB↑список параметрівL -IGCOO021
30RENAME4↑UCB↑список параметрівIGC00030
31FEOV4↑DCB
32ALLOC4↑список UCB
33IOHALT3↑UCB
34MGCR4індикаторіндикаторIEE0303D
35WTO4↑повідомленняIEECVWTO
36WTL4↑повідомленняIEE0303F
37SEGLD2якщо 0, SEGLD↑ім'я сегмента
38TTROUTER2IGC038
39LABEL3↑список параметрівIGC00031
40EXTRACT1↑список параметрівIEAAXR00 / IEAQTR00
41IDENTIFY3↑точка входу↑точка входуIEAAID00 / IEAQTD00
42ATTACH[lower-alpha 3]2↑PP список параметрівIEAAAT00 / IEAQAT00Створення нової задачі
43CIRB2↑точка входурозмір робочої області; якщо значення негативне: DIRBIEAAEF00
44CHAP1Пріоритет↑TCBNOP/IEAQT800[lower-alpha 4]
45OVLYBRCH2
46TTIMER1
47STIMER2
48DEQ2
49TTOPEN3
50NOP-
51SNAP4
52RESTART4
53RELEX3
54DISABLE[lower-alpha 5]2
55EOV4
56ENQ2
57FREEDBUF3
58RELBUF1
59OLTEP3
60STAE3
61TTSAV3
62DETACH1
63CHKPT4
64RDJFCB3
65QWAIT[lower-alpha 6]2
66BTAM TEST4
67QPOST[lower-alpha 6]2
68SYNADEF4код завершення↑буферIGC0006H
69BSP3↑DCBIGC00061
70GSERV2↑список параметрівIGC070Використовувався у Graphics Access Method System Product (GAM/SP)
71BUFSERVICE3↑список параметрівIGC0007AПізніші назви: ASGNBFR/BUFINQ/RLSEBFR
72CHATR4↑список параметрівIEECMCTR
73SPAR3↑список параметрівL -IGCOO07C
74DAR3↑список параметрівL -IGCOO07D
75DQUEUE3↑список параметрівL -IGCOO07E
76IFBSTAT3L -IFBSTAT
77QTAM TEST4↑список параметрівL -IGCOOO7G
78DISP SPACE3↑UCB↑MSGL -IGCOO07H Area
79STATUS1Mask (0-1), Type (2-3)↑TCBL -IEAQSETS
80IKASVC3↑список параметрівCCTL -IKASVC
81SETPRT4↑список параметрів-IGCOOO8A
82DASDR4↑список параметрівIGC0008B
83SMFWTM3↑повідомленняIEESMF8C
84GRAPHICS1↑UCBIGC084
85SWAPIGC0008E
86ATLAS4↑список параметрівIGC0008F
87DOM3IFZERO/IFNEGMSGID L -IEECXDOM tMSG List
88MOD 883Routing Code↑DCBIGC0008H
89EMSRV3↑список параметрівIGCOO081
90XQMNGR4↑список ECB/IOB↑QMPAL -IEFXQMOO
91VOLSTAT3↑DCB(0: close issued; non-0: EOV issued)-IGCOO09A
92TCB-EXCPадреса TCBадреса IOBTime Sharing Option
93TGET/TPUT
94Q ControlEC Parm Addressадреса параметрів
95TSIPTJID/EC
96STAXадреса параметрів
97TESTадреса EC/TCBадреса параметрів
98PROTECTадреса параметрів
99DYNAMIC DDадреса параметрів
100FIBCaller IDадреса параметрів
101QTIPECадреса області збереження

Примітки

  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

Джерела

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.