Здравствуйте, уважаемые хабарчане!
Я интересуюсь «древними» компьютерами и операционными системами. Несмотря на их древность, многие из них гораздо более продуманнее современных систем и лучше подходят в качестве примеров. 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» и нажмите клавишу ввода в окне дисплея.
Настройка стартовой системы
Сборка ядра стартовой системы отличается тем, что здесь адреса устройств не вшиты намертво в код, а задаются при каждом старте. Для моей конфигурации
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-ов!
Автор: valplo