Nachos Syscall - Implémentation d`appels système de

Transcription

Nachos Syscall - Implémentation d`appels système de
Systèmes d'exploitation
Labo
nachos_Syscall
(v2.2)
Daniel Rossier
Nachos (1/4) - Syscall
Implémentation d'appels système de base
29 septembre 2008
A rendre: 19 octobre 2008, 18H00
Objectif de ce laboratoire
Nachos est un petit système d’exploitation entièrement écrit en Java destiné à fonctionner sur une machine de
type MIPS simulé. Par conséquent, l’environnement Nachos comprend les composants logiciels nécessaires à la
simulation d’un processeur MIPS d'une part, et des différentes fonctionnalités d’un système d’exploitation
monolithique d'autre part. Le matériel tel que l'horloge du processeur MIPS, la console, le contrôleur
d’interruption, etc., sont entièrement simulés.
Du côté application, l’utilisateur peut développer des programmes C dont le code binaire peut être chargé par
Nachos et s'exécuter sur la machine MIPS simulée. Nachos étant exécuté sous Linux, il sera nécessaire d'utiliser
un cross-compilateur afin de générer du code binaire compatible MIPS (format COFF et non ELF).
L’objectif des laboratoires Nachos est de mettre en pratique l'ensemble des connaissances acquises durant le
cours de systèmes d'exploitation. Nachos permet en effet facilement la manipulation des concepts dans un noyau
au comportement similaire à un système d'exploitation monolithique.
Les laboratoires sont décomposés en quatre partie: 1) Syscall – 2) IPC – 3) Virtual Memory (VM) – 4) MT
(Multithread)
Le projet consiste, dans une première étape, à implanter un appel système spécifique, en l'occurrence la fonction
fork(). Cet appel système permet la création d'un processus fils à partir d'un processus courant. Dans une
seconde partie, il s'agira d'implémenter un algorithme de remplacement de page afin de limiter les fautes de
page autant que possible (la version de base consiste à parcourir l'ensemble des tables de page et à sélectionner
la première page valide).
Indications
- Ce laboratoire est à effectuer par groupe de deux étudiants, et est soumis à une validation finale orale et
individuelle.
- Le code source devra être rendu (et extensivement commenté).
- Il n'y a pas de journal/rapport pour ce laboratoire
Etape 1: Utilisation du workspace Eclipse et premiers pas avec Nachos
1.1 Télécharger le fichier workspace Eclipse fourni sur le site SYX/SYE (version Windows ou Linux) et
installer l'arborescence (sous Linux avec unzip).
1.2 Examiner l'arborescence des deux projets du workspace (nachos_syx, nachos_syx_usr). Examinez
attentivement les différents paquetages. Démarrer l'exécution de nachos en démarrant le projet nachos_syx.
Lancez l'application display. La commande halt stoppe l'OS.
-1
-
Laboratoire de systèmes d'exploitation
1.3 A partir du code de display.c, vous devez comprendre le cheminement de l'appel système write(). Essayez
d'identifier les classes qui interviennent dans ce contexte. Il faut considérer le fichier usr/start.s qui est
toujours utilisé lors de l'édition des liens (linker)) (cf Makefile). Reportez vos découvertes dans la classe
Process.java.
Etape 2: Réalisation de la commande cd / pwd
Cette étape consiste à implémenter les commandes cd (change directory) et pwd (print working directory).
Typiquement, ces commandes utiliseront des appels systèmes liés au système de fichiers (classe VFS.java et
NAFSFilesystem.java). Prenez note que ces commandes ne sont pas des applications, mais bien des commandes
du shell.
2.1 La commande pwd doit simplement afficher le répertoire courant.
2.2 La commande cd permet de changer le répertoire courant. Faites-en sorte que cette commande effectue le
changement du répertoire de travail courant.
Etape 3: Implémentation de la commande ls
La commande ls est une application à part entière. Elle doit afficher le contenu du répertoire courant. Vous
pouvez obtenir de l'aide sur ls avec man ls.
3.1 Implémentez ls pour qu'il affiche le contenu du répertoire courant
3.2 La commande ls doit afficher au moins le nom, la taille et une indication pour dire s'il s'agit d'un répertoire
ou non (R: fichier régulier / D: directory).
3.3 Pour chaque répertoire trouvé, démarrez un nouveau processus ls qui affichera le contenu de ce répertoire,
sans oublier de synchroniser le processus parent et fils.
Indications complémentaires
•
•
•
Le fichier d'en-tête (dirent.h) contient les structures et les prototypes des appels systèmes à
implémenter.
Les codes d'erreur des appels systèmes sont stockés dans le fichier errno.h. Bien entendu, il ne s'agit pas
de traiter toutes les erreurs, mais seulement les plus évidentes (fichiers/répertoires absents, mauvais type
de fichier, etc.)
Les classes principales de ce laboratoire sont les suivantes (pas forcément exhaustif):
o
o
o
nachos.kernel.fs.VFS
nachos.kernel.fs.NAFSFilesystem
nachos.kernel.proc.Process
Bonne chance !
-2-