Enseignements

Systeme Projet 18

Mini-shell avec job control

PROJET

Les etudiants du groupe B qui le souhaitent peuvent se joindre aux groupes de TP de vendredi 30/03 pour compenser le temps perdu sur la configuration de GitHub.

Comme la mise en place de GH prend trop de temps, le projet devra finalement être rendu sur J@lon, sous la form d’une archive ZIP.

L’objectif du projet est d’implémenter en langage python (v3.x) un interpreter de langage de commande (ILC) Unix avec les fonctions dites de job control.

Cet interpréteur doit être capable de créer des pipeline de longueur arbitraire. (Un pipeline est un enchaînement de commandes reliées par des pipes, comme celui qui suit:

ps -aux | sort -k1n 2>> /dev/null | tr 'a-z' 'A-Z' | tee toto.txt | more

Comme dans l’exemple précédent, votre ILC doit traîter correctement toutes les redirections de l’entrée standard, la sortie standard et la sortie d’erreur, en tenant compte des éventuelles redirections en mode append (avec >> ).

Le job control signifie que les commandes doivent pouvoir être lancées en avant ou arrière plan, et que les signaux sont toujours correctement dirigés vers le job en avant-plan (ou le shell). De plus, chaque job (un pipeline) doit être numéroté et contrôllé à l’aides des commande jobs, fg et bg.

Modalités

Le projet est réaliser en équipe de 2 étudiants.

La réalisation s’étendra sur les 3 dernières semaines, avec une démo quasi-finale lors de la dernière séance: seules les fonctionnalités codées lors de la démo seront prises en compte dans la notation finale. En revanche, les étudiants disposeront d’une semaine supplémentaire å la suite de la dernière séance (celle de la démo), pour corriger les éventuels derniers bugs.

Pour réaliser ce projet vous n’avez le droit d’utiliser que les primitives que nous avons vues en Cours et séances d’exercice. Il est en particulier interdit d’utiliser les primitives telles que os.system(), os.popen() ou toute autre fonction d’une autre librairie, en particuilier si elle fait tout le travail!

Pour la séance de démo, vous devrez préparer la démo en imaginant à l’avance les exemples que vous allez présenter pour démontrer le bon fonctionnement de votre projet. Compte-tenu des effectifs, le temps accordé à chaque démo sera nécessairement court, disons de l’ordre de 5mins démo, suivies de 5 minutes de questions.

Pour commencer…

Regarder ce projet sur GitHub.

Il fournit un module python afin de parser une ligne de commande telle que le pipeline donné en exemple en haut de cette page. Vous avez le droit de l;utiliser, il a justement été développé pour vous, en utilisant des techniques de compilation qui sont au programme des années suivantes.

Suivez les instructions sur la page GH pour installer ce module python avec la commande pip (eventuellement avec l’option --user).

Ensuite testez-le et essayez de comprendre comment l’intégrer à votre projet.

La méthode des petits pas

Le projet est un exercice plus complexe que les exercices habituels, mais il fait appel aux meme techniques de base que celles que nous avons utilisé jusqu’à présent. Pour éviter de se perdre dans les multiples aspects du projet, je vous conseille d’adopter la méthode des petits pas, qui consiste à se fixer des objectifs successifs, jusqu’à atteindre l’objectif final.

Voici un exemple de démarche à suivre:

  1. Execution d’un job
    1. Savoir executer une unique commande sans arguments ni redirections à partir du resultat du lexer
    2. Savoir executer une unique commande avec arguments sans redirections, a partir du resultat du lexer
    3. Savoir executer une unique commande avec arguments et redirections, a partir du resultat du lexer
    4. Savoir executer un enchainement (pipeline) de deux commandes, a partir du resultat du lexer
    5. Savoir executer un enchainement (pipeline) de trois commandes, a partir du resultat du lexer
    6. Savoir executer un enchainement (pipeline) de N commandes, a partir du resultat du lexer
  2. Job control
    1. Interruption du job en avant plan et retour au prompt (Ctrl-Z)
    2. Relancer le job interrompu en avant plan (commande fg)
    3. Passage en arrière plan d’un job interrompu (commande bg)
    4. Lancer un second job en avant plan
    5. Lister les jobs (commande jobs)
    6. Terminer un job (commande kill %n)

Pour continuer

Vous aurez un complément de cours sur le job control lors du cours du 3 avril.

Page d’Accueil

Enseignements 2017-18

Enseignements Antérieurs

Recherche…

edit SideBar

Blix theme adapted by David Gilbert, powered by PmWiki