Exemple de gestion d'un buffer clavier en liste circulaire

Slides:



Advertisements
Présentations similaires
Tris.
Advertisements

Chap. 4 Recherche en Table
Chapitre 3 Les arbres binaires
Chapitre annexe. Récursivité
Synchronisation des processus père - fils
Module Systèmes dexploitation Chapitre 6 Communication Interprocessus Partie III École Normale Supérieure Tétouan Département Informatique
Les Structures de contrôles itératives
Cours n°2M2. IST-IE (S. Sidhom) UE 303 Promo. M2 IST-IE 2005/06 Conception dun système d'information multimédia Architecture trois-tiers : PHP/MySQL &
C.
Structures et unions types énumérés Qu'est-ce qu'une structure
INTRODUCTION.
Chap. 1 Structures séquentielles : listes linéaires
ESIEE Paris © Denis BUREAU I N Initiation à la programmation avec le langage Java.
FLSI602 Génie Informatique et Réseaux
4. Les structures de tests
Algorithmique et Structures de données
Traitement Co-Séquentiel: Appariment et Fusion de Plusieurs Listes
Utilisation des tableaux
ALGORITHMES RECURSIFS
Cours 7 - Les pointeurs, l'allocation dynamique, les listes chaînées
Structures de données linéaires
Récursivité.
Synchronisation et communication entre processus
II. Chaînage, SDD séquentielles
8PRO100 Éléments de programmation Allocation dynamique de la mémoire.
II. Chaînage, SDD séquentielles
IFT-2000: Structures de Données Listes chaînées Dominic Genest, 2009.
Les Classes les structures en C (struct) regroupent des variables : structuration de l'analyse mais problèmes de cohérence problèmes de sécurité d'accès.
Complément Le diagramme des classes
Etude de cas : buffer clavier
Les pointeurs Enormément utilisé en C/C++ ! Pourquoi? A quoi ça sert?
Les structure d’un programme :
Algorithme de Bellman-Ford
Code des opérateurs Appartenance à une liste ( appartient_l ) –Prototype: Bool appartient_l(type_el x, liste L) –Pré-conditions: aucunes. –Post-conditions:
IFT Structures de données
Sixième cours Les chaînes de caractères et le passage de paramètres par référence Passage de paramètres par référence String.h.
Points importants de la semaine Les allocations programmées de mémoire. Les enregistrements.
IFT-2000: Structures de données Piles et files Dominic Genest, 2009.
Synchronisation Classique
Structures de données IFT-10541
Répéter dans un programme avec une Instruction itérative
EPID-CPI-ISAIP Philippe Bancquart - mise à jour 24/02/ page 1 Gestion des transactions SQLServer.
Plan cours La notion de pointeur et d’adresse mémoire.
Systèmes de gestion de bases de données NFP 107 Les techniques du contrôle de concurrence Philippe Rigaux
Chapitre IX Gestion de flux.
Ch. PAUL - Piles et Files à l'aide de listes chainées
LES PILES ET FILES.
Les Pointeurs et les Tableaux Statiques et Tableaux Dynamiques
INTRODUCTION.
II. Chaînage, SDD séquentielles
Mémoire périphérique Stockage primaire: Mémoire principale (RAM)
Gestion de processus Corrigé TD 1 EFREI I
8PRO100 Éléments de programmation Comment répéter plusieurs fois une séquence d’instructions.
Procédures et fonctions Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
Algorithmique et programmation (1)‏
Un survol du language C.
Interactions entre Processus
Labo 4 : Les structures et les entrées et sorties
Chaînage et LSC : motivation et principe Manipuler la LSC : exemples Variantes : LDC, liste circulaire, … Etude de cas : réalisation d’un buffer clavier.
II. Chaînage, SDD séquentielles
Programmation Système et Réseau
Cours LCS N°4 Présenté par Mr: LALLALI
Les variables fichiers. Le type fichier On manipule les fichiers par l’intermédiaire de structures FILE décrites dans stdio.h FILE *monFichier; –Nom physique.
Objets et Actions Élémentaires.
Chaînage et LSC : motivation et principe Manipuler la LSC : exemples Variantes : LDC, liste circulaire, … Etude de cas : réalisation d’un buffer clavier.
Chaînage et LSC : motivation et principe Manipuler la LSC : exemples Variantes : LDC, liste circulaire, …  Etude de cas : réalisation d’un buffer clavier.
Introduction à l’Informatique chap 3 Licence SPI Mme Delmotte.
L ES INSTRUCTIONS DE L ECTURE, E CRITURE ET A FFECTATION Réalisé par : OUZEGGANE Redouane Département de Technologie Faculté de Technologie – Université.
1 UNIX AVANCE Yves PAGNOTTE – Janvier – LES PROCESSUS SOUS UNIX.
Transcription de la présentation:

