Старые ОС: 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 можно прочитать в Википедии.
Для тех кто хочет не красноглазить, а просто посмотреть конечный результат: есть готовые образы системы с подробными инструкциями (правда на английском). Остаток статьи можно не читать.


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


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


Подготовка.


Все фалы проекта я помещаю в папку /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 P
 SPOOL 00E 1403 L
 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 P
 SPOOL 00E 1403 L
 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 P
 SPOOL 00E 1403 L
 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 P
 SPOOL 00E 1403 L
 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 P
 SPOOL 00E 1403 L
 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 P
 SPOOL 00E 1403 L
 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 P
 SPOOL 00E 1403 L
 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 P
 SPOOL 00E 1403 L
 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-ов!

PS: кто попробовал установить и не лень отписаться — отпишитесь, пожалуйста.

Update: hsmishka сфотографировал маг. ленту от System/370:
image
Это оригинальная плёнка с защитным чехлом, в своё время крутилась на мейнфрейме в штатах в тогда ещё Bellcore.


Bugfix: я неправильно проставил классы спулинга у принтеров и вывода перфокарт. Ошибка исправлена, приношу извинения за неудобства.
Поделиться публикацией
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама
Комментарии 45
  • +2
    Весело, конечно, но «полотно» состоит в основном из выводов команд. Если честно, гораздо интереснее прочитать не только про саму установку системы, но и про её «кишки», как, что, да почему. Исследовать исходники VM/370, к примеру.
    • 0
      Будет время — напишу и про кишки.
    • 0
      Про «образец грамотности английского» — это вы сгорячааа.
      • 0
        К сожалению, не могу найти ссылку где сравнивался язык Microsoft и IBM.
      • +1
        Впечатляет!
        • 0
          Меня тоже впечатлило.
          При том, что VM когда-то считался ОС «для маленьких», настоящие мужчины использовали OS/360 MVS. Но этот квест я так и не прошел.
          • +5
            Я сразу представил мадам, вводящую команды, как на этой фотке:
            image

            Ведь для программистов того времени установка этой ОС наверняка была слишком простой задачей :-)
            • –2
              Что называется плюсанул бы!
        • 0
          иииэээххх… ностальгия!!!
          работал годик на IBM 360 СВМ/ПДО
          :)
          • 0
            Скажите, если не секрет, а где работали? Для каких задач использовали?
            Кстати, не сохранились ли у кого-нибудь из присутствующих ветеранов ЕС ЭВМ читабельные ленты с программами?
            • +2
              В питерском физтехе в 90-91 годах, 10 и 11 классы, практика при ФТШ.
              Писал небольшие програмки для лаборатории на PL/I, FORTRAN и других языках.
              Для себя и друзей реализовал мультиплейерную игру «менеджер» из книги Ч.Уэзрела «Этюды для программистов» на паскале, а взаимодействие между виртуальными машинами на ассемблере.
              Самые яркие впечатления до сих пор от системы — отсутствие стэка, понятие реентерабельности и команда на ассемблере, которая за раз могла копировать довольно большой участок памяти :)
              Ленточек, к сожалению не сохранилось.
              • 0
                О, все хотел понять, а как это — отсутствие стека? Как же переходить в подпрограмму, как возвращаться? Как сложить два числа, наконец?
                • 0
                  В чем проблема со сложением — это же ассемблер, а не форт :)
                  Вместо стека делаешь системный вызов на новый кусок памяти, сохраняешь туда нужное содержимое и все. Как-то так. :)
                  По сути, ведь, на том же PDP, например, стэк — это просто выделенный регистр процессора со смещением в памяти.
                  • 0
                    Все равно в голове не укладывается. А как возвращаться из подпрограммы?
                    • 0
                      Перейти в подпрограмму — вы заносите в ячейку памяти (например 100) адрес ячейки, которая следует за вами. Потом просто JMP на нужную вам подпрограмму. Та отрабатывает, читает число из ячейки 100, и JMP обратно.
                      • 0
                        ааааа, т.е. никаких возвратов в принципе не предусмотрено, все исполнение как бы «прямо»? Осознал, спасибо!
                      • 0
                        детали уже не помню…
                        попробовал погуглить — funcall.blogspot.ru/2011/02/no-stack-no-problem.html
                        и everything2.com/title/System%252F370+S-type+linkage+convention
                        • 0
                          о, да, в последней ссылке как раз тот самый ассемблер :)
                          адрес возврата просто передается в 14-ом регистре.
                          • 0
                            Спасибо, пошел читать:)
                  • +3
                    А, еще прикольная была кнопка «вызов теста» на терминале. Ужасная раскладка и кнопки PF1..PF16 что ли.
                    И гениальная кодировка EBCDIC, в которой не было отдельных символов для одинаково выглядевших символов русского и английского алфавитов. То есть отдельные коды были только для русских букв, не имеющих аналогов в английском алфавите. Вот, была веселуха с сортировкой строк :)
                    А еще скорострельные принтеры, которые одним ударом печатали целую строку — там был набор колец со всеми символами на каждом кольце, а количество колец по кол-ву символов в строке. Шумели ужасно.
                    • 0
                      Романтика, в общем. :-)
                    • 0
                      Диск то есть. Вот только по рассказам очевидцев работали они по 9 штук — на один диск записывался один бит. Таким образом они получали бОльшую скорость считывания. На этом диске правда не программы а часть вайр центра (wire center)

                  • 0
                    Афтор молодец. Остается только проделать все то же самое, только на реальном железе -) Вот это бы была статья!
                    • +1
                      Проблема в том, что живых System/370 не осталось. Есть System z, но во-первых она стоит пару миллионов, во-вторых не поддерживает старые public domain системы, в-третьих к ней не подключить считыватель перфокарт :-).
                      • 0
                        Отговорки. Настоящие мужики ставят Hercules — бесплатный эмулятор современного Mainframe железа. И качают с торрента z/OS 1.10.

                        en.wikipedia.org/wiki/Hercules_emulator
                        www.hercules-390.eu/
                        • 0
                          Hercules я поставил (на нем и устанавливал). А насчет того, что z/OS есть в торрентах — не знал, спасибо. Мне казалось, что это все-таки слишком специфический продукт.
                          • 0
                            там спец версия для разработчиков, как-то утекшая.

                            На реальное железо оно неставится да и установщика там нету (
                  • 0
                    А какая аппаратная конфигурация была у этого System/370?
                    • 0
                      Что вы имеете ввиду под аппаратной конфигурацией? Архитектура — так и называется, System/370.
                      • 0
                        Процессор (разрядность, производительность), память, средства ввода-вывода. Наверняка System/370 — это линейка. Я о типичном представителе.
                        • 0
                          Процессор — 32-разрядный (с собственной системой команд), память — до 16 мегабайт на магнитных сердечниках, DMA ввод-вывод через сопроцессоры (см. файл конфигурации).
                          System/370 — это не линейка, а стандарт совместимых машин. Типичный представитель — наверное, System/370-158, но на самом деле их было очень много разных, под нужды каждого.
                  • +2
                    > Несмотря на их древность, многие из них гораздо более продуманнее современных систем…

                    Простите, а можно узнать — чем они продуманнее? Что работали на маломощном железе, это понятно, но что им оставалось. А что в них было лучше?
                    • +3
                      С них на «Одноклассники» зайти нельзя было, поэтому люди на работе работали :)
                      • +1
                        «Одноклассники» там были (по крайней мере в США): BITNET
                      • +1
                        Система команд процессора: пять форматов против скольких-то десятков у 386 (при примерно тех же возможностях).
                        Архитектура: виртуализация не потребовала никаких изменений в архитектуре компьютера (кроме добавления аналога IOMMU), и принцип работы гипервизора такой же как у супервизора (просто API другой). Другая ОС для System/360 — MTS, изначально была заточена на обычную многозадачность (как в Linux), но потом к ней добавили возможность виртуализации, причем реализована она была без изменения ядра, только в пользовательских программах. Для сравнения, до недавнего времени в x86 вообще не было виртуализации, сейчас для нее добавили дополнительный режим работы (как будто их и так мало), причем разный у AMD и Intel. У Intel рекурсивную виртуализацию реализовать практически невозможно — слишком много разных таблиц.
                        Ввод-вывод: единый интерфейс ввода-вывода для всех устройств (что в частности облегчает виртуализацию: для того чтобы подключить устройство к ВМ, гипервизору не нужно никакой дополнительной информации).
                      • +1
                        Чем дальше читаю такие посты — тем больше понимаю, что родившись в конце XX века я очень много пропустил. Посмотреть бы на эти агрегаты вживую
                      • 0
                        у 390x (z9) творится всё тот же кромешный ад
                        • 0
                          В каком смысле кромешный ад? В смысле настройки?
                          • 0
                            Ну настройка, безопасность, крайне своеобразная система, мягко выражаясь
                            • +2
                              RACF (Resource Access Control Facility) является самой надежной подсистемой защиты. Можно прописать почти всё — кто заходит, когда, что видит, какие команды выдает, какие операции совершает (например оператор может копировать наборы, но не может их читать) Сравниваем с unix, где вся защита сводится к защите файлов rwx и делаем выводы.
                              Сегодня MainFrame обладает наивысшимы сертификатами безопасности (EAL5, FIPS 140-2 Level 41)

                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.