Skip to content
Extraits de code Groupes Projets
README.md 2,53 ko
Newer Older
  • Learn to ignore specific revisions
  • Arnaud Lefebvre's avatar
    Arnaud Lefebvre a validé
    # Projet_Q4_Groupe_O4
    
    ## Description des fichiers :
    
    @fonctions.h
    Un fichier header qui reprend les structures utilisées pour les listes chaînées ainsi que les nom 
    des fonctions utilisées dans fonctions.c
    
    @fonctions.c
    Un fichier avec l'implémentation des différentes fonctions décrites dans le fichier header.
    Dans celui-ci, il y a les fonctions liées aux listes chaînées, une fonction pour trouver les 
    diviseurspremiers d'un nombre donné, une fonction comptant les listes d'un fichier et des fonctions 
    pour initialiser les 2 buffers.
    
    @main.c
    Le code source à compiler pour obtenir le programme
    
    @test.c
    Un fichier reprenant les tests unitaires de nos fonctions
    
    @Makefile
    Le fichier reprenant les commandes à executer pour lancer le code de façon plus agréable
    
    ## Lancer le code :
    
    - make fact               : produit l'exécutable "fact"
    
    - make cpp / make cpp_xml : compile le programme et analyse ou donne le rapport d'analyse avec cppcheck
    
    - make val / make val_xml : compile le programme et analyse ou donne le rapport d'analyse avec valgrind
    
    - make test               : compile le programme et exécute les test unitaires
    
    - make clean              : nettoie le dossier et supprime les exécutables créés
    
    - ./fact -N nthreads input.txt output.txt : lance le programme exécutable fact
    	* nthreads   : le nombre de threads du programme, un entier >= 1
    	* input.txt  : le nom du fichier input ayant des lignes d'entiers compris entre 2 et 2^(31)-1
    	* output.txt : le nom du fichier output qui est créé si il n'existe pas encore
    
    
    Arnaud Lefebvre's avatar
    Arnaud Lefebvre a validé
    - ./test : lance le programme exécutable test
    
    
    Arnaud Lefebvre's avatar
    Arnaud Lefebvre a validé
    ## Architecture du code :
    
    Notre code est découpé en 3 parties : 
    
    1) Lecture  (1 thread ) : lit les lignes du fichier input et en stock les entiers dans le buffer_1
    
    2) Calcul   (n threads) : prend les entiers du buffer_1, calcul la liste des diviseurs premiers de l'entier
    			  et stock cette liste d'entiers dans le buffer_2
    3) Ecriture (1 thread ) : prend les listes d'entiers du buffer_2 et les écrit dans le fichier output
    
       Les 2 buffers sont protégés par 1 mutex et 2 sémaphores (free et full) chacun
    
    ## Bon fonctionnement :
    
    Pour un bon fonctionnement du code, il faut respecter quelque règles :
    
    1) Le fichier input doit être composé de lignes ne comportant que des entiers compris entre 2 et 2^(31)-1
       avec un seul entier par ligne
    
    2) Le nombre de thread(s) doit être précisé et doit être >= 1
    
    3) Pour un bon fonctionnement de valgrind, il faut que le fichier "example_input.txt" soit dans le même dossier
       que le Makefile
    
    # Projet_Q4_Groupe_O4