Старые ОС: IBM VM/370

от автора

Здравствуйте, уважаемые хабарчане!
Я интересуюсь «древними» компьютерами и операционными системами. Несмотря на их древность, многие из них гораздо более продуманнее современных систем и лучше подходят в качестве примеров. Windows и Linux есть чему поучиться у многих устаревших ОС.
По-моему самые интересные из старых систем — мейнфреймы и поздние миникомпьютеры (супермини). В отличие от ранних миникомпьютеров, которые часто лепились на коленке конечного пользователя под его нужды, системы мейнфреймов и супермини с самого начала были предназначены для людей не имеющих ни полного представления о работе компьютера ни времени на разработку отдельной архитектуры для каждой задачи. При этом, в отличие от современных систем (4 гигабайта оперативки на набор этого поста), мейнфреймы и в особенности супермини были очень ограниченны в ресурсах и не как правило не разрастались.
В этом посте я опишу процесс установки операционной системы VM/370. VM/370 — операционная система IBM для компьютеров IBM System/370. Это многопользовательская ОС работающая по принципу гипервизора control program (CP): каждому пользователю предоставляется своя виртуальная машина, в которой он может запустить желаемую ОС, в частности сам гипервизор CP (немногие современные гипервизоры способны на такой трюк) и CMS — однопользовательскую ОС, бабушку MS-DOS. Прямой потомок VM — zVM до сих пор используется на мейнфреймах IBM System z. Подробнее о VM можно прочитать в Википедии.
Для тех кто хочет не красноглазить, а просто посмотреть конечный результат: есть готовые образы системы с подробными инструкциями (правда на английском). Остаток статьи можно не читать.

Материалы и инструменты

Для установки и работы нам понадобится:

  • Эмулятор S/370: Hercules. К сожалению, не могу дать советов по установке для Windows, тк сам пользуюсь Linux.
  • Эмулятор дисплея IBM 3270: x3270.
  • Образы лент с www.cbttape.org/:
  • Эмулятор терминала (подойдет обычный Telnet).
  • Документацияотсюда. Необходима по крайней мере инструкция по установке. Все, естественно на английском, но лично для меня это было только стимулом его выучить. IBMовский английский считается образцом грамотного языка.

Подготовка.

Все фалы проекта я помещаю в папку /home/link/Programming/LEGACY/SYSTEMS/System360/vm370habr (далее просто vm370habr). Загруженные образы сохраняем в папку vm370habr/DISTR. В vm370habr создаю подпапку IO.

Создание образов дисков

link@link-K73BY ~/Programming/LEGACY/SYSTEMS/System360/vm370habr/DASD $ dasdinit -z VMREL6 3330-11 VMREL6 HHCDU044I Creating 3330 volume VMREL6: 808 cyls, 19 trks/cyl, 13312 bytes/track HHCDU041I 808 cylinders successfully written to file VMREL6 HHCDI001I DASD initialization successfully completed. link@link-K73BY ~/Programming/LEGACY/SYSTEMS/System360/vm370habr/DASD $ dasdinit -z CPR6L0 3330 CPR6L0 HHCDU044I Creating 3330 volume CPR6L0: 404 cyls, 19 trks/cyl, 13312 bytes/track HHCDU041I 404 cylinders successfully written to file CPR6L0 HHCDI001I DASD initialization successfully completed. link@link-K73BY ~/Programming/LEGACY/SYSTEMS/System360/vm370habr/DASD $   

Диски в терминах System360 называются DASD. Программа dasdinit создает чистые образы дисков. Первый образ — диск модели 3330 с меткой VMREL6. На него мы запишем стартовую систему. Второй диск — CPR6L0, модели 3330-11 (в два раза большей емкости), на него установим гипервизор. Диски архивированы (опция -z), эту опцию лучше не применять на медленных компьютерах.

Файл конфигурации для монитора

Создаем в папке vm370habr текстовый файл hercules.cnf

со следующим содержанием:

ARCHMODE	S/370   # Мы хотим эмулировать компьютер S/370,  CPUMODEL	3158    #  модели 3158. CPUSERIAL	000777  # Это поле не имеет значения. ECPSVM		NO      # Отключить ускорение виртуализации (пока я с ним не разобрался). MAXCPU		1       # Однопроцессорная система. NUMCPU		1       # С одним процессором включённым при старте (привет, кеп) OSTAILOR	VM      # Не оповещать нас о "странных" для многих ОС, но типичных для VM ошибках.  LOADPARM  	0120....# Если честно, я сам не понял что это.  MAINSIZE	16      # 16 мегабайт оперативной памяти (по тем временам - роскошь). XPNDSIZE	0       # Без дополнительной памяти (CP её не использует).  # Адрес папки с нашей системой. DEFSYM MyDir /home/link/Programming/LEGACY/SYSTEMS/System360/vm370habr  # Номер TCP/IP порта для telnet. CNSLPORT	3270  ################################################## ##              Устройства                      ## ################################################## # В System/370 устройства адресуются (в простейшем случае) #  тремя шестнадцатеричными цифрами: # - Номером канала, # - Номером управляющего блока, # - Номером устройства.  # На управляющем блоке должны висеть устройства сходных типов. # На первый канал имеет смысл подключать медленные устройства.  # Первый столбец - адрес устройства. # Второй - тип. # Дальше идут настройки, для всех устройств разные. Их точное значение # можно посмотреть в руководстве Геркулеса.  008	3215-C NOPROMPT	# Первый телетайп для оператора системы. 009     3215   NOPROMPT	# Второй телетайп для управления установкой.   00C	3505	# Ввод перфокарт. 00D	3525	$(MyDir)/IO/punch ascii crlf    # Вывод перфокарт. 00E	1403	$(MyDir)/IO/printer crlf        # Принтер.  020-02F	3270	# Графические терминалы.  ######## Диски 130	3330	$(MyDir)/DASD/CPR6L0 131	3330	$(MyDir)/DASD/VMREL6  ####### 180-18F	3420	*       # Ленточные накопители. 

Примичание: этот конфигурационный файл следует не просто скопировать, а внимательно прочитать, осмыслить и изменить под свои нужды (как минимум, поменять путь).

