Mettez un mainframe dans votre laptop !

GNU/Linux Magazine n° 166 | décembre 2013 | Guillaume Lasmayous
Creative Commons
  • Actuellement 0 sur 5 étoiles
0
Merci d'avoir participé !
Vous avez déjà noté cette page, vous ne pouvez la noter qu'une fois !
Votre note a été changée, merci de votre participation !
Levez la main! Combien d'entre vous ont la moindre idée du type de matériel correspondant à l'architecture s390x, qui fait partie des nouvelles architectures disponibles avec Debian 7.0 'Wheezy' ? Il y a quelques années, je savais à peine épeler s390. Et je n'avais pas la moindre idée de ce à quoi ça ressemblait et ce qu'on pouvait bien faire avec. Depuis 2006, j'ai appris :) Cet article va vous guider dans l'installation de Debian, dans sa version s390x, ce qui est rendu possible grâce à Hercules, un émulateur de l'architecture z.

07 Avril 1964. C'est à cette date que naissait l'IBM System 360, ancêtre des machines que l'on connaît aujourd'hui sous le nom de IBM System z, ou encore “Mainframe”. Depuis 1964, cette machine n'a cessé d'évoluer pour s'adapter aux demandes des applications d'aujourd'hui. L'incarnation actuelle du System z, connue sous le nom de IBM System zEC12 (EC pour Enterprise Class) est une machine qui possède de 1 à 101 processeurs cadencés à 5.5GHz, jusqu'à 3TB de RAIM (Redundant Array of Independant Memory - voyez ça comme du RAID pour la mémoire) et un certain nombre de 'devices': que ce soit des disques, des cartes réseaux ou cryptographiques, l'architecture actuelle permet de connecter par exemple 320 cartes d'entrée/sortie disques (dites cartes FICON 8S) et 96 cartes réseaux 'OSA Express 4S'.

Je vous renvoie à la spec officielle [1] et aux excellents articles Wikipédia sur le sujet [2][3][4] pour plus de détails.

1. Terminologie

Le mainframe est un monde a part entière, avec sa communauté, ses groupes d'utilisateurs, ses salons et son jargon. La première fois que vous lirez de la littérature spécialisée mainframe, vous vous demanderez: WTF ? De quoi est-ce qu'il veut bien parler ?

Cet article sera bien trop court pour détailler toute l'architecture du mainframe mais voilà quelques termes qui nous servirons dans la suite. Si vous souhaitez connaître plus de détails sur l'architecture z, vous pouvez consulter le “z/Architecture Principle of Operations” [5]

Sur un mainframe, tous les devices sont identifiés par une adresse, configurée par l'administrateur de la machine, unique, sur 4 digits. Dans l'exemple de l'article, j'ai arbitrairement décidé que les disques seraient à l'adresse 0100 et 0101 et que la carte réseau utiliseraient les adresses 0A00 et 0A01.

- DASD (Direct Access Storage Device): ce sont les unités de disques, aussi connues sous le nom de 3390, correspondant au numéro de série des unités de disques de l'époque. Ils sont aujourd'hui encore référencés de la sorte, suivi par un code à 2 chiffres correspondant à la taille du volume. Ainsi, un 3390-09 (3390 model 09) correspond à un volume d'environ 9G non formaté, soit 6.3G une fois formaté sous Linux. On trouve également le terme ECKD - pour Extended Count Key Data - en référence à ce type de disque.

