BLOG DE STEPHANE PIRONNEAU
("Je marche seul" Jean-Jacques GOLDMAN)
("J'irai au bout de mes reves" Jean-Jacques GOLDMAN)
J'essaie de comprendre pourquoi vous ne reussissez pas.
Savoir s'entrainer seul (mais pleurer sur son synthetiseur).
Merci a tous les amis des forums de discussions...



Carte electronique sur mesure pour Amstrad CPC6128 (RETROCOMPUTING).
Code source serpent en assembleur 6502
L'impact de l'intranet dans l'entreprise
Galerie de copies d'ecrans
Cote simulateur de vol, connaitre son ennemi...
Et a-t'on encore besoin de pilotes dans les avions de chasse ?
Je suis pour la liberte d'entreprendre et de chanter librement : je suis bleu.
Je suis pour l'education gratuite et les soins gratuits pour tous : je suis rouge.
Je suis pour les encyclopedistes du web gratuits pour tous et les logiciels libres : je suis rouge.
Je suis pour l'ecologie et le respect des animaux et la paix : je suis vert.
J'ai la naivete de croire en Dieu : mon tout fait que je suis centriste.
Mais comme je suis mal vu, je dirais que je suis le UNLOVED AND BAD GUY
que tout le monde veut abattre, donc je joue le chasseur ennemi a l'ecole
Top-Gun. Vous trouverez donc des videos de Sukkoi dans simulateur de vol.
Morpion v1 pour BeOS5 ou Haiku-OS

Programmation en C sous BeOS5Pro le livre
Teach Yourself C in 21 days. Car pour ceux qui ne le savent
pas avec un compilateur C++ on peut injecter du code C
n'importe ou dans un projet en C++.
Votre humble serviteur compile pour vous les exemples du livre
et vous mets des exemples simples de BeApplications pour debuter.
Je vous en prie.


C'est les vacances, je vais arreter de mettre a jour cette page
car j'ai besoin de reviser le C++ pour attaquer de meilleurs
programmes en BeOS5Pro (qui tournent aussi sous Haiku-OS).
C++ pour les nuls : 16,90 euros
ISBN 2-84427-836-1
Stephen Randy Davis
Matthew Telles
(les exemples du livre sont telechargeables sur Internet).





Derniere mise a jour : mercredi 30 juillet 2014


20140730 : EVOLUTION DES PROCESSEURS CISC INTEL
Course a la puissance et a la securisation, dans le cadre
d'une optimisation du multitache, c'est ce qui a
sous-tendu l'evolution que nous allons maintenant survoler.
La prehistoire : les processeurs 8086/8088 avaient leurs
ancetres chez Intel, qui nous interessent peu, puisqu'en
dehors de la lignee de compatibilite :
. 4004, 4 bits et 4Ko de memoire adressable
. 8008, 8 bits et 16Ko de memoire adressable
. Enfin, en 1973, le 8080, 8 bits et 64Ko de memoire
adressable, horloge a 500KHz, porte par le systeme C/PM.
Il fut clone en 1976 par un de ses concepteurs pour
donner naissance au celebre Z80 de Zilog, puis ameliore
en 1977 en 8085.

8086/8088 :
Si le premier IBM PC embarquait un 8088 a 4,77MHz,
c'est bien le 8086 qui est a l'origine de toute
l'histoire. Le 8088 fut developpe ulterieurement,
peut-etre dans le but precisement de motoriser plus
economiquement ce premier ordinateur personnel d'IBM.
Le 8088 est strictement un 8086, donc un microprocesseur
16 bits. Simplement, son bus externe de donnees etait
reduit a 8 bits; un transfert sur 16 bits necessitait
deux acces memoire. Cette particularite est absolument
transparente pour le programmeur. La seule infime
difference au niveau du coeur est la longueur du
tampon de prechargement, qui passe de 6 dans le 8086
a 4 dans le 8088. Mais repetons que le code a ecrire
est strictement le meme pour les deux modeles.
Il semble bien qu'un 8088 fut aussi cher a produire
qu'un 8086, voire un peu plus. L'economie devait donc
se realiser sur la memoire. Neuf boitiers mono-bits
suffisaient, au lieu du double pour un 8086. Il est
courant, dans le domaine du microprocesseur, de vendre
moins cher qu'un autre un produit plus cher a produire
et ayant demande des etudes supplementaires.
La gamme 80186 est un peu a part. Ces processeurs possedent
le jeu d'instructions du 8086 legerement ameliore et
integrent un certain nombres de circuits peripheriques.
Le 80186, dans ses versions les plus completes, ressemble
a un microcontroleur plus qu'a un microprocesseur.
Des microprocesseurs compatibles on tres rapidement
vu le jour. Comme plus tard AMD, le Japonais NEC
proposait les modeles V20 et V30 compatibles 8088 et
8086, et legerement plus performants.

80186/80188 :
Nous avons deja evoque les legeres ameliorations du jeu
d'instructions et l'existence de versions dotees de
circuits peripheriques integres. Mais surtout, c'est
l'apparition d'un embryon de tolerance d'erreurs qui
interesse le programmeur : dans le 8086/8088, une instruction
non implementee n'etait pas geree et provoquait le plantage.
Dans le 80186/80188, il est possible d'intercepter cette
exception et, par exemple, de simuler une instruction
inconnue du processeur. Un programme ecrit pour le
80186/80188 comportant des instructions specifiques a ce
processeur va planter sur un 8086/8088. Bien entendu,
gerer cette exception sur le 80186/80188 ne resout rien
pour le 8086/8088, mais prepare l'avenir. Peut-etre la
notion de lignee n'avait-elle pas ete envisagee des le
debut de l'aventure.
Pas de 80187, le 8087 reste le coprocesseur mathematique
de l'ensemble de la gamme.

80286 :
Le 80286 apparait sur le marche en 1982. Pas de version a
largeur de bus 8 bits, donc pas de 80288. Ce n'est que
trois ans plus tard, en 1985, que IBM propose le PAT,
motorise par ce processeur. Entre-temps etait apparu le
PC-XT, version du PC initial supportant un disque dur
(10, voire 5 Mo au debut), et le marche du clone, monte
ou par elements, le plus souvent d'origine asiatique,
avait explose.
A partir de maintenant, nous simplifions la denomination
des processeurs : plus de 80286, mais des 286, 386, etc.
La compatibilite a assurer pour 80286 est avec le 8086.
Parler ici de 8088 n'aurait pas de sens, puisque les bus
de donnees font et feront au minimum 16 bits de large.
Le 286 introduisit des ameliorations majeures. Il fut,
de plus, supporte par un veritable standard de machine,
le PC-AT. Il avait donc tout pour imposer ses ameliorations.
Mais Intel avait certainement, peut-etre pour la derniere
fois, sous-estime les problemes de compatibilite. Le
logiciel disponible sous DOS etait deja tres fourni.
De plus, le 286, une fois en mode protege, ne pouvait
facilement revenir au mode reel. Cela eut pour consequence
la rarete des programmes exploitant le mode protege,
a l'exception d'OS/2 et d'un Windows 286 qui n'a pas
laisse d'inoubliables souvenirs. Le 286 fut donc essen-
tiellement exploite comme un 8086 legerement ameliore
et plus rapide, mais necessitant un gestionnaire de
type EMS pour acceder a la memoire au-dessus de 1 Mo.
Etrange, pour un processeur dont le bus d'adresses
avait une largeur de 24 bits.
A cote des instructions systeme necessaires a la gestion
des modes et de la protection, propres au nouveau modele
du programmeur, le 286 a vu l'apparition des instructions
suivantes, utilisables dans les deux modes : BOUND, ENTER,
LEAVE, INS, OUTS, PUSHA, POPA. De plus, les instructions
de rotation et de decalage introduisirent une amelioration
minime.
Le coprocesseur 80287 etait une version du 8087 adaptee aux
fonctionnalites nouvelles du 286, mais ne proposait pas de
difference meritant d'etre signalee.
Les processeurs precedents avaient un bus d'adresses de
16 bits, qui permettait d'adresser 1 Mo, un PC sous DOS
ne permettant que 640Ko de RAM. Le bus d'adresses du 286
comporte 24 bits, l'espace adressable est donc physiquement
de 16 Mo.
Le 286 est theoriquement pleinement compatible 8086.
En fait, avec ce modele, Intel inaugure une serie de
"deux en un". Dans un mode de fonctionnement dit mode
reel, c'est un 8086.
Mode reel vient de l'anglais Real-address Mode, pour signifier
que la valeur contenue dans les registres de segment
etait, une fois multipliee par 16 et comme pour le 8086/8088,
l'adresse de du debut de segment. Donc, dans ce mode, il
n'accede comme le 8086 qu'a 1 Mo de memoire, 4 bits du
bus d'adresses ne servent a rien.
C'est en mode reel que le processeur demarre. Il est ensuite
possible de passer dans le second mode, le mode protege.
Le modele du programmeur est tres proche de celui du 8086.
Voyons surtout les quelques differences.
Les registres et flags supplementaires ne sont utiles
qu'en mode protege, ou en mode reel au moment du passage
en mode protege. Trois points distinguent ce mode :
. l'espace memoire adressable est de 16 Mo
. existence de plusieurs niveaux de privileges. Certaines
instructions, l'acces complet a la memoire et a sa gestion,
a certaines ressources, sont reserves au niveau le plus
privilegie, qui va ensuite decider des droits des applications.
. le registre de segment existe toujours et est utilise
pour la determination de la partie haute de l'adresse
physique. Mais son contenu n'est plus l'adresse reelle
d'un debut de segment, ni meme d'une zone : c'est un selecteur,
qui permet d'acceder a un descripteur. Ce descripteur indique,
outre l'adresse et la taille du segment, un certain nombre
d'attributs propres a ce segment, dont le niveau de privilege.
Le registre d'etat machine MSW ne contient pour le 286 que
4 bits documentes. Trois concernent le coprocesseur arithmetique.
Seul le bit 0, ou bit PE comme Protection Enable, nous interesse,
puisqu'il indique le mode de fonctionnement, Reel ou Protege.
Il est a 0 a la mise sous tension, ce qui correspond au fait que,
comme nous l'avons signale, le 286 demarre toujours en mode Reel.
Il faut utiliser l'instruction LMSW (Load Machine Status Word)
pour allumer le bit PE et passer en mode Protege. Une fois dans
ce mode, le repositionnement a 0 de PE devient impossible.
Repasser en mode Reel ne semble pas avoir ete envisage et il
fallait recourir a une ruse : declencher un RESET et faire en
sorte que le BIOS ne reinitialise pas tout. Une operation lourde,
qui interdit un multitache preemptif performant si toutes les
applications et le noyau ne sont pas dans le meme mode.
Des versions d'origine non-Intel ont existe pour le 286, mais
il s'agissait generalement de fabrications sous licence,
autrement dit de clones legaux.
Le 286 a donc introduit des concepts fondamentaux, encore valables
aujourd'hui. Mais en concervant des registres 16 bits. Il
demanderait donc une documentation specifique, qui serait
certainement inutile a la plupart des lecteurs. Passons donc
a la suite de la saga.

386 :
Apres le mode protege avec le 286, le 386 a vu une autre evolution
majeure, l'apparition des registres 32 bits. La version normale DX,
avait des registres, un bus d'adresses et un bus de donnees tous
en largeur 32 bits. La version economique DX presentait un bus de
donnees reduit a 16 bits. Les registres 32 bits encapsulaient les
anciens registres 16 bits.
Avec le 386 est egalement apparu le mode V86, ou Virtual 8086.
Dans ce mode Protege, le processeur peut executer des programmes
ecrits pour le mode Reel du 8086. Finis les problemes de commutation
des taches DOS. Mieux, plusieurs applications DOS peuvent tourner
simultanement, dans plusieurs fenetres, si le systeme d'exploitation
propose cette possibilite bien entendu.
D'autres ameliorations fondamentales, particulierement concernant
la gestion de la memoire, sont apparues avec le 386. Elles concernent
essentiellement le niveau systeme.
Il faut egalement noter quelques caracteristiques transparentes
pour le programmeur qui commencent a apparaitre : nombreuses unites
de traitement fonctionnant en parallele, cache inclus dans la puce.
A partir de ce modele, le decor est plante. C'est le modele le
plus ancien qui pourrait supporter les systemes d'exploitation
actuels. Plus exactement, il en est structurellement capable,
mais insuffisant en termes de performances. Le modele du programmeur
est fige, aux jeux d'instructions additionnels pres. En consequence,
il faudra se reporter a la presentation generale de l'architecture
pour plus de details, chose vraie egalement pour les 486 et
Pentium.
Avec le 386 sont apparues les premieres propositions de solutions
compatibles alternatives : parmi d'autres, IBM, Cyrix et AMD, avec
l'Am386. Cyrix semblait le plus serieux concurrent d'Intel et
repertoriait ses compatibles 386... 486!

486 :
A part quelques instructions supplementaires et l'integration du
coprocesseur arithmetique, les ameliorations du 80486 furent
essentiellement transparentes pour le programmeur : cinq pipelines
executaient en parallele cinq instructions a differents stades
de cette execution.
Il est dit qu'un processeur est scalaire quand il effectue une
instruction par cycle d'horloge et superscalaire quand il fait
mieux. Donc le mot scalaire ne definit absolument pas une
architecture, mais une performance. Certains processeurs, par-
ticulierement RISC a architecture Harvard, sont scalaires par
construction. Le 486 est scalaire, mais en boostant un moteur
qui ne l'est pas intrinsequement.
En effet, beaucoup d'instructions s'executent en un seul cycle,
aidees par cela par le quintuple pipeline, par le cache de
niveau 1 de 8 Ko inclus dans la puce et les pattes prevues pour
la gestion d'un cache niveau 2 externe. Les dernieres versions
du 486 (DX4-100) etaient reellement rapides et sont sorties
posterieurement aux premieres versions du successeur, le Pentium.
Avec le 486 sont egalement apparues des versions particulieres,
pour des configurations multiprocesseurs, pour des ordinateurs
portables, de gestion de l'energie. Avec lui ou son successeur
apparut egalement la gestion de la temperature interne du
processeur. Cote copieurs credibles, toujours Cyrix, avec le
5x86, et la gamme AMD Am486.

