Les FICHIERS en COBOL
FILE-CONTROL.
Gestion de fichiers
- le pgm COBOL doit faire le lien avec cet ensemble de donnée sur un périphérique.
Organisation des fichiers
– Séquentiel.
– Aléatoire.
– Mixte (séquentiel indexé).
Objectifs du COBOL
2 zones tampons en mémoire centrale :
– Tampon de bloc (Système d’exploitation)
– Tampon d’article (programme)
Méthode et moyens d’accès:
ENVIRONMENT DIVISION
FILE-CONTROL
Attributs pour l’OS
Mémoires tampons
FILE SECTION
Attributs pour les zones tampons:
Mémoire centrale:
BLOC
Enregistrement
Traduction
Fichiers de plusieurs articles 1/2
Fichiers de plusieurs articles ½
Exemple • FD COMMANDES RECORD IS VARYING IN SIZE DEPENDING ON LONGUEUR-LIGNE CODE-SET IS EBCDIC.
… … …
Synthèse: les fichiers en COBOL
Actions sur le buffer du fichier PROCEDURE (le charger ou le vider)
READ nom-de-fichier
WRITE nom-record-fi
CLOSE nom-de-fichier Fermeture du fichier PROCEDURE
Ouverture du fichier (reservation PROCEDURE ressource) et définition du mode d’utilisation
OPEN INPUT
OUTPUT
I-O
DATA
FILE SECTION
Déclaration de l’enregistrement du fichier
01 nom-record-fi
DATA
FILE SECTION
Déclaration du nom-de-fichier, suivi de la description, de l’organisation du fichier.
FD nom-de-fichier
[ORGANIZATION; BLOCK …]
ENVIRONMENT
INPUT-OUTPUT
SECTION.
Lien entre le fichier logique et le fichier sur un périphérique
FILE-CONTROL
SELECT … ASSIGN
Syntaxe COBOL Signification DIVISION
Exercice
3 types d’enregistrements:
– Enreg debut de stock: (1:code enreg=‘D’;2-9:n° article dont les 2 premières positions = famille d’articles; 10-15:date valorisation; 16-45: libelle; 46-49: quantite; 50-54: prix unitaire dont 2 décimales)
– Enreg entrée: (1:code enreg=‘E’;2-9:n° article dont les
2 premières positions = famille d’articles; 10-15:date entrée;16-20:n° bon entrée; 23-26: qty; 27-31: PU dont
2 décimales; 32-54: inutilisé)
– Enreg Sortie: (1:code enreg=‘S’;2-9:n° article dont les 2 premières positions = famille d’articles; 10-15:date sortie;16-22:n° bon sortie; 23-26: qty; 27-54: inutilisé)
... ... ... ...
CARACTERISTIQUES
Fichiers : 2 niveaux
- allocation d’espace disque, organisation des fichiers sur disques (blocs)
- transfert des blocs d’octets du disque vers la mémoire centrale ( et inversément)
- gestion des répertoires de fichiers (directory)
- stocker des enregistrements sur disque.
Ex. : ( “L’année du déluge”, “Eduardo Mendoza”, “Seuil”, 1993)
-> méthodes d’accès aux données
NIVEAU SYSTEME D’EXPLOITATION
Accès individuel et par bloc
RAM: chaque octet possède une adresse;
accès octet par octet temps d’accès : 60 à 70 nanosecondes
Disque:
les octets sont regroupés par blocs (p.ex. 512 ou 1024 octets / bloc) temps d’accès ( positionnement de la tête de lecture ):
8 à 9 millisecondes modifier un octet d’un bloc =>
Efficacité => regrouper toutes les opérations portant sur les octets d’un bloc pendant qu’il est en mémoire RAM.
...
Lecture d’un bloc du disque
-> il est avantageux de lire plusieurs blocs contigüs à la suite
-> Le contrôleur de disque et le CPU travaillent en parallèle.
Méthode pour nommer des objets stockés sur disque (équiv. variables dans les programmes)
Fichier collection d’octets identifié par un nom (le nom du fichier)
Opérations de création et d’écriture écrire: fichier × liste-octets × position -> fichier créer: … supprimer: …
vider: … longueur: fichier -> entier
Réalisation. Un répertoire (directory, folder, dossier, catalogue, etc.) + un ensemble de blocs attribués à chaque fichier.
Organisation.
Organisation - blocs contigus
Problème de création d’un fichier
Comment gérer plusieurs fichiers qui grandissent simultanément?
Nécessité de réserver un nombre fixe de blocs à la création.
Où allouer le premier bloc? Combien de blocs réserver?
Problème de fragmentation - trous - => impossible de trouver un espace libre suffisamment grand.
Exemples
Apple II
DEC PDP11 - RT11 IBM 3090 - VM (minidisques) rép. A C B
Organisation - chaîne de blocs
Le répertoire contient le no. du premier bloc du fichier
Chaque bloc contient le no. du suivant
Les blocs inutilisés sont liés entre eux de la même manière
Avantages
Pas de réservation de blocs à la création
Utilisation optimale du disque
Extensibilité des fichiers
Problèmes
Trouver le n-ième bloc du fichier => lire n blocs
Mélange de données (utilisateur) et adresses disque (système) dans le même bloc
Mauvaise résistance aux pannes
Organisation - index de blocs - FAT
Table d’allocation des blocs
Le répertoire contient le no. du premier bloc du fichier
On a une table d’allocation (FAT) qui contient un élément par bloc du disque.
FAT[i]
= <libre> si le bloc n’est utilisé par aucun fichier
= j si le bloc no. i est utilisé par un fichier f et j suit le bloc no. i dans f
= <fin> si le bloc no. i est utilisé par un fichier f et c’est le dernier bloc de f.
Pour que ce soit efficace il faut que la FAT soit copiée en mémoire centrale.
Problème
Pour le gros disques (1 gigaoctet) la FAT devient très grande
Exemple
DOS
Organisation - index de blocs hiérarchisés
Un descripteur de fichier (i-node) contient
Si le fichier fait plus de 10 blocs on alloue un bloc d’index primaire qui contient les nos des N blocs suivants.
Si le fichier fait plus de N + 10 blocs on alloue un bloc secondaire qui contient les nos des N blocs d’index primaire.
Si le fichier fait plus de N2 + N + 10 blocs on alloue un bloc tertiaire …
Exemple : UNIX
NIVEAU UTILISATEUR
Un fichier est une collection d’enregistrements
Un enreg. est composé d’un ou plusieurs champs
Un champ est une chaîne d’octetsdelong.fixeouvariable
Les champs sontgénéralementtypés(entier, ch. de car...)
Un ou plusieurs parmi les champs jouent le rôle de clé
Opérations de base
Organisations
1) Séquentielle, 2)relative, 3)indexée (index B - arbre)
Types d’accès
Fichiers de textes / fichiers binaires
On distingue deux types de fichiers: fichiers de textes
Ex : 35 -> (63c est le code ascii de ‘3’,
65C est le code ascii de ‘5’)
Ex: 35 -> (3510 = 438)
63C 65C
43C
1) Fichiers en organisation séquentielle
Les enregistrements forment une séquence, c-à-d qu’ils sont arrangés de manière adjacente les uns à la suite des autres.
Sur la plupart des ordinateurs l’entrée sur clavier et la sortie sur l’écran sont assimilés à des fichiers séquentiels.
Support physique: unité de bande magnétique, disques magnétiques, disques optiques.
Remarque: l’organisation séquentielle convient pour les deux types de fichiers (textes et binaires)
Opérations sur les fichiers séquentiels
Opérations d’écriture
Opérations de lecture
-> l’accès à un enregistrement particulier demande l’ouverture du fichier puis la lecture successive de tous les enregistrements qui précédent l’enregistrement recherché.
-> pour accéder à l’enregistrement précédent, il faut réouvrir le fichier (positionnement au début du fichier)
Etat de lecture / état d’écriture le fichier ne peut se trouver que dans un seul état à la fois pour passer à l’état d’écriture: opération (1) pour passer à l’état de lecture: opération (3)
Problème : comment modifier un enregistrement d’un fichier séquentiel ?
Les fichiers séquentiels en Modula
Le module “InOut”
Lecture et écriture de chaînes de caractères et de nombres. Ex: ReadString, ReadCard, WriteString,...
La lecture se fait depuis le clavier ou depuis un fichier de texte.
L’écriture se fait sur l’écran ou dans un fichier de texte.
Fin du flot d’entrée ou lecture de la fin du fichier:
Done = FALSE ou in.eof = TRUE.
Le module “Terminal”
Lecture et écriture de charactères et de chaînes de caractères au terminal. Ex: KeyPressed, Read,Write,...
Remarque: la procédure Read ne fait pas l’écho du caractère lu (il faut utiliser Write pour faire l’écho)
Le module LogiFile (voir fichiers en organisation relative)
2) Les fichiers en organisation relative (ou fichiers à accès direct)
Les enregistrements sont identifiés par un numéro
d’ordre (relatif par rapport au début du fichier).
L’enregistrement de numéro d’ordre n occupe la nème position dans le fichier.
Deux type d’accès possible:
Avantages accès direct:
Support physique: disques magnétiques, disques optiques.
Remarque: les fichiers relatifs sont de type texte ou binaire (mais utilisation limitée de l’accès direct pour les fichiers de textes)
Opérations sur les fichiers relatifs
Opérations de positionnement
Opérations d’écriture
Opération de lecture
Les fichiers relatifs en Modula
Le module “LogiFile” (exemples d’opérations):
Les enregistrements sont adressés par un déplacement relatif en nombre d’octets à partir du début du fichier ( déplacement = ‘highpos’∗10000H + ‘lowpos’ )
PROCEDURE GetPos( f : File;
VAR highpos : CARDINAL;
VAR lowpos : CARDINAL; )
(* donne la position courante du fichier *)
PROCEDURE SetPos( f : File; highpos : CARDINAL; lowpos : CARDINAL; )
(*positionne la tête de lecture / d’écriture dans le fichier*)
PROCEDURE ReadNBytes( f : File buffPtr : ADDRESS; requestedBytes: CARDINAL; VAR read : CARDINAL; )
(*lit dans le fichier ‘f’ n octets (n=’requestedBytes’) et les copie dans le buffer à l’adresse ‘buffptr’*)
PROCEDURE WriteNBytes( f : File buffPtr : ADDRESS; requestedBytes: CARDINAL;
VAR written : CARDINAL; )
(* idem mais pour écrire dans le fichier ‘f’ *)
3) Les fichiers en organisation séquentielle indexée
Origine: langage COBOL (ISAM : Index Sequential Access Method)
Implique deux structures de données: données + index.
Idée générale: index de fichier ≡ index à la fin d’un livre.
Clé
Le champ (ou les champs) par lequel les enregistrements sont référencés s’appelle clé d’accès.
-> on peut accéder à un enregistrement en précisant la valeur de la clé.
Un fichier indexé doit avoir au moins une clé (la clé primaire).
Il peut avoir d’autre clés (secondaire, tertiaire,...).
La clé d’accès peut être unique ou non.
Ex. clé unique:
Ex. clé non unique:
La clé primaire est unique (mais il y a des exceptions...).
Index
L’index est une suite de paires <K,A> où A est l’adresse de l’enregistrement qui a K pour valeur de clé.
Remarque: L’index est généralement trié selon la clé