![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Два крутых чувака сделали это возможным. Andras Tantos разработал симулятор для машин той архитектуры: Cray XMP/YMP-el/J90/SV1. Рекомендую серию статей в его блоге с подробным описанием исследования и разгадки устройства компьютера и софта. Jason Stevens (neozeed) установил на это дело юникс с компакт-дисков Unicos/10.0 (Cray-J90, Cray-SV1). Здесь я покажу, как запустить Крэй с юниксом на вашем компьютере.
Делать это надо на Линуксе. На маке или BSD даже не пытайтесь: слишком много завязок в реализации симулятора. Я вообще использую Raspberry Pi 5. Симулятор грузит одно из ядер процессора на 100%, что увеличивает потребление Raspberry Pi на два ватта. Весьма экономичный суперкомпьютер получается. 😀

Теперь с другого окошка заходим на консоль через telnet:
Что интересного можно попробовать в этом юниксе - напишу позже.
Делать это надо на Линуксе. На маке или BSD даже не пытайтесь: слишком много завязок в реализации симулятора. Я вообще использую Raspberry Pi 5. Симулятор грузит одно из ядер процессора на 100%, что увеличивает потребление Raspberry Pi на два ватта. Весьма экономичный суперкомпьютер получается. 😀
1. Устанавливаем нужные линуксные пакеты
Здесь для Ubuntu, а для других линуксов действуйте по аналогии.sudo apt install build-essential libboost-all-dev libncurses-dev libgpm-dev 7zz telnet net-tools bridge-utils
2. Собираем симулятор
Скачиваем исходники и компилируем.Установим бинарник симулятора в папку /usr/local/bin. Убедитесь, что она у вас находится в PATH.git clone https://github.com/andrastantos/cray-sim.git
cd cray-sim/simulator
make build -j1
sudo cp _bin/linux_release/cray_sim /usr/local/bin/
3. Скачиваем Unicos
В принципе, можно было бы установить систему с компакт-диска, но это тяжёлый процесс. Проще скачать готовые образы файловых систем с предустановленным Unicos. Приготовьте 7 гигабайт места.Распакованные файлы оказываются в папке unicos:wget https://archive.org/download/uni-cos-10.0.1.2-linux-x-86-64.7z/UniCOS-10.0.1.2_linux_x86_64.7z
7zz x -ounicos UniCOS-10.0.1.2_linux_x86_64.7z
Здесь нас будет интересовать файл конфигурации unicos.cfg.$ tree unicos
unicos
├── CON0
├── core.img
├── cray_sim
├── cray_sim.dbg
├── create-tap.sh
├── disk
├── dump
│ ├── ramfs.log
│ └── ramfs.mem
├── dump.img
├── krn_11
│ ├── clrymp
│ ├── grsysdmp
│ ├── mfboot
│ ├── mfchkye
│ ├── mfsysdmp
│ └── unicos.generic
├── krn_11.bgz
├── ram_fs
├── root.img
├── src.img
├── swap.img
├── tape
├── tmp.img
├── unicos
├── unicos.cfg
├── unicos.generic
├── unicos.param
├── unicos_ramfs
├── unicos_ramfs.cfg
├── unicos_ramfs.param
├── unicos.ymp.10012
├── usr.img
└── usr_tmp.img
5 directories, 30 files
4. Поправим конфигурацию
В принципе, всё готово к старту, но давайте изменим конфигурацию, чтобы симулятор не запускал кучу окошек xterm с консолями юникса. Лучше мы будем вручную коннектиться из другого окна посредством telnet. В текстовом редакторе в файле unicos.cfg исправьте строчку:на:NewTerminalCommand "xterm -e {cmd}&"
NewTerminalCommand "echo Use: {cmd}"
5. Включим виртуальный сетевой интерфейс
Симулятору требуется сетевой мост. В файле create-tap.sh находятся команды для его конфигурации. Выполним их от суперпользователя.$ cd unicos
$ sudo sh -x create-tap.sh
+ brctl addbr craybr
+ ip tuntap add mode tap tap1
+ ifconfig tap1 up
+ brctl addif craybr tap1
+ ifconfig craybr 172.16.0.1 netmask 255.255.255.0
6. Запускаем
Получаем текстовое окно симулятора.cray_sim unicos.cfg

Теперь с другого окошка заходим на консоль через telnet:
Похоже на некий начальный загрузчик. Продолжаем: жмём Enter.$ telnet localhost 20000
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
00:00:00(GMT) uts/c1/md/icpu.c-02: INFO Final IOAVAIL_mask is 01
Unicos/10.0.1.2: snxxxx-sin.0 (CRAY J90)
System gen time = 12/04/22 22:09:33
UNICOS binary size = 2275063 words
Memory configured = 268434432 words
Memory allowed = 33552384 words
Memory downed = 234881024 words @ address 00177774000
sysmem = 1876013 words
maxmem = 24415232 words
Buffer pool size = 262144 words (512 buffers)
User memory avail = 21190656 words
CPUs configured = 1, started = 1 (0)
System-Call Timing On
15:21:53(GMT) uts/fs/nc1/nc1vfsops.c-09: INFO Root path is /dev/dsk/root
15:21:53(GMT) uts/c1/os/sched.c-13: INFO MPX scheduling is not configurable.
15:21:53(GMT) uts/c1/os/sched.c-11: INFO packtime calc'd as 20 seconds.
15:21:53(GMT) uts/c1/os/sched.c-05: INFO gfactor1_in calc'd as 513 seconds.
15:21:53(GMT) uts/c1/os/sched.c-06: INFO gfactor1_in limited to 400 seconds.
15:21:53(GMT) uts/c1/os/sched.c-10: INFO gfactor1_out set to 0 seconds.
Sun Feb 4 15:55:00 2024
The system date is set to Sun Feb 4 15:55:34 CST 2024
Checking /dev/dsk/root before running /etc/brc.guest.
/root: file system opened
/root: super block fname root, fpack root
/root: Phase 1 - Check Blocks and Sizes
/root: Phase 2 - Visit Directories
/root: Phase 3 - Checking Directories
/root: Phase 4 - Checking Non-Directories and Link Counts
/root: Phase 5 - Verify Dynamic Information - (Ignored)
/root: Phase 6 - Rebuilding Dynamic Information
/root: file system summary
/root: 32768 total i-nodes (31294 free i-nodes)
/root: 262144 total blocks (181073 free blocks)
/root: ***** FILE SYSTEM WAS MODIFIED *****
Executing /etc/brc.guest.
Linking Guest configuration files for HOST system startup:
No filenames exist in /etc/config/guest_config
mfsck: Starting pass 1
/root: file system opened
/root: super block fname root, fpack root
/root: Phase 1 - Check Blocks and Sizes
/root: Phase 2 - Visit Directories
/root: Phase 3 - Checking Directories
/root: Phase 4 - Checking Non-Directories and Link Counts
/root: Phase 5 - Verify Dynamic Information - (Ignored)
/root: Phase 6 - Rebuilding Dynamic Information
/root: file system summary
/root: 32768 total i-nodes (31293 free i-nodes)
/root: 262144 total blocks (181072 free blocks)
/root: ***** FILE SYSTEM WAS MODIFIED *****
mfsck: Starting pass 2
/usr: file system opened
/usr: super block fname usr, fpack usr
/usr: Phase 1 - Check Blocks and Sizes
/src: file system opened
/src: super block fname src, fpack src
/src: Phase 1 - Check Blocks and Sizes
/src: Phase 2 - Visit Directories
/usr: Phase 2 - Visit Directories
/usr: Phase 3 - Checking Directories
/usr: Phase 4 - Checking Non-Directories and Link Counts
/usr: Phase 5 - Verify Dynamic Information - (Ignored)
/usr: Phase 6 - Rebuilding Dynamic Information
/usr: file system summary
/usr: 32768 total i-nodes (22433 free i-nodes)
/usr: 1048576 total blocks (934231 free blocks)
/usr: ***** FILE SYSTEM WAS MODIFIED *****
/src: Phase 3 - Checking Directories
/src: Phase 4 - Checking Non-Directories and Link Counts
/src: Phase 5 - Verify Dynamic Information - (Ignored)
/src: Phase 6 - Rebuilding Dynamic Information
/src: file system summary
/src: 32768 total i-nodes (22043 free i-nodes)
/src: 262144 total blocks (189575 free blocks)
/src: ***** FILE SYSTEM WAS MODIFIED *****
mfsck: complete (0 min, 5 sec)
brc: Errors will be logged to /etc/brc.log
/core: file system opened
/core: can not find super block
/core: continue? yes
/core: super block fname , fpack
/core: lseek or read refused, block = -1, errno = 22
/core: Invalid argument
/core: Attempt to verify sb.s_fsize by reading last block of
filesystem failed.
/core: abort(y) or proceed with zeros in read buffer(n)? yes
/core: check aborted
/etc/mount: cannot mount /dev/dsk/core
Exec format error
coredd: /etc/mount /dev/dsk/core /mnt failed.
coredd: Manual intervention may be required.
brc: /etc/coredd exited with status 1.
System dump apparently not saved.
Startup output is being routed to /etc/rc.log.
Starting file system error log daemon
*Warning*: Using the root file system space for /tmp!
Checking file system /dev/dsk/usr.
/usr: file system opened
/usr: super block fname usr, fpack usr
/usr: clean exit for clean file system
Mounting file system /dev/dsk/usr on /usr.
/etc/mount: /usr mounted
Mounting user file systems.
User file systems successfully mounted.
Mounting file system /proc.
/etc/mount: /proc mounted
Mounting file system /inode.
/etc/mount: /inode mounted
15:55:45(CST) uts/c1/md/memc.c-03: WARNING
Single-bit memory error interrupts enabled.
MEUNCMAX = 64
MECORMAX = 2
MEINT = 50 sec (5000000000 clocks)
MEDISINT = 600
UMELIFE = 86400
UMEMAX = 0
UMEDOWN = 0
Starting the security log daemon.
15:55:46(CST) uts/c1/io/slog.c-01: WARNING slgtimes: no time change record in security log.
Setting security wild card files.
Setting network access lists.
Administrative clean up.
Writing accounting boot time.
Starting system accounting.
Starting system activity collection.
Starting SYS1 daemons: msgdaemon fsdaemon.
Binary hosts file is up-to-date.
Configuring TCP/IP network interfaces: lo0
en0 ethernet address: 2:1:43:52:41:59
en0.
Making dbm aliases file: WARNING: local host name (snxxxx) is not qualified; fix $j in config file
dbm map "Alias0": unsafe map file /usr/lib/aliases: Permission denied
Cannot rebuild aliases: no database format defined
Cannot create database for alias file /usr/lib/aliases
Starting TCP daemons: inetd portmap.
DCE was not started; skipping DFS startup.
Starting SYS2 daemons: errdemon cron.
Startup completed successfully.
Console Login: _
7. Входим в систему
Войти можно под именем суперпользователя root с паролем password, или как юзер neozeed с паролем password. При входе получаем грозное предупреждение.Кроме консоли, симулятор создаём ещё два терминала, к которым можно подсоединиться командами "telnet localhost 20001" и "telnet localhost 20002".Console Login: root
Password: ***
Active label set to : level0,none
This is a private computer facility. Access for any reason must be
specifically authorized by the owner. Unless you are so authorized,
your continued access and any other use may expose you to criminal
and/or civil proceedings.
snxxxx# uname -a
snxxxx snxxxx 10.0.1.2 sin.0 CRAY SV1
snxxxx# _
Остановить юникс можно командой "init 0" от суперпользователя. Чтобы остановить симулятор, надо ввести в его окошке "exit" и нажать Enter.$ telnet localhost 20001
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
login: neozeed
Password: ***
...
snxxxx% df -P -k
Filesystem 1024-blocks Used Available Capacity Mounted on
/dev/dsk/root 1048576 324536 724040 31% /
/dev/dsk/usr 4194304 458004 3736300 11% /usr
/dev/dsk/src 1048576 290276 758300 28% /usr/src
/proc 190744 35624 155120 19% /proc
Что интересного можно попробовать в этом юниксе - напишу позже.
no subject
Date: 2024-02-05 03:54 (UTC)no subject
Date: 2024-02-05 06:57 (UTC)Подозреваю багу с арифметикой в симуляторе.
no subject
Date: 2024-02-05 16:30 (UTC)no subject
Date: 2024-02-05 23:29 (UTC)no subject
Date: 2024-02-06 01:48 (UTC)no subject
Date: 2024-02-06 04:57 (UTC)no subject
Date: 2024-02-06 18:15 (UTC)Теоретически можно в enquire.c заменить все явные константы на defines, определенные как операции деления, и посмотреть, что будет.
no subject
Date: 2024-02-06 18:37 (UTC)Попробую идею с дефайнами, интересно.
no subject
Date: 2024-02-06 07:35 (UTC)А это падает с той самой ошибкой:
Очевидно, глюк в симуляторе. В процессе обработки литерала с плавающей точкой возникает какая-то фигня.
no subject
Date: 2024-02-06 17:52 (UTC)no subject
Date: 2024-02-06 18:29 (UTC)no subject
Date: 2024-02-06 22:10 (UTC)
- 282941972 CPU0: XA: 0x1A IBA: 0x00D56000 SYSCALL: 5 ??(0x0001BAE3 (0x00D012E3) "/opt/ctl/craylibs/craylibs/arith" , 0x0000000000000000 (0))
- 282942122 CPU0: SYSCALL: 5 ?? returning 0xFFFFFFFFFFFFFFFF (18446744073709551615)
- 282942128 CPU0: XA: 0x1A IBA: 0x00D56000 SYSCALL: 5 ??(0x0001BAE3 (0x00D012E3) "/lib/arith" , 0x0000000000000000 (0))
- 282942302 CPU0: SYSCALL: 5 ?? returning 0xFFFFFFFFFFFFFFFF (18446744073709551615)
- 282942445 CPU0: XA: 0x1A IBA: 0x00D56000 SYSCALL: 42 nc1pwriteckpt()
- 282943269 CPU0: SYSCALL: 42 nc1pwriteckpt returning 0x0000000000000004 (4)
- 282943303 CPU0: XA: 0x1A IBA: 0x00D56000 SYSCALL: 148 *(0x0000000000000005 , 0x0000000000014F75 , 0x0000000000000000 , 0x0000000000000000 , 0x0000000000000000 , 0x0000000000000000 , 0x0000000000000000 , 0x0000000000000000 , 0x0000000000000000 , 0x0000000000000000)
- 282943355 CPU0: SYSCALL: 148 * returning 0x0000000000000000 (0)
- 282943365 CPU0: XA: 0x1A IBA: 0x00D56000 SYSCALL: 17 sϽ?(0x0000000000001000 , 0x0000000000000000 , 0x0000000000000000 , 0x0000000000000000 , 0x0000000000020B0C , 0x0000000000010B25 , 0x000000000015C7A0 , 0x0000000000014FAE , 0x0000000000014FB0 , 0x0000000000000000)
- 282943438 CPU0: SYSCALL: 17 sϽ? returning 0x000000000002164F (136783)
- 282943448 CPU0: XA: 0x1A IBA: 0x00D56000 SYSCALL: 54 r/dynamic magic o rebmuns%< sf necived >(0x0000000000000005 , 0x0000000000005401 , 0x0000000000014FB3 , 0x0000000000014FAA , 0x00000000000124F9 , 0x0000000000014B76 , 0x00000000000156E1 , 0x0000000000000000 , 0x0000000000008000 , 0x0000000000010C74)
- 282943485 CPU0: SYSCALL: 54 r/dynamic magic o rebmuns%< sf necived > returning 0x0000000000000000 (0)
- 282943512 CPU0: XA: 0x1A IBA: 0x00D56000 SYSCALL: 4 Y?E?%?S~)??@(0x0000000000000005 (5) , 0x00020B0F (0x00D0630F), len: 49 content: "PRINTMSG: internal error from arith or backend..." 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00000005 (0x00CE5805) "" , 0x0000000000020B0F (133903))
Файлов /opt/ctl/craylibs/craylibs/arith или /lib/arith в системе нет. Вероятно, преобразование вещественных литералов из текста в число делалось этой библиотекой.no subject
Date: 2024-02-06 23:27 (UTC)А тебе теперь одна дорога - в https://retrocomputing.stackexchange.com/ :)
Трюк с макросами с делением - только на степени двойки, конечно: т. е. 1.5 - это строго (double)3/2, а не (double)15/10 - должен сработать, значит.
no subject
Date: 2024-02-07 02:44 (UTC)и
Попробую скомпилировать.