Pentium P5-P6 :
Ce fut ensuite la sortie du premier Pentium (types P5). A partir
de ce moment la, pour Intel comme pour la concurrence, de plus en
plus reduite a AMD, l'evolution devient rapide, mais ne touche
pas au coeur du modele du programmeur. Cette evolution s'est
effectuee selon deux axes :
. des structures internes creatives, de plus en plus performantes,
qui de generation en generation accelerent le meme code, a
frequence d'horloge egale, de facon importante. Et de plus, cette
frequence d'horloge continue a croitre regulierement.
. de temps en temps, une technologie apparait. Ce sont MMX,
3DNow!, SSE et SSE2, qui se presentent sous forme d'un jeu de
registres et d'une amelioration du jeu d'instructions corres-
pondant. Cette evolution est nettement orientee multimedia.
L'ensemble de ces dernieres ameliorations, qui ne forment plus
a proprement parler une norme mais un jeu d'options, a mis en
exergue la necessite d'une identification facile par logiciel
des possibilites du processeur. Des le 80386, il etait possible
d'obtenir famille, modele et sous-modele du processeur, mais
uniquement lors d'un RESET. Avec le 80486 est apparue l'ins-
truction CPUID (CPU Identification) qui est evolutive et qui
va beaucoup plus loin dans la detection des possibilites du
processeur.
Le Pentium, le premier modele du nom, est sorti dans une
ambiance de rumeur et de fausses nouvelles. Existent encore
sur internet de nombreuses references au scandale du Pentium.
Un bien grand mot, pour qualifier un bug, chose assez
courante.
Fin 1994 eclata une polemique au sujet d'erreurs dans la FPU
des Pentium. En de tres rares circonstances, des instructions
de division de cette FPU voyaient leur resultat entache
d'une erreur sur la cinquieme a la neuvieme decimale.
La polemique fut d'autant plus vive que le fondeur avait,
semble-t'il, tout d'abord pense pouvoir passer le defaut sous
silence. Politiquement, au sens industriel du terme,
l'annonce du bug est arrivee en terrain bien prepare.
Ce n'est pas le seul bug reconnu sur une serie, mais
bizarrement, c'est le seul dont il est possible de trouver
des traces. Encore aujourd'hui, les compilateurs C++ ou
Pascal leaders proposent une option de correction du
defaut Pentium FDIV.
Il va sans dire que les processeurs incrimines, aujourd'hui
anciens, ont ete echanges par Intel et que cette option
n'est plus d'une grande utilite.
Le premier interet de ce bug est d'etre tout a fait explique.
Pour accelerer le traitement FPU, l'algorithme de division
reelle avait ete modifie depuis la version 486. La nouvelle
version du microcode exploite une table de valeurs numeriques
a 1066 entrees, codee en dur. Or, suite a une erreur, 5 de
ces valeurs n'ont pas ete "claquees" dans le prototype et
sont restees a 0. L'erreur etant rare et faible, elle n'a
pas ete detectee par les procedures de tests avant mise en
production, que nous pouvons pourtant supposer drastiques.
Il est permis de presumer que l'erreur s'est produite sur
des composants de tests de type PLA (Programmable Logic
Array) et que le masque definitif de production a ete fait
a l'image de ce reseau.
Ce premier Pentium etait structurellement un double 486.
Deux structures de pipeline, nommees u et v, au lieu d'une,
un cache de niveau 1 pour les donnees et un autre pour le
code. Depuis, les techniques de prediction des branchements
pour l'approvisionnement des caches ont evolue. De plus,
en interne, les processeurs les plus recents utilisent des
bus de donnees de 128 et meme de 256 bits de large, ainsi
qu'un bus externe sur 64 bits.
Le jeu d'instructions MMX et les nouveaux registres
MM0 a MM7 (en fait, les registres de la FPU) caracterisent
le dernier P5, appele Pentium MMX.
Chez AMD, nous trouvons, peu performant et sorti relativement
tard, le K5. C'etait le premier processeur ayant reellement
fait l'objet d'un developpement original chez AMD. Ce fut
un demi-echec, reserve aux configurations economiques.
Le premier de la serie P6 fut le Pentium Pro. Trois unites
au lieu de deux (3 instructions par cycle). Les instructions
sont eclatees en microcode, traitees a part et en parallele
dans plusieurs unites specialisees (entiers, floats, acces
memoire) de facon asynchrone si possible, puis replacees
dans une file d'attente. L'idee est de faire le maximum de
choses en parallele, sur le code et les donnees precharges,
y compris les predictions de branchement. Aux caches de
niveau 1 s'ajoute un cache de niveau 2 de 256 Ko. La
cooperation entre les unites de traitement, les caches et la
memoire sont particulierement travailles. Enfin, le bus
d'adresses passe a 36 bits (64 Go de memoire accessibles).
AMD, peu fier certainement du succes mitige de son K5,
avait lors de sa sortie rachete NexGen, qui amenait les
bases du K6. Puis ce fut le K6-2, qui proposait le jeu
d'instructions 3DNow!, une amielioration de MMX.
Le Pentium Pro n'implementait pas MMX, certainement selon
l'idee que le multimedia et Pro etaient deux choses
differentes. Bien entendu, cette idee n'a plus vraiment
cours aujourd'hui. Donc, le Pentium II est un Pentium Pro
equipe de MMX aux memoires caches plus ou moins doublees.
Passons sur le Celeron (the Castrated One), version
economique du Pentium II, ainsi que le Xeon (Pentium II
on steroids), version serveur du meme. D'autres versions,
en particulier du Celeron, existent.
Le Pentium III introduisit essentiellement le jeu
d'instructions et les registres 128 bits SSE.
Pour en arriver au Pentium 4. Dans ses versions recentes,
debut 2003, ses caracteristiques maximales sont :
. jeux d'instructions : MMX, SSE et SSE2
. clock maxi (commercialisee) : 3 GHz (calculs a 6 GHz)
. vitesse maxi de bus : 533 MHz (ou 400 MHz)
. cache de niveau 1 : 8 Ko
. cache de niveau 2 : 256 Ko.
Le Pentium 4 est base sur la micro-architecture Netburst.
En particulier, les unites de calcul travaillent a 2X la
vitesse d'horloge ( 6 GHz !). Pour ce qui est des
frequences d'horloge, de calcul et de bus, elles ne sont
donnees qu'a titre indicatif. Chaque visite sur le site d'Intel
apporte de nouvelles informations. Au moment de la redaction,
le constructeur affirme qu'une des caracteristiques du
dernier coeur Pentium 4 est sa reserve de puissance en
termes de frequence, le goulet d'etranglement etant certainement
l'acces memoire. Cette reserve de puissance en interne explique
sans doute la presence de pipelines a vingt etapes, soit deux
fois plus que l'Athlon, le processeur pouvant effectuer
un travail consequent en parallele sur le contenu de cette
queue.
Pendant ce temps, AMD, depuis le succes du K6-2, avait
successivement propose une serie de processeurs tout a fait
interessants, economiques et malgre tout performants, surtout
si nous considerons la memoire DDR supportee. Le dernier
produit de la gamme (en oubliant pour l'instant la gamme
64 bits AMD64) est l'Athlon XP + . Ses caracteristiques,
un peu en retard a l'instant t sur le Pentium :
. jeu d'instructions : MMX, 3DNow! et SSE.
. clock maxi (commercialisee) : 2,59 GHz (3000)
. vitesse maxi de bus : 333 MHz (ou 266MHz)
. cache de niveau 1 : 128 Ko
. cache de niveau 2 : 256 Ko a 512 Ko
Nous en sommes la au milieu de l'annee 2003. Il est bien
entendu difficile de faire des predictions sur la suite de
l'evolution de l'architecture. Au grand bonheur de l'industrie
du caoutchouc, nous attendons toujours la voiture sur coussin
d'air ou a sustentation magnetique basee sur la supraconductivite,
annoncee fermement pour l'an 2000 dans les annees soixante-dix.
Les frequences aujourd'hui mises en jeu sont tout simplement
phenomenales pour un electronicien : les 6 GHz du core, mais
peut-etre plus encore les 400 MHz a 800 MHz vehicules sur des
cartes meres vendues quelques dizaines d'euros.

Jeux d'instructions : MMX, 3DNow!, SSE, SSE2

La technologie MMX : MultiMedia eXtended
La technologie MMX (MultiMedia eXtended) developpee par Intel
est appartue avec le Pentium MMX. AMD integre MMX et propose sur
l'Athlon une extension du jeu d'instructions. Elle ne fait pas
partie de la norme de fait; son implementation dans une version
ulterieure, meme chez Intel, n'est donc pas garantie. Il faudra
par consequent systematiquement interroger CPUID avant d'utiliser
MMX.
MMX apporte de nouveaux registres, de nouveaux types de donnees
et les nouvelles instructions qui vont avec. C'est donc une
extension au modele du programmeur.
Historiquement, c'est l'apparition du concept SIMD
(Single-Instruction, Multiple-Data). Dans les applications
orientees multimedia, qui travaillent sur de vastes tableaux
de nombres (images 2D et 3D, sons), le goulet d'etranglement en
termes de performances correspond souvent a l'execution d'une
meme operation sur l'ensemble du tableau. MMX va faciliter le
traitement simultane de plusieurs operations, permettant
d'acceder a un certain niveau de parallelisme. Ce parallelisme
explicite vient ajouter ses bienfaits a celui utiliser par
le processeur de facon transparente, pour ameliorer ses
performances generales.
MMX apporte 4 nouveaux types de donnees, tous sur 64 bits
et 8 nouveaux registres MM0 a MM7. Nouveaux ?
Intel aime differencier les notions de registres physiques
et logiques. Par exemple, EAX et AX sont presentes comme
deux registres a part entiere. A propos de MM0 a MM7, il
est dit qu'ils sont aliased aux registres de la FPU. Et
encore, a ce niveau-la, il est fait reference aux R0 a R7,
qui sont les registres physiques avant l'intervention de
la notion de pile donnant naissance aux FP(i). Nous dirons
donc, quant a nous, que MM0 a MM7 sont installes dans
les 64 bits de la partie mantisse des registres R0 a R7
de la FPU.

