Mes calendriers

Mes calendriers sous divers formats

Ma collection

Toute ma collection de calculatrices, calculatrices programmable, ordinateur de poche.

Ma bibliothèque

Tous les scans de ma bibliothèque

Ancienne Collection

Machines dont le me suis séparé, et qui ne font plus partie de ma collection.

 ↑  
Me contacter

pour me contacter, remplissez le formulaire en cliquant ici open_envolope.jpg

si le formulaire ne fonctionne pas, envoyez-moi un mail à

collection point sasfepu chez free point fr

Offrez moi un café

Si mes calendriers, mes scans ou mon site vous ont intéressés, offrez moi un café en cliquant sur la tasse.

tasse_cafe.png

Visites

 117045 visiteurs

 2 visiteurs en ligne

MMU et magie STM 69

Le Falcon débarque bientôt. Son processeur, le 68030, offre une liste de caractéristiques impressionnantes, parmi lesquelles on voit fréquemment apparaître un sigle énigmatique, "MMU". Qu'est-ce donc? Dave se fait ce mois-ci un plaisir de nous l'expliquer, et nous montre quels sont les avantages d'avoir dans une machine ces trois lettres magiques. Et en profite pour nous rappeler que l'informatique abonde en "tours de magie" a priori impossibles ou incompréhensibles. Car selon l'adage de l'ingénieur, une technologie suffisamment évoluée est indistinguable de la magie...

Introduction à la magie

   J'ai toujours aimé la magie, et j'y ai toujours cru. Dans ce domaine, je ne suis jamais passé par ce curieux stade que l'on nomme "devenir adulte". Et cela m'a bien servi, comme à beaucoup de bidouilleurs. Il est parfois important de croire que quelque chose peut arriver, en dépit de ce que tout le monde dit. C'est ça, la magie : par exemple, vous savez pertinemment qu'il n'y a pas de lapin dans le chapeau, et pourtant, il en sort un.

   Je me sens un peu dans la peau d'un prestidigitateur lorsque je fais une démonstration du Spectre GCR dans un salon, devant des gens qui ne l'ont jamais vu. Surtout lorsque l'assistance comporte des fanatiques du Mac. Je lance le programme, passe par les menus de configuration, règle les paramètres, et appuie sur Return pour tout lancer. Et pendant quelques secondes, rien ne se produit. Rien ne transparaît de l'activité furieuse de la machine. L'écran resté figé, et le programme semble s'être planté. Les secondes s'écoulent pesamment, et le suspense commence à devenir angoissant pour moi. S'est-il planté ou non? Après tout, c'est moi qui ai vu le Spectre se planter le plus souvent, et souvent à ce stade, parfois même durant une démo...

   Et soudain, hop, le lapin sort du chapeau! Un petit Mac souriant apparaît sur l'écran, accompagné du message de bienvenue. Quelques secondes plus tard surgit le bureau du Mac. Je camoufle en sourire un soupir de soulagement et j'observe l'assistance. J'adore l'expression des visages à cet instant. C'est celle de gens qui ont vu un tour de magie. Ils savent que c'est impossible; pourtant ça a marché, et ils n'ont pas la moindre idée du trucage employé. Une bonne moitié de l'assistance cherche discrètement des câbles sous la table, qui relieraient le moniteur du ST à un Mac caché. C'est évidemment ce qu'a fait ce vieux dur à cuire de Jerry Pournelle la première fois que je lui ai montré le Spectre. (Il est journaliste dans Byte, écrivain de science-fiction, et ancien officier d'artillerie. On ne la lui fait pas.)

   L'émulation Mac a fait ses débuts en 1986. Au fil des années, tandis que le programme évoluait, il est devenu de plus en plus difficile de le planter. Le point critique fut le gestionnaire d'accès à l'adresse zéro : beaucoup de programmes Mac écrivent par erreur à cette adresse, où se trouve, sur le ST, de la ROM, ce qui plante aussitôt le 68000. Les manuels de Motorola disent que le 68000 ne peut pas rattraper une erreur de ce type, et que c'est même pour ça qu'il y a le 68010. C'est là qu'intervient la plus puissante magie du Spectre après une telle erreur, mon gestionnaire d'accès à l'adresse zéro ramasse le 68000 qui s'était étalé par terre, l'époussette, remonte son ressort et le remet sur ses rails. Puisque les concepteurs du 68000 affirment que c'est impossible, il m'a fallu désapprendre ce que disait le manuel et essayer malgré tout. C'est ça, la magie : c'est faire ce que le manuel affirme être impossible.

   C'est pourquoi nous avons surnommé Zeus notre gestionnaire, en l'honneur du plus puissant des dieux grecs. Zeus fait toute la différence entre un semi-émulateur et un produit stable. Comment marche-t-il, demandez-vous? Oh, allons, allons, rien n'est plus ennuyeux que voir un magicien vous montrer comment marche un tour... Mais Si vous êtes vraiment bidouilleur dans l'âme, vous noterez l'intéressante similitude entre le registre d'instruction IR, sauvé dans la pile lors du plantage, et l'instruction qui a planté le 68000. C'est le point de départ.

   Je fais tellement confiance à mon petit tour de magie que je m'amuse même à demander aux utilisateurs de Mac de faire tourner sous Spectre des applications que je n'ai jamais vues. Certes, je suis toujours un peu anxieux, mais ces nouveaux programmes marchent dans 95% des cas, et le reste du temps, je peux mettre en évidence dans le code de l'application les problèmes qui ont provoqué le plantage : "Eh, ce programme accède directement au circuit SCSI! Il cherche les ennuis, ou quoi? Apple spécifie que c'est interdit, et ça plante sur un portable ou un Mac llfx."

