Mmoire priphrique Stockage primaire Mmoire principale RAM Stockage

  • Slides: 17
Download presentation
Mémoire périphérique Stockage primaire: Mémoire principale (RAM) Stockage secondaire: Périphériques n n n Disques

Mémoire périphérique Stockage primaire: Mémoire principale (RAM) Stockage secondaire: Périphériques n n n Disques Rubans magnétiques etc.

Lecteur de disque Perche Plateaux Axe Têtes de lecture/écriture Piste

Lecteur de disque Perche Plateaux Axe Têtes de lecture/écriture Piste

Secteurs Un secteur est l’unité de base des E/S. Secteurs Espaces inter-secteur Bits de

Secteurs Un secteur est l’unité de base des E/S. Secteurs Espaces inter-secteur Bits de données

Secteurs Facteur d’entrelacement (Interleaving factor): Distance physique entre deux secteurs logiquement adjacent sur une

Secteurs Facteur d’entrelacement (Interleaving factor): Distance physique entre deux secteurs logiquement adjacent sur une piste. Tête

Terminologie Bloc (cluster): Groupe de secteurs. Plus petite unité d’allocation d’un fichier. Souvent entre

Terminologie Bloc (cluster): Groupe de secteurs. Plus petite unité d’allocation d’un fichier. Souvent entre 512 octets et 4 Ko

Accès disque par seconde Temps de rotation: . n À 7200 rpm, une rotation

Accès disque par seconde Temps de rotation: . n À 7200 rpm, une rotation prend 8. 3 ms. Temps d'accès moyen disque: n n n En moyenne le disque doit faire ½ rotation (4. 15 ms) Supposons que le temps moyen pour positionner le bras sur la bonne piste est aussi 4. 15 ms Total: 8. 3 ms Nombre d'accès disque par seconde: 120

Accès mémoire vs accès disque Intel Core 2: 27079 MIPS (2. 93 GHz) 27

Accès mémoire vs accès disque Intel Core 2: 27079 MIPS (2. 93 GHz) 27 milliards d'instructions par secondes Utilisé avec un disque permettant 120 accès/sec. on a: 225 millions d'instructions = 1 accès disque Même si ces calculs ne sont pas tout à fait exacts, ils donnent une idée de l'ordre de grandeur.

Traitement de fichiers Il est essentiel de minimiser le nombre d’accès disque! 1. Structurer

Traitement de fichiers Il est essentiel de minimiser le nombre d’accès disque! 1. Structurer l’information sur le disque pour minimiser le nombre d’accès nécessaires. 2. Minimiser le nombre d’accès futurs. p Principe de la localité p Un bloc lu sur le disque doit être utilisé optimalement.

Mémoire tampon L’information d’un bloc est mise dans un tampon ou cache. Si le

Mémoire tampon L’information d’un bloc est mise dans un tampon ou cache. Si le prochain accès est dans le même tampon alors on a pas besoin de faire un accès disque. En général, il y a plus d’une mémoire tampon: au moins une pour la lecture et une pour l’écriture.

Point de vu du programmeur Vision logique des fichiers: n n Un tableau d’octets

Point de vu du programmeur Vision logique des fichiers: n n Un tableau d’octets (sur Unix et Windows) Un pointeur de fichier indique la position courante. 3 opérations fondamentales: n n n Lire n octets à partir de la position courante (déplacer le pointeur de fichier) Écrire n octets à partir de la position courante (déplacer le pointeur de fichier) Déplacer le pointeur de fichier à une position donnée.

stdio. h #include <stdio. h> FILE* fopen(char* fichier, char *mode); mode p p r

stdio. h #include <stdio. h> FILE* fopen(char* fichier, char *mode); mode p p r w a r+ p w+ pour lecture, le fichier doit exister pour écriture, détruit les fichiers existants pour ajout à la fin pour lecture et écriture, le fichier doit exister pour lecture et écriture, le fichier est créé s'il n'existe pas déjà. int fclose(FILE* fp);

stdio. h int feof(FILE* fp); int fseek(FILE* fp, long deplacement, int origine) origine n

stdio. h int feof(FILE* fp); int fseek(FILE* fp, long deplacement, int origine) origine n SEEK_CUR position courante n SEEK_END fin du fichier n SEEK_SET début du fichier

stdio. h size_t fread(void* tampon, size_t taille, size_t nombre, FILE* fp); size_t fwrite(void* tampon,

stdio. h size_t fread(void* tampon, size_t taille, size_t nombre, FILE* fp); size_t fwrite(void* tampon, size_t taille, size_t nombre, FILE* fp); int fprintf(FILE* fp, char* format[, parametres]); int fscanf(FILE* fp, char* format[, parametres]);

fstream #include <fstream> #include <iostream> //3 classes: ifstream: pour lire dans des fichiers ofstream:

fstream #include <fstream> #include <iostream> //3 classes: ifstream: pour lire dans des fichiers ofstream: pour écrire dans des fichiers fstream: pour lire et écrire dans des fichiers fstream f; f. open("toto. txt", ios: : in|ios: : out); mode d'ouverture: n ios: : in n ios: : out n ios: : app n ios: : ate n ios: : binary n ios: : trunc // ouverture en lecture // ouverture en écriture // ajout en fin de fichier // se position à la fin // mode binaire // tronque le fichier à 0

fstream f. seekp(d, ios_base: : cur) // placer le curseur put d est le

fstream f. seekp(d, ios_base: : cur) // placer le curseur put d est le nombre d'octets de déplacement Position de départ: p p n n n ios_base: : cur ios_base: : beg ios_base: : end f. seekg(d, ios_base: : beg) // placer le curseur get

fstream char tampon[100]; f. read(tampon, 100); const char tab[]="toto"; f. write(tab, 4); //lire 100

fstream char tampon[100]; f. read(tampon, 100); const char tab[]="toto"; f. write(tab, 4); //lire 100 caractères // écrire 4 caractères char c; f. get(c); f. put(c); //Entrées/sorties formatées: f<<"Bonjour"<<endl; int n; f>>n;

surcharger operator<< struct complex{ double imag; double reel; complex(double i, double r): imag(i), reel(r){}

surcharger operator<< struct complex{ double imag; double reel; complex(double i, double r): imag(i), reel(r){} }; ostream& operator<<(ostream& f, complex c) { f<<"("<<c. reel<<", "<<c. imag<<")"; return f; }