La technlogie 3DNow! :
Implementee semble-t'il uniquement sur des processeurs
d'origine AMD, depuis le K6-2, la technologie 3DNow! fut
developpee en grande partie par ce fondeur, au sein d'une
equipe comportant des developpeurs et des fabriquants de
peripheriques graphiques. C'est de cette facon qu'AMD presente
les choses. Nous dirons, quant a nous, que 3DNow! est une
technologie d'AMD.
Une cible de 3DNow! est le graphisme en trois dimension.
Sous le terme 3D, se cache en fait la representation en deux
dimensions d'une realite, imaginee ou existante, en volume,
c'est-a-dire la reconstitution de scenes texturees et
eclairees (raytracing) mais, qui plus est, animees, donc
recalculees en temps reel. Cela demande des calculs sur des
reels tres nombreux. Meme si ces techniques ont plusieurs
applications possibles, c'est commercialement le domaine
du jeu qui est vise. Pour obtenir une amelioration de
performances a partir d'une technologie comme 3DNow!, le
point cle n'est pas l'ecriture du jeu, mais la disponibilite
de drivers de carte graphique supportant le nouveau jeu
d'instructions. A ce moment-la, l'amelioration globale des
performances se fera independamment du logiciel ou du
systeme d'exploitation en vigueur.
Les techniques de compression video sont devenues incon-
tournables, y compris dans le domaine professionnel
(broadcast). Les procedes utilises par le grand public et
la television (au moins au niveau des emissions d'actualites)
sont des procedes destructifs, comme les MPEG, c'est a
dire qu'il y a perte d'information (dans un ration hallucinant
parfois), nos yeux etant supposes se satisfaire du reliquat.
Un film est une succession d'images fixes. En fait, une
image extraite d'un film peut etre moins bonne qu'une
photographie : elle sera meme meilleure si elle est floue
dans le sens du mouvement, filee en quelque sorte. Nous
pouvons penser que les procedes de compression applicables
a la photographie (JPEG) sont applicables, dans un
premier temps, a l'image film. Mais interviennent ensuite
les compressions liees a l'animation.
Le principe de ces algorithmes de compression est d'envoyer
une image complete toutes les 6 images (c'est un exemple).
Entre deux images, sont inserees des images incompletes et
un important travail d'interpolation doit etre effectue.
Ces procedes ont des limites, bien visibles sur nos petits
(plus ils le sont, mieux c'est) ecrans. Voir une scene
mobile sur fond de feuillages bruissant dans le vent.
En revanche, une copie DivX d'un film d'animation sera
tres satisfaisante (hors ethique), puisque d'une part les
images fixes sont simples, et d'autre part des interpolations
numeriques de mouvement ont ete utilisees a la fabrication.
3DNow! va integrer des instructions facilitant ces
interpolations, les xAVGxx effectuant des moyennes en
particulier.
3DNow! est en quelque sorte une extension virgule flottante
de MMX. L'existence de la technologie 3DNow! implique
necessairement celle de MMX. Il n'y a pas a changer de
mode pour effectuer des calculs sur entiers et sur flottants,
ou plus exactement il n'y a qu'un seul mode : MMX/3DNow!.
Pour Resumer, 3DNow! est un MMX ameliore sur les points suivants :
. un nouveau type de donnees, deux flottants compactes, packed
single (precision float), dans les registres MMX
. la prise en compte de la structure pipeline, qui permet
d'effectuer en un cycle d'horloge deux instructions. Ces
instructions etant elles-memes de type SIMD; ce sont quatre
operations simultanees sur des flottants qui seront effectuees.
. 21 nouvelles instructions.

La technologie SSE, SSE2 : Streaming SIMD Extensions
La technologie SSE est apparue avec le Pentium 3, dont elle
etait meme une caracteristique majeure. Encore devons-nous
nous rappeler que c'est bien l'inscription du numero de serie
au coeur de la puce qui a suscite le plus d'articles de presse.
Il est vrai que les droits fondamentaux de l'homme et du
citoyen etaient bafoues. Par bonheur, le monde libre s'en est
remis.
SSE est un acronyme d'acronyme : Streaming SIMD Extensions.
Nous savons que SIMD signifie Single Instruction Multiple
Datas. Le streaming concerne la facon dont sont traites les
transferts memoire, de facon directe, avec une certaine
independance par rapport a la circuiterie habituelle du
microprocesseur. Peut etre avez-vous eu l'occasion de voir
une machine bloquee gravement, alors qu'une image ou un son
continue pendant un certain temps a se derouler. Le streaming
sur Internet est autre chose, bien entendu, mais l'idee s'en
rapproche : des transferts de donnees multimedias en flux,
et non plus en fichiers, ce qui permet d'en commencer le
visionnage ou l'ecoute des que la reception a commence.
Donc, comme deja les extensions 3DNow! et MMX, les nouvelles
technologies orientees multimedias sont en rapport etroit
avec le hardware.
Les gros problemes de MMX etaient le partage des registres
avec la FPU et le cout du chargement de mode en termes de
performances. C'est ce qu'affirmait Intel, semblant ignorer
que 3DNow! avait fait un pas dans la bonne direction. Or, les
operations en virgule flottante devenaient cruciales pour les
traitements multimedias. De surcroit, il fallait de preference
des flux de donnees comme ils viennent, c'est a dire a
grande vitesse tres souvent.
SSE possede donc son propre jeu de registres, sur 128 bits
chacun et portant les appellations xmm0 a xmm7.

Micr-Application : "Assembleur, reference"
par Pierre MAURETTE
ISBN 2-7429-3061-2





20140724 : EXEMPLE DE MACHINES MASSIVEMENT PARALLELES
. Fujitsu VPP500/100 : 100 processeurs a 100Mhz : 92,7 Gflops/s
. Intel Paragon : 1872 processeurs i860 a 50Mhz : 72,9 Gflops/s
. Thinking Machine CM-5 : 1024 processeurs SPARC : 59,7 Gflops/s
. Cray T3D : 256 processeurs DEC Alpha a 150Mhz : 21,4 Gflops/s
. IBM SP-1 : 64 processeurs RS6000 : 4,8 Gflops/s : 4,8 Gflops/s


MACHINES PARALLELES A MEMOIRE COMMUNE
Ces machines comportent plusieurs processeurs qui se partagent
la meme memoire. Les processeurs ne peuvent echanger des
informations que par l'intermediaire de cette memoire.
Mais ils peuvent evoluer independamment les uns des autres.
Il existe donc entre eux une concurrence d'acces a la memoire.
En effet, la memoire ne peut pas realiser plusieurs operations
en meme temps. Il faut donc integrer des mecanismes qui permettent
de realiser ces acces en sequence. Un processeur peut realiser
une operation d'acces a la memoire seulement s'il n'y a pas
un autre processeur qui y accede deja. Si ce n'est pas le cas,
le processeur devra attendre que l'autre processeur ait termine
son acces. Ce temps d'attente est appele latence d'acces.
Afin de limiter ces concurrences lorsque la machine possede
beaucoup de processeurs, la memoire est organisee en niveaux
hierarchiques. L'un des aspects le plus connu est le cache memoire.
Un cache est place entre chaque processeur et la memoire centrale.
Le contenu d'un cache est une image partielle du contenu de
la memoire. Lorsqu'un processeur souhaite acceder a une
information, il accede a son cache. Si l'information se
trouve dans son cache alors l'acces est realise immediatemment.
Si ce n'est pas le cas, le cache doit etre recharge avec
l'information voulue qui est prelevee dans la memoire centrale.
Cette operation est relativement lente car c'est tout un
bloc d'informations qui va etre transfere, ce qui introduit
une latence.
La memoire centrale, quant a elle, est reorganisee en blocs.
Chaque bloc dispose de son propre canal d'entrees-sorties.
Ces canaux sont relies aux processeurs soit par l'intermediaire
d'un bus, soit par l'intermediaire d'un reseau d'interconnexion.
Chacun de ces types de lien fait apparaitre des risques
de blocage donc de latence.
Les contraintes imposees par la memoire font que ces machines
ne peuvent utiliser que peu de processeurs (quelques dizaines).
Aujourd'hui, ce type d'architecture est essentiellement
utilise dans les machines dites multiprocesseurs (moins de
dix processeurs) comme les stations de travail.
"Synthese informatiques CNAM" HERMES


LES MACHINES PARALLELES A MEMOIRE DISTRIBUEE
Dans les machines paralleles a memoire distribuee, chaque
processeur dispose d'une memoire respective. Les processeurs
peuvent communiquer entre eux en utilisant un reseau
d'interconnexion. La plupart du temps, la topologie de ce
reseau fait qu'il est possible de construire des machines
modulaires, c'est-a-dire des machines dont le nombre de
processeurs peut varier.
Les modeles de programmation utilises dans les applications
paralleles supposent de disposer d'une memoire commune
partagee. Comme la memoire n'est pas commune physiquement,
il faut un moyen qui permette a un processeur d'acceder
aux donnees detenues par un autre processeur. C'est la
qu'intervient le reseau d'interconnexion. En effet, lorsqu'
un processeur a besoin d'une donnee partagee distante
(detenue par un autre processeur), il doit la demander
au processeur qui la detient. Cette operation necessite
un certain temps, au moins le temps de communication
de la demande et de la reponse. La aussi, il n'est pas
possible d'eviter une latence.
Il existe egalement des risques de latence lies a la
saturation du reseau, ce qui est semblable a une
latence d'acces au reseau. Le trafic est d'autant plus
important qu'il faut assurer la coherence des donnees
partagees dans les differents caches.
Le besoin de disposer de toujours plus de memoire sur
des machines toujours plus performantes fait que des
caches sont places entre le processeur et sa memoire.
Ce qui va presenter des risques de latence supplementaires.
Aujourd'hui, les machines massivement paralleles (plusieurs
centaines de processeurs) utilisent de plus en plus
une architecture a memoire distribuee.
"Syntheses informatiques CNAM" Hermes


MULTITHREAD CONCURRENT
Le principe est d'associer plusieurs threads a chaque processeur.
Lorsqu'une latence a pour effet de bloquer l'execution
d'un thread, alors une commutation de contexte est realisee
afin de lancer l'execution d'un autre thread.
Si le temps de commutation de contexte est faible par
rapport au temps d'acces aux donnees alors il est possible
de recouvrir les latences par du traitement.
Le nombre d'instructions contenues dans un thread etant
tres faible, il s'avere qu'un thread est caracterise par
un contexte d'execution tres reduit (seulement quelques
registres).
Il est donc possible d'integrer les mecanismes necessaires
a une commutation de contexte efficace au niveau du materiel.
En general, cela se fait au niveau du processeur qui
integre plusieurs ensembles de registres.
Dans ce cas, le temps de commutation est faible. Toutefois,
ce temps de commutation n'est pas toujours aussi faible
qu'il y parait car il se peut qu'une commutation de
contexte engendre le besoin de recharger les differents
caches (instructions et/ou donnees).
Il n'existe pas de preemption entre les threads, ce qui
veut dire que leur execution ne peut pas etre interrompue.
En d'autres termes, un thread s'execute jusqu'a ce qu'il
soit bloque a cause d'une latence ou bien qu'il se termine.
La, c'est lui-meme qui commute de contexte afin de
permettre l'execution d'un autre thread. Inversement,
pour qu'un thread ait des chances de s'executer, il faut
que le thread actuellement actif commute de contexte.
Le nombre moyen d'instructions executees entre deux
commutations de contexte (ce qui est appele la granularite)
ainsi que le nombre de threads associes a chaque
processeur vont jouer un role important dans l'obtention
des performances.
En effet, une granularite fine generera beaucoup de
commutations de contexte. Si le nombre de threads est
insuffisant alors les latences ne seront que
partiellement recouvertes. Sans compter que ces
commutations risquent d'engendrer des defauts de cache
et donc d'induire des latences supplementaires.
En contrepartie, chaque thread aura plus de chances
d'acceder a la ressource d'execution.
A l'oppose, une granularite grossiere ne permettra
que tres rarement l'execution de chaque thread. Ceci
sera d'autant plus vrai que le nombre de threads sera
important. Par contre, peu de threads sont necessaires
pour recouvrir une latence et le nombre de commutations
de contexte est reduit.
Il n'existe pas de regles qui permettent de s'assurer
de l'obtention d'un maximum de performances. Des
etudes comparatives ont ete menees et il apparait que
la granularite des threads et leur nombre doivent etre
determines en fonction de l'algorithme mais aussi en
fonction de la machine d'execution.
Une autre preoccupation est de determiner que est
l'instant le plus favorable pour realiser la commutation
de contexte. C'est ce qui a donne naissance a plusieurs
modeles de commutation.
. le modele SWITCH-EVERY-CYCLE
Dans ce modele, le processeur commute vers un thread different
apres chaque instruction, ou bien, a chaque cycle, le pro-
cesseur execute une instruction issue d'un thread different.
Ce qui revient a faire du temps partage au niveau des threads.
Ceux-ci disposent de la ressource d'execution chacun a leur
tour et pour une duree limitee (une instruction).
Cette approche est interessante car les threads n'ont pas
a attendre que la ressource d'execution soit disponible.
De plus, cela permet d'exploiter efficacement les architectures
pipeline des processeurs actuels puisqu'il n'y a plus de
dependances entre les donnees et les instructions qui sont
dans le pipeline.
Mais ce modele necessite la mise en oeuvre de mecanismes
d'ordonnancement tres complexe. De plus, les performances
en simple thread sont restreintes.
. le modele SWITCH-ON-LOAD
Dans ce modele, une commutation de contexte a lieu a chaque fois
qu'un thread emet une requete de chargement d'une donnee
distante. Les ecritures ou emissions de donnees n'engendrent pas
de commutations car le thread n'a pas besoin d'attendre la
terminaison de ces operations pour pouvoir continuer a
s'executer.
L'avantage est qu'un thread peut s'executer avec un maximum
de performances jusqu'a ce qu'il ait besoin de charger une
donnee distante et donc de commuter de contexte.
Par contre, un thread peut etre sujet a des commutations de
contexte frequentes s'il doit charger beaucoup de donnees
ce qui va degrader ses performances. Dans ce cas, il serait
plus interessant pour lui de pouvoir regrouper les charge-
ments de donnees afin de commuter moins souvent.
. le modele SWITCH-ON-USE
Un compilateur peut organiser les donnees de maniere a initier
le chargement d'une donnee distante, plusieurs instructions
avant de l'utiliser. La commutation de contexte n'aura lieu
qu'au moment d'utiliser la donnee. Dans ce cas, le thread
recouvre lui-meme une partie de la latence. Ceci est interessant
quand il y a peu de threads en concurrence.
L'interet majeur de ne commuter de contexte que lors de
l'utilisation de la donnee plutot que lors de son chargement
est qu'il est possible de regrouper le chargement de plusieurs
donnees. Dans ce cas, la commutation de contexte aura lieu
seulement lors de l'utilisation de la premiere d'entre elles.
Le thread ne pourra etre de nouveau active que lorsque toutes
les donnees seront disponibles.
. le modele EXPLICIT-SWITCH
Ce modele permet egalement d'exploiter les avantages du
regroupement des chargements de donnees distantes. Le principe
est d'inserer explicitement une commutation de contexte
entre les chargements et l'utilisation des donnees.
L'avantage est de laisser au programmeur la decision de
l'instant ou il faut commuter de contexte. Ce qui lui laisse
la possibilite d'orchestrer de maniere plus souple le
multithread.
De plus, le programmeur a la possibilite d'affiner la granularite
d'un thread en inserant de maniere judicieuse de telles
commutations.
. le modele FORK-AND-JOIN
Ce modele est une autre alternative au regroupement des
chargements des donnees distantes.
Ici un thread va donner naissance a d'autres threads a
l'aide de l'instruction fork. Chacun d'eux va initier
le chargement d'une donnee puis va commuter de contexte
(SWITCH-ON-LOAD). Lorsque le chargement est effectif,
le thread va executer l'instruction join (tous les threads
executent la meme instruction join). Si le thread n'est
pas le dernier a executer cette instruction alors il meurt.
De cette maniere, il ne reste plus qu'un seul thread
vivant apres l'instruction join (le dernier a executer
l'instruction).
. le modele SWITCH-ON-MISS
Les caches memoire permettent de charger des donnees partagees
sans avoir necessairement besoin d'acceder a la memoire
partagee. Il est donc peu interessant pour un thread de
commuter de contexte sur le chargement d'une donnee alors
que celle-ci est disponible dans le cache.
Dans le modele SWITCH-ON-MISS, la commutation de contexte
n'aura lieu que si la tentative de chargement engendre un
defaut de cache. Par ailleurs, des caches peuvent aussi etre
utilises entre le processeur et la memoire locale. Avec ce
modele, il est possible de recouvrir les latences dues au
chargement du cache de la memoire locale.
En pratique, comme la commutation de contexte n'est activee
que tres tardivement, il n'est pas possible d'eviter un
desamorcage du pipeline du processeur ce qui a pour effet
de degrader les performances. De plus, la granularite est
difficilement maitrisable puisqu'elle devient fonction de
l'etat du cache.
. le modele SWITCH-ON-USE-MISS
Dans ce modele, les commutations de contexte n'ont lieu
qu'au moment d'utiliser une donnee dont le chargement a
engendre un defaut de cache.
Cette approche permet de cumuler les avantages du modele
SWITCH-ON-USE, a savoir le regroupement de chargement et
ceux du modele SWITCH-ON-MISS, a savoir la commutation
conditionnee par un defaut de cache.
Mais les inconvenients sont egalement conserves, notamment
le desamorcage du pipeline du processeur.
. le modele CONDITIONAL-SWITCH
Ce modele est derive du modele EXPLICIT-SWITCH auquel il
ajoute la prise en compte du cache. La difference est que
la commutation de contexte explicite est conditionnee par
l'existence d'un defaut de cache.
Il est donc possible de regrouper des chargements de donnees
distantes et de ne tenter de commuter qu'avant de les
utiliser. La commutation n'aura lieu qui si au moins une
de ces donnees n'etait pas disponible dans le cache.


MULTITHREAD PARALLELE (base du VLIW : Very Long Instruction Word)
L'architecture interne des processeurs met en oeuvre plusieurs
unites fonctionnelles specialisees. Mais, a un instant donne,
le processeur n'en utilise qu'une seule. Il en resulte un taux
d'utilisation extremement faible de chaque unite fonctionnelle.
L'idee est de realiser l'execution de plusieurs instructions
en meme temps afin de tenter d'obtenir un taux d'utilisation
eleve des unites fonctionnelles.
Pour cela, il faut integrer plusieurs processeurs logiques
en un seul processeur physique. Ces processeurs logiques vont
se partager les unites fonctionnelles du processeur physique.
Le resultat obtenu est que plusieurs instructions issues de
flots de controles (ou threads) differents peuvent etre
executees en meme temps, tant que celles-ci ne tentent pas
d'utiliser la meme unite fonctionnelle.
Le processeur physique integre des mecanismes pour gerer les
conflits d'utilisation des unites fonctionnelles. Mais la
resolution de ces conflits peut introduire des latences et
donc un thread peut se retrouver bloque. Dans ce cas, il est
possible d'utiliser les techniques de multithread concurrent
au niveau des processeurs logiques.
Ce type de multithread est egalement utilise dans les processeurs
VLIW (Very Large Instruction Word) qui exploitent des instructions
dites horizontales. Ces instructions sont composees de
plusieurs operations, chacune d'elles exploitant une unite
fonctionnelle differente. La difference est que, dans ce cas,
ce n'est plus le processeur qui est capable de gerer plusieurs
flots d'instructions ou threads. En effet, il n'y a qu'un seul
flot d'instructions et ce sont les instructions qui exploitent
plusieurs unites fonctionnelles en meme temps. Le probleme
de l'ordonnancement est donc reporte au niveau de la pro-
grammation et/ou de la compilation.