- CTC (Channel-To-Channel): correspond à une connexion réseau de type point à point. Hercules supporte 2 types de CTC, les CTCI (qui permettent une connexion au host par l'intermédiaire du driver tun) et CTCT (pour interconnecter des émulateurs Hercules entre eux).

Enfin, on parle d'IPL - Initial Program Loading - pour signifier que l'on boote un système d'exploitation.

2. Hercules, System z emulator

Autant l'avouer de suite, accéder à du matériel du type mainframe n'est pas donné à toutes les bourses, même s'il arrive parfois d'en croiser sur eBay. Alors, comment tester ? C'est là qu'entre en jeu le spectaculaire émulateur Hercules, fruit du travail initié par Roger Bowler en 1999, ensuite rejoint par une communauté qui s'est créée autour du logiciel.

2.1 Préparation

Première chose à faire, installer Hercules. Sur une distribution basée sur Debian, le package s'appelle, sans grandes surprises, hercules, qu'il suffit d'installer à l'aide de la commande:

$ sudo apt-get install hercules

à adapter bien évidemment à votre distribution.

Notez qu'il existe une interface graphique, du nom de herculesstudio, que je ne détaillerais pas ici.

Afin d'installer Debian sur l'émulateur Hercules, il va également nous falloir une distribution Debian. Thank you Mr Obvious! En l'occurence, j'ai téléchargé la dernière version - à la date d'écriture de cet article - de la distribution, Debian 7.0/s390x sur le mirroir le plus proche de chez moi.

En réalité, seuls trois fichiers sont vraiment nécessaires pour initier l'installation et lancer debian-installer. Ceci implique l'utilisation d'un lecteur de cartes perforées (virtuelles, évidemment), mais je vais vous faire grâce de cette étape. En pratique, le setup est infiniment plus simple en utilisant l'iso, dont acte. Une fois téléchargée, montez l'iso localement pour pouvoir accéder à son contenu.

$ sudo mount -o loop,ro Downloads/debian-7.0.0-s390x-CD-1.iso /mnt

Il nous faut également préparer des fichiers qui seront utilisés comme des disques par Hercules. Pour préparer les disques avec une structure logique convenant à un mainframe, Hercules fournit une commande dédiée, dasdinit. On va donc créer 2 volumes, qui seront respectivement utilisés pour le root filesystem et le swap dans notre Debian s390x:

$ mkdir hercules
$ dasdinit -lfs -linux dasd.linux.0100 3390-9 LX0100
HHCDU044I Creating 3390 volume LX0100: 10017 cyls, 15 trks/cyl, 56832
bytes/track
HHCDU041I 10017 cylinders successfully written to file dasd.linux.0100
HHCDI001I DASD initialization successfully completed.
$ dasdinit -lfs -linux dasd.linux.0101 3390-9 LX0101
HHCDU044I Creating 3390 volume LX0101: 10017 cyls, 15 trks/cyl, 56832
bytes/track
HHCDU041I 10017 cylinders successfully written to file dasd.linux.0101
HHCDI001I DASD initialization successfully completed.
$ ls -al
total 16678340
drwxrwxr-x 2 guigui guigui 4096 juin 2 17:24 .
drwxr-xr-x 63 guigui guigui 12288 juin 2 16:45 ..
-rw-r----- 1 guigui guigui 8539292672 juin 2 17:24 dasd.linux.0100
-rw-r----- 1 guigui guigui 8539292672 juin 2 17:26 dasd.linux.0101

Nous avons donc maintenant 2 volumes pour installer notre Debian, ce qui est plus que largement suffisant. Enfin, on va permettre à notre utilisateur, qui fait partie du groupe sudo, de créer le device utilisé pour la connexion réseau, comme indiqué dans le fichier README.Debian :

dpkg-statoverride --add --update root <trusted group> 04750 /usr/bin/
hercifc

en remplacant <trusted group> par la valeur qui convient à votre distribution.

2.2 Configuration

Un fichier de configuration minimal pour hercules ressemble à celui-là:

$ cat hercules/hercules.cnf
CPUSERIAL 000069 # CPU serial number
CPUMODEL 2817
OSTAILOR LINUX # OS tailoring
ARCHMODE z/Arch # Architecture mode ESA/390 or ESAME
MAINSIZE 1024 # Main storage size in megabytes
NUMCPUS 1 # Number of CPUs
0100 3390 ./dasd.linux.0100
0101 3390 ./dasd.linux.0101
0A00,0A01 CTCI -n /dev/net/tun -t 1500 10.1.1.2 10.1.1.1

Explications : Les premières lignes décrivent le type de matériel que nous souhaitons émuler. Dans le cas présent, nous émulerons une machine de type System z196 (dont le CPUMODEL est 2817) dont le CPU a un numéro d'identification 000069. Cette valeur n'a d'ailleurs que peu d'importance pour le cas qui nous intéresse ici, l'installation de Linux. Nous précisons ensuite le type d'architecture: z/Arch ou z/Architecture. Le mainframe a la particularité de supporter différentes architectures, en fonction du type de système d'exploitation que l'on souhaite faire tourner dessus. Hercules prend en compte trois architectures différentes: S/370 (24bits), ESA/390 (31 bits) et z/Arch ou ESAME (64 bits). Le paramètre OSTAILOR a pour effet de limiter les messages qu'affiche Hercules aux seuls messages qui font du sens pour l'OS considéré. Ceci permet de réduire le bruit dans la console Hercules. Enfin, le paramètre MAINSIZE précise la taille mémoire de la machine considérée.

La deuxième partie du fichier de configuration comporte la définition de la configuration IO de la machine émulée, dans laquelle nous avons donc:

- deux unités de disques, ou DASD, aux adresses 0100 et 0101. Le 3ème paramètre informe Hercules de la position dans le filesystem des fichiers à utiliser pour émuler ces disques (on peut rapprocher celà de l'utilisation de fichiers 'raw' pour héberger des machines virtuelles Xen ou KVM).

- Enfin, une connexion réseau de type CTCI aux adresses 0A00 et 0A01. Les paramètres précisent le driver utilisé ainsi que les IPs aux deux bouts de la connexion: 10.1.1.1 est l'IP côté mainframe, et 10.1.1.2 est l'IP côté host.

2.3 Installation

Nous sommes prêts à lancer Hercules, de la facon suivante:

$ hercules -f hercules.cnf

Et sous nos yeux ébahis, un mainframe - émulé - démarre:

Hercules Version 3.07
(c)Copyright 1999-2010 by Roger Bowler, Jan Jaeger, and others
Built on Jun 19 2011 at 04:25:40
Build information:
Debian
Modes: S/370 ESA/390 z/Arch
Max CPU Engines: 8
Using setresuid() for setting privileges
Dynamic loading support
Using shared libraries
HTTP Server support
Regular Expressions support
Automatic Operator support
National Language Support
Machine dependent assists: cmpxchg1 cmpxchg4 cmpxchg8
Running on x220.guigui2.lan Linux-3.8.0-23-generic.#34-Ubuntu SMP Wed May
29 20:22:58 UTC 2013 x86_64 MP=4
HHCHD018I Loadable module directory is /usr/lib/hercules
Crypto module loaded (c) Copyright Bernard van der Helm, 2003-2010
Active: Message Security Assist
Message Security Assist Extension 1
Message Security Assist Extension 2
HHCCF065I Hercules: tid=7FC99AF8A740, pid=25419, pgid=25419, priority=0
HHCDA020I /home/guigui/hercules/dasd.linux.0100 cyls=10017 heads=15
tracks=150255 trklen=56832
HHCDA020I /home/guigui/hercules/dasd.linux.0101 cyls=10017 heads=15
tracks=150255 trklen=56832
HHCCT073I 0A00: TUN device tun0 opened
HHCCP002I CPU0000 thread started: tid=7FC99853B700, pid=25419, priority=15
HHCTT001W Timer thread set priority -20 failed: Permission denied
HHCTT002I Timer thread started: tid=7FC99843A700, pid=25419, priority=0
HHCCP003I CPU0000 architecture mode z/Arch
HHCPN001I Control panel thread started: tid=7FC99AF8A740, pid=25419
HHCIF005E hercifc: ioctl error doing SIOCDIFADDR on tun0: 25 Inappropriate
ioctl for device
HHCAO001I Hercules Automatic Operator thread started;
tid=7FC95362F700, pri=0, pid=25419
[...]
Command ==>

L'émulateur a bien identifié notre configuration, comme en témoigne les lignes suivantes:

HHCDA020I /home/guigui/hercules/dasd.linux.0100 cyls=10017 heads=15
tracks=150255 trklen=56832
HHCDA020I /home/guigui/hercules/dasd.linux.0101 cyls=10017 heads=15
tracks=150255 trklen=56832
HHCCT073I 0A00: TUN device tun0 opened

Le message de *plaign* concernant l'ioctl error peut être ignorée consciencieusement, elle ne prête aucunement à conséquence. En admettant que l'image iso ait été montée sur /mnt comme dans l'exemple précédent, on peut lancer l'installation de Debian/s390x par la commande suivante, que l'on tapera sur la ligne de commande (identifiée par le prompt Command ==>):

Command ==> ipl /mnt/d390.ins

Le contenu de ce fichier est le suivant:

Configure the network device
Please choose the type of your primary network interface that you
will need for
installing the Debian system (via NFS or HTTP). Only the listed
devices are
supported.
Network device type:
1: ctc: Channel to Channel (CTC) or ESCON connection,
2: qeth: OSA-Express in QDIO mode / HiperSockets,
3: iucv: Inter-User Communication Vehicle - available for VM guests
only,
4: virtio: KVM VirtIO,
Prompt: ‘?’ for help>

Il indique les emplacements mémoire où charger les différents programmes nécessaires à l'éxécution du programme d'installation.

Une fois lancé, le kernel va booter et, quelques secondes plus tard, on arrive à la première question du programme d'installation:

Configure the network device
Please choose the type of your primary network interface that you
will need for
installing the Debian system (via NFS or HTTP). Only the listed
devices are
supported.
Network device type:
1: ctc: Channel to Channel (CTC) or ESCON connection,
2: qeth: OSA-Express in QDIO mode / HiperSockets,
3: iucv: Inter-User Communication Vehicle - available for VM guests
only,
4: virtio: KVM VirtIO,
Prompt: ‘?’ for help>

Hercules est configuré pour utiliser une connexion réseau de type CTC, il faut donc choisir l'option 1. Attention à bien faire précéder toutes les réponses saisies dans la console d'Hercules d'un ., pour que l'émulateur n'intercepte pas la saisie.

The following device numbers might belong to CTC or ESCON connections.
CTC write device:
1: 0.0.0a00, 2: 0.0.0a01,
Prompt: ‘?’ for help>

Ici, on sélectionne l'option 1, qui correspond à la première addresse de notre connexion CTC.

The following device numbers might belong to CTC or ESCON connections.
CTC write device:
1: 0.0.0a00, 2: 0.0.0a01,
Prompt: ‘?’ for help>

Ici, on choisit la seconde adresse de notre connexion CTC, soit 0.0.0a01.

Protocol for this connection:
1: S/390 (0) *!, 2: Linux (1), 3: OS/390 (3),
Prompt: ‘?’ for help, default=1>

On choisit le protocole s390, soit l'option 1.

Configure a network using static addressing
The IP address is unique to your computer and may be:
* four numbers separated by periods (IPv4);
* blocks of hexadecimal characters separated by colons (IPv6).
You can also optionally append a CIDR netmask (such as "/24").
If you don’t know what to use here, consult your network administrator.
IP address:
Prompt: ‘?’ for help>

L'IP sera dans mon cas: 10.1.1.2. On saisit donc .10.1.1.2, pour que l'installeur prenne en compte la réponse.

The point-to-point address is used to determine the other endpoint of the point
to point network. Consult your network administrator if you do not know the
value. The point-to-point address should be entered as four numbers separated
by periods.
Point-to-point address:
Prompt: ‘?’ for help>

Ici, on renseigne l'adresse du côté du host: 10.1.1.1. L'installeur demande ensuite les DNS à utiliser, le nom de la machine (debian dans mon cas), ainsi que son nom de domaine (guigui2.lan). Ensuite, il génère une clé SSH qui sera utilisée pour la suite de l'installation. Enfin, d-i nous demande un mot de passe pour la poursuite de l'installation. Note: Soyez patient, la génération de la clé SSH peut prendre un certain temps, voire des fois un peu plus longtemps.

Continue installation remotely using SSH
You need to set a password for remote access to the Debian installer. A
malicious or unqualified user with access to the installer can have disastrous
results, so you should take care to choose a password that is not easy to
guess. It should not be a word found in the dictionary, or a word that could be
easily associated with you, like your middle name.
This password is used only by the Debian installer, and will be discarded once
you finish the installation.
Remote installation password:
[...]
Please enter the same remote installation password again to verify that you
have typed it correctly.
Re-enter password to verify:

Classiquement, on saisit le mot de passe deux fois, saisie puis vérification. A ce stade on a terminé la partie spécifique mainframe de l'installation. La suite se déroulera plus classiquement dans un installeur en mode texte, identique aux autres plate-formes supportées par Debian:

Start SSH
To continue the installation, please use an SSH client to connect to the IP
address 10.1.1.2 and log in as the "installer" user. For example:
ssh installer@10.1.1.2
The fingerprint of this SSH server’s host key is:
d2:a5:5c:8e:88:94:54:6d:4e:60:8e:9e:f9:63:75:32
Please check this carefully against the fingerprint reported by your SSH
client.
Press enter to continue!

Contrairement à ce que stipule l'installeur, oubliez de presser la touche Enter. Avant de lancer une session SSH, on va faire en sorte que la machine en cours d'installation puisse joindre le réseau à l'aide d'une paire de règles IPtables:

$ sudo iptables -A FORWARD -d 10.1.1.0/24 -j ACCEPT
$ sudo iptables -A FORWARD -s 10.1.1.0/24 -j ACCEPT
$ sudo iptables -t nat -A POSTROUTING -o eth0 -s 10.1.1.0/24 -j
MASQUERADE
$ echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward

On pourra alors dégainer son terminal préféré pour se connecter en tant qu'utilisateur installer à l'adresse configurée précédemment:

$ ssh installer@10.1.1.2The authenticity of host ‘10.1.1.2
(10.1.1.2)’ can’t be established.
RSA key fingerprint is d2:a5:5c:8e:88:94:54:6d:4e:60:8e:9e
:f9:63:75:32.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘10.1.1.2’ (RSA) to the list of known
hosts.
installer@10.1.1.2’s password:

Le mot de passe sera cette fois précisé sans le point en début de ligne. Nous voilà maintenant dans un installeur Debian tout ce qu'il y a de plus classique.

On sélectionne la région dans laquelle on se trouve, le pays, le mirroir Debian de son choix. Debian-installer va ensuite télécharger les fichiers nécessaires à la poursuite de l'installation, avant de nous demander de saisir le mot de passe de l'utilisateur root, suivi des informations de création d'un utilisateur non privilégié.

La seule partie spécifique concerne la configuration de l'espace disque. On commence par configurer le volume 0.0.0100, de la manière suivante:

puis recommencer l'opération pour le second disque. Une fois formatés, les disques sont partitionnés classiquement. Dans cet exemple, on utilise le disque 0.0.0100 comme partition root, formaté en ext4 et le disque 101 comme espace de swap:

Une fois les changements dans la table de partition écrits sur disque, d-i procède au téléchargement et à l'installation du système de base. Après quelques temps, tasksel vous demandera ce que vous souhaitez installer sur votre serveur, puis l'installation se termine. Soyez patients. Il m'a fallu environ 1h00 pour faire l'installation sur un laptop propulsé par un Core i7 @ 3.2GHz. N'oubliez pas qu'Hercules est un émulateur. Tout est fonctionnel, mais généralement bien moins véloce qu'un vrai System z.

Après environ 1h15 et 275 millions d'instructions (Hercules affiche le nombre d'instructions exécutées dans le coin inférieur droit) plus tard, notre Debian / s390x est prête.

2.4 Démarrage depuis le disque

Une fois l'installation terminée, il est nécessaire de redémarrer le système depuis le disque. Pour se faire, il suffit de lancer la commande ipl avec l'adresse du disque de boot en paramètre (100 dans le cas décrit dans cet article).

Command ==> ipl 100

depuis Hercules.

ipl 100
HHCCP007I CPU0000 architecture mode set to ESA/390
zIPL v1.16.0-build-20121130 interactive boot menu
0. default (debian)
1. debian
2. old
Please choose (default will boot in 10 seconds):

Le menu de démarrage est affiché par le bootloader (zIPL, spécifique à la plate-forme). Patientez une dizaine de secondes et le démarrage s'effectue:

HHCCP041I SYSCONS interface active
0.000000! Initializing cgroup subsys cpuset
0.000000! Initializing cgroup subsys cpu
0.000000! Linux version 3.2.0-4-s390x (debian-kernel@lists.debian.org) (gcc
version 4.6.3 (Debian 4.6.3-14) ) #1 SMP Debian 3.2.46-1
0.000000! setup: Linux is running natively in 64-bit mode
0.000000! cpu: The CPU configuration topology of the machine is: 0 0 0 0 0

On peut ensuite reprendre son client ssh habituel pour se connecter à l'adresse 10.1.1.2 configurée pendant l'installation.

guigui@x220 [~] $ ssh 10.1.1.2
guigui@10.1.1.2’s password:
Linux debian 3.2.0-4-s390x #1 SMP Debian 3.2.46-1 s390x
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO
WARRANTY, to the extent
permitted by applicable law.
Last login: Sun Jun 30 21:42:39 2013 from 10.1.1.1

Vous êtes alors aux commandes d'un système Debian tout à fait classique, à ceci prêt que le hardware - émulé - est différent. Toutes les commandes, les outils, sont présents, comme sur une Debian s'éxecutant sur du matériel plus courant. Pour s'enquérir de la configuration spécifique à la plateforme s390x (System z dans la terminologie Linux), on pourra utiliser les commandes fournies par IBM dans le package s390-tools :

guigui@debian:~$ dpkg -L s390-tools | grep bin/
/usr/bin/cmsfs-fuse
/usr/bin/iucvconn
/usr/sbin/hyptop
/usr/sbin/chreipl
/usr/sbin/vmur
/sbin/lsmem
/sbin/iucvtty
/sbin/tunedasd
/sbin/zgetdump
/sbin/chccwdev
/sbin/lszfcp
/sbin/fdasd
/sbin/dasdinfo
/sbin/chmem
/sbin/tape390_display
/sbin/lschp
/sbin/lsdasd
/sbin/lszcrypt
/sbin/chzcrypt
/sbin/qetharp
/sbin/dasdfmt
/sbin/lstape
/sbin/qethconf
/sbin/lscss
/sbin/zipl
/sbin/vmcp
/sbin/lsqeth
/sbin/dasdview
/usr/sbin/chshut
/usr/sbin/lsshut
/usr/sbin/lsreipl

A simple titre d'exemple, on pourra, en tant qu'utilisateur root, lancer la commande lscss pour lister les différents Channel Subsystems connectés à notre machine. En simplifiant à l'extrême, ces channels subsystems correspondent aux périphériques (disques, cartes réseau, carte crypto) accessibles par notre machine:

root@debian:/home/guigui# lscss
Device Subchan. DevType CU Type Use PIM PAM POM CHPIDs
======================================================================
0.0.0100 0.0.0000 3390/0c 3990/c2 yes 80 80 ff 01000000 00000000
0.0.0101 0.0.0001 3390/0c 3990/c2 yes 80 80 ff 01000000 00000000
0.0.0a00 0.0.0002 3088/01 3088/08 yes 80 80 ff 0a000000 00000000
0.0.0a01 0.0.0003 3088/01 3088/08 yes 80 80 ff 0a000000 00000000

La sortie de la commande reflète bien la configuration que nous avons décrite dans le fichier de configuration d'Hercules en début d'article: 2 disques, aux adresses 100 et 101 et une carte réseau correspondant aux devices 0a00 et 0a01. Dernier exemple, la commande lsdasd fait la correspondance entre l'adresse du disque et le device node utilisé par udev pour identifier ce disque:

root@debian:/home/guigui# lsdasd
Bus-ID Status Name Device Type BlkSz Size Blocks
==============================================================================
0.0.0100 active dasda 94:0 ECKD 4096 7043MB 1803060
0.0.0101 active dasdb 94:4 ECKD 4096 7043MB 1803060

Ici, notre disque à l'adresse 100 est accessible et accedé sous linux par le device /dev/dasda, dasda1 étant comme attendu la première partition sur ce volume. Pour plus d'informations sur les commandes disponibles dans le package s390-tools, je ne peux que vous conseiller de consulter les pages de man mais également de jeter un oeil (voire deux) sur La documentation Linux on System z, disponible sur le site DeveloperWorks [6]. Ce bouquin, le Devices, Drivers, Features and Commands est une documentation très précise sur l'ensemble des drivers et outils spécifiques à la plateforme.

Conclusion

Cet article vous aura donné un bref apercu des capacités de l'émulateur Hercules. L'installation de Debian sur un mainframe n'est finalement pas très différente de l'installation sur n'importe quelle autre plateforme. Debian n'est qu'un des nombreux OS qui peut s'exécuter sur ce système. Pour les plus aventureux d'entre vous, vous pouvez essayer d'installer un des systèmes qu'on peut trouver à l'une de ces adresses:

- http://www.ibiblio.org/jmaynard/ (OS/360, VM/370 entre autres).

- http://www.cbttape.org.

Bonnes expérimentations!

Références

- [1] http://www-03.ibm.com/systems/z/hardware/zenterprise/zec12_specs.html

- [2] https://en.wikipedia.org/wiki/ZEC12

- [3] https://en.wikipedia.org/wiki/Z/Architecture

- [4] https://en.wikipedia.org/wiki/IBM_mainframe

- [5] http://publibfp.boulder.ibm.com/cgi-bin/bookmgr/BOOKS/dz9zr002/CCONTENTS

- [6] http://www.ibm.com/developerworks/linux/linux390/documentation_dev.html