Magie peu discrete

   J'adore faire faire à des ordinateurs des choses qui semblent être magiques. Tenez, au lycée, je n'ai survécu que grâce à des études indépendantes qui m'ont permis de rattraper les mauvaises notes de mes cours de statistiques (entre autres); ces études gravitaient autour de la Magie des Grands Systèmes. Nous avions un grand système Cyber de Control Data (CDC), qui m'a permis d'apprendre des choses très intéressantes comme le langage assembleur Cyber, les appels systèmes, comment interrompre une compilation Fortran afin de laisser dans un fichier une copie du système entier (tiens, tiens, il y en a, des choses intéressantes, là-dedans!), et même, summum de la bidouille, comment parler directement aux entrailles de la machine.

   Je me rappelle avoir écrit un programme qui permettait à plusieurs utilisateurs jusqu'à 32) de discuter simultanément par terminaux interposés. Lorsque je voulus le tester, je le lançai sur quatre des terminaux de notre centre de calcul, où travaillaient beaucoup d'étudiants. Et je commençai à passer d'un terminal à l'autre, tapant des messages de test. Tout à la joie de ma bidouille, je mis un moment à remarquer le silence surnaturel qui s'était établi dans la salle. La bruyante imprimante à ruban de la salle voisine s'était tue, et les matricielles DecWriter avaient cessé leur crin-crin suraigu. Je levai le nez de mes terminaux et vis que tout le monde m'observait, car mes terminaux étaient les seuls encore actifs. Je parvins à garder l'air innocent suffisamment de temps pour arrêter mon programme. Aussitôt, la salle ressuscita, les imprimantes recommencèrent leurs bruits. Je me dépêchai de m'enfuir avant que ne surgisse quelque garde du Service de Sécurité Informatique.

   Depuis, j'ai realisé que le répartiteur de travaux du Cyber "préférait" les petits programmes interactifs comme le mien plutôt que les gros travaux faisant de nombreux accès disque. Les manuels de CDC affirment que ce comportement est impossible sous TELEX, le système d'exploitation en temps partagé du Cyber. On me permettra d'en douter.

