Skip to topic | Skip to bottom
Home
Minfo06
Minfo06.TpAsy6r1.4 - 18 Nov 2006 - 17:53 - GuillaumeChazaraintopic end

Start of topic | Skip to actions

Retours sur NFS

Suppression de fichier ouvert

Sous Unix, les fichiers ont un compteur de références qui est incrémenté à chaque fois qu'un lien est créé vers le fichier et décrémenté quand les liens sont supprimés. Le fichier est supprimé du disque lorsque son compteur de référence atteint 0. Le compteur de références est aussi incrémenté/décrementé lorsque le fichier est ouvert/fermé. Ceci permet de supprimer (commande rm) un fichier ouvert en sachant qu'il ne sera définitivement supprimé que lorsque le processus ayant ouvert le fichier le fermera.

Vous pouvez tester ce comportement sur le /tmp de votre machine physique :

  • Consultez l'espace disque restant

  • Créez un gros fichier, puis vérifiez que l'espace disque restant a diminué

  • Arrangez-vous pour qu'un processus garde le fichier ouvert, puis supprimez le fichier

  • L'espace disque ne doit pas avoir diminué

  • Récupérez l'espace disque

La situation se complique sur NFS. Dans ce cas, lorsqu'un fichier est supprimé la commande de suppression est envoyée au serveur, qui l'exécute. Pour pouvoir continuer à travailler avec le fichier, le client NFS renomme le fichier en .nfsXXXXXXXXXXXXXXX avec un XXXXXXXXXXXXXXX unique, qui sera utilisé à la place du fichier supprimé. Ce fichier sera supprimé par le client selon les mêmes conditions que sur un système de fichier local.

Expérimentez cette fonctionnalité sur NFS. Les aventuriers pourront la tester sur leur NFS entre deux qemu, les autres pourront utiliser leur compte normal qui est sur NFS pour cette manipulation.

Protection root

Les permissions des fichiers entre les clients et le serveur se basent sur les UID. Le cas du root est géré différemment, déterminez la protection mise en place pour se protéger des root sur les clients. Remarquez que cette manipulation ne pourra être effectuée que sur le NFS entre 2 qemu.

Allocation dynamique et listes chaînées

L'objectif de cet exercice est d'implémenter une zone mémoire sous la forme d'un périphérique en mode caractère.

Cette mémoire est un FIFO avec buffer circulaire de grande capacité : 10Mo. Vu la taille du buffer, il ne s'agit pas d'allouer statiquement la mémoire une fois pour toutes, mais au contraire de l'allouer et de la désallouer dynamiquement par blocs. Pour simplifier, les blocs ne feront qu'un caractère.

Le buffer circulaire sera géré comme une liste chaînée de blocs de taille 1.

Les blocs seront alloués dynamiquement en utilisant kmalloc (fonctionnement similaire à malloc() : #include <linux/slab.h> kmalloc(taille, GFP_KERNEL), retourne NULL en cas d'erreur) et libérés en utilisant kfree. La liste chaînée sera celle fournie par Linux dans include/linux/list.h. Vous l'avez vu en cours, et sa structure est rappelée dans ces liens : http://isis.poly.edu/kulesh/stuff/src/klist/ et http://wiki.kldp.org/wiki.php/LinkedList.

Pensez bien à désallouer toute la mémoire allouée, sinon personne ne le fera ...

Chaque écriture dans le fichier spécial correspondra à la création de nouveaux blocs. Quand le buffer est plein, les nouvelles données écrasent les anciennes.

Les opérations de lecture consultent le buffer en le vidant au fur et à mesure. La condition de fin de fichier est donc un buffer vide.

-- GuillaumeChazarain - 01 Nov 2006
to top


You are here: Minfo06 > TpAsy6

to top

Copyright © 1999-2017 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding WIKIDeptinfo? Send feedback