Exemple de gestion d'un buffer clavier en liste circulaire (le dernier poste d'une liste circulaire est rattaché au premier)

On a un ensemble des données homogènes gérées sur un principe de lecture/écriture concurrente : lecture et écriture peuvent se produire de manière simultanée mais sont conditionnées par l'autre opération.   Une lecture ne peut être faite que si une écriture a déjà été faite, mais une écriture ne peut être faite que si la lecture a été effectuée sous peine de perdre l'information. Plus généralement : il s'agit d'une file d'attente particulière où l'on n’a pas besoin de produire toutes les données pour commencer à les consommer.

Le nombre de postes est fixé au départ et ne varie plus au cours du programme. On sait qu'on consomme en moyenne un nombre de postes à chaque fois qu'on en produit. lecteur écrivain Il y en a deux indicateurs : lecteur et écrivain

Il faut écrire deux algorithmes : lire : c'est prendre l'information référencée par lecteur, à condition que cela soit possible et déplacer lecteur sur le poste suivant écrire : c'est mettre une information référencée par écrivain si cela est possible, et déplacer écrivain sur le poste suivant Remarque : On ne peut pas lire si rien n'a été écrit ou si l'information a été déjà lue. On ne peut pas écrire, si le poste contient une information encore non-lue.

le fait de taper RC entame la lecture On tape dir très rapidement Exemple écrivain . : C c o p y lecteur D\> copy C: . le fait de taper RC entame la lecture On tape dir très rapidement

d . : C i r p y écrivain lecteur

Modèle statique typedef struct elt { T info ; logique àlire ; } elt ;   àlire = vrai : on peut lire, mais pas écrire àlire = faux : on peut écrire, mais pas lire àlire est un flag (drapeau).

typedef struct liste_circ { elt donnée [n] ; int lecteur ; int écrivain ; }liste_circ

1. Initialisation d’une liste circulaire données : int n données modifiées : liste_circ *l Entête en C: void init(int n, liste_circ *l); {variables locales : int i POUR (i  0 à n-1) FAIRE { l->donnée[i].àlire  faux l->lecteur  0 l->ecrivain  0 }

2. Lecture à partir d’une case de liste circulaire données : int n données modifiées : T *elt_à_lire; liste_circ *l résultat de type logique Entête en C : int lecture(int n, liste_circ *l, T *elt_à_lire)

{variables locales : logique ok SI (l->donnée[l->lecteur].àlire = faux) ALORS ok  faux SINON { ok  vrai *elt_à_lire  l->donnée[l->lecteur].info l->donnée[l->lecteur].àlire  faux l->lecteur  (l->lecteur + 1) mod n } retourner ok

3. Ecriture dans une case de liste circulaire données : int n, T elt_ecr données modifiées : liste_circ *l résultat de type logique Entête : int écriture(int n, T elt_ecr, liste_circ *l);

{variables locales : logique ok SI (l->donnée[l->ecrivain].àlire = vrai) ALORS ok  faux SINON { ok  vrai l->donnée[l->ecrivain].info  elt_ecr l->donnée[l->ecrivain].àlire  vrai l->ecrivain  (l->ecrivain + 1) mod n } retourner ok

Modèle dynamique typedef struct elt { T info ; logique àlire struct elt *suivant  } elt   typedef elt * ptr_elt

typedef struct liste_circ { ptr_elt lire ptr_elt ecrire } liste_circ ; Remarque : Rien dans les types n'implique qu'après le dernier on passe sur le premier, ceci devra être dit dans les algorithmes. En statique il s’agit de l’opération modulo n En dynamique il s’agit du passage au suivant