Magie integrée

   A présent, mes accessoires de magie sont les machines Atari, qui contiennent une magie potentielle encore inexploitée. Cette magie a pour nom MMU (Memory Management Unit, unité de gestion de mémoire). Je m'en suis servi pour accomplir des tours spectaculaires, dont chacun "sait" qu'ils sont impossibles.

   Et qu'est-ce qu'une MMU, demandezvous? C'était jadis un circuit intégré à grande échelle séparé dans le catalogue Motorola, le 68851, qui fonctionnait avec le 68020. Dans le 68030, Motorola a intégré l'équivalent d'un 68851, si bien que le TT et le Falcon en sont dotés d'office. Une MMU est un circuit qui sépare les adresses mémoires en domaines "logiques" et "physiques", et vous permet de lier les uns aux autres. Une traduction, en quelque sorte.

   A l'intérieur de votre ST, vous avez jusqu'à 4 mégaoctets de mémoire (un mégaoctet = 1 million de caractères, "Mo" en abrégé). Chaque octet est repéré par son adresse, de 1 à 4·000·000. Le numéro de chaque octet est nommé "adresse physique". Les programmes que vous exécutez sont chargés quelque part dans ces adresses, ainsi que les données qu'ils utilisent. Même ce que vous voyez apparaître sur votre écran vidéo est stocké en mémoire, sous forme d'une image occupant 32·000 octets.

   Par contre, les programmes, eux, n'utilisent que des "adresses logiques". Il s'agit en fait de numéroter différemment les adresses. Mais sur le ST, les adresses physiques et logiques sont identiques. Si un programme accède à l'adresse logique n°36, il obtient l'adresse physique 36. C'est parce que le 68000 du ST n'a pas de MMU.

   Maintenant, voyons ce que peut faire le 68030 d'un TT ou d'un Falcon. La MMU de celui-ci permet de complètement séparer les adressages physique et logique. Grâce à elle, le système d'exploitation (le TOS) peut faire croire aux programmes qu'ils sont seuls dans la machine et sont libres d'utiliser toute la mémoire, alors qu'en fait ce n'est pas le cas et que plusieurs programmes coexistent dans le système. L'astuce consiste à scinder la mémoire en "partitions" grâce à la MMU. Supposons que nous ayons 4 Mo de RAM et 4 programmes à utiliser simultanément. Nous attribuons la partition 1 (adresses physiques de 1 à 1·000·000) au programme 1, la partition 2 (adresses physiques de 1·000·001 à 2·000·000) au programme 2, et ainsi de suite pour les quatre partitions. Quand le programme i veut accéder une adresse (logique, car les programmes ne manipulent que des adresses logiques), mettons l'adresse 10, la MMU convertit cette adresse logique 10 en "dixième adresse de la partition 1". Et comme la partition 1 commence a l'adresse physique 1, il s'agit donc de l'adresse physique 10. Quand le programme 2 veut accéder à l'adresse logique 10, la MMU "sait", grâce à des tables de correspondance internes, que la partition 2 commence à l'adresse physique 1·000·001, et traduit donc cette adresse logique en l'adresse physique 1·000·010.

   Le programme 2 accède donc à son octet, qui, pour lui, porte toujours l'adresse 10. Pour le programme, cette traduction au vol est totalement invisible. Et de plus, elle est sans importance en effet, le programme tourne normalement, car tous les emplacements mémoires manipulés par le programme ont été déplacés, ou "mappés" [NdT : du vieux français "mappe", ou carte, comme dans "mappemonde". C'est donc bien français, et en plus, c'est la traduction officielle.]

   Supposons maintenant qu'à cause d'un bogue, le programme 1 tente d'accéder à une autre partition que la sienne, par exemple en accédant à l'adresse logique 1·500·000. La MMU détecte grâce à ses tables que l'adresse logique demandée appartient à la partition 2, à laquelle le programme 1 n'a pas le droit d'accéder. Elle signale donc une erreur de bus et arrête le programme.

   A présent, soyons très malins. Installons dans notre système une horloge qui bat la seconde, et faisons en sorte qu'au premier battement, le 68030 fasse tourner le programme se trouvant dans la partition 1, puis celui de la partition 2 au second battement, et ainsi de suite tour à tour pour les quatre partitions, en recommençant avec la partition 1 au cinquième battement, en boucle. L'horloge peut interrompre et reprendre l'exécution d'un programme, de façon à pouvoir donner la main à tous les programmes tour à tour. Les programmes arrêtés reprennent bien sûr là où ils en étaient restés. Ceci s'appelle le multitâche préemptif. Les programmes ne peuvent en effet choisir les moments où le système d'exploitation les arrête et lès reprend. lis s'exécutent tranquillement, quand tout à coup, ils sont préemptés, et la main est donnée à un autre programme.

   Dans le monde réel, cette horloge est celle du répartiteur de tâches, et elle est cadencée beaucoup plus vite que la seconde. Car s'il y a quatre tâche, il s'écoule pour une tâche donnée 3 secondes durant lesquelles le processeur est occupé à faire tourner les autres tâches, ce qui est beaucoup trop lent (même pour les humains, qui sont dotés d'un processeur plutôt lent). D'ordinaire, il y a environ 100 changements de tâche par seconde.

   Avec une vitesse de changement de tâche suffisamment grande, tous les programmes semblent s'exécuter simultanément, bien que chacun n'ait en fait droit qu'à une tranche de temps de processeur un certain nombre de fois par seconde. Les changements de tâche doivent être assez rapides pour que le ou les utilisateurs ne s'aperçoivent de rien, sauf dans des cas particuliers. Les humains sont suffisamment lents pour qu'un ralentissement de l'ordinateur passe généralement inaperçu. De plus, les ordinateurs passent le plus clair de leur temps à attendre que l'utilisateur fasse quelque chose, comme frapper une touche du clavier ou bouger la souris. S'il n'y a rien à faire, comme souvent, la machine se tourne les pouces. Ce temps passé à attendre peut être utilisé pour donner la main à une autre tâche, s'il y en a une.

   Il existe une autre forme de multitâche, dit coopératif, où les programmes signalent au système les endroits où ils peuvent être interrompus. Dans le ST, ces endroits sont ceux où le programme attend un événement, comme un clic de souris ou un appui sur une touche. Lorsque le programme se met en attente, le système donne la main à la partition suivante. Encore faut-il que le programmeur l'ait prévu. Si un programme n'a pas été écrit dans l'esprit du multitâche, il peut très bien accaparer toute la machine en n'offrant jamais au système d'exploitation l'occasion de passer à une autre tâche. (C'est en fait ce qui s'était produit dans mon programme de communications entre terminaux sur le CDC au lycée).

   Mais attention, une MMU est indispensable pour tout cela. C'est elle qui permet de faire croire aux programmes qu'ils sont seuls dans la machine et les empêche de marcher sur les plates-bandes de leurs collègues, par bogue ou par malice. Si vous faites du multitâche sans l'aide des circuits de la MMU, ces protections vous font cruellement défaut, et vous obtenez moult plantages. C'est d'ailleurs ce qui se produit sur l'Amiga, qui n'a qu'un 68000 en version de base et pas de MMU. Les utilisateurs de cette machine ont vite appris quels étaient les programmes qui ne suivaient pas les règles du multitâche coopératif, et qui donnaient l'équivalent des bombes sur le ST: les "Guru Meditation". (Quoi?... Non, juré, je ne travaillais pas chez Commodore à l'époque, et ce n'est pas moi qui suis le petit plaisantin auteur de cette trouvaille.) Seuls les programmes bien élevés peuvent tourner en multitâche sur l'Amiga. Les programmes mal écrits, dont les utilisateurs doivent tenir la liste, plantent le système.

Magie virtuelle

   Ça va, vous suivez? Accrochez-vous, ça va devenir subtil. Supposons que l'ordinateur comporte 4 Mo de RAM, et un disque dur. Supposons que nous exécutions un programme, et que lorsque celui-ci demande la taille mémoire disponible, nous lui répondions 12 Mo. De plus, nous ajoutons au système d'exploitation une petite routine spéciale pour l'aider. Enfin, nous créons sur notre disque dur un fichier spécial de 12 Mo de long, nommé image mémoire.

   Tant que notre programme reste à l'intérieur des 4 mêgaoctets réels, aucun problème. Mais supposons que le programme demande accès à l'adresse logique numéro 7·000·000? Aha! La MMU le détecte, invoque notre petite routine, et commence à pratiquer de la magie de haut vol. Elle cherche un endroit dans la RAM qui n'a pas été accédé depuis un bon moment, mettons l'adresse physique 2·000·000. Pour des raisons de sorcellerie appliquée trop ennuyeuses à exposer ici, la mémoire est divisée en morceaux appelés "pages", faisant entre 512 et 4.096 octets de long. Eh bien, le contenu de la page située à cette adresse physique 2·000·000 est sauvé sur disque. Ensuite, la MMU mappe l'adresse logique 7·000·000 à cette adresse physique. Désormais, tout accès à cette adresse logique se référera en fait à cette adresse physique. C'est ce qu'on appelle une "permutation de page". Et la MMU rend la main au programme, qui ne s'est aperçu de rien. Naturellement, Si, plus tard, le programme veut accéder à l'adresse logique 2·000·000, qui a été sauvée sur disque, la page sauvée est rechargée depuis le disque et est mise à un autre emplacement mémoire inusité. La MMU met à jour ses tables de correspondance, et l'exécution continue. Il n'y a aucune relation entre les adresses logiques et physiques à l'exception des tables de la MMU.

   Naturellement, cela marche pour n'importe quelle page. Il suffit d'avoir suffisamment de place dans l'image mémoire sur le disque. Conclusion? Nous avons non plus 4, mais 12 Mo de mémoire. Certes, les accès au disque très lent comparé à la RAM - vont ralentir le système. Mais la plupart des programmes ont tendance à boucler dur des sections de code relativement courtes, et à ne pas demander accès à trop de pages à la fois. Ce mécanisme, dit de "mémoire virtuelle", marche donc assez bien. Il a été inventé par IBM dans les années 60, et a été popularisé par UNIX depuis plus de 20 ans!

   Mettre la main sur un 68030, c'est facile : il suffit d'avoir un TT, un Falcon, ou d'en mettre un dans votre ST par une des cartes additionnelles qu'offrent différentes firmes (y compris la carte SST de votre serviteur). Cela permet de goûter aux joies de la mémoire virtuelle. Je l'ai vue tourner sous une forme spécialisée en Allemagne dès 1991 : un bidouilleur avait doté le programme de mise en page Calamus d'une mémoire virtuelle. Et Si vous voulez devenir un héros dans la communauté TT, munissez-vous d'un livre sur les systèmes d'exploitation et la mémoire virtuelle, et implémentez les algorithmes qui y sont expliqués. Motorola vous fournira même la plupart des routines nécessaires Si vous les leur demandez.

Magie commutée

   Continuons, nous commençons seulement à nous amuser! Supposons maintenant que vous mettiez en place trois partitions de mémoire. La première contient un programme ST. Dans la deuxième tourne un programme PC sous émulateur (matériel ou logiciel), et dans la troisième se trouve un programme Mac tournant sous Spectre. Nous avons donc un système comprenant trois tâches.

   La MMU permet de passer instantanément de l'une à l'autre (ce qu'on nomme la commutation de tâches). Chacune de ces tâches "croit" qu'elle a la machine pour elle seule, et s'exécute normalement. C'est ainsi que grâce à un programme de commutation de tâches, vous pouvez passer en un éclair d'un programme à l'autre - et dans ce cas, d'un environnement à l'autre. La MMU s arrange pour mettre en mémoire basse la partition demandée, et le programme de commutation charge les registres avec les valeurs voulues, tout en gérant les aspects temps réel (comme le déplacement de la souris) durant la commutation. Ce n'est pas aussi dur que ça en a l'air. Le programme Revolver le fait déjà, mais sans l'aide d'une MMU. C'est pourquoi il est à la merci de tout programme mal écrit, qui plante le système entier. Ajoutez à cela une MMU, et le système devient très stable. Si c'est correctement fait, vous devez pouvoir planter un programme dans une partition tandis que les autres continuent à tourner.

   Il n'y a aucune raison qui nous empêche de faire tourner plusieurs tâches à la fois dans autant de fenêtres. La commutation de tâche peut aisément se faire à une cadence assez rapide, par exemple 50 fois par seconde. L'idéal est alors de disposer d'un grand écran genre Moniterm, ou bien d'un grand écran virtuel (qui utilise un moniteur ordinaire qui est une fenêtre sur l'écran virtuel plus grand, et un programme grâce auquel on fait dérouler l'écran, par exemple vers la droite quand la souris atteint le bord droit du moniteur). Et, de fait, c'est exactement ce qui est possible grâce à MultiTOS, le TOS multitâche basé sur le système Mint d'Eric Smith. Et ce, grâce à la MMU du 68030.

Magie et gadgets

   La 68030 SST, la carte accélératrice pour ST que nous avons développée ici, à Gadgets By Small, nous a permis de faire faire d'intéressantes acrobaties à sa MMU. Par exemple, le TOS, le fidèle système d'exploitation du ST, est stocké dans deux EPROM. Or, ce type de mémoire est déjà plutôt lent. En plus, chaque lecture ne fournit au 68030 que 16 bits, au lieu des 32 qu'il réclame. La solution : copier les EPROM dans la RAM rapide de la carte, et utiliser la MMU pour remapper cette portion de mémoire à l'adresse physique qu'occupent normalement les EPROM. Cela ne prend après tout que 256 Ko sur les 8 Mo de RAM rapide dont dispose la SST. Après quoi, le TOS tourne en 32 bits, en mode rafale, soit le mode le plus rapide d'une mémoire qui ne lambine déjà pas. Et, comme par magie, toutes les détestables lenteurs du GEM sont oubliées.

   Mieux encore, faisons une croix sur les 64 Ko les plus bas dans la RAM du ST (qui est de toute façon ralentie à 50% par les accès vidéo qui sont toujours prioritaires), et remappons-les en RAM rapide. La machine accède désormais sans ralentissement à cette portion de mémoire, qui contient les tables et variables du système, et le TOS bénéficie donc d'une nouvelle accélération.

   Je vois d'ici certains bidouilleurs sourire malicieusement à la pensée que le système d'exploitation se trouve désormais en RAM, et non plus dans une ROM inaltérable. Si vous le désirez, vous pouvez changer tout ce que vous voulez en retouchant des octets dans la fastRAM. Il y a quelque chose qui vous a toujours manqué dans le TOS? Vous voudriez modifier l'aspect du bureau? (Ricanement démoniaque) Allez-y, vous avez le champ libre! Réécrivez par dessus le TOS, au lieu de devoir vous résoudre à des rafistolages douteux, comme l'interception des vecteurs du XBIOS. Vous en avez assez du bogue de la routine Malloc? Allez-y, corrigez-le.

Magie multiple

   Si vous vous sentez d'humeur taquine, vous pouvez aussi mettre en place deux ST logiques côte à côte dans la mémoire du système, avec deux images différentes du TOS, deux écrans différents, etc. Et, bien sûr, un commutateur de tâches entre les deux. Vous pouvez avoir le deuxième ST que vous avez toujours voulu, par exemple pour héberger un serveur télématique sans interruption, tandis que le second ST logique est toujours disponible. Si l'un se plante, le second tourne toujours. (On pourrait même concevoir de faire tourner deux systèmes redondants pour mieux rattraper les erreurs. C'est ce que font les systèmes militaires et spatiaux à tolérance de panne.)

   De même, il est possible de mettre dans ce ST deux émulateurs Mac logiques, ou deux PC, ou même, pourquoi pas, deux CP/M (d'ailleurs, j'ai conservé beaucoup de programmes CP/M, et avec les 33 MHz de la SST, l'émulateur est très rapide).

Voulez-vous devenir magicien?

   Si vous êtes en train de baver sur vos chaussures en lisant ceci, c'est qu'il est temps de vous procurer le manuel du 68030 de Motorola (pour sa partie spécifique sur la MMU de ce processeur), ainsi que celui de la PMMU 68851, qui vous dira tout ce que vous avez toujours voulu savoir sur les MMU. Et tenez-vous bien, Motorola emploie des gens dont le travail consiste à veiller à ce que ses manuels parviennent aux gens qu'ils intéressent. Appelez votre agence commerciale Motorola locale, et commandez ces manuels. [NdT : Motorola SemiConducteurs, 2 rue Auguste-Comte, 92173 Vanves, (1)40 95 59 00.]

   Et Si un jour, dans un salon, quelqu'un m'appelle et me montre un beau tour de magie monté à l'aide d'une MMU, je saurai que cette article a été utile.

Dave est préempté

   Holà, il est temps de rendre la main aux autres tâches de ce magazine. Je dois libérer les autres pages. Je vous retrouve le mois prochain, lors de ma prochaine tranche de temps!

Traduction et adaptation Password 90
Titre original : MMU & Magic, lnc


Date de création : 16/02/2015 : 09:09
Catégorie : -
Page lue 299 fois