LES PROCESSUS ET LE MULTITHREAD
Un processus possede au moins un thread et au moins un LPW
(Light Weight Process : processus leger). Les threads d'un
processus peuvent disposer de toutes les ressources d'un
processus (donnees, code, fichier, memoire partagee...).
De plus, ils possedent un masque qui leur permet d'inter-
cepter les signaux. Il apparait que les ressources du
processus se retrouvent reparties entre les threads. Que se
passe-t'il du cote des threads ? Le code correspondant est
probablement herite, ce qui revient a heriter des threads.
Mais que devient l'etat des threads dans le processus fils ?
L'interface POSIX ne specifie qu'un seul type de creation
de processus. Il s'agit du modele FORK-ONE. Une fonction
de securite est fournie pour pallier certains inconvenients
de ce modele.
Par contre, l'interface SOLARIS specifie deux types de
creation de processus mais ici, le premier suit le modele
FORK-ONE alors que le deuxieme suit le modele FORK-ALL.
. le modele FORK-ONE
Lors de la creation d'un processus suivant le modele
FORK-ONE, l'espace memoire est duplique dans le processus
fils, mais seul le thread appelant (celui qui a execute
la fonction fork) est duplique.
Ceci ne pose aucun probleme dans les situation ou le
processus fils appelle la fonction exec tout de suite
apres avoir ete cree.
Dans ce cas, le processus fils n'a effectivement pas besoin
d'heriter d'autres threads que l'appelant.
Par contre, dans le processus fils, il ne faut pas utiliser
de fonctions de la bibliotheque avant d'executer la fonction
exec. En effet, une de ces fonctions pourrait tenter
d'utiliser un mutex qui a ete acquis dans le processus pere
avant l'execution de la fonction fork.
Le probleme est que le processus fils n'a vraisemblablement
pas herite du thread qui l'a acquis (a moins qu'il ne
s'agisse du thread appelant). Par consequent, il risque
d'y avoir un interblocage du processus fils. Le thread
peut rester bloque en tentant d'acquerir ce mutex qui ne
sera jamais libere.
Un des moyens les plus efficaces d'eviter cet inter-blocage
est de faire en sorte que le thread qui va devoir executer
la fonction fork puisse prealablement acquerir tous les
mutex qui pourraient etre utiliser dans le processus fils.
Puis, tout de suite apres la fonction fork, le thread doit
liberer ces mutex. Il en resulte que les mutex sont herites,
et surtout leurs etats, par le processus fils.
En les liberant tout de suite apres la fonction fork, le
processus fils remet dans un etat non dangereux, le processus
pere egalement.
Pour facilite cette operation l'interface POSIX specifie
une fonction de securite. Cette fonction permet de definir
trois gestionnaires, prepare, parent et child. Il s'agit
en fait de fonctions qui seront appelees automatiquement
lors de l'execution de la fonction fork et dans le contexte
du thread appelant.
Le gestionnaire prepare est appele au debut de l'execution
de la fonction fork. C'est typiquement celui-ci qui va
permettre au thread appelant d'acquerir les mutex.
Le gestionnaire parent est appele a la fin de l'execution
de la fonction fork, avant le retour dans le processus pere.
C'est typiquement celui-ci qui va permettre au thread appelant
de liberer les mutex dans le processus fils.
Le gestionnaire child, quant a lui, est similaire au
gestionnaire parent sauf qu'il est utilise dans le contexte
du processus fils. C'est typiquement celui-ci qui va
permettre au thread herite de liberer les mutex dans le
processus fils.
. le modele FORK-ALL
Dans l'interface SOLARIS, le modele FORK-ONE present le
meme inconvenient que dans POSIX mais il n'y a pas de
fonction de securite. Par contre, un moyen sur d'eviter
l'interblocage du processus fils est d'utiliser le modele
FORK-ALL.
L'utilisation de ce modele permet de dupliquer non seulement
l'espace memoire dans le processus fils mais aussi tous
les threads et tous les LWPs du processus pere. Comme
toutes les donnees sont dupliquees, les etats des elements
de synchronisation mais aussi l'etat des threads, le sont
egalement. Les LWPs sont aussi dupliques, ce qui signifie
que l'ordonnancement dans le processus fils peut demarrer.
Tous les elements necessaires sont disponibles et
correctement initialises.
"Syntheses informatiques CNAM" editions HERMES
Techniques du multithread
ISBN 2-86601-562-2


PVM : PARALLEL VIRTUAL MACHINE
PVM est un logiciel developpe conjointement par le Oak
Ridge National Laboratory, l'universite du Tennessee et
l'universite d'Emory. Il permet de simuler un ordinateur
parallele en exploitant les ressources de stations de travail
heterogenes Unix reliees par un reseau local. Les differentes
taches (processus) s'executent en asynchrone sur differents
ordinateurs du reseau, ce qui signifie que nous nous trouvons
en presence d'une architecture a memoire distribuee sans
controle centralise des processus. Le modele d'execution
est de type SPMD ou MPMD, ce qui impose un mode de pro-
grammation par echange de messages.
SPMD = Single Program stream, Multiple Data stream
MPMD = Multiple Program stream, Multiple Data Stream
PVM n'est pas un langage, c'est une bibliotheque a passage
de messages. L'utilisateur concoit son application a l'aide
d'un langage C, Fortran ou C++ et la parallelise en faisant
appel aux routines PVM de passage de messages tels que
"pvm_send" (envoi de message) ou "pvm_recv" (reception
de message). En envoyant et en recevant des messages, les
differents processus composant l'application cooperent pour
resoudre le probleme en parallele.

MPI : MESSAGE PASSING INTERFACE
Constatation a ete faite que, durant les dix dernieres
annees, le mode de programmation par passage explicite
de messages s'est largement repandu sur certains types
de calculateurs paralleles et plus specialement sur les
architectures a memoire repartie, et que des applications
de grande importance ont ete parallelisees a l'aide de
ce mode de programmation. De cette manieres sont apparus
sur le marche plusieurs systemes a passage de messages
concus par differents fabricants d'ordinateurs para-
lleles.
C'est en avril 1992 qu'est nee la volonte de fournir
une reflexion commune sur les techniques a passage de
messages. MPI, qui aujourd'hui en est le resultat, est
la specification formelle d'un standard concu par un
groupe d'une soixantaine de personnes issues de 40
organisations differentes, et qui se reunissent sous
forme de tribune libre denommee Message Passing Interface
Forum. Ce forum reunit aussi bien des fabricants de
machines paralleles que des chercheurs issus de laboratoires
gouvernementaux et universitaires des Etats-Unis et
de l'Europe (ARPA, NSF, National Science Foundation
and Technology Center, Commission de la Communaute
Europeenne Projet Esprit).
Plutot que d'adopter comme standard un seul produit
existant, le forum a decide de reunir les meilleurs
aspects d'un certain nombre de systemes a passage de
messages. MPI se trouve ainsi etre la synthese de
produits tels que : NX/2 d'Intel, Express, nCUBE's Vertex,
p4, PARMACS, Zipcode, PVM, Chimp, Chameleon, PICL,
ainsi que des travaux realises au centre de recherche
IBM T.J. Watson.
Exprime clairement, le but de MPI est de developper
un standard, unanimement utilise, pour l'ecriture
d'applications basees sur les techniques a passage
de messages.
PLATEFORME ET UTILISATEURS CONCERNES
PAR LE STANDARD MPI
MPI s'adresse aux developpeurs utilisant les langages
C et Fortran desireux de developper des applications
paralleles portables a l'aide des techniques de passage
de messages. Les developpeurs concernes sont soit des
programmeurs d'applications individuelles, soit des
concepteurs de logiciels de haut niveau fonctionnant
sur des ordinateurs paralleles ou des concepteurs
d'environnement et d'outils de programmation.
Les applications exprimees a l'aide du standard MPI
s'adaptent sur des architectures multi-processeurs
a memoire distribuee et a memoire partagee, sur des
reseaux locaux (LAN) de stations de travail ainsi que
sur une architecture combinant les deux precedents.
L'interface MPI est adaptee au modele d'execution
MIMD, et a ses sous-categories SPMD et MPMD.
Bien que les processus legers ne soient pas explicitement
supportes par MPI, l'interface a ete elaboree de
telle sorte qu'elle ne nuise pas a leur utilisation.
"Syntheses informatiques CNAM" Editions HERMES
Calcul cooperant par passage de messages
ISBN 2-86601-513-4





20140723 : L'INVENTAIRE DES SAVOIRS
35 volumes dont 13 de planches, 78000 articles sans compter
ceux publies dans les supplements, 140 collaborateurs
identifies et bien d'autres restes anonymes, une vingtaine
d'annees de travail, ces quelques chiffres suffisent a
prendre la mesure de l'immense entreprise qu'a ete la
realisation de la Grande Encyclopedie.
A sa tete, deux philosophes, homme de lettres et savant
celebres : Denis Diderot et Jean D'Alembert. Le deuxieme
lachera en cours de route, laissant le premier aux affres
d'un "travail de galerien".
La nature de l'oeuvre tient dans son titre : Dictionnaire
raisonne des sciences, des arts et des metiers, rien d'autre
que l'inventaire complet des connaissances humaines au
milieu du XVIIIeme siecle. De la theologie aux sciences,
de la metallurgie a la fabrication des bouchons, de
l'agriculture a l'economie de fermage, il n'est aucune
manifestation de la raison ou du travail humains qui
n'y soit presente.
L'idee d'une telle somme n'est certes pas nouvelle.
Cela fait un siecle qu'elle habite les esprits
progressistes, particulierement en Angleterre. Bacon,
le penseur de la science experimentale et utile a la
societe, en a pose les bases. C'est d'ailleurs lui qui
inspire la charte inaugurale du projet francais : la
partition de l'entendement humain en trois facultes -
la memoire, ou faculte de l'homme a observer et accumuler
des faits; la raison, ou faculte de les comparer et de
les abstraire; enfin l'imagination. En outre, de tels
ouvrages, mais de moindre volume, ont, au debut du
siecle, vu le jour en Angleterre.
On aurait cependant tort d'assimiler l'oeuvre de Diderot
et de D'Alembert a la simple reproduction d'un programme
tout trace outre-Manche. La Grande Encyclopedie est en
effet specifique : non seulement par sa taille, mais
par son ambition philosophique. L'ouvrage sera a la fois
une mise a jour et une mise au grand jour. Mise a jour
des connaissances scientifiques, dans leurs formes les
plus avancees, en mathematiques, en physique, en histoire
naturelle; mais aussi mise au grand jour des debats
que ces sciences suscitent, des breches qu'elles ouvrent
dans les verites etablies, et de l'immense variete
des procedes techniques, secrets ancestraux et soigneusement
proteges par chaque corporation.
Cette mise en "Lumieres" se presente ainsi comme un
engagement : contre l'obscurantisme et l'arbitraire;
pour la Raison et la condition de son exercice : la liberte.
L'entreprise se heurtera donc a la censure. Loin de
l'hypothequer, ces demeles participeront plutot a son
succes.
Car; censure ou non, l'Encyclopedie avait d'ores et
deja son "marche" : l'elite issue d'institutions
d'enseignement qui, depuis des decennies, avaient
entrouvert leurs portes aux nouveaux savoirs, et seme,
par la meme, les germes d'une curiosite critique.
Or, cette elite, loin d'etre en marge de la societe,
constituait le corps technique de l'Etat monarchique.
Cela faisait belle lurette que, dans leurs cercles
parisiens ou provinciaux, ces hommes cultives discutaient
librement de science ou de philosophie, belle lurette
qu'ils avaient fait leurs les valeurs de la raison
et du progres au service de l'Etat.
Repondant pleinement a leurs attentes intellectuelles
et pratiques, la Grande Encyclopedie devint logiquement
l'un des plus grands succes d'edition du Siecle des
lumieres.
(extrait des Cahiers de Science et Vie).





20140722 : ON MET LA POSTCOMBUSTION,
ON PREND 9G AVEC LES SUP/SPE AERO
AUCUN HOMME NE PEUT ECRIRE SEUL
GEOGEBRA A LUI TOUT SEUL EN UN
TEMPS RAISONNABLE...
MAIS ON PEUT REECRIRE MODULOG :
C'EST UN PROJET UN JOUR PEUT ETRE.
MODULOG = ensemble de bibliotheques de calcul multi-precision.
const
precision=30;
precision2=60;
base=100;
errari=160
type
entier=array[1..precision] of integer;
MAINTENANT ON REECRIT TOUTES
LES OPERATIONS DE BASE POUR
TRANSFORMER NOTRE PC EN
SUPERCALCULATEUR GRACE A MODULOG
procedure addentier
procedure subentier
function compentier // comparaison de deux entiers
function indicemax
procedure mulentier
procedure conventier (int->entier)
function lgrentier ("longueur" d'un entier)
procedure ecrireentier // affichage d'un entier
procedure diventierparint // division d'un entier par un integer
MODULES QUI COMPOSENT MODULOG:
. ENTREES.LIB : Herve LEHNING, 13 rue Lettelier 75015
. ARI.LIB
. ARI2.LIB
. MATHS.LIB : Robert ROLLAND
. SYNTAXE.LIB : analyseur syntaxique, Robert ROLLAND
. EVAL.LIB : module d'evaluation, Robert ROLLAND
Robert ROLLAND : Faculte des sciences de Luminy
70 Route Leon Lachamp 13009 Marseille
. COMPLEXE.LIB : Denis MONASSE, Lycee Louis Le Grand, Paris
. PREMIER.LIB
. POLYN.LIB
. BEZOUT.LIB
. TEMPS.LIB : Robert ROLLAND
. GRAPHICS.LIB : Robert ROLLAND et Rene SMADJA





20140721 : "COMPILATEURS AVEC C++" de Jacques MENU
chez Addison-Wesley France
ISBN 2-87908-092-4
3.Terminologie
Syntaxe et semantique, notion de sur-langage
Interpretation et compilation
Empilement de machines informatiques
Code et donnees, compilation incrementale
Analyse et synthese, passes de compilation
Ordre d'evaluation et notation postfixee
Algorithmes de Markov
Le langage de Markovski
Un analyseur Markovski
Un interprete Markovski
Un compilateur de Markovski vers Pascal
Librairie de support d'execution pour Markovski
Un compilateur de Markovski vers C++
Compilation separee, compilation independante
Autointerpretation et autocompilation
Generateurs de compilateurs
4.Grammaires formelles
Notion de grammaire
Notations condensees
Derivation et reduction
Arbres de derivation
Langage engendre par une grammaire
Grammaires ambigues
Productions recursives
Classification de Chomsky
Grammaires du type 3
Grammaires du type 2
Transformations de grammaires
Suppression de la recursion a gauche
Grammaires d'operateurs
Aspects theoriques
Une grammaire du langage de Markovski
5.Analyse lexicale
Niveau lexical et niveau syntaxique
Lecture et consommation de caracteres
Aspects lexicaux des langages
Algorithme d'analyse d'expressions regulieres
Lecture des caracteres
Analyse lexicale predictive de Formula
Analyse des constantes numeriques
Gestion des mots cles reserves
Analyse des commentaires
Analyse des chaines de caracteres
Analyse lexicale Formula
7.Analyse syntaxique
Le besoin d'algorithmes d'analyse
Analyse ascendante et analyse descendante
Les trois methodes predictives principales
Descente recursive
Grammaires LL(1)
Problemes des notions engendrant le vide
Recursion a gauche, ambiguite et type LL(1)
Une grammaire LL(1) de Formula
Une descente recursive pour Formula
Comportement en cas d'erreurs syntaxiques
Rattrapage d'erreurs syntaxiques
Methode de priorites d'operateurs
La methode LR
Positions et etats d'analyse LR
Transitions LR
Conduite de l'analyse LR
Conflits LR
Le besoin de methodes plus puissantes que SLR(1)
Construction des tables pour les methodes LR(1)
Algorithme d'analyse LR(1)
Exemples d'analyse par la methode LR
Comparaison entre grammaires LL(1) et LR(1)
Recursion a droite dans les methodes LR(1)
8.Analyse semantique
Identite de types
Collecte d'informations semantiques
Forme syntaxique et semantique associee
Limite entre syntaxe et semantique
Semantique de Formula
Inference de type Formula
Description des types
Description des constantes autodefinies
Description des identificateurs
Description des niveaux de declarations
Structure de la table des symboles
Exemple de table des symboles
Point de declaration d'un identificateur
Construction ou traversee de la table des symboles
Graphes semantiques
Exemple de graphes semantiques non construits
Graphes semantiques et forme postfixee
Analyse semantique de Formula
Description des appels a Formula...
...


LE MICROCODE DES PROCESSEURS CISC
Une instruction simple peut etre directement executee
par le processeur car elle dispose de circuits elec-
troniques specifiques, etablis a demeure dans le
microprocesseur, par exemple un additionneur.
Ce dernier constitue la pierre angulaire de toute
unite arithmetique et logique d'un processeur.
En revanche, l'execution d'instructions complexes
ne fait plus appel a des circuits cables car il
faudrait multiplier leur nombre et le processeur
deviendrait vite impossible a fabriquer dans l'etat
actuel de la technique. Une autre solution a donc
ete adoptee.
L'ensemble des instructions complexes est
fractionnee en un nombre restreint de "micro-
instructions". Il s'agit d'atomes insecables
constituant la matiere des instructions.
En organisant ces micro-instructions a la
demande, on peut recreer chacune des instructions
complexes.
Ces micro-instructions sont rassemblees et
enregistrees dans le silicium du processeur
sous forme d'un microcode. Autour de ce microcode
doivent etre installes des circuits logique
charges d'organiser l'execution sequentielle
des micro-instructions, en tenant bien evidemment
compte des ordres transmis par l'unite d'instruction.
C'est ce concept qui a ete applique aux processeurs
CISC, sigle provenant de l'expression
Complex Instruction Set Computer, soit Ordinateur
à jeu complexe d'instructions. Il procure a la
fois des avantages et des inconvenients.
Avantages :
Le premier avantage, c'est qu'en utilisant des
instructions complexes microcodees, le programme
d'application est plus court; il comporte moins
d'instructions puisque certaines d'entre elles
sont capables d'en faire plus. Si le programme
est plus court, il occupe aussi moins de memoire.
Inconvenients:
Les instructions complexes imposent une logistique
contraignante au microprocesseur. Par exemple,
les temps d'execution different d'une instruction
a l'autre; il faudra donc systematiquement les
verifier. D'autre part, toute la vitesse d'un
processeur doit s'aligner sur les temps d'exe-
cution des instructions les plus complexes, les
plus chronophages.
Statistiquement, on constate d'ailleurs que ces
instructions complexes sont beaucoup moins
utilisees que les instructions simples. Elles
penalisent ainsi l'ensemble du systeme.
D'autre part, le microcode utilise une surface
non negligeable de silicium. Or, en premiere
approche, le prix de revient d'un processeur
depend de la surface de silicium occupee.
Y contribue le fait que, plus la surface
s'accroit, plus les risques de defauts de
surface apparaissant sur une puce augmentent
et plus les rendements en production baissent.
Si l'on pouvait supprimer ce microcode, on
realiserait une economie substantielle.
Extrait de Dunod : Microprocesseur PowerPC.
Henri LILEN, Rene-Veran HONORAT
ISBN 2 10 002464 7


SUPPRESSION DU MICROCODE AVEC LE RISC
Si l'on se resout a se passer des instructions
complexes, on pourra du meme coup eliminer
le micro-code et economiser de la surface de
silicium. C'est ce qui a ete fait avec le RISC,
ces lettres provenant de l'expression
Reduced Instruction Set Computer, soit Ordinateur
a jeu reduit d'instructions.
Par quoi les remplacer si l'on en a reellement
besoin ? Deux solutions sont concevables :
. Une instruction complexe est remplacee par
une serie d'instructions simples executant les
memes fonctions. Si l'on developpe un programme
en langage evolue, il faudra que le compilateur
sur lequel repose tout le poids du programme
soit particulierement efficace. L'accent est
donc mis sur la realisation d'excellents
compilateurs.
. Si, en depit de tout, il faut conserver
quelques instructions complexes, on ne va
plus les microcoder mais les cabler dans
le silicium. Cela signifie que l'on va ajouter,
dans le silicium, les quelques circuits
specifiques organises a demeure et capables
d'executer ces instructions complexes; il ne
s'agit donc plus d'une microprogrammation.
Certes, ces circuits occupent de la surface
de silicium mais bien moins qu'un microcode.
D'autre part, l'execution d'une instruction
cablee est beaucoup plus rapide que l'execution
de la meme instruction microprogrammee.
La suppression du microprogramme et le cablage
de toutes les instructions offre un autre
avantage : chaque instruction peut etre
executee en une seule periode d'horloge, ce
qui constituait un autre des objectifs recherches.


LA LONGUE MARCHE VERS LE RISC
Le concept de RISC, Reduced Instruction Set
Computer, applique ainsi cette idee :
"faire les choses simplement et vite".
Les premiers travaux sur le RISC sont dus a
IBM et remontent a 1975. Cela se passe au centre
de recherches Thomas J. Watson, pres de New-York.
Ils sont menes sous la direction de John Cocke,
un "Fellow" IBM, considere aujourd'hui comme
le pere du RISC.
John Cocke commence par analyser le fonctionnement
d'un gros systeme IBM de l'epoque, un IBM 370.
Il etudie la distribution statistique de l'utilisation
des instructions et constate qu'en realite, seul
un petit nombre d'instructions simples telles
que LOAD, STORE, ADD, SUBSTRACT, BRANCH sont
massivement executees. Les autres instructions,
en particulier celles executant des fonctions
bien plus complexes, n'interviennent que rarement.
Ces premiers resultats le mettent sur la voie
d'une machine simplifiee, n'ayant recours qu'aux
instructions les plus courantes mais fonctionnant
alors plus rapidement, sans surcharge inutile.
La contrepartie, c'est qu'il faut desormais
emuler les anciennes instructions complexes par
logiciel, ce qui allonge le programme et son code,
mais le bilan global fait largement pencher en
faveur du jeu reduit d'instructions simples.
A l'epoque, le frein etait plutot represente par
le prix a payer pour les memoires chargees de
stocker le code du programme. Depuis, cet obstacle
a saute, ce qui explique en partie pourquoi le
RISC a mis si longtemps a s'imposer.
Tout en etudiant des jeux simples d'instructions
de bas niveau, John Cocke s'interesse egalement
a des compilateurs sophistiques engendrant un
code suffisamment efficace pour eliminer le
microcodage. En 1979, il realise un prototype,
l'ordinateur RISC modele 801.
Developpant ces idees, David Patterson, alors
etudiant a l'Universite de Berkeley, Californie,
puis professeur, emploie pour la premiere fois
ce terme "RISC". Il reconnait que l'introduction
d'un microcode dans le silicium du processeur
constitue une surcharge ralentissant considerablement
la vitesse d'execution. D'autre part, il constate
que les compilateurs souffrent de l'existence
d'instructions complexes.
Chez IBM, le 801 fait la preuve qu'il est possible
a la fois de reduire le jeu d'instructions et de
creer des compilateurs efficaces. Le fonctionnement
parallele en pipeline peut etre ameliore et l'objectif
d'une instruction par cycle d'horloge devient realisable.
Toutefois sur ce concept brut de RISC viennent se
greffer de nouvelles idees telles que :
. les instructions doivent rester d'une longueur
fixe identique
. les modes d'adressage doivent se simplifier via
une architecture de registre a registre et des
acces memoire obtenus avec des instruction Load et
Store exclusivement
. il faut multiplier le nombre de registres en
organisation orthogonale
. le format des instructions doit etre sur trois operandes
. il convient d'utiliser des memoires tampon ou "caches"
Il en resulte des architectures plus depouillees,
demandant moins de transistors et partant, exigeant moins
de surface de silicium, ce qui est favorable en cascade
aux bons rendements en production et à la baisse des
prix. La simplification des puces a pour autre resultat
la possibilite d'accroitre plus facilement les frequences
d'horloge.
Pendant de nombreuses annees, ces concepts susciteront
d'innombrables discussions portant, en particulier,
sur l'architecture superscalaire des processeurs.
Toutefois, les realisations vont se multiplier.
Des machines appelees "RT PC" (modeles 6150) sont ainsi
produites et commercialisees par IBM sur ces principes
en 1986; elles etaient baties autour du microprocesseur
ROMP avec 118 instructions et cycle de 170 ns mais elles
se revelerent desappointantes.
En fait, ce sont les stations de travail RS/6000 qui
prenderont la releve avec succes. Stations RISC tournant
essentiellement sous AIX, la version IBM d'Unix, elles
appliquent une architecture dite POWER en version I
d'abord, puis 2 en attendant une future version 3 qui
devrait deriver du PowerPC.
Chez Hewlett-Packard, Joel Birnbaum, un transfuge de
l'equipe RISC de IBM qui travailla avec John Cocke,
fera egalement oeuvre de pionnier en developpant des
machines RISC, en serie 3000 pour commencer.
Parmi les tout premiers microprocesseurs RISC commercialises,
on peut citer le Clipper C100 de Fairchild, le 88000
de Motorola, l'ARM du britannique Acorn, le Sparc de Sun,
l'AM 29000 de AMD, les Transputer de Inmos repris par
Thomson, les series Mips Computer, etc, jusqu'a cet
aboutissement qu'est la famille PowerPC.
Il est interessant de noter que les PowerPC derivent
directement de l'architecture dite "Power" appliquees
aux stations de travail IBM RS/6000. Ils s'en demarquent
toutefois par des progres notables. De ce fait,
les PowerPC sont fondamentalement des systemes a
architectures 64 bits. Le premier microprocesseur de
la famille, le 601, en constitue une variante a bus
de donnees 64 bits, et bus d'adresse 32 bits, ce qui
permet d'adresser 4Go de memoire physique.





20140720 : LES STRUCTURES ARBORESCENTES
Un arbre est un ensemble de noeuds, organises de facon
hierarchique, a partir d'un noeud distingue, appele racine.
La structure d'arbre est l'une des plus importante et des
plus specifiques de l'informatique : par exemple, c'est sous
forme d'arbre que sont organises les fichiers dans des systemes
d'exploitation tels que UNIX ou MULTICS; c'est aussi sous
forme d'arbres que sont representes les programmes traites
par un compilateur...
Un propriete intrinseque de la structure d'arbre est la
recursivite, et les definitions des caracteristiques des
arbres, aussi bien que les algorithmes qui manipulent des
arbres s'ecrivent tres naturellement de maniere recursive.


LES AUTOMATES D'ETATS FINIS
Une technique fort utile dans un grand nombre d'applications
informatiques est celle des automates d'etats finis.
Il arrive souvent ques les algorithmes aient a reagir, soit
a la presence d'elements, soit a l'arrivee d'evenements.
C'est notamment le cas des compilateurs ou interpreteurs,
qui doivent verifier qu'une suite de donnees de caracteres
est autorisee. Il en va de meme des gestionnaires de fenetres,
qui sont sans cesse en attente de l'arrivee d'evenements:
saisie de caracteres au clavier, action sur des boutons, etc.
On peut evidemment verifier que tout se passe bien (que les
caracteres presents correspondent aux caracteres attendus,
que les actions engagees font partie des actions possibles),
a l'aide de cascades de Si... Alors... L'algorithme resultat
est pratiquement illisible et, de surcroit, trop lent a
reagir.
Une autre solution, beaucoup plus elegante, et largement
plus efficace, consiste a preparer un "chemin" autorise,
et a suivre tranquillement ce chemin tant que tout va bien.
Toute tentative d'ecart de ce "chemin" nous signalera
une deviance, donc une erreur ou une innovation de
l'utilisateur.





20140719 : WHAT IS POSIX ?
POSIX is a set of standards that apply to OSs, utilities,
and programming languages. The standards are wide ranging
and cover everything from "standard" function calls and
what they should return, to the capabilities and features
of the OS on which those functions rely.
Let's look briefly at what parts of the specification
the BeOS does support :
. signals : full signal support, including SIGHUP and
SIGWINCH. There is also support for interrupts and alarms
within the signal system.
. terminals : support for the termios system, including
control characters.
. variable arguments : use of the stdarg.h header file.
. file system control : chmod, chown, and so on.
. file control : use of the standard fcntl and other
utilities. File locking, however, is not supported by
fcntl.
. directory entries : opendir and related functions from
the dirent set.
. nonlocal jumps : both longjmp and setjmp, with support
for signal-based jumps.





20140717 : LE TRANSLATION KIT PERMET D'IMPORTER/EXPORTER
DIFFERENTS FORMATS D'IMAGES ET DE SONS A DISPOSITION DU
PROGRAMMEUR
TranslatorFormats.h
/* some predefined data format type codes */
enum{
/* bitmap formats (B_TRANSLATOR_BITMAP) */
B_GIF_FORMAT='GIF',
B_JPEG_FORMAT='JPEG',
B_PNG_FORMAT='PNG',
B_PPM_FORMAT='PPM',
B_TGA_FORMAT='TGA',
B_BMP_FORMAT='BMP',
B_TIFF_FORMAT='TIFF',

/* line drawing formats (B_TRANSLATOR_PICTURE) */
B_DXF_FORMAT='DXF',
B_EPS_FORMAT='EPS',
B_PICT_FORMAT='PICT' /* MacOS PICT file */

/* sound file formats (B_TRANSLATOR_SOUND) */
B_WAV_FORMAT = 'WAV',
B_AIFF_FORMAT = 'AIFF',
B_CD_FORMAT = 'CD', /* 44 kHz, stereo, 16bit,linear,big-endian */
B_AU_FORMAT = 'AU' /* Sun ulaw */





20140716 : LE BEOS5PRO A UN SUPER DEBOGUEUR POUR LE C++.
Avec les projets de type BeSTL dans le BeIDE
qui inclut la bibliotheque x86\libstc++.r4.so
on peut utiliser un debogueur tres performant
pour faire de la programmation en mode texte.
BeSTL = stationery used to create an application
that includes the C++ standard libraries (including
STL and the basic iostream functions).
Il faut se rappeller qu'au debut des versions
Intel de BeOS, le BeIDE n'avait pas de debogueur.
Maintenant, on a tout ce qu'il faut et on n'a
pas a utiliser gdb en ligne de commande ce qui
est tres decourageant mais bon YOU HAVE NOTHING
WITHOUT PAIN.
Il va falloir que je sorte le STROUSTRUP sous peu
pour me faire un complement de comprehension a
l'usage des classes du BeOS5.
Beaucoup de lignes de code a saisir pour faire des
exemples, je suis un peu decourage car mes derniers
developpements datent de 2001... Mais bon il faut
aimer le RETROCOMPUTING. La difficulte est la et
dans 20 ans ce sera toujours la meme difficulte.
En fait, il ne faudrait pas vieillir.
Exemple : la decouverte de la relativite par Einstein
qui date du debut 1900 mais que tres peu de gens
comprennent vraiment meme aujourd'hui.





20140714 : LA LIBERTE N'EST PAS A VENDRE.
En l'honneur de tous ceux qui se sont battus.
Pour que nos enfants fassent leurs choix librement.
Ce blog est un element perturbateur et sera puni
de trouble a l'ordre etabli a savoir Microsoft.
Bien sur c'est une blague, on a tous le droit de
s'exprimer librement sur Internet. :-)))





20140712 : C'EST PARTI MON KIKI
Je travaille sur mon portable avec BeOS5Pro car c'est
les vacances. C'est parti pour faire tourner les
exemples de plusieurs bouquins en C et C++.
En terme de temps je fais aussi vite que je peux
sachant que le but est d'utiliser les Classes du
BeOS5Pro pour utiliser toutes les briques logicielles
du MediaOS. Pourquoi les classes du BeOS ? C'est
parce qu'elles sont pour moi les plus simples.
Vous me direz, il triche car il utilise des exemples
mais il faut savoir que sous VisualC++6 on a des
assistants qui generent deja pas mal de code.
Comme le BeIDE qui s'appelle CodeWarrior n'a pas
d'assistant on ne pourra pas me reprocher d'utiliser
les exemples de programmations livres avec le
BeIDE.
Par exemple VisualC++6 Introductory Edition qui est
gratuit vous propose de faire tout le code de
demarrage sachant que vous souhaitez faire une
application SDI ou MDI (Single Document Interface)
MDI (Multiple Document Interface).





20140710 : AUTOFORMATION
Ca y est je reprends mes marques en programmant les
exemples du livre "Teach yourself C". Ca faisait depuis
2001 que je n'avais pas mis les mains dans le code
source du Morpion. Que dire si ce n'est que je regrette
de ne pas avoir fait cela en 2001. J'ai plein de projets
de programmation en tete mais il faut etre pragmatique
et faire ses gammes. Apres je ferai un livre de programmation
systeme en C toujours avec le Morpion. Ensuite on passera
au C++ et puis on abordera les Classes du BeOS5Pro ou Haiku-OS.
Ca veut dire que je vais faire plein d'exemples en mode
texte pendant un an pour couvrir la programmation en C,
programmation systeme en C, programmation C++... sans me
poser de questions. Une fois les gammes on passera aux Classes.
Chez Microsoft les classes s'appellent les Foundation Classes.
Beaucoup d'incomprehensions dans ma tete, pourquoi je suis
seul sur Internet en BeOS depuis 2001 - je suis tout seul
et pourquoi je n'ai pas continue le Morpion...
J'ai etudie le PHP/MySQL et la compilation en Flex et Bison
ainsi qu'en CodeWorker...
Mais bon c'est promis je suis de retour et cette fois
on ne s'arrete pas, je sais que je suis seul, je ne sais
pas si des personnes utilisent mes codes sources donc je
sais que je ne peux pas en vivre... c'est pas grave, c'est
mon passe temps, ma passion... Malheureusement je ne me
ferai pas d'amis avec... Je le fais pour le fun, pour moi.





20140708 : LE TOP DU MULTIMEDIA = BRYCE (LE LOGICIEL)
OU LES PAYSAGES ARTIFICIELS A BASE DE FRACTALES
On peut faire des montagnes artificielles avec Bryce.
On fera le rapprochement avec le logo de BeVouac
dont le sommet etait une montagne fractale en 3D.


UN MOTEUR DE RECHERCHE GRATUIT = GLIMPSE OU WEBGLIMPSE
Et oui madame le panier de la menagere peut contenir
un moteur de recherche comme AltaVista, Google ou Bing
et ce gratuitement.





20140706 : LEX ET YACC C'EST QUOI
Tout d'abord il faut savoir que Lex et Yacc sont des outils
qui sont proprietaires et qui viennent d'UNIX.
Lex reecrit en logiciels libres s'appelle flex.
Yacc reecrit en logiciels libres s'appelle bison.
La programmation d'un projet s'appelle un parser
(c'est votre compilateur).
flex_et_bison generent votre parser en langage C.
Vous pouvez alors l'integrer dans votre programme C ou...
La premiere partie consiste a decouper un script
en tokens - jetons - mots.
La deuxieme partie consiste a definir des regles
de comportement suivant la disposition des tokens.
Si vous devez gerer des imbrications de blocs
de code entre eux, empilez les tokens.
On obtient alors des piles de piles de piles...
De memoire : celui qui a invente YACC est
Stephen JOHNSON qui travaille pour MathLab je crois
(sous toute reserve).


JE RAPPELLE QUE BEOS5PRO UTILISE LES OUTILS GNU
Le compilateur BeOS etait a l'origine CodeWarrior.
Mais depuis la version Release 4 BeOS utilise GCC.
Tous les outils shell de BeOS sont des outils GNU.
Le format binaire des executables n'est pas ELF comme
sous Linux car on ne peut pas faire tourner un programme
compile BeOS directement dans Linux.
GCC c'est quoi ? C'est un compilateur C a l'origine.
C'est un universitaire (RMS) Richard Matthew STALLMAN qui
l'a developpe gratuitement pour tout le monde.
Le langage C a ete cree par KERNIGHAN et RITCHIE aux
laboratoires Bell Labs (telephonie) a la suite du
langage B.
Le but du langage C etait de faire un langage facilement
multiplateforme. C'est pourquoi les noyaux des systemes
d'exploitation sont principalement ecrits en C.
La programmation d'un noyau en assembleur c'est bien
mais c'est specifique a un microprocesseur.
BeOS a une API proprietaire pour faire des programmes
mais c'est l'une des plus simples.
BeOS a un micro-noyau proprietaire avec tres peu
d'assembleur.
RAPPEL : Richard Matthew STALLMAN est le Dieu de
l'informatique sans qui on n'aurait aucun outil...
(c'est le pere de la Free Software Foundation)
(vision personnelle mais je sais que j'ai raison)


ASSEMBLY CODE FOR DUMMIES.
L'ASSEMBLEUR POUR LES NULS : NE PARTEZ PAS !!!
Petite introduction :
sur 8086 on a les registres AX, BX, CX, DX sur 16 bits.
sur 80386 et Pentium on a les registres
EAX, EBX, ECX et EDX ou E signifie Enhanced pour Etendu
qui signifie 32 bits.
sur PentiumMMX on a en plus MM1 a MM7 sur 64 bits.
Petite comparaison :
sur PowerPC601 : on a R1 a R30 donc 30 registres.
Attention : chaque registre ne fonctionne pas comme
un accumulateur avec un usage universel des instructions
en assembleur. Certains registres sont dedies.
Vous en saurez un peu plus bientot...


MODIFIER LE CODE SOURCE MORPION POUR
APPRENDRE LE C++ AVEC DES EXEMPLES EN MODE TEXTE
EXPLOITANT LE DEBOGUEUR DU BEIDE.
Si vous programmez du C++ en mode texte avec le
BeIDE (Integrated Development Environment) qui
n'utilise pas une interface graphique alors vous
ne pouvez pas mettre de petites croix rouges du
debogueur sur le code source comme points d'arrets.
Avec le debogueur du BeIDE on peut voir les
valeurs des pointeurs, des variables... et
on peut voir les effets des cast :
un cast en C consiste a forcer le type d'une
variable. Je dois reviser car si je passe de
float a integer il y a perte de precision tandis
que de integer a float ca passe.
On aura compris qu'il faut etudier les compilateurs
pour bien coder. Et pour bien comprendre les
compilateurs il faut regarder les octets des
executables qu'ils generent donc faire de
l'assembleur - ASSEMBLEUR QUE PLUS PERSONNE
NE FAIT = GROS PARADOXE !!!
Rassurez vous votre humble serviteur va vous
initier a l'assembleur Pentium sous CodeWarriorBeOS5Pro
et PentiumMMX sous CodeWarriorPro5 Windows2000Pro.
Nous allons donc faire nos gammes en C/C++ avec
des exemples en mode texte comme pour le programme
Morpion telechargeable gratuitement plus haut.
C'est toujours bien d'avoir une fenetre de log
ou de trace d'ouverte pour afficher ce que le
programme fait pendant que les graphiques ou
le jeu video a lieu dans une autre fenetre.
C'est tres utile pour la mise au point des programmes.
Le programme Morpion permet meme de saisir des
commandes.
Je vous en prie...


SAVEZ VOUS PLANTER LES SERVEURS
A LA MODE, A LA MODE
SAVEZ VOUS PLANTER LES APPLICATIONS
A LA MODE DE CHEZ NOUS.
C'est enfantin comme une contine, mais c'est important de
faire des statistiques pour calculer la fiabilite d'une machine.
On appelle cela faire des CALCULS DE DISPONIBILITE.
Par exemple on pourra dire que le serveur a fonctionne
a 99,98% sur une annee.
Le but etant de calculer le taux de disponibilite d'une
machine composee d'elements en serie et en parallele.
Pour cela on a besoin de calculer le :
. MTBF : Mean Time Before Failure
. MTTR : Mean Time To Repair
On trouve tout maintenant sur Internet mais j'aimerais
faire un petit topo la dessus aussi.


LE BINAIRE REFLECHI :
OU REFLECHIR A FAIRE SON PROPRE MICRO
Pendant le lycee j'avais etudie l'ampiope ou
amplificateur operationnel, les schemas RLC...
J'avais donc tout naturellement achete un kit d'electronique
dans un magasin Tandy de Bordeaux pendant mon I.U.T.
permettant de construire des radios et faire de
l'electronique TTL et DTL.
TTL : Transistor to Transistor Logic.
DTL : Diode to Transistor Logic.
Il faut savoir que l'AppleII est a l'origine entierement
en technologie TTL c'est a dire qu'il n'y a pas
d'ASICs : Application Specific Integrated Circuit.
On peut donc reparer un AppleII des origines avec des
composants electroniques du commerce.
Un ASIC est un composant sur mesures et donc une propriete
privee qu'on ne peut pas trouver dans le commerce.
Ne comprenant pas tous les montages de mon kit
d'electronique je me suis inscrit aux cours du soir
du CNAM en electronique le samedi matin en plus des
cours du DEST Informatique d'entreprise pendant la
semaine.
Pendant 6 mois j'ai suivi les cours d'electronique
numerique dont je ferai un petit rappel en reprenant
mes notes a savoir :
. tableaux de Karnaugh : pour simplifier des expressions
booleennes graphiquement, pour cela il faut connaitre
le binaire reflechi ou code de Gray.
. les theoremes de De Morgan
. les compteurs
. les registres a decalage
. les multiplexeurs/demultiplexeurs
...
on peut tout trouver aujourd'hui sur Internet mais je
me ferai un plaisir de faire un petit rappel car
les jeunes informaticiens d'aujourd'hui ne connaissent
pas les tableaux de Karnaugh.
L'important etant d'arriver a faire son propre
micro-ordinateur.





20140705 : BEOS5PRO -> SMALL IS BEAUTIFUL
JE REPRENDS MES MARQUES SUR BEOS5PRO
Vous vous demandez pourquoi le BeOS5Pro ?
Tout simplement parce que c'est selon moi
le meilleur rapport poids/puissance ou
disons difficulte/puissance (comme pour un
avion de chasse).
Les livres pour apprendre a programmer X-Window
coutent tres cher et il en faut plusieurs.
Le BeOS5Pro est livre d'entree avec toute la
documentation necessaire pour developper.
Maintenant la question est pourquoi developper
sur un petit systeme d'exploitation que personne
n'installe plus. C'est parce qu'il est simple
a programmer et a apprendre. Il est pedagogique.
Et en plus, tout ce qui a ete fait sur BeOS5Pro
peut etre recompile sous Haiku-OS qui est la
suite en libre de BeOS sans rien toucher au source.
Tu es un baratineur et pourquoi n'as-tu rien
fait comme application commerciale ?
Une des grandes raisons a ete le fait que j'etais
seul au monde. On n'a pas reussi a fonder des
groupes comme pour la musique.
Certains ont accuse BeOS de piocher dans le
code source de Linux (notamment pour les drivers)
et de se faire de l'argent de facon immorale.
Je dirais que le succes de Linux et des developpements
Web ont tue le BeOS. Linux a tue l'ecosysteme des
shareware.
C'est un mal pour un bien.
Maintenant tu programmes c'est pour te faire
de l'argent, tu veux nous ranconner.
Non je programme par plaisir, pour voir jusqu'ou
je peux aller dans la comprehension d'un systeme
d'exploitation et de traitements de l'information.
"Are we supposed to win this time ?
Yes this time it's up to you."





20140704 : EXPLICATION DES CHAMPS OFFSET D UNE IMAGE
_____12345678901234567890_____1234_____1234_
[20][NOM_IMAGE___________][4][1024][4][0768]
*A*************************B********C*******
Voici notre fichier binaire image dans un editeur texte.
Premier champs OFFSET (decalage) :
A : indique que la longueur de 20 caracteres qui
suivent sont le nom de l'image.
B : indique que la longueur de 4 caracteres qui
suivent est la largeur de l'image.
C : indique que la longueur de 4 caracteres qui
suivent est la hauteur de l'image.
Constat : si vous connaissez la position des champs
OFFSET du format de l'image alors vous pouvez recuperer
les valeurs des champs. Ici nous sommes dans un format
de fichier binaire nous ne trouvons donc pas de balises
comme en HTML pour delimiter les champs.
Conclusion : quelqu'un qui ne connait pas les champs
OFFSET et qui va disque editer le fichier va rendre
illisible la relecture du fichier par un logiciel.
Exemple :
_____12345678901234567890_____1234_____1234_
[20][COUCHE_DE_SOLEIL_AVEC_VUE_SUR_LA_MER]8] : CORROMPU
[20][COUCHE_DE_SOLEIL____][4][1024][4][0768] : LISIBLE
CONCLUSION : il faut payer pour obtenir la
documentation des formats de fichiers proprietaires.
Exemple de format de fichiers photos : FLASHPIX de John SCULLEY.
J'arrivais a disque editer des fichiers images avec AppleScript.
(regardez le code source HTML de cette page pour bien
reperer graphiquement les champs).
Avec Photoshop par exemple vous pouvez remplir des champs
de donnees d'une image JPEG pour connaitre son Auteur.


JE NE COMPRENDS PAS POURQUOI JE SUIS TOUT SEUL A CODER
Un petit coucou a PULKOMANDY (alias Adrien), ANARCHOS
et MMU_MAN du forum Haiku-OS (#haiku-fr) sur chat.freenode.net .
Il faut dire un grand merci a Adrien qui valide pleins de
tickets de bogues pour mettre au point Haiku-OS.
Donc on est 4 francais alors que Microsoft emploie au
minimum 10000 personnes...
"Il y a deux types de personnes dans ce monde :
ceux qui savent s'arreter a temps et ceux qui
n'y arrivent pas." HIGHLANDER (le film).
"Fall in love with technology,
Expect nothing in return" Bill GATES.
Bah nous c'est plutot AFTERBURNER des ZZTOP.
Il faut que je mette la post-combustion pour decoller pleins gaz.
Rassurez-vous j'ai tout ce qu'il faut pour faire des
programmes, des demos pour BeOS5Pro pour commencer
et puis aussi pour NeXTSTEP3.3.
Mon plan d'attaque va etre d'alterner assembleur/C/C++/ObjC.
ObjC = ObjectiveC.
Vous aurez des jeux et des demos faits par votre humble
serviteur mais je suis tout seul donc faudra pas s'attendre
a avoir des graphismes en 3D sortis de chez Pixar.
Ne me demandez pas des jeux PlayStation4 ou XBoxOne.
J'ai jadis quand je n'avais pas d'enfants a charge
programme jusqu'a minuit tous les soirs mais bon...
Bon la ca va j'ai aussi mon portable pour developper
n'importe ou, et il faut que je rentre en trance pour
ne faire plus qu'un avec mes listings.
THINK FIRST, PROGRAM LATER.
Pour ceux qui ne l'auraient pas devine, c'est avec le
cerveau que l'on concoit un programme. On le met sur
papier et quand on voit que tout marche sur papier alors
on va sur ordinateur et la on voit apparaitre des erreurs
ou des limitations auxquelles on n'avait pas pensees.
Et quand ca devient tres tres dur alors l'imprimante s'impose.
Et la on apprecie d'avoir les docs developpeur sur papier.
Bon vous allez me dire, il se prend pour qui celui-la
pour nous expliquer ce qu'il faut faire. Je ne fais que
vous expliquer ma demarche ainsi que mon experience vecue.


DIRECT_X, DIRECT_3D, DIRECT_SOUND
Les fabriquants de cartes graphiques pour PC sont multiples.
Les fabriquants doivent acheter le Kit de Developpement
de Pilotes (drivers) aupres de Microsoft.
Et Microsoft s'engage a ne pas divulguer les caracteristiques
et le fonctionnement des cartes graphiques aux linuxiens
qui font du reverse engineering (ingenierie inverse).
On appelle SDK un Software Development Kit.
Le double buffering de memoire video empeche le
clignotement de l'image lors du rafraichissement
de l'affichage - c'est le boulot de Microsoft.
La carte graphique affiche directement une zone memoire
a l'ecran en permanence en liens directs de facon
electronique. Si on trace un cercle aux coordonnees (x,y)
puis que l'on efface l'ecran (clignotement) et que
l'on trace le meme cercle aux coordonnees (x+1,y) alors
on voit bien que le cercle a bouge mais il y a eu
un clignotement sur tout l'ecran. La technique pour
eviter cela consiste a reserver une zone memoire de
la meme taille que la memoire ecran et de tracer le
cercle directement dans le double buffering (double
memoire graphique tampon). Attention : si en BASIC
vous avez l'instruction CIRCLE ou LINE ici on programme
en assembleur donc il faut faire un algorithme de
trace de lignes en assembleur (BRESENHAM) et avoir
des tables de sinus et cosinus pour tracer les lignes
mais aussi pour tracer le cercle. Ce qui n'est pas
trivial. Mais bon vous aurez compris qu'au dela des
lignes et des cercles il y a la gestion des sprites
ou lutins pour lesquels la technique est la meme.
A oui j'oubliais au lieu d'effacer l'ecran on recopie
la memoire graphique tampon qui a les nouveaux affichages
directement dans la memoire graphique qui est reliee
electroniquement a l'ecran.





20140702 : OBJECTIF : EXTRACTIONS PAO PERSONNALISEES
DEPUIS UNE BASE DE DONNEES VERS WEB OU PDF
OU QUARKXPRESS OU IN_DESIGN.
____Le but est d'avoir un petit langage avec des
conditions en francais pour decrire des extractions
de champs d'une base de donnees et d'envelopper
ces donnees de balises WEB ou PDF ou QuarkXPress ou InDesign.
Ce que je peux faire :
. un editeur a coloration syntaxique (comme le permet Qt)
(une couleur pour les champs de la base de donnees,
une couleur pour les conditions, une couleur pour les
fonctions...)
. un generateur de code C pour extraire les champs
voulus de la base de donnees
. un enveloppeur de champs de base de donnees avec
des balises a destination du WEB ou PDF ou QuarkXPress
ou InDesign en generant des fichiers texte...
____Informations : avec la base de donnees 4D on peut ecrire
des extensions au langage 4D pour ajouter ce que l'on veut.
On peut piloter QuarkXPress en achetant le kit de developpement
de ce dernier. Il faudrait programmer des AppleEvents
dans 4D pour piloter QuarkXPress. Attention : ceci etait
valable sous MacOS9 depuis tout a change...
On peut piloter Word et Excel en DDE (Dynamic Data Exchange)
sous Windows depuis PowerBuilder par exemple, ce que j'ai
deja fait.
____Ce que je vais faire, programmer en BeOS5Pro et NeXTSTEP3.3
car j'ai les livres en version papier. Rappelez vous
que lorsque ca devient tres dur a programmer, il faut
imprimer le code source. DDE peut etre remplace par
un calcul cooperant par passage de messages entre processus.
Je vais programmer mon propre traitement de texte avec
balises (gras, italique, souligne). Ce petit traitement
de texte sera pilote par communication entre deux
processus. Apres j'essaierai d'utiliser SQLlite ou
MySQL pour programmer des extractions en C.
Il est possible que je fasse tout sous Linux mais je
ne suis pas motive par X-Window alors je ferai peut
etre la programmation des interfaces en Java.
Je vous tiendrai informes des avancements :
KEEP IN TOUCH, comme disent les americains.
____Je peux aussi utiliser CodeWarriorPro5 sous
Windows2000Professionnel ou MacOS9 ainsi que
VisualC++6 - donc pas de soucis car Windows a fait
ses preuves ainsi que CodeWarrior, et j'ai les livres
la aussi. Question : pourquoi vouloir galerer sous BeOS5Pro
ou NeXTSTEP3.3 alors ?


SURVEILLE TON LANGAGE
Langage de 1ere generation : langage machine pur ou
programmation en saisissant des valeurs hexadecimales.
Langage de 2eme generation : macro-assembleur.
Langage de 3eme generation : langage C (suite du
langage B).
Langage de 4eme generation : SQL (Structured Query Language).
Un grand merci a Cedric LEMAIRE qui m'a montre que
ce que je cherchais a programmer relevait des DSL
soit Domain Specific Languages.
CodeWorker est dote d'un langage interprete et il
faut le faire fonctionner en parallele de son
programme - contrairement a Lex&Yacc ou Flex&Bison
qui generent du code source en C que l'on peut
recompiler dans son application.
Conseil : quand on a un petit langage avec des
imbrications de blocs de code source alors lors
de l'analyse descendante du code source global
il faut empiler les tokens ou jetons ou lexemes
pour chaque bloc : on a donc des piles de piles
dans le cas de deux implications et des piles de
piles de piles dans le cas de trois imbrications...
On est oblige d'avoir recours a une reservation
dynamique de la memoire via des piles - l'usage
de tableaux de taille fixe serait limitant et
en plus laisserait de la place vide en memoire.
Exemple de code source dont on fait une analyse
descendante :
if (i==1) then
{
___printf("imbrication numero 1\n");
___if (j==2) then
___{
______printf("imbrication numero 2\n");
______if (k==3) then
______{
________printf("imbrication numero 3\n");
______}
___}
}
Ce qui donne en memoire sans gerer les conditions :
PILE_PROFONDEUR_1=
1[
1[__printf("imbrication numero 1\n");
1]
2[
2___PILE_PROFONDEUR_2=
2___1[
2___1___[printf("imbrication numero 2\n");
2___1]
2___2[
2___2___PILE_PROFONDEUR_3=
2___2___1[
2___2___1___[printf("imbrication numero 3\n");
2___2___1]
2___2]
2]
Les piles sont des suites d'elements relies entre eux,
mais un des elements peut pointer sur le premier element
d'une nouvelle pile.
Ce qui au niveau des pointeurs donne les liens suivants :
PILE_NIVEAU_PROFONDEUR_1_________
II____________________
II====== PILE_NIVEAU_PROFONDEUR_2.1
II_______II___________
II_______II======PILE_NIVEAU_PROFONDEUR_3.1
II_______II___________
Concerto de SEMA GROUP permet d'analyser un code source
et d'offrir une vision du code source avec une profondeur
variable : dans notre cas il suffit simplement de n'afficher
les elements que de PILE_NIVEAU_PROFONDEUR_1 ou si on veut
voir plus en detail PILE_NIVEAU_PROFONDEUR_1+
PILE_NIVEAU_PROFONDEUR_2
et si on veut voir tout le code source alors :
PILE_NIVEAU_1+PILE_NIVEAU_2+PILE_NIVEAU_3.
La cerise sur le gateau de Concerto de SEMA GROUP est
d'offrir une vision graphique des liens entre les appels
de fonctions (des differentes fonctions du code source).





20140701 : GIVE US THE TOOLS, WE'LL DO THE REST.
Les allemands du NinjaForce groupe de demomakers
sur Apple//gs ont realise un assembleur natif qu'ils
donnent gratuitement. Les BrutalDeluxe eux proposent
un assembleur croise.


KISS : Keep It Simple Stupid.
Fini les grands travaux de recherche sur les micro-
processeurs, la solution est simple : elle s'appelle
miniaturisation. A la question : que peut-on mettre
de nouveau sur le wafer (galette de silicium) les
chercheurs du MIT ont repondu : un reseau de PC avec
des routeurs pour communiquer entre eux, ce qui
implique qu'il y ait un noyau Linux dans les coeurs
du microprocesseur. Un microprocesseur de 36 coeurs
qui communiquent entre eux via des routeurs.
Petit historique perso de l'evolution des micro-
processeurs :
1) au debut ADD et SUB uniquement. Les microprocesseurs
ne pouvaient pas faire de multiplication ni de
division. Ce que le microprocesseur ne fait pas,
le compilateur le fait via des routines en ROM
ou en RAM. Le 6502 n'a que ADD et SUB et est un
microprocesseur 8 bits.
2) ensuite MUL et DIV apparaissent dans les
microprocesseurs. Intel 8086, Motorola 68000 qui
sont des microprocesseurs 16 bits...
3) ensuite apparition du MMU (Memory Management
Unit) qui permet de faire du multitache au niveau
du systeme d'exploitation et architecture 32 bits.
Processeurs Intel 80386 et Motorola 68030.
Premieres versions de Linux sur Intel 80386.
Apparition des coprocesseurs arithmetiques tel le
Intel 80387 : il permet de soulager le processeur
central.
4) integration du coprocesseur arithmetique dans
le processeur central : Intel 80486 et Motorola
68040.
5) integration du DSP (Digital Signal Processor)
dans le microprocesseur central notamment dans
le PentiumIIMMX (Pentium=586 et MMX=registres
multimedia=DSP). Un DSP est un microprocesseur
qui a beaucoup de registres pour faire la meme
operation sur beaucoup de donnees en meme temps.
6) integration de routines 3D dans le micro-
processeur avec notamment le K6-2 3DNow d'AMD.
Ici on a pris des routines de la carte 3D qui
revenaient souvent et on les a mises dans le
microprocesseur central ce qui est plus rapide
que de communiquer avec la carte graphique via
le bus de l'ordinateur.
6 bis) apparition des microprocesseurs RISC
dans les machines grand public Apple qui sont
concus depuis le constat suivant des
chercheurs : 80% du temps c'est 20% des memes
commandes qui sont executees par le micro-
processeur. Donc on optimise le temps
d'execution des 20% des commandes les plus
utilisees meme si on doit perdre plus de temps
pour faire des commandes complexes car au
final on y gagne.
7) apparition des cartes bi-processeurs et par
la suite des Pentium DualCore ou Pentium Core2Duo.
On parle de processeurs bi-coeurs ou double coeurs.
8) integration de la carte graphique dans le
microprocesseur central. Le GPU ou Graphics
Processor Unit est dans la meme puce que le
CPU Central Processor Unit. AMD fait des PC
avec CPU+GPU integres.
9) integration du noyau linux+routeur dans le
microprocesseur pour utiliser 36 coeurs qui
communiquent entre eux en gerant les goulots
d'etranglements.
10) mise a disposition du grand public de
microprocesseurs reprogrammables appeles FPGA
qui permettent de faire une combinaison de
puces prefabriquees comme un seul et unique
processeur. C'est ce qui m'attire.

Personnellement pour MacMinix sur 68030 il faut
que j'etudie le mode superviseur du 68000 et le
MMU pour comprendre l'origine du multitache dans
les systemes d'exploitation.


Cote multitache si je devais le programmer en
assembleur il faudrait que je m'assure du verrouillage
des zones memoires dediees : une par processus pour
faire simple. Ensuite il faut prevoir des zones
memoire d'echanges de donnees entre processus, c'est
la memoire partagee et on gere des drapeaux pour
autoriser les acces concurrents appeles semaphores.
Pour executer plusieurs processus en meme temps on
peut par exemple dire que toutes les 255 instructions
en assembleur on change de processus ou bien toutes
les 255 secondes (FF en assembleur). On pensera au
multitache temporel. Le but est de faire une sauvegarde
du contexte de chaque processus (on sauvegarde l'etat
des registres du microprocesseur a un instant t -
IP Instruction Pointer - Accumulateur...) et lorsque
l'on a fait le tour de tous les processus on retablit
l'etat des registres a l'identique tels qu'on les
avait quittes.
Le but etant de rendre la main a un processus unique
qui s'appelle le systeme d'exploitation qui fait
tourner plusieurs processus applicatifs (applications).
Bien sur on peut bloquer deux processus entre eux
si l'un d'eux demande une ressource que l'autre
ne donnera que s'il recoit quelque chose de celui
qui attend. On appelle cela rentrer dans une section
critique pour deux processus. Pour s'en sortir il
faut remarquer que les deux processus ne repondent
plus et installer un time out (minuterie) qui
reinitialisera les deux processus apres 255 secondes
de bloquage par exemple.
Le mode superviseur du Motorola 68000 est utilise
par le systeme d'exploitation multitache. De meme
le MMU (Memory Management Unit) du microprocesseur
80386 et celui du 68030 gerent des zones memoires
protegees...

On pourra s'amuser a programmer un multitache
en assembleur 65816 comme l'a fait Olivier
ZARDINI pour le jeu Lemmings. Dans ce jeu il
faut gerer des petits bonhommes qui sont
independants les uns des autres...


Cote programmation objet : O2 le SGBD et Chorus l'OS.
L'INRIA a realise une base de donnees objet O2.
L'INRIA a realise un super OS moderne pour deboguer Chorus.
La programmation objet a pour unique but de faire de
la reutilisabilite. Il faut employer des methodes
d'organisation objet pour obtenir un gain de temps
et de place.
A l'origine le C++ est une serie de macros qui se
rajoutent au langage C (dont on peut trouver la
grammaire sous forme BNF - Backus Naur Form).
La plus remarquable des fonctionnalites objet selon
moi sont les templates qui permettent de gerer
comme parametres differents types (int, float, char...)
et d'executer pour un meme nom de fonction une
version adaptee au type de donnees passee en
parametre.
La programmation objet c'est :
. heritage
. polymorphisme
. encapsulation
La programmation objet c'est un marteau piqueur
tandis que l'assembleur c'est une pelle. Ils sont
complementaires... mais bon vous aurez compris...


Le synthetiseur :
Chaque doigt joue une note.
Une note est une onde soit une courbe.
Pour jouer plusieurs notes en meme temps il faut
additionner les ondes. L'onde recapitulative qu'il
faut jouer est le maximum des courbes de chaque doigt.
Ici additionner veut dire prendre le maximum a
chaque instant t.

La 3D :
Il faut faire des lignes dans un repere tridimensionnel.
Si on change le point d'emplacement de la camera
alors il faut retracer toutes les lignes.
Les nouvelles coordonnees des points des lignes
sont obtenus par ce que l'on appelle en mathematiques
le changement de base ou appele encore changement de
repere en 3D. Le changement de base en mathematiques
utilise les matrices et notamment la multiplication
par la matrice de passage permettant de calculer les
nouvelles coordonnees d'un point.
Il faut appliquer la perspective ensuite.
Il faut aussi utiliser le remplissage...


Algorithme de trace d'une ligne en assembleur
aussi appele Algorithme de BRESENHAM.
On a un probleme avec la programmation en
assembleur, c'est qu'il n'y a pas de fonctions
sinus et cosinus. Pour cela on est oblige de
faire des tables de valeurs dans la memoire
de l'ordinateur.
Il faut tout expliquer a la machine.


Exemple de calculs en temps reel applique
a la physique :
______________
**************
____I_________
____I_________
De quel cote la barre homogene de * (d'etoiles)
va basculer quand elle est initialement positionnee
en equilibre sur la barre verticale de I.
La reponse consiste a compter combien il y a
d'etoiles a gauche de la barre de I et combien
il y a d'etoiles a droite de la barre de I.
La barre basculera du cote ou il y a le plus de *.
C'est un exemple simpliste car il faudrait en
fait modeliser un couple de force autour de l'axe
de I car si on met des etoiles au hasard sur la
barre, une etoile eloignee de l'axe I aura plus
de force (levier) qu'une etoile pres de l'axe de
I. Vous en deduirez l'importance d'avoir des
calculateurs embarques.





20140629 : mon objectif est de comprendre CC65
un compilateur C gratuit avec son code source
pour microprocesseur 6502 comme dans
l'Apple// : http://www.cc65.org .
Avec un moniteur residant en memoire comme dans
l'Apple//gs on peut desassembler tout programme
a n'importe quel moment. On est entierement maitre
de la becane et on peut verifier l'usage
de la memoire pour la mise au point des programmes.

Bien sur cela ne rapporte pas d'argent. Il n'est
plus possible aujourd'hui de faire un jeu video
ou un programme seul.
Il faut donc revenir dans le temps et faire
du RETROCOMPUTING.
Je m'attache a reprogrammer les jeux classiques
en assembleur 6502 avec Merlin 2.58 sur Apple//c.
Les jeux classiques sont :
. PONG : un jeu de tennis avec une balle et deux raquettes
. TRON : deux motos ou deux fils qui ne doivent pas se rencontrer
. BREAKOUT : le casse-brique
...
Le top serait de programmer sur Apple//gs :
. URIDIUM : jeu de vaisseaux scrolling horizontal sur Commodore64...
. GALAGA : jeu de vaisseaux avec des vagues qui descendent...
. 1942 : jeu d'avions avec scrolling horizontal plus vagues
d'ennemis qui descendent de haut en bas


J'aimerais aussi ecrire un livre sur GNO et MacMinix.
GNO est un UNIX like qui tourne sur Apple//gs.
MacMinix est un UNIX like qui tourne sur mon Mac SE30.
On peut recompiler le noyau et les commandes UNIX comme
cat, cp...

QUESTION : mais qu'est-ce qu'il etudie pour se
faire de l'argent ?
REPONSE : ORACLE A FOND.
Si je devais faire de l'argent ce serait en
faisant des bases en SQL pour ORACLE et des
interfaces en Java. Je travaille sur ma becane
Solaris avec Sun Enterprise Studio.


Elle est ou votre etude de marche ?
Les premieres animations en 2D sur Mac que je me
souvienne provenaient du logiciel MacroMind Director.
Et puis le CD-ROM est apparu sur les Macs.
Cela a donne naissance aux CD-ROM interactifs
avec des HyperLiens. Des piles HyperCard etaient
disponibles sur CD-ROM aussi. Mais le grand public
a surtout achete des PC avec CD-ROM. MacroMind
Director a ete renomme MacroMedia Director et
offrait la possibilite de compiler une application
interactive pour MacOS ou Windows car le marche
etait sous Windows. Puis l'Internet est arrive
et le marche des CD-ROMs a chute. Donc MacroMedia
Director a permis de compiler une application
interactive pour navigateur Web via un Plugin
de navigateur. Le plug-in de navigateur s'est
appele ShockWave.
Avec Director on peut donc compiler pour Mac,
Windows et le Web...
Depuis Director avec son langage Lingo a
des commandes pour gerer la 3D... On pouvait
ecrire en C/C++ des XTensions au langage
Lingo pour apporter des commandes du systeme
d'exploitation.


Olivier ZARDINI et Antoine VIGNAU - les BrutalDeluxe
- nous preparent un assembleur croise en C standard
sous Windows qui pourra etre recompile sur n'importe
quelle plateforme. Le but est d'avoir une suite
d'outils modernes pour creer des executables
AppleIIgs (65C816). Les executables pourront etre
de plus de 64Ko des le depart. Pour rappel, Olivier
et Antoine ont deja programme les Lemmings, Tinies,
Cogito... ce qui donne a leur actif des dizaines
de milliers de lignes d'assembleur 65816. Je pense
que l'assembleur croise ne sera pas fourni
avec des bibliotheques d'adresses de la Toolbox
du IIgs.


Cote hardware ou materiel : mon cousin electronicien,
electrotechnicien a reussi a reparer nos deux MPF-I
(Micro Professor 1) a base de microprocesseur Z80.
Notre objectif est de faire une carte Z80 pour
AppleIIe. La mon cousin a fini une carte RAMCard pour
CPC6128, il ne reste plus qu'a la tester. C'est un
ami a lui qui a fait le PCB (Printed Circuit Board)
tres propre (jaune). On doit toujours fabriquer
notre insoleuse double face pour nos cartes AppleIIe.
Pour le soft (logiciel) c'est moi qui passe
en tete et il faut que j'assure en 6502 tout comme
en Z80. Je ne sais pas pourquoi je pense en 6502
qui est tres simple et intuitif tandis que le Z80
me semble incomprehensible. Je ferai une etude
comparee de ces deux microprocesseurs.
Pourtant la plupart du temps on ne fait que des
LOAD, STORE, MOVE, ADD, SUB, CMP, JMP, JNE
(JumpNotEqual)... Donc encore beaucoup
de travail en perspective pour faire des jeux
sur mon CPC464 en assembleur Z80. Pour l'instant
je fais au plus simple en assembleur 6502 sur
Apple//c avec Merlin 2.58 .


Possedant CodeWarriorPro5 qui me permet de
faire des applications pour mon
Windows2000Professionnel ainsi que pour MacOS9.
Je peux developper pour PentiumIIMMX ou bien
PowerPC601. Je ferai donc une etude comparee de
ces deux microprocesseurs et vous dirai lequel
je prefere. De meme je ferai une etude comparee de
Windows2000Professionnel et de MacOS9. La c'est
vrai il n'y a pas photo Windows2000 est un vrai
multitache tandis que MacOS9 fait du
multifenetrage. Mais je dirais que pour moi
l'important est pour l'instant de faire une
seule chose et bien. Je rappelle que l'on est
oblige de revenir sur des outils simples
car les programmes modernes sont trop gros
pour un seul programmeur.


Nous avons perdu cette annee :
. Albert JACQUARD
. Tom CLANCY
. Patrick EDLINGER
Tout d'abord je veux rendre hommage a Albert JACQUARD
qui m'a convaincu que les ressources de la planete
sont limitees et que nous ne quitterons pas la Terre
(il voulait dire par la le systeme solaire). La premiere
etoile la plus proche Proxima Centauri je crois est
a une annee lumiere. La lumiere : des tenebres a la
lumiere... Et Dieu insuffla le souffle de vie aux
animaux (Genese). Je pense que c'est la qu'il faut
chercher. Le siecle qui s'annonce sera celui de la
biologie (recherche sur le cerveau) et de l'agriculture
(nourir la planete et faire disparaitre
les deserts comme le suggerait Pierre-Gilles DE GENNES).
A savoir reboiser les deserts.
Il va aussi falloir faire la paix entre tous les Hommes.
Tant qu'il y aura deux Hommes sur la Terre, il y aura la guerre.
Je pense alors a Tom CLANCY qui a vulgarise la technologie
militaire - de belles armes tres efficaces mais qui peuvent
enterrer l'espece humaine.
Patrick EDLINGER qui a prouve que l'on peut etre
engage toute sa vie. Bien sur tout un chacun est
libre de choisir pour quoi il veut mourir.
Patrick a fait passer le message que lorsque
l'on frole la mort (solo d'escalade) alors on
apprecie le pain quotidien humblement
et que l'on est heureux d'etre en vie.
Le temps est venu de la reflexion.
Celui qui ecrit ces lignes est incapable d'ecrire
un moteur d'inferences complet : quel scandale
alors qu'il a plusieurs ordinateurs dont il est
incapable d'exploiter toutes les ressources.
Ne jetez pas vos vieux ordinateurs !
Il faut investir dans des societes comme Cycorp
( http://www.cyc.com ) car il n'y a pas de limites
aux compilateurs. Intel sort ses propres compilateurs
pour plateformes Windows de Microsoft alors que ce dernier
etait en situation de monopole.
Grace a des compilateurs de plus en plus puissants
on peut faire des analyses de plus en plus intelligentes
et ouvrir des perspectives a la recherche scientifique
que le cerveau humain ne peut atteindre en terme de temps
de calculs.
J'ai bon espoir que l'observation de l'Univers nous
permettra de trouver des idees de recherches pour
realiser la fusion froide. Qu'est-ce que j'entends
par compilateur ? Tout simplement vous prenez un livre.
Un premier compilateur sur mesure vous donnerait
par exemple le nombre de "e" dans tous les mots du livre.
Ce n'est pas tres utile ni tres intelligent, mais
l'ordinateur peut vous faire cela en moins de dix secondes.
Un compilateur (ou parser en informatique) est compose
d'une analyse lexicale, syntaxique puis grammaticale
ou semantique.
L'analyse lexicale provient du decoupage du texte
du livre en lexemes (tokens - jetons - mots).
L'analyse syntaxique verifie qu'il n'y a pas eu
de faute d'orthographe dans les lexemes. Ensuite
l'analyse grammaticale ou semantique concerne la
disposition des lexemes. Exemples :
. apres un sujet on doit trouver un verbe
. apres if on ne peut pas trouver then tout de suite
mais une condition : if (i==1) then
. apres if on ne peut pas trouver if tout de suite
mais une balise de nouveau bloc symbolise par une
accolade if (j==2){ if (i==1) {
Excusez moi du peu, mais je me considere comme nul
et je suis au bord du suicide quand mes contemporains
me disent qu'il n'y a plus besoin de programmeurs
qu'il faut acheter des logiciels tout faits.
Recevez la paix du Christ. Amen...
Il faudrait que j'ecrive un livre "la compilation
expliquee aux enfants du 21eme siecle" pour repousser
les limites de la science. Je vais m'efforcer
d'evangeliser la compilation pour tous, pour tous
les Hommes sur cette planete ou je ne suis que de
passage. "Nous n'heritons pas de la terre de nos
ancetres, nous empruntons celle de nos enfants".





20140628 : le MIT etudie un microprocesseur compose
de 36 coeurs qui fonctionnent en reseau comme 36 PCs
en intranet avec une partie routeur dans chaque coeur.

Je reve de programmer un simulateur de vol ou un
logiciel de calcul formel. Dans le cas du simulateur
de vol il faut maitriser OpenGL et dans le cas du
calcul formel - maitriser la compilation - connaitre
a fond les automates d'etats finis : la calculatrice
(infixe, postfixe, prefixe, suffixe).

Rome ne s'est pas faite en un jour.
Il faut que je revise le C.
Ensuite attaquer ObjectiveC qui vient de SmallTalk (langage objet).
Ensuite attaquer C++ qui vient de Simula (langage objet).

Il faut aussi que je termine mon projet SERPENT sur
6502 sur Apple //c.

Objectif : faire une application sur NeXTSTEP3.3 ou
BeOS5Pro et la migrer ensuite sous iOS pour iPhone.
N'ayant pas les moyens d'etre un developpeur
reference Apple il faudra par exemple que je demande
a un ami de le faire. Dans mon cas, il faudrait que
je donne le code source de mon programme a
Eric SHEPHERD alias Sheppy qui developpe l'emulateur
Apple//gs Sweet16 sur MacOSX.

Savoir programmer en assembleur permet de comprendre
comment le compilateur C fonctionne m'avait dit
Olivier ZARDINI. Je vais donc terminer mon projet
SERPENT en assembleur et faire un livre sur la
programmation en assembleur 6502 (sous Latex avec Lyx).

Plus j'y pense et plus je me dis qu'il faut que je bouffe
de l'assembleur. Il faut que je maitrise l'assembleur Z80
aussi avec mon Amstrad CPC464 avec l'assembleur de
MicroApplications DAMS. L'ideal serait que j'avance sur le
C et l'assembleur en meme temps.

Je fais mes projets sous NeXTSTEP3.3 ou BeOS5Pro.
Je migre ensuite l'application NeXTSTEP3.3 sous MacOSX.3.
Je migre ensuite l'application BeOS5Pro sous Haiku-os.org.

LE REVE : FAIRE DES APPLICATIONS SCRIPTABLES.
Le but est ici de faire une application qui
lit un script avec des commandes et des donnees :
un compilateur integre. On etudiera YACC pour Yet
Another Compiler Compiler.
Le terme exact etant de faire un PARSER.
Un exemple type est POV (Persistance Of Vision) qui
a son propre langage de ray-tracing.