Настройка дисков

link@link-K73BY ~/Programming/LEGACY/SYSTEMS/System360/vm370habr $ hercules #...много текста Command ==>devinit 180 DISTR/starter-3330.aws HHCTA004I 0180: DISTR/starter-3330.aws is a AWS Format tape file                                                                                              HHCPN098I Device 0:0180 initialized                                                                                                                           

В другом терминале:

link@link-K73BY ~/Programming/LEGACY/SYSTEMS/System360/vm370habr $ telnet localhost 3270 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. Hercules version 3.07 built on Jun 19 2011 04:29:21 running on link-K73BY (Linux-3.0.0-26-generic.#43-Ubuntu SMP Tue Sep 25 17:19:22 UTC 2012 x86_64 MP=2) Connected to device 0:0009 

В окне с Геркулесом:

Command ==>ipl 180                                                                                                        

(ipl, на мейнфреймовском жаргоне — то же самое что и boot).
В окне с телнетом появится следующее:

VM/370 FORMAT/ALLOCATE PROGRAM RELEASE 6 ENTER FORMAT OR ALLOCATE:                                                                                
Форматирование дисков

В System/370 концепт данных на диске отличался от современного: размеры секторов мог быть различным даже на одной дорожке и часто определялись приложением, а не операционной системой. Подключенные к CP диски могут быть двух типов: резидентные диски CP (для системной информации и файлов подкачки) и диски пользователей, которые могут быть разбиты по цилиндрам на несколько минидисков. Оболочка CMS разбивает всё отведенное ей пространство диска на 800-байтные секторы и строит файловою систему по типу FAT.
Насколько я понял, диск стартовой системы (CPR6L0) — это диск данных с особой сборкой ядра в первых цилиндрах. В качестве резидентного диска стартовая система (и новая установка ядра) будут использовать диск VMREL6. Для этого нам надо выделить на томе VMREL6 пространство для файлов подкачки и временных дисков. Я также отформатировал CPR6L0, потому что не уверен в том, что образы сгенерированные dasdinit подходят VM.
На ленте с образом стартовой системы есть программа форматирования.

В окне с телнетом:

ENTER FORMAT OR ALLOCATE:FORMAT FORMAT FUNCTION SELECTED ENTER DEVICE ADDRESS (CCU):131 ENTER DEVICE TYPE:3330-11 ENTER START CYLINDER (XXX) OR "LABEL":000 ENTER END CYLINDER (XXX):807 ENTER DEVICE LABEL:VMREL6 FORMAT STARTED FORMAT DONE 000 NO. PAGE RECORDS WITH READ-CHECK ERRORS ENTER FORMAT OR ALLOCATE:ALLOC ALLOCATE FUNCTION SELECTED ENTER DEVICE ADDRESS (CCU):131 ENTER DEVICE TYPE:3330-11 ENTER DEVICE LABEL:VMREL6 ENTER ALLOCATION DATA FOR VOLUME VMREL6 TYPE CYL CYL .... ... ... PERM 000 012 DRCT 013 016 TEMP 017 201 PERM 202 202 TEMP 203 389 TDSK 390 402 PERM 403 807 END ALLOCATION RESULTS PERM 000 012 DRCT 013 016 TEMP 017 201 PERM 202 202 TEMP 203 389 TDSK 390 402 PERM 403 807 DEVICE 131 VOLUME VMREL6 ALLOCATION ENDED ENTER FORMAT OR ALLOCATE:FORMAT FORMAT FUNCTION SELECTED ENTER DEVICE ADDRESS (CCU):130 ENTER DEVICE TYPE:3330 ENTER START CYLINDER (XXX) OR "LABEL":000 ENTER END CYLINDER (XXX):403 ENTER DEVICE LABEL:CPR6L0 FORMAT STARTED FORMAT DONE 000 NO. PAGE RECORDS WITH READ-CHECK ERRORS 

Здесь мы сначала форматируем будущий системный диск, затем выделяем на нем участки (выделение взято из инструкции по установке) и форматируем диск для стартовой системы.

Копирование стартовой системы

В окне с геркулесом вводим:

stop                                                                             ipl 180                                                                          

В телнете появляется:

VM/370 DASD DUMP/RESTORE PROGRAM RELEASE 6 ENTER CARD READER ADDRESS OR CONTROL STATEMENTS ENTER:  

Вводим:

ENTER CARD READER ADDRESS OR CONTROL STATEMENTS ENTER: SYSPRINT 00E ENTER: INPUT 180 3420 ENTER: OUTPUT 130 3330 CPR6L0 ENTER: RESTORE ALL RESTORING CPR6L0 

Подождите несколько минут и Геркулес начинает выдавать сообщения об ошибках. Дело в том, что в программе DDR есть ошибка, которая не влияла на поведение на реальном железе, но вешает эмуляторы.
Выйдите из Геркулеса командой quit и перезапустите Геркулес.

Запуск и настройка стартовой системы

Подключите к Геркулесу эмулятор дисплея (как это делать — см. мануал эмулятора). В Геркулесе наберите команду «ipl 130» и нажмите клавишу ввода в окне дисплея.

На дисплее появится следующая картинка:

В принципе, дисплей 3270 в исполнении CMS похож на обычную консоль. Единственное серьезное отличие — консоль не прокручивается автоматический, надо очищать экран кнопкой «Clear». Все остальное в принципе можно выяснить методом тыка.
Настройка стартовой системы

Сборка ядра стартовой системы отличается тем, что здесь адреса устройств не вшиты намертво в код, а задаются при каждом старте. Для моей конфигурации

ответы такие:

VM/370 STARTER SYSTEM RELEASE 6.0
ENTER PRINTER ADDRESS (CUU):
00e
ENTER DEVICE TYPE (1403,1443,3211,3203,3800):
1403
ENTER PUNCH ADDRESS (CUU):
00d
ENTER DEVICE TYPE (2540P,3525):
3525
ENTER READER ADDRESS (CUU):
00c
ENTER DEVICE TYPE (2501,2540R,3505):
3505
ENTER ADDRESS WHERE PID TAPE IS MOUNTED (CUU):
180
ENTER DEVICE TYPE (2401,2415,2420,3420):
3420
ENTER ADDRESS WHERE SCRATCH TAPE IS MOUNTED (CUU):
181
ENTER DEVICE TYPE (2401,2415,2420,3420):
3420
===Нажмите клавишу Clear===
ENTER DEVICE ADDRESS WHERE SYSTEM RESIDENCE WILL BE BUILT (CUU):
131
ENTER DEVICE TYPE:
3330
===Повторение настроек===
ARE THE ABOVE SETTINGS CORRECT?
YES
===Экран очищается===
CHANGE TOD CLOCK (YES|NO):
13:36:14 NO
13:36:14 START ((COLD|WARM|CKPT|FORCE) (DRAIN))|(SHUTDOWN):
13:36:21 COLD
13:36:21 DMKLNK117E CPGEN 351 NOT LINKED; VOLID VMREL6 CONFLICT
13:36:21 DMKLNK117E CPGEN 352 NOT LINKED; VOLID VMREL6 CONFLICT
13:36:21 DMKLNK117E CPGEN 353 NOT LINKED; VOLID VMREL6 CONFLICT
13:36:21 AUTO LOGON *** CPGEN USERS = 001 BY SYSTEM
13:36:21

DMKCPI952I 0512K SYSTEM STORAGE

DMKCPI957I STOR 00512K, NUC 156K, DYN 00320K, TRA 008K, FREE 0028K, V=R 00000K
13:36:21 FILES: NO RDR, NO PRT, NO PUN

Теперь я настраиваю консоль:

spool console start terminal mode vm 

Эти настройки нужны для того, чтобы при запуске CMS гипервизор передавал ей управление консолью. Но пока мы еще не запустили CMS, команды виртуальной машине уйдут в пустоту. Поэтому следите за надписью в правом нижнем углу экрана и вводить команды только по сигналу CP READ. Если в углу экрана надпись RUNNING, нужно нажать клавишу Enter, а если HOLDING — CLEAR.

Определение установки

Введите команду QUERY VIRTUAL DASD, чтобы проверить какие диски подключены. Результат должен быть таким:

13:52:55 DASD 190 3330 CPR6L0 R/O 085 CYL 13:52:55 DASD 191 3330 CPR6L0 R/W 001 CYL 13:52:55 DASD 194 3330 CPR6L0 R/W 027 CYL 13:52:55 DASD 350 3330 VMREL6 R/W 808 CYL 

Теперь нужно подключить том VMREL6 к виртуальной машине под тем же номером что и в реальной:
define 350 as 131.

Подключение лент

Создайте в папке vm370habr пустой файл scratch.aws и введите в Геркулес следующие команды:

devinit 180 DISTR/ptf-616.aws devinit 180 scratch.aws 

Первая лента — это патч системы, а вторая — пустая лента, на которую будет записано ядро.
Теперь подключаем эти ленты к виртуальной машине. В окне дисплея:

attach 180 to cpgen as 181 attach 181 to cpgen as 182 
Загрузка CMS

Введите в окно дисплея команду: «ipl 190 parm seg=null». Появится сообщение: «RELEASE 6 CMS 12/25/78». Нажмите клавишу ввода. Теперь вы работаете под управлением CMS и можете не беспокоиться о потере команд.
Далее, создайте временный диск (он понадобиться для сборки ядра) командой «define t3330 192 11» и отформатируйте его командой format 192 d. (d — буква диска в CMS). Дальше все совсем как в DOSе. Метку можно назначить любую, я выбрал TMP192 (как в инструкции).
Пару слов о файлах CMS: в CMS имя файла записывается так: через пробел восемь символов имени, восемь символов расширения, буква диска. То есть как в ранних DOS, но с точностью до наоборот.

Применение патчей

Отключите защиту от записи на системном диске CMS: «link cmssys 190 190 w write».
Скопируйте содержимое диска a на диск d коммандой «copy * * a = = d» Символ «равно» в шаблонах CMS означает «без изменений».
Скопируйте файлы патчей на диск d: «vmfplc2 load * * d». VMFPLC2 выведет такой список файлов:

 LOADING.....  5749010  061638   D1  VMSERV   EXEC     D1  5749010  EXEC     D1  VMFPLC2  MODULE   D2  END-OF-FILE OR END-OF-TAPE 

Теперь применим патчи:

access 192 c release a vmserv nomemo noipl 

VMSERV выведет приветствие и начнет спрашивать какие патчи надо применить. Нам нужен сервис «5749010» и патч CP VM/370. «CP BASE STAGING AREA DISK ADDRESS» — 194. Также, ответьте «yes» на вопрос «IS THIS THE INITIAL SYSGEN OF THIS SYSTEM?».
После этого, VMSERV применит патчи к CP и перезапустит CMS. Когда CMS выведет приветствие, подключите временный диск как диск a: «access 192 a».

Подготовка к сборке ядра

Введите «generate srvcpgm». Эта команда выведет перфокарты с сервисными программами (на эмуляторе они нам не понадобятся). Затем программа спросит печатать ли пример пользовательского каталога. Ответьте «yes» — в каталог может пригодиться. А карты с конфигурационными файлами не нужны — я приведу их ниже.

Конфигурация ядра

Ядро настраивается с помощью нескольких исходников на языке ассемблера и описания пользовательского каталога. Тем, кто хочет их настроить «по вкусу», придется долго копаться в мануалах, а я привожу

готовый вариант:

ID CPGEN :READ MYVM DIRECT * CHANGE THE NEXT ENTRY FOR YOUR SYSTEM RESIDENCE DEVICE DIRECTORY 131 3330 VMREL6 * USER OPERATOR OPERATOR 320K 1M ABCDEG  ACCOUNT ACT1 OPERATOR  CONSOLE 009 3215  SPOOL 00C 2540 READER A  SPOOL 00D 2540 PUNCH A  SPOOL 00E 1403 A  MDISK 191 3330 008 005 CPR6L0 WR READ WRITE  LINK MAINT 194 194 RR  LINK MAINT 190 190 RR * USER CE CE 320K 1M EFG  ACCOUNT ACT2 CE  CONSOLE 009 3215  SPOOL 00C 2540 READER A  SPOOL 00D 2540 PUNCH A  SPOOL 00E 1403 A  MDISK 191 3330 013 004 CPR6L0 WR READ WRITE  LINK MAINT 194 194 RR  LINK MAINT 190 190 RR * USER MAINT CPCMS 720K 16M BCEG  ACCOUNT ACT3 MAINT  OPTION ECMODE REALTIMER  CONSOLE 009 3215  SPOOL 00C 2540 READER A  SPOOL 00D 2540 PUNCH A  SPOOL 00E 1403 A  MDISK 190 3330 030 085 CPR6L0 MR READ  MDISK 191 3330 017 007 CPR6L0 WR READ  MDISK 194 3330 115 027 CPR6L0 MR READ  MDISK 199 3330 029 001 CPR6L0 WR READ *  MDISK 300 3330 000 808 VMREL6 MW * *   THE ABOVE ENTRY SHOULD BE MODIFIED TO MATCH THE ADDRESS AND LABEL *   OF YOUR SYSTEM RESIDENCE VOLUME.  IT MAY THEN BE USED BY THIS ID *   TO LOAD A DIRECTORY AND WRITE A CP NUCLEUS. *   DELETE THE ' * ' (IN FRONT OF MDISK) ALSO. *   CHANGE THE '404' TO A '808' IF YOURS IS A 3330-11 * ***** USER IVPM1 IVPASS 320K 16M G  ACCOUNT ACT4 IVPM1  CONSOLE 009 3210  SPOOL 00C 2540 READER A  SPOOL 00D 2540 PUNCH A  SPOOL 00E 1403 A  MDISK 191 3330  001 001 CPR6L0 WR READ WRITE  LINK MAINT 194 194 RR  LINK MAINT 190 190 RR * USER IVPM2 IVPASS 320K 1M G  ACCOUNT ACT5 IVPM2  CONSOLE 009 3210  SPOOL 00C 2540 READER A  SPOOL 00D 2540 PUNCH A  SPOOL 00E 1403 A  MDISK 191 3330 002 001 CPR6L0 WR READ WRITE  LINK MAINT 194 194 RR  LINK MAINT 190 190 RR * USER RSCS RSCS 512K  ACCOUNT ACT6 RSCS  OPTION ECMODE  CONSOLE 009 3215  SPOOL 001 2540 READER A  SPOOL 00C 2540 READER A  SPOOL 00D 2540 PUNCH A  SPOOL 00E 1403 A  MDISK 191 3330 003 005 CPR6L0 WR READ WRITE  LINK MAINT 190 190 RR  DEDICATE 0B1 078  DEDICATE 0B2 079  DEDICATE 0B3 07A * USER ECMODE ECMODE 512K 1M G  ACCOUNT ACT7 ECMODE  OPTION ECMODE REALTIMER  CONSOLE 009 3215  SPOOL 00C 2540 READER A  SPOOL 00D 2540 PUNCH A  SPOOL 00E 1403 A  MDISK 191 3330 024 005 CPR6L0 WR READ WRITE  LINK MAINT 194 194 RR  LINK MAINT 190 190 RR * USER OPERATNS OPERATNS 512K 1M BCEG  ACCOUNT ACT8 OPERATNS  CONSOLE 009 3215  SPOOL 00C 2540 READER A  SPOOL 00D 2540 PUNCH A  SPOOL 00E 1403 A  LINK MAINT 190 190 RR **************** * * THE FOLLOWING MINIDISK ENTRY IS PROVIDED AS AN EXAMPLE OF * THE SPACE RECOMMENDED FOR AN IPCS VIRTUAL MACHINE. * IF YOU INTEND TO USE THE OPERATNS USERID AS YOUR IPCS * VIRTUAL MACHINE, YOU SHOULD CHANGE THE FOLLOWING STATEMENT * TO ALLOCATE MINIDISK SPACE ON ONE OF YOUR SYSTEM DASD VOLUMES. * * MDISK 191 3330 XXX 015 YYYYYY WR READ WRITE * **************** * * *     CYLINDERS 142 TO 403 ARE UNUSED AND MAY BE USED FOR *     ANY OTHER VIRTUAL MINI DISK SPACE. IT CAN ALSO BE *     USED FOR PAGING, SPOOLING OR T-DSK SPACE. * * *  :READ DMKRIO ASSEMBLE DMKRIO CSECT ******** Device definitions: * ****** Teletype         RDEVICE ADDRESS=008,DEVTYPE=3215 * ****** Card reader         RDEVICE ADDRESS=00C,DEVTYPE=3505,CLASS=(R) * ****** Card punch         RDEVICE ADDRESS=00D,DEVTYPE=3525,CLASS=(P) * ****** Printer         RDEVICE ADDRESS=00E,DEVTYPE=1403,FEATURE=UNVCHSET,CLASS=(L) * ****** Terminals         RDEVICE ADDRESS=(020,16),DEVTYPE=3277 * ****** DASDs: *   **** System disks.         RDEVICE ADDRESS=(130,2),DEVTYPE=3330,MODEL=11 *   **** User disks.         RDEVICE ADDRESS=(150,8),DEVTYPE=3330,MODEL=11 * ****** Tapes.          RDEVICE ADDRESS=(180,16),DEVTYPE=3420,MODEL=8,FEATURE=DUALDENS * ******** Control unit definitions: * ****** Printer (I don't know if this is requed):         RCTLUNIT ADDRESS=000,CUTYPE=3811 * ****** Slow IO:         RCTLUNIT ADDRESS=008,CUTYPE=2821 * ****** Terminals:         RCTLUNIT ADDRESS=020,CUTYPE=3272,FEATURE=16-DEVICE * ****** System disks:         RCTLUNIT ADDRESS=130,CUTYPE=3880,FEATURE=16-DEVICE * ****** User disks:         RCTLUNIT ADDRESS=150,CUTYPE=3880,FEATURE=16-DEVICE * ****** Tapes:         RCTLUNIT ADDRESS=180,CUTYPE=3803,FEATURE=16-DEVICE * ******** Channel definitions.         RCHANNEL ADDRESS=0,CHTYPE=MULTIPLEXOR         RCHANNEL ADDRESS=1,CHTYPE=BLKMPXR *         RIOGEN CONS=008         END :READ DMKSYS ASSEMBLE SYS      TITLE 'DMKSYS FOR 3330    RELEASE 6'                           00001000 DMKSYS   CSECT                                                          00002000          SYSOWN (VMREL6,TEMP)                                           00003000          SYSRES SYSVOL=VMREL6,SYSRES=131,SYSTYPE=3330,                 X00004000                SYSNUC=7,SYSWRM=10,SYSERR=11,SYSCKP=202                  00005000          SYSMON AUTO=NO                                                 00006000          SYSJRL                                                         00007000          SYSCOR RMSIZE=16M,AP=NO                                        00008000          SYSOPR SYSOPER=OPERATOR,SYSDUMP=OPERATNS                       00009000          SYSTIME ZONE=5,LOC=WEST,ID=EST                                 00010000          SYSLOCS                                                        00011000          END                                                            00012000 :READ DMKSNT ASSEMBLE *.                                                                      00003000 * MODULE NAME -                                                         00004000 *        DMKSNT                                                         00005000 *                                                                       00006000 * FUNCTION -                                                            00007000 *                                                                       00008000 *        THIS MODULE WILL BE ASSEMBLED BY THE INSTALLATION SYSTEM       00009000 *        PROGRAMMER. IT WILL DESCRIBE THE THE SYSTEM TO BE SAVED VIA    00010000 *        THE 'SAVESYS' COMMAND AND TO BE IPL'ED BY NAME. SHARED SEG-    00011000 *        MENTS MAY BE SPECIFIED. THESE SEGMENTS MUST CONSIST OF         00012000 *        ALL REENTRANT CODE.                                            00013000 *                                                                       00014000 *                                                                       00015000 *        INPUT TO THE NAMESYS MACRO IS SPECIFIED IN THE FOLLOWING       00016000 *        FORMAT:                                                        00017000 *                                                                       00018000 *        LABEL NAMESYS    SYSSIZE=NNNK,SYSNAME=CCCCCC,VSYSRES=CCCCCC,   00019000 *                         VSYSADR=XXX,SYSVOL=CCCCCC,SYSCYL=NNN,         00020000 *                         SYSSTRT=(CC,P),SYSPGCT=NN,                    00021000 *                         SYSPGNM=(NN,NN,NN-NN,......),                 00022000 *                         SYSHRSG=(N,N,...)                             00023000 *                                                                       00024000 *        WHERE:                                                         00025000 *                                                                       00026000 *        SYSSIZE - THIS IS THE MINUMUM STORAGE SIZE NEEDED TO           00027000 *                  OPERATE THE SAVED SYSTEM.                            00028000 *        SYSNAME - IS THE NAME GIVEN THE SYSTEM TO BE USED FOR          00029000 *                  IDENTIFICATION BY 'SAVESYS' AND 'IPL'.               00030000 *        VSYSRES - IS THE VOLUME SERIAL OF THE DASD CONTAINING THE      00031000 *                  SYSTEM TO BE SAVED                                   00032000 *        VSYSADR - IS THE VIRTUAL ADDRESS OF THE DASD CONTAINING        00033000 *                  THE SYSTEM.                                          00034000 *        SYSCYL  - THE CYLINDER ADDRESS OF THE 'MINI-DISK'              00035000 *                  FOR THE SYSTEM TO BE SAVED.                          00036000 *        SYSVOL  - IS THE VOLUME SERIAL OF THE DASD DESIGNATED TO       00037000 *                  RECEIVE THE SAVED SYSTEM. THIS MUST BE A             00038000 *                 'CP-OWNED' VOLUME.                                    00039000 *        SYSSTRT - THIS DESIGNATES THE STARTING CYLINDER AND PAGE       00040000 *                  ADDRESS ON 'SYSVOL' THAT THIS NAMED SYSTEM IS TO     00041000 *                  BE SAVED. DURING THE SAVESYS AND IPL PROCESSING,     00042000 *                  THIS WILL BE USED TO MAKE UP THE 'CCPD' ADDRESS      00043000 *                  FOR THE DASD OPERATIONS. THESE NUMBERS ARE TO        00044000 *                  SPECIFIED IN DECIMAL.                                00045000 *        SYSPGCT - IS THE TOTAL NUMBER OF PAGES TO BE SAVED.            00046000 *        SYSPGNM - THESE ARE THE NUMBERS OF THE PAGES TO BE SAVED.      00047000 *                  SPECIFICATION MAY BE DONE AS GROUPS OF PAGES OR      00048000 *                  AS SINGLE PAGES. FOR EXAMPLE - IF PAGES 0,4, AND     00049000 *                  10 THRU 13 ARE TO BE SAVED, USE THE FORMAT:          00050000 *                  SYSPGNM=(0,4,10-13).                                 00051000 *        SYSHRSG - THESE ARE THE SEGMENT NUMBERS DESIGNATED AS          00052000 *                  SHARED. THE PAGES IN THESE SEGMENTS WILL BE SET      00053000 *                  UP AT IPL TIME TO BE USED BE ANY USER                00054000 *                  IPL'ING BY THIS NAME.                                00055000 *                                                                       00056000 *        THE FOLLOWING IS A SAMPLE OF INPUT FOR THIS MODULE:            00057000 *                                                                       00058000 *        DMKSNTBL CSECT                                                 00059000 *        FSTNAME NAMESYS   SYSSIZE=256K,SYSNAME=CMS,VSYSRES=CPDSK1,     00060000 *                          SYSVADR=190,SYSCYL=100,SYSVOL=CPDSK2,        00061000 *                          SYSSTRT=(400,1),SYSPGCT=10,                  00062000 *                          SYSPGNM=(0-5,10-13),SYSHRSG=(1,2)            00063000 *                                                                       00064000 * ATTRIBUTES -                                                          00065000 *                                                                       00066000 *        PAGEABLE                                                       00067000 *                                                                       00068000 * ENTRY POINTS -                                                        00069000 *                                                                       00070000 *        DMKSNTBL                                                       00071000 *                                                                       00072000 * NOTES -                                                               00073000 *                                                                       00074000 *        THERE IS NO EXECUTABLE CODE IN THIS MODULE.                    00075000 *                                                                       00076000 *                                                                       00077000 *.                                                                      00078000          EJECT                                                          00079000 *                                                                       00080000 *********************************************************************** 00081000 *                                                                       00082000 *        THE FOLLOWING ENTRIES ARE BASED ON THE INFORMATION INCLUDED    00083000 *        IN THE SAMPLE DMKSYS PROVIDED WITH THE STARTER SYSTEM,         00084000 *        AND THE SAMPLE ALLOCATIONS PROVIDED IN THE SYSTEM              00085000 *        GENERATION PROCEDURE.                                          00086000 *                                                                       00087000 *********************************************************************** 00088000 *                                                                       00089000          SPACE                                                          00090000 DMKSNTBL CSECT                                                          00091000          SPACE                                                          00092000 *                                                                       00093000 *     THE SPACE FOR CMS IS ALLOCATED ON VMREL6, AS FOLLOWS:             00094000 *          CYL 1, PAGE 01 TO CYL 1, PAGE 34  (34 PAGES)                 00095000 *     TOTAL = 34 PAGES                                                  00096000 *                                                                       00097000 CMS      NAMESYS    SYSSIZE=256K,SYSNAME=CMS,                          X00098000                VSYSADR=190,SYSVOL=VMREL6,SYSCYL=030,SYSSTRT=(001,1),   X00099000                SYSPGCT=33,SYSPGNM=(0-32),SYSHRSG=(1),VSYSRES=CPR6L0     00100000          EJECT                                                          00101000 *                                                                       00102000 *     THE SPACE FOR CMSSEG IS ALLOCATED ON VMREL6, AS FOLLOWS:          00103000 *          CYL 1, PAGE 35 TO CYL 1, PAGE 51  (17 PAGES)                 00104000 *     TOTAL = 17 PAGES                                                  00105000 *                                                                       00106000 CMSSEG   NAMESYS SYSNAME=CMSSEG,SYSVOL=VMREL6,SYSCYL=,                 X00107000                SYSSTRT=(001,35),SYSPGCT=16,SYSHRSG=(16),               X00108000                SYSPGNM=(256-271),SYSSIZE=64K,VSYSRES=,VSYSADR=IGNORE    00109000          EJECT                                                          00110000 *                                                                       00111000 *     THE SPACE FOR CMSVSAM IS ALLOCATED ON VMREL6, AS FOLLOWS:         00112000 *          CYL 1, PAGE 52 TO CYL 1, PAGE 57 ( 6 PAGES)                  00113000 *          CYL 2, PAGE 01 TO CYL 2, PAGE 57 (57 PAGES)                  00114000 *          CYL 3, PAGE 01 TO CYL 3, PAGE 34 (34 PAGES)                  00115000 *     TOTAL = 97 PAGES                                                  00116000 *                                                                       00117000 CMSVSAM  NAMESYS SYSNAME=CMSVSAM,SYSVOL=VMREL6,SYSPGNM=(272-367),      X00118000                SYSSTRT=(001,52),SYSPGCT=96,SYSSIZE=384K,SYSCYL=,       X00119000                SYSHRSG=(17,18,19,20,21),VSYSRES=,VSYSADR=IGNORE         00120000          EJECT                                                          00121000 *                                                                       00122000 *     THE SPACE FOR CMSAMS IS ALLOCATED ON VMREL6, AS FOLLOWS:          00123000 *          CYL 3, PAGE 35 TO CYL 3, PAGE 57 (23 PAGES)                  00124000 *          CYL 4, PAGE 01 TO CYL 4, PAGE 57 (57 PAGES)                  00125000 *          CYL 5, PAGE 01 TO CYL 5, PAGE 49 (49 PAGES)                  00126000 *     TOTAL = 129 PAGES                                                 00127000 *                                                                       00128000 CMSAMS  NAMESYS SYSNAME=CMSAMS,SYSVOL=VMREL6,SYSPGNM=(368-495),        X00129000                SYSSTRT=(003,35),SYSPGCT=128,SYSSIZE=448K,SYSCYL=,      X00130000                SYSHRSG=(23,24,25,26,27,28),VSYSRES=,VSYSADR=IGNORE      00131000          EJECT                                                          00132000 *                                                                       00133000 *     THE SPACE FOR CMSDOS IS ALLOCATED ON VMREL6, AS FOLLOWS:          00134000 *          CYL 5, PAGE 50 TO CYL 5, PAGE 57 ( 8 PAGES)                  00135000 *          CYL 6, PAGE 01 TO CYL 6, PAGE 01 ( 1 PAGE )                  00136000 *     TOTAL = 9 PAGES                                                   00137000 *                                                                       00138000 CMSDOS   NAMESYS SYSNAME=CMSDOS,SYSVOL=VMREL6,SYSHRSG=(31),            X00139000                SYSSTRT=(005,050),SYSPGCT=8,SYSSIZE=32K,SYSCYL=,        X00140000                SYSPGNM=(496-503),VSYSRES=,VSYSADR=IGNORE                00141000          EJECT                                                          00142000 *                                                                       00143000 *     THE SPACE FOR INSTVSAM IS ALLOCATED ON VMREL6, AS FOLLOWS:        00144000 *          CYL 6, PAGE  02 TO CYL 6, PAGE 10  ( 9 PAGES)                00145000 *     TOTAL = 9 PAGES                                                   00146000 *                                                                       00147000 INSTVSAM   NAMESYS SYSNAME=INSTVSAM,SYSVOL=VMREL6,SYSHRSG=(254),       X00148000                SYSSTRT=(006,002),SYSPGCT=8,SYSSIZE=32K,SYSCYL=,        X00149000                SYSPGNM=(4064-4071),VSYSRES=,VSYSADR=IGNORE              00150000 *                                                                       00151000          EJECT                                                          00152000 *                                                                       00153000 *     THE SPACE FOR 3800 PRINTER IMAGES ON VMREL6 IS ALLOCATED:         00154000 *          CYL 6, PAGE 11 TO CYL 6, PAGE 16  ( 6 PAGES)                 00155000 *     TOTAL = 6 PAGES                                                   00156000 *                                                                       00157000          NAME3800 CPNAME=IMAG3800,SYSVOL=CPR6L0,SYSSTRT=(006,11),      X00158000                SYSPGCT=5                                                00159000          EJECT                                                          00160000 *                                                                       00161000 *     THE FOLLOWING SPACE IS AVAILABLE FOR SAVED SYSTEMS ON VMREL6:     00162000 *          CYL 6, PAGE 17 TO CYL 6, PAGE 57  (41 PAGES)                 00163000 *     TOTAL = 47 PAGES                                                  00164000 *                                                                       00165000          END                                                            00166000 

Копируем весь этот текст в файл sysconf.txt.

Сборка ядра

Вводим в консоли Геркулеса: «devinit 00c sysconf.txt ascii eof».
И на дисплее: «generate vm370»
GENERATE спросит имя файла с каталогом (у меня это MYVM DIRECT). Затем откомпилируются файлы с настройками и GENERATE спросит собирамемся ли мы использовать многопроцессорную систему или опцию V=R. Отвечаем no. Дальше будет много текста и (если вам повезет) в конце появится надпись: «NUCLEUS LOADED ON VMREL6».
Сохраните карту памяти ядра и выключите стартовую систему:

close ptr 15:06:30 IPL 190 PARM SEG=NULL 15:06:30 PRT FILE 0019  TO  CPGEN    COPY 01 NOHOLD RELEASE 6 CMS 12/25/78 access 194 a CMSSEG SYSTEM NAME 'NULL    ' NOT AVAILABLE. R; T=0.01/0.01 15:06:36 read cpipcs map a RECORD LENGTH IS '132' BYTES. R; T=0.25/1.24 15:06:50 drain all 15:08:18 RDR  00C DRAINED   SYSTEM 15:08:18 PUN  00D DRAINED   SYSTEM   CLASS = A      SEP 15:08:18 PRT  00E DRAINED   SYSTEM   CLASS = A      SEP R; T=0.01/0.02 15:08:18 shutdown     DMKCKP960I SYSTEM WARM START DATA SAVED   DMKCKP961W SYSTEM SHUTDOWN COMPLETE   

Разбиение диска

Для того, чтобы использовать диск CPR6L0, его нужно переразметить. Загрузите FORMAT/ALLOCATE так же, как при копировании системы.

VM/370 FORMAT/ALLOCATE PROGRAM RELEASE 6 ENTER FORMAT OR ALLOCATE:ALLOCATE ALLOCATE FUNCTION SELECTED ENTER DEVICE ADDRESS (CCU):130 ENTER DEVICE TYPE:3330 ENTER DEVICE LABEL:CPR6L0 ENTER ALLOCATION DATA FOR VOLUME CPR6L0 TYPE CYL CYL .... ... ... DRCT 000 000 PERM 001 403 END    ALLOCATION RESULTS DRCT 000 000 PERM 001 403 DEVICE 130 VOLUME CPR6L0 ALLOCATION ENDED 

Остановите программу командой stop.

Запуск новой системы

Загрузитесь с системного диска командой IPL 131. В окне Геркулеса появится приглашение:

NOW 14:14:40 EST MONDAY 08/26/13                                                                                                                              CHANGE TOD CLOCK (YES NO)  

Сейчас вы работаете в встроенной консоли. С точки зрения VM/CMS это такая же консоль, как и подключение через телнет. Для того, чтобы ввести текст во встроенную консоль, введите его в консоль Геркулеса через косую черту ("/"):

CHANGE TOD CLOCK (YES NO) :                                                                                                                                   /(0008) no                                                                                                                                                    14:17:49 START ((COLD WARM CKPT FORCE) (DRAIN)) (SHUTDOWN) :                                                                                                  /(0008) cold                                                                                                                                                  14:17:51 AUTO LOGON   ***   OPERATOR USERS = 001  BY  SYSTEM                                                                                                  DMKCPI957I STOR 16384K, NUC 224K, DYN 14900K, TRA 240K, FREE 1020K, V=R 00000K                                                                                14:17:51 FILES:  NO RDR,  NO PRT,  NO PUN                                                                                                                     14:17:51 FORMATTING ERROR RECORDING AREA                                                                                                                      
Форматирование минидисков

Тут все просто:

 /(0008) ipl 190 parm seg=null                                                                                                                                14:22:39                                                                                                                                                      RELEASE 6 CMS 12/25/78                                                                                                                                      V /(0008) access (nodisk                                                                                                                                        CMSSEG SYSTEM NAME 'NULL    ' NOT AVAILABLE.                                                                                                                  DISK 'A' NOT ACCESSED.                                                                                                                                        DISK 'A' NOT ACCESSED.                                                                                                                                        R; T=0.01/0.01 14:22:49                                                                                                                                                                                                                                                                                                     /(0008) format 191 a                                                                                                                                          DMSFOR603R FORMAT WILL ERASE ALL FILES ON DISK 'A(191)'. DO YOU WISH TO CONTINUE? (YES NO):                                                                   /(0008) yes                                                                                                                                                   DMSFOR605R ENTER DISK LABEL:                                                                                                                                  /(0008) OPR191                                                                                                                                                FORMATTING DISK 'A'.                                                                                                                                          HHCCP048I 0130:CCW=07F06608 40100006=>00000FFF 00000000 00000000 000F8918 ..............i.                                                                    HHCCP075I 0130:Stat=0E00 Count=0000                                                                                                                           HHCCP076I 0130:Sense=80000000 380C1204 00000000 00000000 00000000 00000000                                                                                    HHCCP077I 0130:Sense=CMDREJ                                                                                                                                   '5' CYLINDERS FORMATTED ON 'A(191)'.                                                                                                                          R; T=0.01/0.11 14:23:13                                                                                                                                                                                                                                                                                                     /(0008) logoff                                                                                                                                                14:23:34 CONNECT= 00:05:42 VIRTCPU= 000:00.06 TOTCPU= 000:00.39                                                                                               14:23:34 LOGOFF AT 14:23:34 EST MONDAY 08/26/13                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          VM/370 ONLINE                                                                                                                                                 /(0008) logon maint                                                                                                                                                                                                                                                                                                        ENTER PASSWORD:                                                                                                                                               XXXXXXXX                                                                                                                                                      /(0008) cpcms                                                                                                                                                 LOGON AT 14:23:45 EST MONDAY 08/26/13                                                                                                                         /(0008) define storage 2m                                                                                                                                     STORAGE = 02048K                                                                                                                                              /(0008) ipl 190 parm seg=null                                                                                                                                 RELEASE 6 CMS 12/25/78                                                                                                                                        /(0008) access (nodisk                                                                                                                                        CMSSEG SYSTEM NAME 'NULL    ' NOT AVAILABLE.                                                                                                                  DISK 'A' NOT ACCESSED.                                                                                                                                        DISK 'A' NOT ACCESSED.                                                                                                                                        R; T=0.01/0.01 14:25:26                                                                                                                                                                                                                                                                                                     /(0008) format 191 a                                                                                                                                          DMSFOR603R FORMAT WILL ERASE ALL FILES ON DISK 'A(191)'. DO YOU WISH TO CONTINUE? (YES NO):                                                                   /(0008) yes                                                                                                                                                   DMSFOR605R ENTER DISK LABEL:                                                                                                                                  /(0008) MNT191                                                                                                                                                FORMATTING DISK 'A'.                                                                                                                                          HHCCP048I 0130:CCW=07F07BB0 40100006=>00000FFF 00000000 00FFF280 000F6F38 ..........2...?.                                                                    HHCCP075I 0130:Stat=0E00 Count=0000                                                                                                                           HHCCP076I 0130:Sense=80000000 38171204 00000000 00000000 00000000 00000000                                                                                    HHCCP077I 0130:Sense=CMDREJ                                                                                                                                   '7' CYLINDERS FORMATTED ON 'A(191)'.                                                                                                                          R; T=0.02/0.26 14:26:30                                                                                                                                                                                                                                                                                                     /(0008) logout                                                                                                                                                CONNECT= 00:02:49 VIRTCPU= 000:00.07 TOTCPU= 000:00.52                                                                                                        LOGOFF AT 14:26:35 EST MONDAY 08/26/13                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   VM/370 ONLINE                                                                                       /(0008) logon operator                                                                                                                                        ENTER PASSWORD:                                                                                                                                               XXXXXXXX                                                                                                                                                      /(0008) operator                                                                                                                                              14:28:10 LOGON AT 14:28:10 EST MONDAY 08/26/13                                                                                                                14:28:10 LINE 008 LOGON  AS OPERATOR USERS = 002                                                                                /enable all ===Много сообщений о неподключенных устройствах===                                                                                        
Установка обновлений

Залогинтесь под пользователем MAINT через дисплей:

LOGON MAINT ENTER PASSWORD:   DASD 190 LINKED R/W; R/O BY OPERATOR DASD 194 LINKED R/W; R/O BY OPERATOR LOGON AT 14:30:29 EST MONDAY 08/26/13   CP IPL 190 PARM SEG=NULL RELEASE 6 CMS 12/25/78   CMSSEG SYSTEM NAME 'NULL    ' NOT AVAILABLE. R; T=0.01/0.01 14:30:54 

Пароль — CPCMS.
Подключите ленту с обновлениями к машине MAINT (через консоль Геркулеса):

devinit 180 ./DISTR/ptf-616.aws                                                                                                                               HHCTA101I 0180: AWS Tape ./DISTR/starter-3330.aws closed                                                                                                      HHCTA004I 0180: ./DISTR/ptf-616.aws is a AWS Format tape file                                                                                                 HHCPN098I Device 0:0180 initialized                                                                                                                           /(0008) attach 180 to maint as 181                                                                                                                            14:32:43                                                                                                                                                      14:32:43 TAPE 180 ATTACH TO MAINT    181                                                                                                                       

Теперь в консоли администратора:

vmfplc2 rew R; T=0.01/0.01 14:33:26vmfplc2 load  LOADING.....  5749010  061638   A1  VMSERV   EXEC     A1  5749010  EXEC     A1  VMFPLC2  MODULE   A2  END-OF-FILE OR END-OF-TAPE R; T=0.02/0.10 14:33:33 access 191 c '191 A ' RELEASED R; T=0.01/0.01 14:34:16 vmserv restart 5749010 cp nomemo 

Дальше будет много вопросов. Лично я отвечаю наугад — в результате, как и следовало ожидать, ошибка. Но это не критично.

Сохраняем CMS

В CP есть механизм, похожий на динамические библиотеки — Named Systems. Одно из частых его использований — ускорение работы с CMS. Для того чтобы сохранить CMS как именованную систему, нужно выполнить следующие команды:

define storage 2m STORAGE = 02048K CP ENTERED; DISABLED WAIT PSW '00020000 00000000' IPL 190 PARM SEG=NULL RELEASE 6 CMS 12/25/78  CMSSEG SYSTEM NAME 'NULL   µ' NOT AVAILABLE. R; T=0.01/0.01 14:42:14 access 190 B/A B (190) R/O 190 ALSO = S-DISK cmsxgen 100000 SYSTEM SAVED CMSXGEN COMPLETE define storage 960k STORAGE = 00960K CP ENTERED; DISABLED WAIT PSW '00020000 00000000' IPL 190 RELEASE 6 CMS 12/25/78 savesys cms SYSTEM SAVED RELEASE 6 CMS 12/25/78 

Поздравляю, теперь у вас есть своя CP/CMS система. Чтобы выключить ее, введите в консоли оператора команду shutdown. Когда будете запускать ее снова, выберите warm start.
PS: Вообще-то, еще много что можно рассказать. Но и так уже простыня получилась.
Удачных вам IPL-ов!

ссылка на оригинал статьи http://habrahabr.ru/post/191602/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *