Académique Documents
Professionnel Documents
Culture Documents
Anne 2008/2009
-1-
modle de von Neumann unit de contrle unit de traitement mmoire Cours n 7 : description du LC-3 registres organisation de la mmoire jeu dinstructions du processeur LC-3 chemins de donnes du LC-3 Cours n 8 : programmation en assembleur du LC-3 longueur dune chane mutiplication non signe, signe et logarithmique addition 32 bits Cours n 9 : appels de sous-programmes, pile appels de sous-programme pile sauvegarde des registres tours de Hano Cours n 10 : appels systmes et interruptions entres/sorties appels systmes interruptions Cours n 11 : autres architectures processeurs 80x86 comparaison CISC/RISC architecture IA-64 Cours n 12 : pipeline principe tages ralisation alas Cours n 13 : gestion de la mmoire mmoires associatives mmoire virtuelle mmoires cache Rvision le jeudi 4 juin de 13h 15h en salle 470E : correction de lexamen. Rvision le vendredi 5 juin de 15h30 17h30 en salle 248E : exercices Examen le 15 janvier de 15h30 18h30 en amphi 11E (halle aux farines) Rattrapage le 15 juin de 8h30 11h30 en amphi 12E (halle aux farines)
-2-
2 Historique
2.1 Historique gnral
Quelques dates cls 500 av JC apparition des bouliers et abaques 1632 invention de la rgle calcul 1642 Pascal invente la Pascaline 1833 machine de Babbage 1854 publication par Boole dun ouvrage sur la logique 1904 invention du tube vide 1937 article dAlan Turing sur la calculabilit : machines de Turing 1943 cration du ASCC Mark 1 (Harvard - IBM) : Automatic Sequence-Controlled Calculator 1946 construction de lENIAC 1947 invention du transistor (Bell) 1955 premier ordinateur Transistors : TRADIC (Bell) 1958 premier circuit intgr (Texas Instrument) 1964 langage de programmation BASIC 1965 G. Moore nonce la loi qui porte son nom : loi de Moore 1969 systme dexploitation MULTICS puis UNIX (Bell) 1971 premier microprocesseur : 4004 dIntel (4 bits, 108 KHz, 2300 transistors) 1972 microprocesseur 8008 dIntel (8 bits, 200 KHz, 3500 transistors) 1973 langage C pour le dveloppement dUNIX 1974 premier microprocesseur Motorola : 6800 (8 bits) 1974 microprocesseur 8080 dIntel
-3-
-4-
-5-
2.2.3.1 Sources
Intel 4004 iAPX 432 Intel i860 Intel i960 Itanium Core Core 2 Motorola 68000 F8 IMP-16 DEC (T-11) ARM PA-RISC (wikipedia) PA-RISC (openpa) RISC MIPS PowerPC DEC alpha SPARC National 320xx Comparatif de quelques architectures
-6-
Big et little endian Le mode big endian acclre les oprations qui ncessitent de regarder en premier les bits de poids forts comme la recherche du signe, la comparaison de deux entiers et la division. Au contraire le mode little endian favorise les oprations qui commencent par les bits de poids faible comme laddition et la multiplication.
-7-
Big endian
Mixed endian
Little endian
Motorola 68xx, 680x0 IBM Motorola PowerPC Intel Hewlett-Packard Silicon Graphics MIPS DEC VAX SPARC
-8-
-9-
-2 k-1 +1 n -1 n = n+2 k
- 10 -
m positif 0 m m = m 2 k-1 -1
2 k-1 m+n m+n m+n n ngatif k n = n + 2 -1 k-1 -2 n k 2 2 k m+n -1 m+n-2 k m+n 2 k +2 k-1 -1 n ngatif n = n + -2 k-1 n k 2 k +2 k-1 2 -1 m+n 2 k+1 -1
m ngatif m = m -2 k-1 m + 2k -1
C3 = 0 C3 = 1 C3 = 0 C3 = 1
- 11 -
100 000 001 010 011 100 101 110 111 -4 0 1 2 3 -4 -3 -2 -1 101 001 010 011 100 101 110 111 000 -3 1 2 3 -4 -3 -2 -1 0 110 010 011 100 101 110 111 000 001 -2 2 3 -4 -3 -2 -1 0 1 111 011 100 101 110 111 000 001 010 -1 3 -4 -3 -2 -1 0 1 2 000 100 101 110 111 000 001 010 011 0 -4 -3 -2 -1 0 1 2 3 001 101 110 111 000 001 010 011 100 1 -3 -2 -1 0 1 2 3 -4 010 110 111 000 001 010 011 100 101 2 -2 -1 0 1 2 3 -4 -3 011 111 000 001 010 011 100 101 110 3 -1 0 1 2 3 -4 -3 -2
- 12 -
biaise
reprsentation de 0 bit de signe intervalle non symtrique en complment 2 comparaison facile addition et soustraction semblables
- 13 -
ces oprations. Par contre, elle ne normalise pas les fonctions mathmatiques comme exp, log, sin, cos, . Lintrt principal de cette norme est davoir des comportements identiques des programmes sur des machines diffrentes. Le codage dun nombre est inspir de la notation scientifique comme -1.5 10 +3 . Chaque nombre est dcompos en trois parties : signe, exposant et mantisse. Le signe est cod par le bit de poids fort. Ensuite un certain nombre de bits sont consacrs lexposant et le reste la mantisse. La table ci-dessous donne le nombre de bits de chacun des lments dans les diffrents formats. Encodage Signe s Simple prcision 32 bits Double prcision 64 bits Prcision tendue 80 bits 1 bit 1 bit 1 bit Exposant e 8 bits 1e254 Mantisse m Valeur dun nombre 23 bits (-1) s 1.m 2 e-127 (-1) s 1.m 2 e-1023 (-1) s 1.m 2 e-16383
Dans la table ci-dessus, la formule 1.m doit tre interprte de la faon suivante. Si les bits de la mantisse sont b 1 b 2 b n , on a 1.m = 1 + b 1 /2 + b 2 /2 2 + b 3 /2 3 + + b n /2 n Soit lexemple en simple prcision 1011111101011000 (0xbf580000 en hexadcimal). Il se dcompose en le signe s = 1, lexposant e = 01111110 = (126) 10 et la mantisse m = 10101000. La valeur de 1.m = 1+1/2+1/8+1/16 = 1,6875. La valeur du nombre est donc -1,6875 2 -1 = -0,84375. Les fonctions C suivantes permettent de considrer un flottant comme un entier et inversement afin par exemple dafficher le codage hexadcimal dun flottant. Il nest pas possible dutiliser les cast directement sur les valeurs car cela effectuerait une conversion. On utilise au contraire un cast sur les pointeurs.
// On suppose sizeof(int) == sizeof(float) int float2int(float f) { int* p = (int*) &f; return *p; } float int2float(int n) { float* p = (float*) &n; return *p; } int main(void) { // Float --> hexa printf("%08x\n", float2int(-0.84375)); // Hexa --> float printf("%g\n", int2float(0xbf580000)); }
Si le nombre de bits consacrs lexposant est k, la valeur de lexposant e vrifie 0 < e < 2 k -1. Les valeurs 0 et 2 k -1 sont rserves pour des valeurs spciales.
- 14 -
La norme prvoit quatre types darrondi : vers 0, vers +, vers - ou au plus prs. En thorie, lutilisateur a le choix de larrondi mais aucun des langages de programmation actuels ne permet de le choisir effectivement. Les valeurs spciales qui peuvent tre reprsentes sont donnes par la table ci-dessous dans le cas de la simple prcision. Signe Exposant Mantisse 0 s 0 1 0 0 0 255 255 255 0 m0 0 0 m0 0 + - NaN Valeur Commentaire unique reprsentation de 0 rsultat de 1/0 rsultat de -1/0 Not a Number : rsultat de 0/0 ou -1
Dans le cas de la simple prcision, les valeurs maximales sont (2-2 -23 )2 127 2 128 . La plus petite valeur positive reprsentable est 2 -23 2 -126 = 2 -249 (nombre dnormalis).
- 15 -
4.1 Semi-conducteurs
Les trois semi-conducteurs utiliss dans la fabrication des composants lectroniques sont les suivants : le silicium Si utilis majoritairement, le germanium Ge, larsniure de gallium AsGa. En plaant ces diffrents lments dans la table des lments chimiques (cf. figure ci-dessous), on constate que ces lments sont proches. Ces semi-conducteurs sont forms dlments ayant 4 lectrons de valence sur la dernire couche comme le silicium ou le germanium ou dun mlange dlments ayant 3 et 5 lectrons de valence comme le gallium et larsenic.
Cristal de silicium Dans la figure ci-dessus, le cristal est reprsent en plan mais il faut bien sr imaginer ce cristal dans lespace. La maille lmentaire du rseau est reprsente la figure ci-dessous.
- 16 -
Rseau dans lespace Au zro absolu, cest--dire la temprature 0K, la structure du cristal est stable et le silicium nest pas conducteur du courant lectrique. Lorsque la temprature augmente, les lectrons possdent une nergie supplmentaire qui provoque la rupture de certaines liaisons de covalence. Certains lectrons deviennent libres (cf. figure ci-dessous) et le silicium est alors peu conducteur, do le nom de semi-conducteur.
lectron libre
- 17 -
Silicium dop n avec un lectron libre On parle de semi-conducteur de type p lorsque le dopage est ralis avec des lments ayant 3 lectrons de covalence comme le bore, laluminium et le gallium. Latome avec 3 lectrons de covalence ne peut former que 3 liaisons de covalence. Il y en quelque sorte un trou dlectron (cf. figure ci-dessous).
4.2 Diode
Une jonction entre un semi-conducteur de type n et un semi-conducteur de type p est appele une diode. La partie de type n est appele cathode et la partie de type p est appele anode. Le courant lectrique ne peut passer travers une diode que dans un seul sens comme lvoque son symbole en forme dentonnoir.
Diode Le principe de fonctionnement de la diode est le suivant. Les lectrons libres du semi-conducteur de type n ont tendance aller boucher les trous du semi-conducteur de type p. Il en dcoule une diffusion des lectrons de la rgion dope n vers la rgion dope p. Chaque lectron qui se dplace laisse un ion positif dans la rgion n. Il sensuit donc un champ lectrique de rappel vers la rgion n qui conduit un quilibre. Dans cet quilibre, il y a une zone, appele zone de charge despace qui ressemble du silicium non dop et o il y a en outre un champ lectrique.
- 18 -
Si on applique une tension positive la cathode et ngative lanode, les lectrons sont attirs vers le bord de la cathode et les trous vers le bord de lanode. La zone de charge despace stend et la diode nest pas conductrice. Si on contraire, on applique une tension positive lanode et ngative la cathode qui est suprieure au champ lquilibre, les lectrons peuvent circuler de la cathode vers lanode et la diode est conductrice.
4.3 Transistors
Le transistor est la brique avec laquelle sont construits les circuits lectroniques tels les micro-processeurs. La technologie actuellement utilise pour fabriquer les micro-processeurs est la technologie MOS (Metal-Oxide-Semiconductor). Il existe deux types de transistors MOS : les transistors de type n et les transistors de type p. Les micro-processeurs actuels utilisent des transistors des deux types. On parle alors de technologie CMOS (Complementary Metal-Oxide-Semiconductor).
4.3.1 Fonctionnement
Un transistor possde trois broches appeles drain, grille et source. Pour dautres types de transistors, elle sont aussi appeles collecteur, base et metteur. Dans le cas des transistors MOS, le drain et la source jouent des rles (presque) symtriques et sont (pratiquement) interchangeables. Un transistor se comporte comme un interrupteur lectrique entre la source et le drain qui serait command par la grille. Le dessin ci-dessous illustre de manire image la faon dont fonctionne un transistor.
- 19 -
Le comportement dun transistor n-MOS est le suivant. Si la grille est mise une tension de 2.9V, la source et le drain sont connects. Si au contraire, la grille est mise une tension de 0V, le circuit entre la source et le drain est ouvert. Le fonctionnement dun transistor p-MOS est linverse. Le drain et la source sont connects lorsque la tension applique la grille est 0V.
4.3.2 Composition
Un transistor est form de deux jonctions np obtenues en intercalant une couche p (respectivement n) entre deux couches n (respectivement p). Le transistor de type n correspond aux trois couches n-p-n et le transistor de type p aux couches p-n-p. Il y a en outre une grille en mtal au dbut de la technique MOS mais maintenant faite en polysilicium. Cette grille est spare de la couche intermdiaire par une fine couche doxyde de silicium SiO 2 isolant. Le potentiel appliqu la grille permet de modifier ltat de la couche intermdiaire.
- 20 -
La porte not peut tre ralise en logique CMOS par un circuit constitu de deux transistors, un de type n et un de type p. Ce circuit est appel inverseur. Linverseur ainsi que son symbole sont reprsents la figure ci-dessous.
Schma et symbole de linverseur La porte nand prend en entre deux valeurs 0 ou 1. La sortie vaut 0 si les deux entres valent 1 et elle vaut 1 si au moins une des deux entres vaut 0. La table de vrit est donne ci-dessous.
- 21 -
Entres Sortie A 0 0 1 1 B (A B) 0 1 0 1 1 1 1 0
Un circuit pour raliser la porte nand en logique CMOS est donn ci-dessous. Il est constitu de quatre transistors dont deux n-MOS et deux p-MOS.
Schma et symbole de la porte nand La porte nor prend en entre deux valeurs 0 ou 1. La sortie vaut 0 si au moins une des entres vaut 1 et elle vaut 1 si les deux entres valent 0. La table de vrit est donne ci-dessous. Entres Sortie A 0 0 1 1 B (A B) 0 1 0 1 1 0 0 0
Un circuit pour raliser la porte nor en logique CMOS est donn ci-dessous. Il est constitu de quatre transistors dont deux n-MOS et deux p-MOS. Cest le circuit dual du circuit de la porte nand. Les deux transistors p-MOS qui tait en parallle dans le circuit de la porte nand sont en srie dans le circuit de la porte nor. Au contraire, les deux transistors n-MOS qui tait en srie dans le circuit de la porte nand sont en parallle dans le circuit de la porte nor.
- 22 -
- 23 -
La porte and pourrait thoriquement tre aussi ralise par le shma ci-dessous qui comporte moins de transistors. Ce schma nest cependant pas utilis en pratique. Dans ce schma, la sortie est relie au 1 par des transistors n et au 0 par des transistors p. Ceci induit une consommation excessive par rapport au schma prcdent.
Mauvais schma dune porte and La porte or prend en entre deux valeurs 0 ou 1. La sortie vaut 0 si les deux entres valent 0 et elle vaut 1 sinon. La table de vrit est donne ci-dessous. Entres Sortie A 0 0 1 1 B AB 0 1 0 1 0 1 1 1
- 24 -
- 25 -
circuits comme le troisime reprsent la figure ci-dessous qui ralisent une porte and 4 entres. Ce circuit est cependant viter car il augmente le temps de latence en raison de sa plus grande profondeur.
Schmas de portes and 4 entres En appliquant le procd ci-dessus pour k = 16, puis en remplaant chaque bloc de trois portes and par deux portes nand et une porte nor, on obtient le circuit ci-dessous qui a 10 portes nand et 5 portes nor. Ce circuit est particulirement rgulier car k est une puissance de 2.
- 26 -
Entres Sortie A 0 0 1 1 B AB 0 1 0 1 0 1 1 0
- 27 -
5 Circuits lmentaires
Les dcodeurs et multiplexeurs sont des circuits relativement lmentaires mais trs souvent utiliss. Il sagit de deux briques de base pour la construction de circuits plus labors. Ils sont en particulier prsents dans chaque circuit mmoire. Un dcodeur y dcode ladresse et active la ligne correspondante. Un multiplexeur permet dy slectionner la bonne sortie lors dune lecture.
5.1 Dcodeurs
Un dcodeur k bits possde k entres et 2 k sorties. La sortie dont le numro est donn par les entres est active (valeur 1) alors que toutes les autres sorties sont inactives (valeur 0). Le dcodeur 1 bit a donc une seule entre A 0 et deux sorties S 0 et S 1 . La table de vrit des sorties S 0 et S 1 est la suivante. Entre Sorties A0 0 1 S0 S1 1 0 0 1
On remarque que la sortie S 0 est la ngation de lentre A 0 alors que la sortie S 1 est gale A 0 . On a donc le circuit suivant avec un seul inverseur.
Schma et symbole dun dcodeur 1 bit Le dcodeur 2 bits a deux entres A 0 et A 1 ainsi que quatre sorties S 0 , S 1 , S 2 et S 3 . La table de vrit des quatre sorties en fonction des deux entres est la suivante. Entres Sorties
A1 A0 S0 S1 S2 S3 0 0 1 1 0 1 0 1 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1
On remarque que lon a les quatre formules suivantes pour les sorties.
- 28 -
S0 S1 S2 S3
= A 1 A 0 = A 1 A 0 = A 1 A 0 = A1 A0
Schma et symbole dun dcodeur 2 bits Le dcodeur 3 bits a 3 entres et 8 sorties. Chaque sortie est obtenue comme le et logique des entres ou de leurs ngations. Les entres devant tre inverses correspondent aux zros dans lcriture en binaire du numro de la sortie. Ainsi la sortie S 5 est gal A 2 A 1 A 0 car 5 scrit 101 en binaire.
Schma et symbole dun dcodeur 3 bits Les circuits donns pour k gal 1, 2 et 3 se gnralisent facilement un entier quelconque. Le circuit est alors constitu dinverseurs et de 2 k portes and ayant chacune k entres. Le nombre dinverseurs ncessaires est k puisquil en faut un pour chaque entre A i afin de disposer de sa ngation A i . Sur les schmas pour k = 1, 2, 3, certains inverseurs peuvent tre vits en rutilisant une valeur calcule par un autre. Par contre, les schmas deviennent beaucoup moins clair. Comme chaque porte and k entres peut tre ralise avec k-1 portes and 2 entres (cf. la section portes logiques), on obtient un total de (k-1)2 k portes and. La profondeur de ce circuit est alors log 2 (k).
- 29 -
Schma et symbole dun dcodeur 1 bit avec entre CS Pour k > 1, on peut construire un dcodeur k+1 entres en utilisant deux dcodeurs k entres et un dcodeur 1 entre et en les combinant comme sur le schma ci-dessous. Les deux dcodeurs k entres recoivent les entres A 0 , , A k-1 et leurs deux entres CS sont commandes par les deux sorties du dcodeur 1 bit. Ce dernier reoit en entre A k et CS.
- 30 -
Schmas des dcodeurs rcursifs 2 et 3 bits On montre facilement que le nombre de dcodeurs 1 bit utiliss dans le dcodeur k bits est 2 k -1 et que le nombre de portes and utilises est donc 2 k+1 -2. La profondeur du circuit est k. Par rapport au dcodeur construit de manire directe, le circuit construit rcursivement utilise moins de portes logiques (2 k+1 au lieu de k2 k ) mais a une profondeur suprieure (k au lieu de log 2 (k)).
5.2 Multiplexeurs
Un multiplexeur est en quelque sorte linverse dun dcodeur. Un multiplexeurs k bits permet de slectionner une entre parmi 2 k disponibles. Un multiplexeur k bits a k + 2 k entres et une seule sortie. Les k premires entres A 0 ,,A k-1 sont appeles bits dadresses car elles donnent le numro de lentre slectionner parmi les entres B 0 ,,B 2 k -1 . La sortie S est alors gale cette entre slectionne. Le multiplexeur 1 bit a donc 3 entres A 0 , B 0 et B 1 et une seule sortie S. La formule donnant la sortie S en fonction des entres est la suivante. S = (A 0 B 1 ) (A 0 B 0 )
- 31 -
Le multiplexeur 2 bit a donc 6 entres A 0 , A 1 , B 0 , B 1 , B 2 et B 3 et une seule sortie S. La formule donnant la sortie S en fonction des entres est la suivante. S = (A 1 A 0 B 3 ) (A 1 A 0 B 2 ) (A 1 A 0 B 1 ) (A 1 A 0 B 0 )
Schma et symbole dun multiplexeur 2 bits Le multiplexeur k bits peut tre construit rcursivement en utilisant le schma ci-dessous qui donne la construction dun multiplexeur k+1 bits avec deux multiplexeurs k bits et un multiplexeur 1 bit.
Multiplexeur k+1 bits construit avec deux multiplexeurs k bits Pour k gal 2 et 3, la construction donne les deux multiplexeurs suivants.
- 32 -
Schmas des multiplexeurs rcursifs 2 et 3 bits Comme pour les dcodeurs rcursifs, on montre facilement que le nombre de multiplexeurs 1 bit utiliss dans le multiplexeur k bits est 2 k -1 et que le nombre de portes logiques and et or utilises est donc 3(2 k -1). La profondeur du circuit est k. Par rapport au multiplexeur construit de manire directe, le circuit construit rcursivement utilise moins de portes logiques (3 2 k au lieu de k2 k ) mais a une profondeur suprieure (k au lieu de log 2 (k)).
5.3.1 Dfinition
Nous commenons par donner la dfinition de la fonction hidden bit. Cette fonction prend en entre k valeurs boolennes et retourne une valeur boolenne. Soient k entres binaires A 1 ,, A k et soit s la somme de ces entres, cest--dire le nombre dentres gales 1 : s = #{ i | A i = 1 }. Cette somme est comprise entre 0 et k. La sortie S est alors gale 0 si s = 0 et elle est gale A s si 1 s k.
5.3.2 Cas k = 1
Entre Sorties A1 0 1 s 0 1 S 0 1
On a alors lgalit S = A 1 . Le circuit est dans ce cas trivial puisquil se contente de mettre lentre A 1 en sortie.
- 33 -
5.3.3 Cas k = 2
Entres Sorties A1 A2 s 0 1 0 1 0 0 1 1 0 1 1 2 S 0 1 0 1
On a alors lgalit S = A 1 . Le circuit est encore une fois immdiat puisquil se contente de mettre lentre A 1 en sortie.
5.3.4 Cas k = 3
Le cas k = 3 est le premier cas intressant. On commence par calculer la table qui donne pour chaque valeur des entres les valeurs des deux sorties s et S. Entres Sorties S 0 1 0 1 0 0 1 1
A1 A2 A3 s 0 1 0 1 0 1 0 1 0 0 1 1 0 0 1 1 0 0 0 0 1 1 1 1 0 1 1 2 1 2 2 3
Partir de cette table de vrit de la fonction, il est facile de trouver une expression de la sortie S en fonction des trois entres A 1 , A 2 et A 3 . S = A1 A2 A3 + A1 A2 A3 + A1 A2 A3 + A1 A2 A3 Les quatre monmes correspondent aux quatre lignes de la table o la sortie prend la valeur 1. Le premier monme A 1 A 2 A 3 correspond par exemple la seconde ligne de la table. La sortie S vaut 1 lorsque A 1 = 1, A 2 = 0 et A 3 = 0. Il est possible de construire un circuit partir de la formule ci-dessus. Les valeurs des monmes peuvent tre calcules par quatre portes et trois entres et la valeur finale de S peut tre calcule par trois portes ou deux entres. Afin de construire un circuit le plus petit possible, il est ncessaire de simplifier au maximum la formule.
- 34 -
La formule ci-dessus peut tre simplifie. La somme des deux premiers monmes peut tre rduite un seul monme plus simple de la faon suivante. A 1 A 2 A 3 + A 1 A 2 A 3 = A 1 A 3 (A 2 + A 2 ) = A 1 A 3 Nous prsentons maintenant une mthode graphique lmentaire permettant de trouver une expression simple pour une formule. Cette mthode dite des tables de Karnaugh (cf. aussi wikibook) ne donne pas toujours la meilleure expression mais elle fonctionne relativement bien tout en tant facile mettre en uvre. Nous expliquons la mthode sur notre exemple. La mthode consiste disposer les valeurs de lexpression dans une table rectangulaire comme ci-dessous. A1 A1
A2 A2 A2 A2 A3 1 A3 1 0 1 1 0 0 0
Il faut essayer alors de regrouper les valeurs 1 en blocs rectangulaires. Ainsi, les deux 1 rouges correspondent A 1 = 1 et A 3 = 0. Ils donnent donc le monme A 1 A 3 que nous avions obtenu en regroupant les deux premiers monmes de notre formule initiale. Les blocs de 1 peuvent ne pas tre contigus. Les deux 1 bleus correspondent A 2 = 1 et A 3 = 1 et ils donnent le monme A 2 A 3 . Les blocs de 1 peuvent ventuellement se chevaucher. On a donc finalement trouv la formule suivante pour S. S = A2 A3 + A1 A3 Le circuit construit partir de la formule prcdente ne contient plus que deux portes et et une porte ou deux entres. On reconnat le circuit dun multiplexeur 1 bit o A 3 est le bit dadresse (ou de commande) et A 1 et A 2 sont les entres.
- 35 -
5.3.5 Cas k = 4
Entres Sorties S 0 1 0 1 0 0 1 1 0 0 1 0 0 1 1 1 A1 A2 A3 A4 s 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 A1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 1 1 2 1 2 2 3 1 2 2 3 2 3 3 4 A1
A2 A2 A2 A2 A3 A4 1 A4 1 A4 0 A4 1 1 0 0 1 1 1 1 0 0 0 0 0
A3
S = A1 A3 A4 + A2 A3 A4 + A1 A2 A4 + A1 A3 A4
- 36 -
5.3.6 Cas k = 5
S = A1 A3 A4 A5 + A2 A3 A4 A5 + A1 A2 A4 A5 + A1 A3 A4 A5 + A1 A2 A4 A5 + A1 A3 A4 A5 + A1 A2 A3 A5 + A1 A2 A4 A5
- 37 -
6 Additionneurs
Laddition est une opration trs courante dans un microprocesseur. Outre dans lunit arithmtique, elle sert pour incrmenter le compteur de programme et pour les calculs dadresses. Il est donc important quelle soit optimise pour tre rapide. Malgr la simplicit apparente du problme, il existe de multiples faons de construire des additionneurs efficaces en temps et en nombre de portes logiques utilises.
6.1 Semi-additionneur
Ce premier circuit est la brique de base. Il prend en entre deux bits A et B et calcule la somme S et la retenue C (pour Carry en anglais). Les bits C et S peuvent aussi tre vus comme les bits de poids fort et de poids faible de lcriture sur deux bits de la somme A + B. Entres Sorties A 0 0 1 1 B 0 1 0 1 C 0 0 0 1 S 0 1 1 0
On remarque sur la table de vrit que S est le ou exclusif des deux entres A et B, i.e. S = A B et que C vaut 1 lorsque les deux entres valent 1, cest--dire C = A B.
- 38 -
Entres Sorties A B C0 C1 S 0 0 0 0 1 0 1 0 0 1 1 0 0 0 1 0 1 1 1 0 1 1 1 1 0 0 0 1 0 1 1 1 0 1 1 0 1 0 0 1
On peut remarquer sur la table de vrit que S est le ou exclusif des trois entres A, B et C 0 , i.e. S = A B C 0 et que la retenue C 1 vaut 1 ds que deux des trois entres valent 1, cest--dire C 1 = AB AC 0 BC 0 .
Schma partir des formules dun additionneur complet Ce circuit peut aussi tre construit en assemblant deux semi-additionneurs en cascade. Le premier semi-additionneur calcule dabord la somme de A et B puis le second calcule la somme du premier rsultat et de C 0 . La retenue C 1 vaut 1 sil y a au moins une retenue une des deux sommes effectues.
- 39 -
Additionneur 4 bits
- 40 -
- 41 -
Afin de faciliter le calcul des retenues, on introduit deux quantits appeles G (pour Generate en anglais) et P (pour Propagate en anglais). Pour deux quantits binaires A et B, les quantits G et P sont dfinies de la faon suivante. G = AB et P = A + B Soient A = A n-1 A 0 et B = B n-1 B 0 deux entres de n bits. On note C i la retenue de laddition des i bits de poids faible de A et B. Pour acclrer le calcul des C i , on introduit les deux quantits G i et P i associes aux entres A i et B i par les formules suivantes. G i = A i B i et P i = A i + B i La valeur G i est la retenue engendre par laddition des deux bits A i et B i et la valeur de P i dtermine si la retenue de C i se propage. On a donc la formule suivante qui exprime simplement que la retenue C i+1 provient soit directement de laddition des bits A i et B i soit de la propagation de la retenue C i . C i+1 = G i + P i C i En utilisant plusieurs fois cette formule, on peut obtenir les formules suivantes qui expriment C i+1 en fonction dune retenue prcdente et des valeurs G j et P j intermdiaires. C i+1 = G i + P i G i-1 + P i P i-1 C i-1 C i+1 = G i + P i G i-1 + P i P i-1 G i-2 + P i P i-1 P i-2 C i-2 Le circuit suivant permet de calculer la somme ainsi que les deux quantits G i et P i .
Cellule de calcul de S, G et P.
- 42 -
Comme la retenue C 4 nest pas ncessaire pour calculer les sommes S 0 , S 1 , S 2 et S 3 , celle-ci peut-tre calcule en utilisant la formule suivante. C4 = G3 + P3C3 Lutilisation de cette dernire formule ne retarde pas les calculs des sommes et conomise des portes.
- 43 -
- 44 -
- 45 -
- 46 -
(G+PG+PPG, PPP) Cette opration permet des calculs rapides de toutes les valeurs G et P en utilisant les formules ci-dessous. Pour i = k, on a G i,i = G i et P i,i = P i . Pour i j k, on a la formule suivante qui permet de calculer rcursivement toutes les valeurs G k,i et P k,i . (G k,i , P k,i ) = (G k,j+1 , P k,j+1 ) (G j,i , P j,i ). Le circuit GP ci-dessous calcule lopration Il prend en entre deux paires (G k,j+1 , P k,j+1 ) et (G j,i , P j,i ) et calcule la paire (G k,i , P k,i ) en utilisant la formule ci-dessus.
Cellule de calcul des G k,i et P k,i Le circuit GP peut tre utilis pour former un arbre de calcul des valeurs G k,i et P k,i . Cet arbre ne calcule pas toutes les valeurs G k,i et P k,i mais seulement celles ncessaires au calcul des retenues.
- 47 -
Le circuit GP peut tre tendu en un circuit GPC qui effectue en outre le calcul de la retenue en utilisant la formule suivante dj donne ci-dessus. C j+1 = G j,i + P j,i C i . Le circuit GPC prend donc entre deux paires (G k,j+1 , P k,j+1 ) et (G j,i , P j,i ) et une retenue C i et calcule la paire (G k,i , P k,i ) et la retenue C j+1 .
Cellule de calcul des G k,i , P k,i et C j Si on remplace les circuit GP par des circuits GPC dans larbre de calcul ci-dessus, on obtient un circuit qui calcule en outre les retenues.
- 48 -
Pour un circuit travaillant sur des entres de k bits, la profondeur de larbre est gale log k. Le nombre de portes du circuit est donc de lordre de k. Le temps de calcul des retenues est proportionnel log k. Les signaux G et P doivent descendre jusqu la racine de larbre puis les calculs de retenues doivent remonter jusquaux feuilles.
Additionneur 4 bits et calcul de G et P Les quatre additionneurs par propagation de retenue 4 bits 4SGP sont combins au circuit danticipation de retenue 4C par lintermdiaire des circuits GP de calcul des valeurs G et P des blocs. Le circuit global obtenu est un additionneur hybride 16 bits.
- 49 -
- 50 -
6.9 Soustracteur
Pour calculer la diffrence A - B de deux nombre signs A et B, on utilise un circuit qui calcule dabord loppos -B de B puis effectue la somme de A avec -B grace un additionneur. Le calcul de -B est ralis en prenant la ngation de B bit bit puis en ajoutant 1 au rsultat obtenu. Ce dernier 1 est en fait ajout directement la somme de A et -B en linjectant comme retenue C 0 ladditionneur. Le circuit ci-dessous effectue une somme ou une diffrence suivant la valeur de la commande Cmd. Si Cmd vaut 0, le circuit calcule la somme A + B. Si, au contraire, Cmd vaut 1, le circuit calcule la diffrence A - B. En effet, chacune des portes xor effectue la ngation ou non dune entre B i suivant la valeur de Cmd. La diffrence est ici calcule avec un simple additionneur par propagation de retenue mais tout autre additionneur plus sophistiqu aurait pu aussi tre utilis.
Soustracteur 4 bits
- 51 -
7 Mmoires
On appelle mmoire un composant lectronique permettant de stocker une information sous forme binaire. On distingue les mmoires lecture seule appeles ROM pour Read Only Memory et les mmoires lecture/criture appeles improprement RAM pour Random Access Memory. Le contenu des mmoires lecture seule est fix lors de la fabrication en usine et reste dans la mmoire lorsque celle-ci nest pas alimente. Au contraire, les mmoires lecture/criture sont volatiles. Le contenu est perdu ds quelles ne sont plus alimentes. Il existe des mmoires intermdiaires entre les RAM et les ROM. Elles se comportent comme des ROM dans la mesure o elles ne perdent pas leur contenu sans alimentation mais ce contenu peut toutefois tre modifi par un processus spcial. Le contenu dune EPROM est effac par une exposition aux ultra-violets. Un nouveau contenu peut alors tre crit par un appareil spcialis. Les EEPROM peuvent tre reprogrammes de manire lectrique. Les mmoires flash sont des EEPROM dont la reprogrammation est rapide (do leur nom). Les mmoires des tous premiers ordinateurs taient magntiques. Les mmoires sont maintenant des composants lectroniques base de transistors. Il existe deux types de mmoires qui se distinguent par leur technique de fabrication : les mmoires dynamiques et les mmoires statiques. Il sagit dans les deux cas de mmoires volatiles qui ncessitent une alimentation pour conserver leur contenu. La mmoire dynamique est appele DRAM pour Dymanic RAM par opposition la mmoire statique appele SRAM pour Static RAM. Mmoire dynamique Bon march Lente Mcanisme de rafrachissent Comme son cot est moindre et que sa densit dintgration est suprieure, la mmoire dynamique est utilise pour la mmoire principale de lordinateur. Par contre, la mmoire statique est utilise pour les caches en raison de sa plus grande vitesse. Mmoire statique Chre Rapide
- 52 -
- 53 -
Mmoire statique 1 bit Le verrou SR est un bit de mmoire muni de deux entres S et R permettant de le positionner 1 (Set) ou 0 (Reset). Ce circuit peut tre ralis avec deux portes nor ou deux portes nand. Dans ce dernier cas, les commandes S et R sont inverses : elles sont actives pour la valeur 0 et inactive pour la valeur 1.
Verrou SR Linconvnient principal du verrou SR est que son tat nest pas spcifi si les deux commandes S et R sont actives simultanment. Le verrou D rsout ce problme. Ce verrou a deux entres D (pour Data) et W (pour Write). La premire entre donne la valeur qui doit tre crite dans le bit de mmoire et la seconde entre valide lentre D. Si W vaut 0, rien nest crit dans la mmoire et son tat reste inchang. Si au contraire W vaut 1, la valeur de D est crite dans la mmoire.
Verrou D (mmoire 1 bit) La bascule D est obtenue en mettant en srie deux verrous D avec des entres W en opposition (ngation lune de lautre). Lentre W du premier verrou D est lentre Clk de la bascule et sa sortie est lentre D du second verrou D. Lentre W du second verrou est la ngation Clk de lentre Clk de la bascule. Quand lentre Clk de la bascule vaut 1, son entre D est crite dans le premier verrou pendant que le second verrou reste inchang. Quand lentre Clk de la bascule vaut 0, le premier verrou reste inchang et son tat est crit dans le second verrou. Il sagit dune sorte de bufferisation qui permet de lire et dcrire simultanment dans une mmoire 1 bit. Pendant que Clk vaut 1, le
- 54 -
premier verrou reoit la nouvelle valeur pendant que lancienne valeur est lue dans le second verrou. Pendant que Clk vaut 0, la nouvelle valeur est transfre dans le second verrou. Les bascules D sont utilises dans les circuits squentiels et elle reoivent alors le signal dhorloge sur lentre Clk (pour Clock).
- 55 -
Mmoire 4 3 bits
- 56 -
Organisations colonne et grille dune mmoire 2 8 1 bits Soit par exemple une mmoire 2 8 1 bits. Si elle est organise selon une seule colonne, on a un dcodeur 8 entres qui utilise donc 256 = 2 8 portes et logique ayant chacune 8 entres. Cette mme mmoire peut tre organise selon une grille 16 16. Les quatre premiers bits A 0 A 3 sont envoys sur un dcodeur pour slectionner la ligne parmi les 16 = 2 4 lignes. Un multiplexeur command par les quatre derniers bits A 4 A 7 permet de slectionner le bit parmi les 16 bits provenant des 16 colonnes. Le dcodeur et le multiplexeur utilisent chacun 16 portes et logique ayant chacune 3 ou 4 entres. Ceci fait un total de 32 portes dans lorganisation en grille et donc un gain de 224 portes portes par rapport lorganisation en colonne. Dans le cas de mmoires ayant un nombre trs important de bits, le gain est bien suprieur. Dans le cas dune grille, celle-ci na pas besoin dtre carre comme dans lexemple. Il est possible dutiliser tous les intermdiaires entre une seule colonne et un carr. Par contre, ce sont les grilles carres qui procurent le plus grand gain en nombre de portes logiques. Dans lorganisation colonne, le nombre de portes utilises est proportionnel au nombre de bits de la mmoire. Chaque bit mmoire ncessite un seul transistor alors que chaque porte logique ncessite plusieurs transistors. Du coup, lessentiel des transistors est finalement utilis pour le dcodage des adresses. Dans lorganisation en grille, le nombre de portes logiques utilises pour le dcodage est proportionnel la racine carre n de n o n est le nombre de bits de la mmoire.
- 57 -
Mmoire 2 8 8 bits
Mmoire 2 12 8 bits
- 58 -
- 59 -
8 Circuits squentiels
Il ny a aucune notion de temps dans les circuits combinatoires. Un circuit combinatoire est simplement une fonction qui calcule des valeurs de sortie en fonction des valeurs dentre. On peut ajouter la notion de temps avec un signal dhorloge. Un signal dhorloge est un signal carr priodique qui peut tre produit par un quartz.
8.1 Principe
8.2 Horloge
Signal dhorloge
8.3 Exemple
Le petit circuit ci-dessous permet dincrmenter ou de dcrmenter un entier cod sur trois bits. Soit n lentier reprsent en binaire par les trois bits dentre A 2 A 1 A 0 . Si la valeur en entre de Cmd est 0, lentier reprsent par les trois bits de sortie S 2 S 1 S 0 est n+1. Si au contraire la valeur en entre de Cmd est 1, lentier reprsent par les trois bits de sortie S 2 S 1 S 0 est n-1. Les calculs de n+1 ou n-1 sont bien sr effectus modulo 8.
Incrmenteur/dcrmenteur commande
- 60 -
Le circuit ci-dessous ralise une guirlande lumineuse. Les lampes sallument tour de rle de manire cyclique. La vitesse du processus est contrle par le signal dhorloge Clk. Le sens de rotation du cycle est dtermin par lentre Cmd.
Guirlande commande
8.4 Automate
- 61 -
- 62 -
Unit de contrle
Unit de traitement
9.2.1 Mmoire
Le registre dadresse (Memory Address Register) est le registre o est stock ladresse de la case mmoire lue ou crite lors dun accs la mmoire. La donne transite par le registre de donne (Memory Data Register). Lors dune lecture, la donne parvient au processeur dans ce registre. Lors dune criture, la donne est place dans ce registre par le processeur avant dtre crite dans la case mmoire.
- 63 -
Mmoire
9.5 Registres PC et IR
Le compteur de programme (PC pour Program counter) contient en permanence ladresse de la prochaine instruction excuter. chaque dbut de cycle dexcution, linstruction excuter est charge dans le registre IR partir ladresse contenue dans le registre PC. Ensuite, le registre PC est incrment pour pointer sur linstruction suivante. Le registre dinstruction (IR) contient linstruction en cours dexcution. Ce registre est charg au dbut du cycle dexcution par linstruction dont ladresse est donne par le compteur de programme PC.
- 64 -
10 Micro-processeur LC-3
Le micro-processeur LC-3 est vocation pdagogique. Il nexiste pas de ralisation concrte de ce processeur mais il existe des simulateurs permettant dexcuter des programmes. Lintrt de ce micro-processeur est quil constitue un bon compromis de complexit. Il est suffisamment simple pour quil puisse tre apprhend dans son ensemble et que son schma en portes logiques soit accessible. Il comprend cependant les principaux mcanismes des micro-processeurs (appels systme, interruptions) et son jeu dinstructions est assez riche pour crire des programmes intressants.
10.1 Registres
Le micro-processeur LC-3 dispose de 8 registres gnraux 16 bits appels R0,,R7. Il possde aussi quelques registres spcifiques dont lutilisation est aborde plus tard. Le registre PSR (Program Status Register) regroupe plusieurs indicateurs binaires dont lindicateur de mode (mode utilisateur ou mode privilgi), les indicateurs n, z et p qui sont tests par les branchements conditionnels ainsi que le niveau de priorit des interruptions. Les registres USP (User Stack Pointer) et SSP (System Stack Pointer) permettent de sauvegarder le registre R6 suivant que le programme est en mode privilgi ou non. Comme tous les micro-processeurs, le LC-3 dispose dun compteur de programme PC et dun registre dinstruction IR qui sont tous les deux des registres 16 bits.
Registres du LC-3
Registre PSR
- 65 -
10.2 Indicateurs N, Z et P
Les indicateurs sont des registres 1 bit. Les trois indicateurs n, z et p font en fait partie du registre spcial PSR. Ils sont positionns ds quune nouvelle valeur est mise dans un des registres gnraux R0,,R7. Ceci a lieu lors de lexcution dune instruction logique (NOT et AND), arithmtique (ADD) ou dune instruction de chargement (LD, LDI, LDR et LEA). Ils indiquent respectivement si cette nouvelle valeur est ngative (n), nulle (z) et positive (p). Ces indicateurs sont utiliss par linstruction de branchement conditionnel BR pour savoir si le branchement doit tre pris ou non.
10.3 Mmoire
La mmoire du LC-3 est organise par mots de 16 bits. Ladressage du LC-3 est galement de 16 bits. La mmoire du LC-3 est donc forme de 2 16 mots de 16 bits, cest--dire 128 KiB avec des adresses de 0000 FFFF en hexadcimal. Cette organisation de la mmoire est inhabituelle mais elle simplifie le cblage. La mmoire de la plupart des micro-processeurs est organise par octets (mots de 8 bits). Par contre, ces micro-processeurs ont la possibilit de charger directement 2, 4 ou 8 octets. Pour certains, ce bloc doit tre align sur une adresse multiple de 2, 4 ou 8 alors que ce nest pas ncessaire pour dautres.
Mmoire du LC-3
10.4 Instructions
Les instructions du LC-3 se rpartissent en trois familles : les instructions arithmtiques et logiques, les instructions de chargement et rangement et les instructions de branchement (appeles aussi instructions de saut ou encore instructions de contrle). Les instructions arithmtiques et logiques du LC-3 sont au nombre de trois. Le LC-3 possde une instruction ADD pour laddition, une instruction AND pour le et logique bit bit et une instruction NOT pour la ngation bit bit. Le rsultat de ces trois oprations est toujours plac dans un registre. Les deux oprandes peuvent tre soit les contenus de deux registres soit le contenu dun registre et une constante pour ADD et AND.
- 66 -
Les instructions de chargement et rangement comprennent des instructions (avec des noms commencent par LD) permettant de charger un registre avec une valeur et des instructions (avec des noms commencent par ST) permettant de ranger en mmoire le contenu dun registre. Ces instructions se diffrencient par leurs modes dadressage qui peut tre immdiat, direct, indirect ou relatif. Les instructions de chargement sont LD, LDI, LDR, LEA et les instructions de rangement sont ST, STI et STR. Les instructions de branchement comprennent les deux instructions de saut BR et JMP, les deux instructions dappel de sous-routine JSR et JSRR, une instruction TRAP dappel systme, une instruction RET de retour de sous-routine et une instruction RTI de retour dinterruption.
- 67 -
Adressage immdiat
- 68 -
10.4.1.2.2 Instructions LD et ST
Les instructions LD et SD sont les instructions gnrales de chargement et rangement. Linstruction LD charge dans un des registres gnraux le mot mmoire ladresse gale la somme du compteur de programme et dun offset cod dans linstruction. Linstruction ST range le contenu du registre cette mme adresse. Ce mode adressage est gnralement appel adressage direct. Il ncessite un seul accs la mmoire.
Adressage direct
Adressage relatif
- 69 -
Adressage indirect
- 70 -
Branchement conditionnel Les programmes sont crits en langage dassembleur qui autorise lutilisation dtiquettes (labels en anglais) qui vitent au programmeur de spcifier explicitement les offsets des branchements. Le programmeur crit simplement une instruction BR label et lassembleur se charge de calculer loffset, cest--dire la diffrence entre ladresse de linstruction de branchement et ladresse dsigne par ltiquette label. Comme loffset est cod sur 9 bits, linstruction BR peut uniquement atteindre une adresse situe de -255 256 mots mmoire. Le dcalage dune unit est d au fait que le calcul de la nouvelle adresse est effectu aprs lincrmentation du compteur de programme qui a lieu lors de la phase de chargement de linstruction.
2. Linstruction JMP est indispensable pour tout les langages de programmation qui manipulent explicitement comme C et C++ ou implicitement des pointeurs sur des fonctions. Tous les langages de programmation objet manipulent des pointeurs sur des fonctions dans la mesure o chaque objet a une table de ses mthodes. 3. Linstruction JMP permet aussi les retours de sous-routines puisque linstruction RET est en fait une abrviation pour linstruction JMP R7.
- 71 -
- 72 -
Syntaxe
Action
nzp Op-code
NOT DR,SR ADD DR,SR1,SR2 AND DR,SR1,SR2 LEA DR,label LD DR,label ST SR,label LDR DR,BaseR,Offset6 STR SR,BaseR,Offset6 LDI DR,label STI SR,label BR[n][z][p] label NOP JMP BaseR RET ( JMP R7) JSR label JSRR BaseR RTI TRAP Trapvect8 Rserv
DR not SR DR SR1 + SR2 DR SR1 and SR2 DR PC + SEXT(PCoffset9) DR mem[PC + SEXT(PCoffset9)] mem[PC + SEXT(PCoffset9)] SR DR mem[BaseR + SEXT(Offset6)] mem[BaseR + SEXT(Offset6)] SR DR mem[mem[PC + SEXT(PCoffset9)]] mem[mem[PC + SEXT(PCoffset9)]] SR Si (cond) PC PC + SEXT(PCoffset9) No Operation PC BaseR PC R7 R7 PC; PC PC + SEXT(PCoffset11) R7 PC; PC BaseR cf. interruptions R7 PC; PC mem[Trapvect8]
* * * * * * *
SR1 0 0 0 SR2 SR1 1 SR1 1 SR1 0 0 0 SR2 PCoffset9 PCoffset9 PCoffset9 BaseR BaseR Offset6 Offset6
0110 0111
1010 1011 0000 0000 1100 1100 0100 0100 1000 1111 1101
0 0 0 BaseR 0 0 0 0 0 0
- 73 -
titre dexemple, les codages des deux instructions ADD et BR sont dtaills ci-dessous.
10.5.2 Codage de BR
Le codage de linstruction BR est le suivant. Les quatre premiers bits de numros 15 12 contiennent lop-code 0000 de linstruction BR. Les trois bits suivants de numros 11 9 dterminent respectivement si lindicateur n, z et p est pris en compte dans la condition. Si ces trois bits sont b 11 , b 10 et b 9 , la condition cond est donne par la formule suivante. cond = (b 11 n) (b 10 z) (b 9 p) Les 9 derniers bits de numros 8 0 codent loffset du branchement. Si les trois bits b 11 , b 10 et b 9 valent 1, la condition est toujours vrifie puisque n + z + p = 1. Il sagit alors de linstruction de branchement inconditionnel BR. Si au contraire les trois bits b 11 , b 10 et b 9 valent 0, la condition nest jamais vrifie et le branchement nest jamais pris. Il sagit alors de linstruction NOP qui ne fait rien. En prenant un offset gal 0, le code de linstruction NOP est 0x0000. Le tableau ci-dessous donne un exemple de codage pour trois formes typiques de linstruction BR. Dans les exemples ci-dessous, on a donn des valeurs explicites aux offsets afin dexpliquer leur codage mais cela ne correspond pas la faon dont linstruction BR est utilise dans les programmes.
- 74 -
Code en hexa
LEA TRAP
- 75 -
- 76 -
11 Programmation du LC-3
11.1 Programmation en assembleur
La programmation en langage machine est rapidement fastidieuse. Il est inhumain de se souvenir du codage de chacune des instructions dun micro-processeur mme simplifi lextrme comme le LC-3 et a fortiori encore plus pour un micro-processeur rel. Le langage dassemblage ou assembleur par abus de langage rend la tche beaucoup plus facile mme si cette programmation reste longue et technique. Lassembleur est un programme qui autorise le programmeur crire les instructions du micro-processeur sous forme symbolique. Il se charge de traduire cette criture symbolique en codage hexadcimal ou binaire. Il est beaucoup plus ais dcrire ADD R6,R1,R2 plutt que 0x1C42 en hexadcimal ou encore 0001 1100 0100 0010 en binaire. Lassembleur permet aussi lutilisation dtiquettes symboliques pour dsigner certaines adresses. Ltiquette est associe une adresse et peut alors tre utilise dans dautres instructions. On peut par exemple crire un morceau de code comme ci-dessous.
label: ... ADD R6,R1,R2 ... BRz label ...
Ltiquette label est alors associe ladresse ou se trouvera linstruction ADD R6,R1,R2 lors de lexcution du programme. Cette adresse est alors utilise pour calculer le codage de linstruction BRz label. Comme le codage de linstruction BR contient un offset, lassembleur calcule la diffrence entre les adresses des deux instructions ADD R6,R1,R2 et BRz label et place cette valeur dans les 9 bits de poids faible du codage de BRz.
11.1.1 Syntaxe
La syntaxe des programmes en assembleur est la mme pour tous les assembleurs quelques dtails prs. Les instructions dun programme en assembleur sont mises dans un fichier dont le nom se termine par lextension .asm. Chaque ligne du fichier contient au plus une instruction du programme. Chaque ligne est en fait divise en deux champs qui peuvent chacun ne rien contenir. Le premier champ contient une tiquette et le second champ une instruction. Linstruction est forme de son nom symbolique appel mnmonique et dventuel paramtres. Les espaces sont uniquement utiles comme sparateurs. Plusieurs espaces sont quivalents un seul. Les programmes sont indents de telle manire que les tiquettes se trouvent dans une premire colonne et les instructions dans une seconde colonne. Linstruction peut tre remplace dans une ligne par une directive dassemblage. Les directives dassemblage permettent de donner des ordres lassembleur. Elles sont lquivalent des directives commenant par # comme #include ou #if du langage C.
- 77 -
11.1.1.1 Constantes
Il existe deux types de constantes : les constantes entires et les chanes de caractres. Les chanes de caractres peuvent uniquement apparatre aprs la directive .STRINGZ. Elles sont alors dlimites par deux caractres " comme dans "Exemple de chaine" et sont implicitement termines par le caractre nul \0. Les constantes entires peuvent apparatre comme paramtre des instructions du LC3 et des directives .ORIG, .FILL et .BLKW. Elle peuvent tre donnes soit sous la forme dun entier crit dans la base 10 ou 16 sous la forme dun caractre. Les constantes crite en base 16 sont prfixes par le caractre x. Lorsque la constante est donne sous forme dun caractre, sa valeur est le code ASCII du caractre. Le caractre est alors entour de caractres comme dans Z.
; Exemple de constantes .ORIG x3000 ; AND R2,R1,2 ; ADD R6,R5,-1 ; .FILL Z ; .STRINGZ "Chaine" .END Constante entire en base 16 Constante entire en base 10 Constante entire ngative en base 10 Constante sous forme dun caractre ; Constante chane de caractres
11.1.1.2 Commentaires
Les commentaires sont introduits par le caractre point-virgule ; et il stendent jusqu la fin de la ligne. Ils sont mis aprs les deux champs dtiquette et dinstruction mais comme ces deux champs peuvent tre vides, les commentaires peuvent commencer ds le dbut de la ligne ou aprs ltiquette. Voici quelques exemples de commentaires
; Commentaire ds le dbut de la ligne label: ADD R6,R1,R2 ; Commentaire aprs linstruction loop: BRz label ; Commentaire aprs ltiquette (avec indentation)
- 78 -
Le programme ci-dessous calcule la longueur dune chane de caractres termine par le caractre nul \0. Le registre R0 est utilis comme pointeur pour parcourir la chane alors que le registre R1 est utilis comme compteur.
; @param R0 adresse de la chaine ; @return R1 longueur de la chane .ORIG x3000 LEA R0,chaine ; Chargement dans RO de ladresse de la chane AND R1,R1,0 ; Mise 0 du compteur : c = 0 loop: LDR R2,R0,0 ; Chargement dans R2 du caractre point par R0 BRz fini ; Test de fin de chane ADD R0,R0,1 ; Incrmentation du pointeur : p++ ADD R1,R1,1 ; Incrmentation du compteur : c++ BR loop fini: NOP chaine: .STRINGZ "Hello World" .END
Le programme C pour calculer la longueur dune chane de caractres peut tre crit de manire diffrente en utilisant larithmtique sur les pointeurs.
- 79 -
Ce programme C se transpose galement en langage dassembleur. Le registre R0 est encore utilis comme pointeur pour parcourir la chane et le registre R1 sauvegarde la valeur initiale de R0. Il contient en fait loppos de la valeur initiale de R0 afin de calculer la diffrence. Ce programme a le lger avantage dtre plus rapide que le prcdent car la boucle principale contient une instruction de moins.
; @param R0 adresse de la chaine ; @return R0 longueur de la chane .ORIG x3000 LEA R0,chaine ; Chargement dans RO de ladresse de la chane NOT R1,R0 ; R1 = -R0 ADD R1,R1,1 loop: LDR R2,R0,0 ; Chargement dans R2 du caractre point par R0 BRz fini ; Test de fin de chane ADD R0,R0,1 ; Incrmentation du pointeur : p++ BR loop fini: ADD R0,R0,R1 ; Calcul de la diffrence q-p chaine: .STRINGZ "Hello World" .END
- 80 -
11.2.3 Multiplication
Tous le micro-processeurs actuels possdent une multiplication cble pour les entiers et pour les nombres flottants. Comme les premiers micro-processeurs, le LC-3 na pas de telle instruction. La multiplication doit donc tre ralise par programme. Les programmes ci-dessous donnent quelques implmentation de la multiplication pour les entiers signs et non signs.
Dans le programme ci-dessous, les registres R0 et R1 contiennent respectivement x et n. Le registre R2 contient les valeurs successives de r.
; @param R0 x ; @param R1 n ; @return R2 x n .ORIG x3000 AND R2,R2,0 AND R1,R1,R1 BRz fini loop: ADD R2,R2,R0 ADD R1,R1,-1 BRnp loop fini: NOP .END
- 81 -
loop:
fini:
BRz fini BRp loop ; Changement de signe de x et n NOT R0,R0 ; x = -x ADD R0,R0,1 NOT R1,R1 ; n = -n ADD R1,R1,1 ADD R2,R2,R0 ; r += x ADD R1,R1,-1 ; n-BRnp loop ; Boucle si n != 0 NOP .END
Pour viter dcrire un programme rcursif, on exprime le problme dune autre faon. On suppose que lcriture binaire du contenu de R1 est b k-1 b 0 o k est le nombre de bits de chaque registre, cest--dire 16 pour le LC-3. On a alors la formule suivante qui exprime le produit x n avec uniquement des multiplications par 2 et des additions. Cette formule est trs semblable au schma de Horner pour valuer un polynme. x n = ((((xb k-1 2 + xb k-2 )2 + xb k-3 )2 + )2 + xb 1 )2 + xb 0 . On note x 1 , , x k les rsultats partiels obtenus en valuant la formule ci-dessus de la gauche vers la droite. On pose x 0 = 0 et pour 1 j k, le nombre x j est donn par la formule suivante. x j = ((((xb k-1 2 + xb k-2 )2 + xb k-3 )2 + )2 + xb k-j+1 )2 + xb k-j . Le nombre x k est gal au produit x n. Il est de plus facile de calculer x j en connaissant x j-1 et b k-j . On a en effet les relations suivantes.
- 82 -
x j = 2x j-1 si b k-j = 0 x j = 2x j-1 + x si b k-j = 1 Le programme suivant calcule le produit x n en partant de x 0 = 0 puis en calculant de proche en proche les nombres x j grce aux formules ci-dessus. Les registres R0 et R1 contiennent respectivement x et n. Le registre R2 contient les valeurs successives x 0 , , x k et le registre R3 est utilis comme compteur. Pour accder aux diffrents bits b k-1 , , b 0 de n, on utilise le procd suivant. Le signe de n vu comme un entier sign donne la valeur de b k-1 . Ensuite, lentier n est dcal vers la gauche dune position chaque itration. Le signe des contenus successifs de R2 donne les valeurs b k-2 , , b 0 .
; @param R0 x ; @param R1 n ; @return R2 x n .ORIG x3000 AND R2,R2,0 LD R3,cst16 AND R1,R1,R1 BRzp bit0 bit1: ADD R2,R2,R0 bit0: ADD R3,R3,-1 BRz fini ADD R2,R2,R2 ADD R1,R1,R1 BRn bit1 BR bit0 fini: NOP cst16: .FILL 16 .END
- 83 -
; Si un seul des deux bits de poids fort de R1 et R0 est 1, ; il faut tester le bit de poids fort de R4 pour savoir ; sil y a eu une retenue. testR4: AND R4,R4,R4 BRzp carry BR fini ; Cas o le bit de poids fort de R0 est 1 bit1: AND R2,R2,R2 ; Si le bit de poids fort de R1 est 0, on est ramen au cas ; un seul des deux bits de poids fort de R1 et R0 est 1. BRzp testR4 ; Si les deux bits de poids fort de R1 et R0 sont 1, ; il y a ncessairement une retenue. ; Correction de la retenue carry: ADD R5,R5,1 fini: NOP .END
0x40 = 0 + 0xa
Arrt
- 84 -
12.2.2 Retour
Lors dun appel une sous-routine, ladresse de retour est mise dans le registre R7. La sous-routine se termine donc par un saut cette adresse avec linstruction JMP R7. Cette instruction peut aussi tre dsigne par le mnmonique RET.
- 85 -
; Appel de la sous-routine sub ... JSR sub ; Adresse de linstruction suivante dans R7 ... ; Sous-routine sub sub: ... ... RET
; JMP R7
12.2.3 Exemple
On reprend le fragment de programme pour calculer la longueur dune chane sous la forme dune sous-routine appele par un programme principal.
.ORIG x3000 ; Programme principal ... ; Premier appel LEA R0,chaine ; Chargement dans RO de ladresse de la chane JSR strlen ; Appel de la sous-routine ... ; Autre appel JSR strlen ... ; Chaine chaine: .STRINGZ "Hello World" .END ; Sous-routine pour calculer la longueur dune chane termine par \0 ; @param R0 adresse de la chaine ; @return R0 longueur de la chane ; Ladresse de retour est dans R7 strlen: AND R1,R1,0 ; Mise 0 du compteur : c = 0 loop: LDR R2,R0,0 ; Chargement dans R2 du caractre point par R0 BRz fini ; Test de fin de chane ADD R0,R0,1 ; Incrmentation du pointeur : p++ ADD R1,R1,1 ; Incrmentation du compteur : c++ BR loop fini: ADD R0,R1,0 ; R0 = R1 RET ; Retour par JMP R7
La routine strlen utilise le registre R1 pour effectuer ses calculs. Si le programme principal utilise galement ce registre R1, le contenu de ce registre doit tre sauvegard pendant lappel strlen. Cette question est aborde ci-dessous.
- 86 -
12.3.1 Registres
Une routine sub qui appelle une autre routine subsub peut utiliser un registre, par exemple R5 pour sauvegarder le registre R7 qui contient ladresse de retour de sub. Cette mthode donne un code efficace car il nutilise que les registres. Par contre, on arrive rapidement cours de registres. Il faut donc utiliser dautres techniques.
sub: ADD R5,R7,0 ... JSR subsub ... ADD R7,R5,0 RET ; Sauvegarde de R7 dans R5
; Restauration de R7
- 87 -
Pile en mmoire
Aucune vrification nest faite pour savoir si la pile dborde. Il appartient au programmeur de vrifier que dans chaque routine, il effectue autant de dpilements que dempilements.
- 88 -
; ; ; ;
Le fait de placer la dcrmentation du registre de pile R6 avant de placer les contenus des registres R0, R1 et R2 sur la pile nest pas anodin. Il semble premire vue que linstruction ADD R6,R6,-3 pourrait tre place aprs les trois instructions STR en changeant bien sr les offsets utiliss par ces trois dernires par les valeurs -1, -2 et -3. Ceci est en fait faux. Si une interruption survient entre le placement des contenus des registres sur la pile et la dcrmentation de R6, le contenu de la pile peut tre altr par de valeurs que linterruption mettrait sur la pile. Le fait de dcrmenter dabord R6 peut tre considr comme une faon de rserver sur la pile les emplacements pour les contenus de R0, R1 et R2. Dans le cas du LC-3, les programmes utilisateur sont en quelque sorte protgs de ce type de problmes car les interruptions utilisent la pile systme qui est distincte de la pile utilisateur. Par contre, le code excut en mode privilgi doit respecter cette contrainte. Le dpilement des registres R2, R1 et R0 se fait la mme manire. Lordre des trois dpilements effectus par les instructions LDR nest pas impos. Le rsultat serait le mme en les mettant dans un ordre diffrent. Par contre, on a respect lordre inverse des empilements pour bien montrer quil sagit de lutilisation dune pile.
LDR LDR LDR ADD R0,R6,2 R1,R6,1 R2,R6,0 R6,R6,3 ; ; ; ; Dpilement de R0 Dpilement de R1 Dpilement de R2 Restauration du haut de pile
La raison pour laquelle lincrmentation de R6 est place aprs le chargement des registres avec les valeurs sur la pile est identique la raison pour laquelle la dcrmentation de R6 est place avant le placement des contenus des registres sur la pile. La pile permet en particulier dchanger les contenus de deux registres sans utiliser de registre supplmentaire autre que le pointeur de pile R6. Le morceau de code suivant change par exemple les contenus des registres R1 et R2.
ADD STR STR LDR LDR ADD R6,R6,-2 R1,R6,1 R2,R6,0 R2,R6,1 R1,R6,0 R6,R6,2 ; ; ; ; ; ; Dplacement du haut de pile Empilement de R1 Empilement de R2 Dpilement du contenu de R1 dans R2 Dpilement du contenu de R2 dans R1 Restauration du haut de pile
Si un micro-processeur possde une opration de ou exclusif bit bit appele XOR, lchange des contenus de deux registres peut aussi se faire de la manire complique suivante.
XOR R1,R1,R2 XOR R2,R1,R2 XOR R1,R1,R2 ; ; ; ; R1 R1 R1 R1 : : : : x x ^ y x ^ y y R2 R2 R2 R2 : : : : y y x x
- 89 -
sub:
ADD STR STR ... JSR ... LDR LDR ADD RET
; ; ; ;
subsub: ...
; R7 contient ladresse de retour ; cest--dire ladresse de linstruction ; suivant JSR subsub ; Retour par JMP R7
RET
; Rservation de lespace pour la pile .ORIG 0x6000 .BLKW 0x100 ; Taille de la pile : 256 octets stackend: ; Adresse de mot mmoire suivant
12.4 Programmation
Pour illustrer lutilisation de la pile, un programme rcursif (source) calculant la solution du problme des tours de Hano est donn ci-dessous.
; Tours de Hano .ORIG x3000 ; Programme principal ; Le pointeur de pile R6 est initialis par le simulateur hanoim: LD R0,nbrdisk ; Nombre de disques LD R1,startst ; Piquet de depart LD R2,endst ; Piquet darrive JSR hanoi TRAP x25 ; HALT ; Constantes nbrdisk:.FILL 3 ; Nombre de disques startst:.FILL 1 ; Piquet de depart endst: .FILL 2 ; Piquet darrive ; Calcul ; @param ; @param ; @param hanoi: du R0 R1 R2 piquet nombre piquet piquet intermdiaire avant de lancer la procdure rcursive de disques de dpart darrive
- 90 -
; Calcul du troisime piquet : R3 = 6 - R1 - R2 ADD R3,R2,R1 NOT R3,R3 ADD R3,R3,7 ; 7 = 6 + 1 ; Procdure rcursive ; @param R0 nombre de disques ; @param R1 piquet de dpart ; @param R2 piquet darrive ; @param R3 piquet intermdiaire hanoirec: ; Dcrmentation du nombre de piquets ADD R0,R0,-1 ; Test si le nombre de piquets est 0 BRn hanoiend ; Empilement de ladresse de retour ADD R6,R6,-1 STR R7,R6,0 JSR swapR2R3 JSR hanoirec JSR swapR2R3 JSR print JSR swapR1R3 JSR hanoirec JSR swapR1R3 ; Dpilement de ladresse de retour LDR R7,R6,0 ADD R6,R6,1 ; Restauration du nombre de piquets hanoiend: ADD R0,R0,1 RET ; change des contenus de R1 et R3 swapR1R3: ADD R4,R3,0 ADD R3,R1,0 ADD R1,R4,0 RET ; change des contenus de R2 et R3 swapR2R3: ADD R4,R3,0 ADD R3,R2,0 ADD R2,R4,0 RET ; Affichage de R1 -> R2 print: ; Empilement de R7 et R0 ADD R6,R6,-2 STR R7,R6,1 STR R0,R6,0 ; Affichage du caractre 0 + R1 LD R0,char0 ADD R0,R0,R1 TRAP x21 ; Appel systme putc ; Affichage de la chane " --> " LEA R0,arrow TRAP x22 ; Appel systme puts ; Affichage du caractre 0 + R2 LD R0,char0 ADD R0,R0,R2 TRAP x21 ; Appel systme putc
- 91 -
; Retour la ligne LD R0,charnl TRAP x21 ; Appel systme putc ; Dpilement de R0 et R7 LDR R0,R6,0 LDR R7,R6,1 ADD R6,R6,2 RET ; Constantes pour laffichage char0: .FILL 0 charnl: .FILL \n arrow: .STRINGZ " --> " .END
- 92 -
La table des appels systme procure une indirection qui a lintrt de rendre les programmes utilisateurs indpendant du systme. Dans la mesure o lorganisation (cest--dire la correspondance entre les numros de la table et les appels systme) de la table reste identique, il nest pas ncessaire de changer (recompiler) les programmes utilisateurs. Sur les micro-processeurs usuels, linstruction TRAP fait passer le micro-processeur en mode privilgi (aussi appel mode systme). Cest dailleurs souvent la seule instruction permettant de passer en mode privilgi. Ceci garantit que seul le code du systme dexploitation soit excut en mode privilgi. Par contre, il faut une instruction capable de sortir du mode privilgi avant deffectuer le retour au programme principal. Le processeur LC-3 ne possde pas de telle instruction.
12.7 Interruptions
Les interruptions sont un mcanisme permettant un circuit extrieur au micro-processeur dinterrompre le programme en cours dexcution afin de faire excuter une routine spcifique. Les interruptions sont en particulier utilises pour la gestion des entres/sorties et pour la gestion des processus.
- 93 -
12.7.4 Priorits
Dans le micro-processeur LC-3, chaque programme est excut avec une certaine priorit allant de 0 7. Celle-ci est stocke dans 3 bits du registre PSR. Lorsquune interruption est demande par un circuit extrieur, celle-ci a aussi une priorit. Elle est alors effectivement effectue si sa priorit est suprieure la priorit du programme en cours dexcution. Sinon, elle est ignore. Lorsquune interruption est accepte, la routine dinterruption est excute avec la priorit de linterruption. Cette priorit est mise dans le registre PSR aprs la sauvegarde de celui-ci sur la pile. la fin de la routine, linstruction RTI restaure le registre PSR en le dpilant. Le programme interrompu retrouve ainsi sa priorit. Il est possible quune demande dinterruption intervienne pendant lexcution dune autre routine dinterruption. Cette interruption est prise en compte si elle a une priorit suprieure celle en cours. Ce mcanisme permet de grer les urgences diffrentes des interruptions. Une interruption lie un
- 94 -
dfaut de cache est nettement plus urgente quune autre lie larrive dun caractre dun clavier.
Contrleur dinterruptions
- 95 -
- 96 -
13 Entres/Sorties
Un micro-processeur ne communique pas directement avec lextrieur. Toutes les entres/sorties se font par lintermdiaire de circuits spcialiss qui dchargent ainsi le processeur de certaines tches. Il existe des circuits spcialiss dans les diffrents types de connexions : srie, parallle, SCSI, IDE, USB, . Un circuit pour une connexion srie se charge par exemple de surveiller les signaux de la ligne et de le traduire en un octet disponible pour le processeur.
Circuits dentres/sorties Afin de rpondre aux demandes du micro-processeur, les circuits doivent tre slectionns par celui-ci. Il existe deux mthodes classiques pour faire cet adressage. La premire mthode tait plutt utilise par les processeurs anciens alors que la seconde est plus frquente sur les micro-processeurs modernes. La premire mthode consiste sparer ladressage de la mmoire et ladressage des entres/sorties. En plus du bus de dadresse, il y a une ligne supplmentaire o le processeur indique sil sadresse la mmoire ou aux circuits dentres/sorties. Cette mthode a lavantage daugmenter dune certaine faon lespace dadressage. Cest pourquoi les premiers micro-processeurs lutilisaient car leur espace dadressage tait souvent rduit. Cette mthode a par contre linconvnient de ncessiter des instructions spcifiques pour accder aux circuits dentres/sorties.
- 97 -
Adressage distinct des circuits dentres/sorties La seconde mthode consiste rserver une partie de ladressage de la mmoire aux entres/sorties. On parle dentres/sorties en mmoire. Cette mthode rduit donc lespace dadressage disponible pour la mmoire mais ce nest pas gnant sur les micro-processeurs modernes qui disposent dun (trs) large espace dadressage. Elle permet aussi lutilisation des instructions de chargement et rangement pour accder aux circuits dentres/sorties et de bnficier ainsi des diffrents modes dadressage. Cette mthode est toujours utilise sur les micro-processeurs RISC car elle diminue le nombre dinstructions et simplifie le dcodage de celles-ci.
- 98 -
- 99 -
13.3.1.2 criture
Le circuit pour lcran utilise ladresse 0xfe04 pour le registre de contrle et ladresse 0xfe06 pour le registre de donne. Le registre de contrle permet uniquement de savoir si le dernier caractre crit a t envoy et si le circuit est prt envoyer un nouveau caractre. Lenvoi dun caractre sur une ligne srie prend un certain temps. Le micro-processeur doit attendre que lmission dun caractre est termine avant den crire un autre dans le registre de donne. La valeur du bit de poids fort (numro 15) du registre de contrle indique si le circuit est prt envoyer. Lmission du caractre est initie en lcrivant dans le registre de donne du circuit. La routine ci-dessous effectue une criture bloquante dun caractre sur lcran.
DEFINE DPSR 4xfe04 DEFINE DPDR 4xfe06 putc: waitdp: LDI R2,pDPSR BRzp waitdp STI R0,pDPDR RET pDPSR: .FILL DPSR pDPDR: .FILL DPDR ; Pointeur sur le registre de contrle ; Pointeur sur le registre de donne ; Registre de contrle (Status) de lcran ; Registre de donne de lcran
- 100 -
14 Autres architectures
processeurs 80x86 comparaison CISC/RISC architecture IA-64
- 101 -
14.1.2 Mmoire
- 102 -
- 103 -
14.1.8 Branchements
JMP branchement JZ, JNZ branchement si zro ou non JO, JNO branchement si dbordement (Overflow) ou non JS, JNS branchement si ngatif ou non JA, JAE, JG, JGE branchement si plus grand (ou gal) ou non JB, JBE, JL, JLE branchement si plus petit (ou gal) ou non
14.1.12 Programmation
Voici un petit exemple de programme qui calcule la longueur dune chane de caractres
; Segment de donnes data SEGMENT chaine DB Hello world\0 data ENDS ; Segment de code code SEGMENT ASSUME DS:data, CS:code
- 104 -
main:
; Initialisation du registre de segment de donnes MOV AX,data MOV DS,AX ; Chargement de ladresse de la chane dans BX ; Il sagit de ladresse relative au dbut du segment MOV BX,offset chaine ; Initialisation compteur MOV CX,0
loop:
fini:
code
; Retour au DOS MOV AH,4CH INT 21H ENDS END main ; Adresse de lancement
- 105 -
Alpha (DEC) S/360 (IBM) PowerPC (Motorola) VAX (DEC) MIPS 68xx, 680x0 (Motorola) PA-RISC (Hewlett-Packard) x86, Pentium (Intel) SPARC
14.2.1 Historique
Dans les premiers temps de linformatique, les ordinateurs taient programms en langage machine ou en assembleur. Pour faciliter la programmation, les concepteurs de micro-processeurs dotrent ceux-ci dinstructions de plus en plus complexes permettant aux programmeurs de coder de manire plus concise et plus efficace les programmes. Lorsque les premiers langages de haut niveau remplacrent lassembleur, cette tendance saccentua. Les concepteurs de micro-processeurs sefforcrent de combler le foss entre le langage machine et les langages de haut niveau. Des instructions proches des constructions typiques des langages de haut niveau furent ajouts aux micro-processeurs. Lide tait de faciliter la compilation des langages de haut niveau au dtriment de la complexit des micro-processeurs. On ajouta par exemple des instructions spcifiques pour les appels/retours de fonctions ou des instructions spciales pour les boucles pour dcrmenter un registre et faire un saut si le rsultat est non nul, tout a en une seule instruction machine. Un lment qui favorisa cette complexification des micro-processeurs tait le manque ( cause du prix) de mmoire et la lenteur de celle-ci. Labsence de beaucoup de mmoire force les programmes tre le plus compacts possible. Pour rduire le nombre dinstructions ncessaires un programme, il faut que chaque instruction fasse plusieurs oprations lmentaires. La lenteur relative de la mmoire pousse aussi avoir des instructions complexes. Il ny a alors moins de codes dinstructions lire en mmoire et le programme en est acclr. Comme la densit dintgration des transistors tait encore faible, les micro-processeurs possdaient trs peu de registres internes. De plus, un grand nombre de registres auraient ncessit plus de bits pour coder les instructions. Pour compenser cette lacune en registres, certaines instructions taient capables, par exemple, de charger deux valeurs en mmoire, de faire la somme et de ranger le rsultat
- 106 -
en mmoire. Il y avait de nombreux modes dadressage et tous les modes dadressages taient possibles toutes les instructions. On parle alors dorthogonalit lorsque toutes les instructions peuvent utiliser tous les modes dadressages. Laboutissement de ce type de jeux dinstructions est celui du VAX. La complexification des jeux dinstructions a pour effet de compliquer notablement la phase de dcodage des instructions. On peux constater que sur certains micro-processeurs jeu dinstructions complexe, la moiti des transistors sur la puce de silicium est consacre au dcodage des instructions et au contrle de lexcution de celles-ci. Comme le dcodage des instructions est rendu difficile par un jeu dinstructions complexes, lexcution des instructions simples est ralenti par un dcodage compliqu. Lorsque le jeu dinstructions est complexe, la plupart des compilateurs nutilisent pas tout le jeu dinstructions. Il se contentent souvent dun nombre rduit dinstructions. Le rsultat est que les instructions les plus puissantes sont trs rarement utilises. On arrive alors au paradoxe suivant. Les instructions complexes qui ne sont pratiquement pas utilises ralentissent les instructions simples qui sont utilises la plupart du temps. Des tudes statistiques sur des programmes tels des systmes dexploitation ou des applications relles ont montr les faits suivants. 80 % des programmes nutilisent que 20 % du jeu dinstructions. Les instructions les plus utilises sont : les instructions de chargement et de rangement, les appels de sous-routines. Les appels de fonctions sont trs gourmands en temps : sauvegarde et restitution du contexte et passage des paramtres et de la valeur de retour. 80 % des variables locales sont des entiers. 90 % des structures complexes sont des variables globales. La profondeur maximale dappels imbriqus et en moyenne de 8. Une profondeur plus importante ne se rencontre que dans 1 % des cas. Lapparition de larchitecture RISC vint de la volont de favoriser au maximum les instructions simples qui constituent la grande partie des programmes. Lide est de supprimer les instructions complexes et les modes dadressage labors afin daugmenter la frquence dhorloge et daugmenter ainsi la vitesse dexcution de toutes les instructions. La frquence dhorloge dun micro-processeur est souvent dicte par les instructions les plus complexes qui prennent plus de temps. La philosophie essentielle des processeurs RISC est davoir un nombre important de registres. Des instructions de chargement et de rangement avec quelques modes dadressage sont les seules faire les changes avec la mmoire. Toutes les autres instructions travaillent uniquement avec les registres. Lapparition des micro-processeurs RISC est en partie due laugmentation de la mmoire disponible sur les ordinateurs. Celle-ci nest plus une limitation la taille des programme. Un autre facteur important est le foss qui sest creus entre la vitesse des processeurs et celle de la mmoire. Les processeurs ont une frquence dhorloge leve par rapport la vitesse de la mmoire. Chaque accs la mmoire les pnalise. Ceci accentue le rle dun nombre important de registres qui vitent les accs la mmoire. La lenteur de la mmoire est en partie compense par la prsence de cache fait de mmoires rapides. Ceux-ci sont trs efficaces pour lire les instructions des programmes puisque ces accs la mmoire se font des cases mmoire contigus.
- 107 -
14.2.2 Caractristiques
Les principales caractristiques des processeurs RISC sont les suivantes. Codage uniforme des instructions Toutes les instructions sont codes avec un mme nombre de bits, gnralement un mot machine. Lop-code se trouve la mme position pour toutes les instructions. Ceci facilite le dcodage des instructions. Registres indiffrencis et nombreux Tous les registres peuvent tre utiliss dans tous les contextes. Il ny a par exemple pas de registre spcifique pour la pile. Les processeurs sparent cependant les registres pour les valeurs flottantes des autres registres. Limitation des accs mmoire Les seules instructions ayant accs la mmoire sont les instructions de chargement et de rangement. Toutes les autres instructions oprent sur les registres. Il en rsulte une utilisation intensive des registres. Nombre rduit de modes dadressage Il ny pas de mode dadressage complexe. Les modes dadressages possibles sont gnralement immdiat, direct, indirect et relatifs. Un registre est souvent fix la valeur 0 afin dobtenir certains modes dadressages simples comme cas particulier dautres modes dadressage. Nombre rduit de types de donnes Les seuls types de donnes supports sont les entiers de diffrentes tailles (8, 16, 32 et 64 bits) et des nombres flottants en simple et double prcision. Certains processeurs CISC comportent des instructions pour le traitement des chanes de caractres, des polynmes ou des complexes La simplification du jeu dinstructions a report une partie du travail sur le compilateur. Ce dernier joue un rle essentiel dans loptimisation du code engendr. Il doit en particulier grer les points suivants. allocation optimale des registres, limination des redondances, optimisation des boucles en ne conservant lintrieur que ce qui est modifi, optimisation du pipeline, optimisation du choix des instructions,
- 108 -
14.3.1 Organisation
Lorganisation de larchitecture IA-64 est base sur un nombre important de registres et sur de multiples units dexcution. Ces deux caractristiques permettent un degr lev de paralllisme. Dans un micro-processeur classique, le nombre de registres rellement disponibles peut tre suprieur au nombre de registres utiliss par lassembleur. Le micro-processeur effectue la vole un renommage des registres afin dutiliser au mieux tous les registres. Dans larchitecture IA-64, tous les registres sont visibles de lassembleur.
14.3.1.1 Registres
Les registres dont dispose larchitecture IA-64 sont les suivants. 128 registres gnraux de 64 bits 128 registres applicatifs de 64 bits 128 registres flottants de 82 bits 64 bits de prdictions
- 109 -
Format dun paquet de 128 bits Chaque instruction est code sur 41 bits. Les 4 premiers bits donnent le code-op principal et les 6 derniers bits donnent le numro du registre prdicatif qui conditionne lexcution de linstruction. Lutilisation des 31 = 41 - 4 - 6 bits restant dpend du code-op principal. Une utilisation typique est
- 110 -
cependant de coder un code-op supplmentaire sur les 10 premiers bits puis de coder 3 registres sur 7 bits chacun.
Format dune instruction sur 41 bits Linterprtation du code-op principal dpend du champ gabarit car celui-ci indique dj lunit dexcution ncessaire linstruction. Pour que cette information ne soit pas redondante avec le code-op, cest le code-op combin avec le champ gabarit qui dtermine linstruction prcise. Le gabarit indique dabord une catgorie dinstructions, le code-op donne ensuite linstruction dans la catgorie et le code-op supplmentaire peut encore prciser linstruction. Il sagit en fait dune organisation hirarchique des codes-op.
- 111 -
Modle Instruction 0 Limite Instruction 1 Limite Instruction 2 Limite 00 01 02 03 04 05 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 16 17 18 19 1C 1D Unit M Unit M Unit M Unit M Unit M Unit M Unit M Unit M Unit M Unit M Unit M Unit M Unit M Unit M Unit M Unit M Unit M Unit M Unit B Unit B Unit M Unit M Unit M Unit M || || Unit I Unit I Unit I Unit I Unit L Unit L Unit M Unit M Unit M Unit M Unit M Unit F Unit M Unit M Unit I Unit I Unit B Unit B Unit B Unit B Unit M Unit M Unit F Unit F || || Unit I Unit I Unit I Unit I Unit X Unit X Unit I Unit I Unit I Unit I Unit I Unit I Unit F Unit F Unit B Unit B Unit B Unit B Unit B Unit B Unit B Unit B Unit B Unit B || || || || || || || || || || || ||
Il est la charge du compilateur de regrouper au mieux les instructions en paquets puis en blocs afin doptimiser lutilisation des units dexcution du micro-processeur.
- 112 -
La compilation dune structure de contrle if-then-else dun langage de haut niveau se traduit par des sauts en langage dassembleur. La compilation du morceau de code ci-dessous
if (cond) { bloc 1 } else { bloc 2 }
bloc2: finif:
Si les blocs dinstructions 1 et 2 sont relativement courts, la prsence des sauts pnalise lexcution du programme. Le principe dutilisation des registres prdicatifs est le suivant. La calcul de la condition positionne deux registres prdicatifs p1 et p2 de manire oppose. Si la condition est vraie, p1 est positionn vrai et p2 faux et si la condition est fausse, p1 est positionn faux et p2 vrai. Ensuite, le programme excute les instructions du bloc 1 conditionnes par p1 et les instructions du bloc 2 conditionnes par p2. Cela donne le code en assembleur suivant o les sauts ont disparu. La syntaxe (p) instr signifie que linstruction instr est conditionne par le registre prdicatif p. Le micro-processeur excute plus dinstructions mais cela est largement compens par la disparition des sauts si les blocs 1 et 2 sont assez courts.
; Calcul de cond ... ; Positionnement de p1 et p2 ; Dbut du bloc 1 (p1) instr1 (p1) instr2 ... ; Dbut du bloc 2 (p2) instr1 (p2) instr2 ... ; Suite du programme
- 113 -
15 Pipeline
15.1 Principe
Le pipeline est un mcanisme permettant daccrotre la vitesse dexcution des instructions dans un micro-processeur. Lide gnrale est dappliquer le principe du travail la chane lexcution des instructions. Dans un micro-processeur sans pipeline, les instructions sont excutes les unes aprs les autres. Une nouvelle instruction nest commence que lorsque linstruction prcdente est compltement termine. Avec un pipeline, le micro-processeur commence une nouvelle instruction avant davoir fini la prcdente. Plusieurs instructions se trouvent donc simultanment en cours dexcution au cur du micro-processeur. Le temps dexcution dune seule instruction nest pas rduit. Par contre, le dbit du micro-processeur, cest--dire le nombre dinstructions excutes par unit de temps, est augment. Il est multipli par le nombre dinstructions qui sont excutes simultanment.
- 114 -
Instruction de chargement et rangement (LD* et ST*) Le calcul de ladresse est effectu partir de ladresse provenant du registre A et de loffset contenu dans le registre B. Instruction de branchement (BR*, JMP, JSR, JSRR et TRAP) Pour les instructions contenant un offset, laddition avec le contenu du PC est effectue cette tape. Pour les instructions utilisant un registre, le contenu du registre est juste transmis. Accs la mmoire (Memory Access) Cette tape est uniquement utile pour les instruction de chargement et de rangement. Pour les instructions arithmtiques et logiques ou les branchements, rien nest effectu. Ladresse du mot mmoire est contenue dans le registre R. Dans le cas dun rangement, la valeur ranger provient du registre C. Dans le cas dun chargement, la valeur lue en mmoire est mise dans le registre R pour ltape suivante. Rangement du rsultat (Write Back) Le rsultat des oprations arithmtiques et logiques est rang dans le registre destination. La valeur lue en mmoire par les instructions de chargement est aussi range dans le registre destination. Les instructions de branchement rangent la nouvelle adresse dans PC. Ce schma ne sapplique pas aux deux instructions LDI et STI qui ncessitent deux accs la mmoire. Les processeurs utilisant un pipeline ne possdent pas dinstruction avec ce mode dadressage indirect. Dans la suite, on ignore ces deux instructions. Le pipeline a rduit le nombre dadditionneurs puisque le mme est utilis pour les calculs arithmtiques et les calculs dadresses. Par contre, certains registres ont d tre multiplis. Le registre dinstruction IR est prsent chaque tage du pipeline. En effet, lopration effectuer chaque tage dpend de linstruction en cours. Cette multiplication de certains lments est le prix payer pour lexcution simultane de plusieurs instructions. Le tableau ci-dessous reprsente lexcution dun programme pendant quelques cycles dhorloge. Chacune des instructions commence son excution un cycle aprs linstruction prcdente et passe par les cinq tapes dexcution pendant cinq cycles conscutifs. Programme 1 2 3 Inst. n 1 Inst. n 2 Inst. n 3 Inst. n 4 Inst. n 5 Inst. n 6 4 Cycles dhorloge 5 6 7 8 9 10 IF ID IE MA WB IF ID IE MA WB IF ID IE MA WB IF ID IE MA WB IF ID IE MA WB IF ID IE MA WB
- 115 -
Pipeline
15.4 Alas
Le bon fonctionnement du pipeline peut tre perturb par plusieurs vnements appels alas (pipeline hazard en anglais). Ces vnements sont classs en trois catgories. alas structurels Ce type de problmes survient lorsque deux instructions dans des tages diffrents du pipeline ncessitent la mme ressource.
- 116 -
alas de donnes Ce type de problmes survient lorsquune instruction ncessite une donne qui na pas encore t calcule par une instruction prcdente. Ceci provient du fait que les instructions lisent leurs arguments dans les premiers tages du pipeline alors quelles produisent leur rsultat dans les derniers tages. alas de contrle Ce type de problmes survient ds quune instruction de branchement est excute. Si le branchement est effectu, les instructions qui suivent dans le pipeline ne doivent pas tre excute. Ceci provient du fait que la nouvelle adresse est calcule alors que les instructions qui suivent ont dj t charges La solution gnrale pour rsoudre un ala est de bloquer linstruction qui pose problme et toutes celles qui suivent dans le pipeline jusqu ce que le problme se rsolve. On voit alors apparatre des bulles dans le pipeline. De manire pratique, la bulle correspond lexcution de linstruction NOP qui ne fait rien. Programme 1 2 3 Inst. n 1 Inst. n 2 Inst. n 3 Inst. n 4 Inst. n 5 Inst. n 6 4 Cycles dhorloge 5 6 7 8 9 10 11 12 IF ID IE MA WB IF ID IE MA WB IF ID IF Bulle Bulle IE MA WB ID IE MA WB IF ID IE MA WB IF ID IE MA WB
Le droulement de lexcution des quatre premires instructions dans le pipeline devrait tre le suivant. Programme Cycles dhorloge 1 2 3 ADD R6,R6,1 ADD R0,R0,1 ADD R1,R1,1 4 5 6 7 8
LDR R7,R6,0 IF ID IE MA WB IF ID IE MA WB IF ID IE MA WB IF ID IE MA WB
- 117 -
Ltape MA (accs mmoire) de linstruction LDR R7,R6,0 a lieu en mme temps que ltape IF (chargement de linstruction) de linstruction ADD R1,R1,1. Ces deux tapes ncessitent simultanment laccs la mmoire. Il sagit dun ala structurel. Comme cela est impossible, linstruction ADD R1,R1,1 et celles qui suivent sont retardes dun cycle. Programme 1 2 3 ADD R6,R6,1 ADD R0,R0,1 ADD R1,R1,1 Inst. n 5 Inst. n 6 4 Cycles dhorloge 5 6 7 8 9 10 11
LDR R7,R6,0 IF ID IE MA WB IF ID IE MA WB IF ID IE MA WB IF ID IE MA WB IF ID IE MA WB IF ID IE MA WB
Le conflit daccs la mmoire se produit chaque fois quune instruction de chargement ou de rangement est excute. Celle-ci rentre systmatiquement en conflit avec le chargement dune instruction qui a lieu chaque cycle dhorloge. Ce problme est gnralement rsolu en sparant la mmoire o se trouvent les instructions de celle o se trouvent les donnes. Ceci est ralis au niveau des caches de niveau 1. Le micro-processeur doit alors avoir deux bus distincts pour accder simultanment aux deux caches. Comme le micro-processeur LC-3 est trs simple, les seuls alas structurels possibles sont ceux ds des accs simultans la mmoire. Les registres sont utiliss aux tapes ID (dcodage) et WB (rangement du rsultat) mais les premiers accs sont en lecture et les seconds en criture. Ceci ne provoque pas dala.
Le droulement de lexcution de ces deux instructions dans le pipeline devrait tre le suivant. Programme Cycles dhorloge 1 2 3 ADD R2,R1,R0 4 5 6
ADD R1,R1,1 IF ID IE MA WB IF ID IE MA WB
Le problme est que le rsultat de la premire instruction est crit dans le registre R1 aprs la lecture de ce mme registre par la seconde instruction. La valeur utilise par la seconde instruction est alors errone. Le rsultat de la premire instruction est disponible ds la fin de ltape IE (excution de linstruction) de celle-ci. Il est seulement utilis ltape IE de la seconde instruction. Il suffit alors de le fournir en entre de ladditionneur la place de la valeur lue dans R1 par la seconde instruction. Ceci est ralis
- 118 -
ADD R1,R1,1 IF ID IE MA WB IF ID IE MA WB
Le droulement de lexcution de ces deux instructions dans le pipeline devrait tre le suivant. Programme Cycles dhorloge 1 2 3 ADD R2,R1,R0 4 5 6
LDR R1,R6,0 IF ID IE MA WB IF ID IE MA WB
Dans cet exemple encore, le rsultat de la premire instruction est crit dans le registre R1 aprs la lecture de ce mme registre par la seconde instruction. Par contre, le rsultat nest pas disponible avant ltape MA (accs mmoire) de la premire instruction. Comme cette tape a lieu aprs ltape IE de la seconde instruction, il ne suffit pas dajouter un chemin de donnes pour faire disparatre lala. Il faut en outre retarder la seconde instruction. Ceci introduit une bulle dans le pipeline. Programme 1 2 3 ADD R2,R1,R0 Inst. n 3 Inst. n 4 IF ID IF Cycles dhorloge 4 5 6 7 8 9
LDR R1,R6,0 IF ID IE MA WB IE MA WB ID IE MA WB IF ID IE MA WB
La compilation de ce morceau de code pourrait produire les instructions suivantes o x, x1, , y2 dsignent alors les emplacements mmoire rservs ces variables.
- 119 -
LD R1,x1 LD R2,x2 ADD R0,R1,R2 ST R0,x LD R1,y1 LD R2,y2 ADD R0,R1,R2 ST R0,y
Lexcution de ces instructions provoque des alas de donnes entre les instructions de chargement et les instructions daddition. Ces alas introduisent des bulles dans le pipeline. Ces bulles peuvent tre vites si le compilateur ordonne judicieusement les instructions comme dans le code ci-dessous. Plus de registres sont alors ncessaires.
LD R1,x1 LD R2,x2 LD R3,y1 ADD R0,R1,R2 LD R4,y2 ST R0,x ADD R0,R1,R2 ST R0,y
On constate que lexcution dun branchement pris dgrade notablement la performance du pipeline puisque quatre cycles sont perdus. Comme les branchements constituent en gnral 20 30% des instructions excutes par un programme, il est primordial damliorer leur excution.
- 120 -
Dans le cas du micro-processeur LC-3, les instructions de branchement sont relativement simples. Une faon simple doptimiser les branchements est de ne pas leur faire suivre toutes les tapes du pipeline afin que la nouvelle adresse soit crite le plus tt possible dans le registre PC. Pour les branchements conditionnels, la condition ne dpend que des indicateurs n, z et p et du code de linstruction. Cette condition peut donc tre calcule ltape ID (dcodage de linstruction). De mme, ladresse du branchement est soit le contenu dun registre soit la somme de PC et dun offset. Dans les deux cas, cette valeur peut tre rendue disponible la fin de ltape ID. Le prix payer est lajout dun nouvel additionneur ddi ce calcul. La nouvelle adresse est alors crite dans le registre PC la fin de ltape ID. Le diagramme prcdent devient alors le diagramme ci-dessous qui montre quil ne reste plus quun seul cycle dhorloge de perdu. Programme Branchement Inst. suivante n 1 Inst. cible n 1 Inst. cible n 2 Inst. cible n 3 IF ID IF IF ID IE MA WB IF ID IE MA WB IF ID IE MA WB Cycles dhorloge 1 2 3 4 5 6 7 8 9
- 121 -
16 Mmoire virtuelle
16.1 Principe
Lors de la compilation dun programme crit dans un langage de haut niveau, toutes les rfrences des variables locales ou globales sont transformes en des rfrences des emplacements mmoire allous ces variables. Les variables globales sont gnralement alloues dans la zone des donnes alors que les variables locales sont plutt alloues sur la pile. Les pointeurs de certains langages comme C ou C++ ou les rfrences de Java sont aussi des adresses qui sont manipules de manire explicites. Dans un ordinateur sans mmoire virtuelle, les adresses manipules implicitement ou explicitement par les programmes correspondent aux adresses relles des donnes en mmoire. Le principe de mmoire virtuelle est de sparer les adresses manipules par les programmes et les adresses relles des donnes en mmoire. Les adresses manipules par les programmes sont appeles adresses virtuelles et les adresses des donnes en mmoire sont appeles adresses physiques. Chaque programme dispose dun espace dadressage virtuel constitu de toutes les adresses virtuelles. Pour que les programmes fonctionnent correctement, il doit y avoir une correspondance entre les adresses virtuelles et les adresses physiques. Cette correspondance est assure conjointement dune part au niveau matriel par un circuit adjoint au processeur appel MMU (Memory Management Unit) et dautre part au niveau logiciel par le systme dexploitation. Dans les micro-processeurs rcents, ce circuit MMU est souvent intgr au processeur.
16.2 Fonctionnement
Lespace dadressage virtuel de chaque programme ainsi que lespace mmoire sont diviss en blocs appels pages de mme taille. Cette taille est trs souvent de lordre 4 Ko mais peut aussi tre de 8 ou 16 Ko sur des micro-processeurs 64 bits. Un bloc de lespace dadressage virtuel est appel page virtuelle et un bloc de lespace mmoire est appel page physique. Larticle wikipedia utilise les termes page et frame. Pour chaque page virtuelle utilise par un programme correspond une page physique. Le systme maintient pour chaque programme une table de correspondance entre les pages virtuelles et les pages physiques. Cette table est appele table des pages. Elle est bien sr propre chaque programme. Deux programmes fonctionnant simultanment peuvent utiliser la mme adresse virtuelle, par exemple 0x1234, pour des donnes diffrentes qui doivent donc se trouver des adresses physiques diffrentes.
- 122 -
- 123 -
16.4 Swap
- 124 -
16.6 Linux
Cet article dveloppe entre autre lorganisation propre linux pour la mmoire virtuelle.
- 125 -
17 Caches mmoire
17.1 Hirarchie de mmoire
Un ordinateur dispose de diffrents types de mmoires qui se distinguent par leurs vitesses daccs. Plus la mmoire est rapide plus elle cote cher et plus la quantit disponible sur lordinateur est rduite. Les registres internes entiers ou flottants du micro-processeur constituent la mmoire laquelle celui-ci accde le plus rapidement mais ils sont en nombre trs limit. Il y a ensuite la mmoire vive, les disques durs puis les bandes qui sont trs lentes mais qui permettent de stocker des quantits trs importantes de donnes. Les caches sont intermdiaires entre les registres internes du micro-processeur et la mmoires vive. Ils sont faits de mmoire rapide mais ils sont de taille rduite par rapport la mmoire centrale.
Hirarchie de mmoire
17.2 Principe
Quand il est question de vitesse daccs la mmoire, il faut distinguer la latence et le dbit. La latence est le temps qui scoule entre la demande des donnes et larrive de la premire donne. Le dbit mesure ensuite le flux de donnes transmises pendant le rgime stable cest--dire une fois la latence coule. Pour un disque dur, le temps de latence est relativement long car la tte de lecture doit tre positionne mcaniquement puis il faut encore attendre que le bon secteur se trouve sous la tte. Depuis quelques temps, il sest creus un foss entre la vitesse des micro-processeurs et la vitesse des mmoires dynamiques qui sont utilises comme mmoire centrale des ordinateurs. Les mmoires SDRAM augmentent le dbit mais rduisent peu la latence. Pour viter que le micro-processeur perde du temps attendre les donnes de la mmoire, des caches mmoire forms de mmoires statiques plus rapides sont intercals entre le micro-processeur et la mmoire centrale. Le but est semblable celui des caches disques permettant dacclrer les accs aux disques durs.
- 126 -
Principe du cache Le bon fonctionnement des caches est bas sur le principe de localit qui dit que le code et les donnes des programmes ne sont pas utilises de manire uniforme. On constate souvent que 10% du code dun programme contribue 90% des instructions excutes. On distingue deux types de localit. La localit temporelle indique que des lments auxquels on a eu accs rcemment seront probablement utiliss dans un futur proche. La localit spatiale indique que des lments proches ont tendances tre rfrencs des instants proches.
17.3 Fonctionnement
Le cache contient des copies de donnes qui sont en mmoire centrale. Avant tout accs la mmoire, le processeur vrifie si les donnes ne sont pas prsentes dans le cache. Auquel cas, le processeur utilise les donnes contenues dans le cache et naccde pas la mmoire. Sinon, il est ncessaire daller chercher les donnes en mmoire centrale.
17.3.1 Organisation
Le cache est organis par lignes. Chaque ligne contient une portion de 8 512 octets des donnes en mmoires et une tiquette (tag en anglais) qui est ladresse de ces donnes en mmoire. Lorsque le micro-processeur veut accder la mmoire, il compare ladresse avec les tiquettes des lignes du cache. Sil trouve ladresse parmi les tiquettes, le micro-processeur utilise directement les donnes du cache. On parle alors de succs de cache. Sinon on parle de dfaut de cache ou dchec de cache (cache miss).
Organisation du cache
- 127 -
17.4 Associativit
Un lment crucial de lefficacit du cache est de retrouver rapidement si des donnes une adresse mmoire sont dj dans le cache. Afin dacclrer cette recherche, le nombre de lignes o peuvent tre mises les donnes une adresse mmoire fixe est souvent rduit. Ce nombre ne dpend pas de ladresse et il est appel lassociativit du cache. Lorsque ce nombre est rduit 1, cest--dire que les donnes de chaque adresse peuvent tre mises dans une seule ligne du cache, on parle de cache direct. Si au contraire lassociativit est gale au nombre de ligne du cache, cest--dire que chaque donne peut tre mise dans nimporte quelle ligne du cache, le cache est dit compltement associatif. Si lassociativit est un entier n, on parle de cache n-associatif (n-way en anglais). Les caches sont trs souvent directs, 2-, 3- ou 4-associatifs mais rarement plus. Le cache de niveau 1 de lAthlon est par exemple 2-associatif.
- 128 -
Cache direct Lavantage des caches directs est de simplifier au maximum la recherche des donnes dans le cache. Il suffit en effet de comparer ltiquette de la ligne correspondante avec une partie de ladresse. Comme la ligne est unique, il est mme possible de commencer la lecture du cache pendant la comparaison de ltiquette avec ladresse. Si cette comparaison rvle un dfaut de cache, cette lecture anticipe du cache est annule. Les caches directs souffrent par contre dun problme. Si un programme utilise simultanment deux parties de la mmoire qui doivent aller dans la mme ligne de cache, il peut se produire de nombreux dfauts de cache.
- 129 -
- 130 -
dfauts de conflit (conflict misses) Ces dfauts interviennent en plus des deux prcdents types. Un bloc a pu tre charg puis enlev du cache car dautres blocs avec le mme indice ont t chargs. Le nombre de ces dfauts peut tre rduit en augmentant lassociativit du cache.
Hirarchie de caches
- 131 -
- 132 -
18 Bibliographie
1. J. L. Hennessy and D. A. Patterson, Architecture des machines. Thomson Publishing, 1996, ISBN 2-84180-022-9. 2. W. Stallings, Organisation et architectures des machines. Pearson Education, 2003, ISBN 2-7440-7007-6. 3. Y. N. Patt and S. J. Patel, Introduction to computing systems: from bits and gates to C and beyond. McGraw Hill, 2004, ISBN 0-07-121503-4. 4. A. Tanenbaum, Architecture de lordinateur. Pearson Education, 2005, ISBN 2-7440-7122-6. 5. B. Goossens, Architecture et micro-architecture des processeurs. Springer, 2002, ISBN 2-287-59761-1. 6. D. Harris and S. Harris, Digital design and computer architecture. Morgan Kaufmann Publishers, 2007, ISBN 0-123704979.
- 133 -
-i-
8.2 Horloge . . . . . . . . . 8.3 Exemple . . . . . . . . . 8.4 Automate . . . . . . . . . Architecture dun micro-processeur . . . . 9 Architecture dun micro-processeur . . . . 9.1 Modle de von Neumann . . . . . 9.2 Organisation interne des composants . . . 9.3 Instructions . . . . . . . . 9.4 Cycle dexcution . . . . . . . 9.5 Registres PC et IR . . . . . . . 9.6 Codage des instructions . . . . . Micro-processeur LC-3 . . . . . . . 10 Micro-processeur LC-3 . . . . . . 10.1 Registres . . . . . . . . 10.2 Indicateurs N, Z et P . . . . . . 10.3 Mmoire . . . . . . . . 10.4 Instructions . . . . . . . . 10.5 Codage des instructions . . . . . 10.6 Schma interne du LC-3 . . . . . Programmation du micro-processeur LC-3 . . . 11 Programmation du LC-3 . . . . . . 11.1 Programmation en assembleur . . . . 11.2 Exemples de programmes . . . . . Les sous-routines et la pile . . . . . . . 12 Les sous-routines et la pile . . . . . . 12.1 Instruction JMP . . . . . . . 12.2 Sous-routines . . . . . . . 12.3 Sauvegarde des registres . . . . . 12.4 Programmation . . . . . . . 12.5 Comparaison avec dautres micro-processeurs 12.6 Appels systme . . . . . . . 12.7 Interruptions . . . . . . . . Entre/Sorties . . . . . . . . . 13 Entres/Sorties . . . . . . . . 13.1 Adressage des circuits dentres/sorties . . 13.2 Scrutation des circuits dentres/sorties . . 13.3 Entres/Sorties du LC-3 . . . . . Autres architectures . . . . . . . . 14 Autres architectures . . . . . . . Processeurs 80x86 . . . . . . . . . 14.1 Processeurs 80x86 . . . . . . Comparaison CISC/RISC . . . . . . . 14.2 Comparaison CISC/RISC . . . . . Architecture IA-64 . . . . . . . . 14.3 Architecture IA-64 . . . . . . Pipeline . . . . . . . . . . . 15 Pipeline . . . . . . . . . . 15.1 Principe . . . . . . . . . 15.2 tages du pipeline . . . . . . 15.3 Ralisation du pipeline . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
60 . 60 . 61 . 62 . 62 . 62 . 62 . 64 . 64 . 64 . 64 . 65 . 65 . 65 . 66 . 66 . 66 . 73 . 75 . 77 . 77 . 77 . 79 . 85 . 85 . 85 . 85 . 86 . 90 . 92 . 92 . 93 . 97 . 97 . 97 . 98 . 98 . 101 . 101 . 102 . 102 . 106 . 106 . 109 . 109 . 114 . 114 . 114 . 114 . 115 .
- ii -
15.4 Alas . . . . . Mmoire virtuelle . . . . . 16 Mmoire virtuelle . . . 16.1 Principe . . . . . 16.2 Fonctionnement . . . 16.3 Translation Lookaside Buffer 16.4 Swap . . . . . 16.5 Table des pages hirarchique 16.6 Linux . . . . . Caches mmoire . . . . . 17 Caches mmoire . . . . 17.1 Hirarchie de mmoire . 17.2 Principe . . . . . 17.3 Fonctionnement . . . 17.4 Associativit . . . . 17.5 Politiques de remplacement 17.6 Dfauts de cache . . . 17.7 Hirarchie de cache . . 17.8 Sparation des caches . . Bibliographie . . . . . . 18 Bibliographie . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
116 . 122 . 122 . 122 . 122 . 123 . 124 . 124 . 125 . 126 . 126 . 126 . 126 . 127 . 128 . 130 . 130 . 131 . 131 . 133 . 133 .
- iii -