//Nombre maximum de correspondances dans une table des pages //Cette donnée devra a terme etre recupérée depuis un fichier de configuration const MaxVirtPages : u64 = 200000; /* Une table de correspondance propre à un processus */ struct TranslationTable{ //capacité de cette table <=> nombre de correspondances possibles maxNumPages : u64, //la table en question //Vec implemente le trait Index, donc un bon choix pageTable : Vec } impl TranslationTable { fn create() -> TranslationTable { TranslationTable{ maxNumPages : MaxVirtPages, page } } } /* Une correspondance + données sur cette correspondance */ struct PageTableEntry{ //true <=> la correspondance est valide et la page est présente dans la ram valid : bool, //true <=> la page a été accédée (lecture/ecriture) récemment U : bool, //true <=> page modifiée mais non sauvegardée sur disque M : bool, //droits d'accès sur cette page readAllowed : bool, writeAllowed : bool, //numero de page physique <=> c'est notre correspondance physicalPage : i32, //true <=> cette page doit etre chargée depuis la swap zone du disque swap : bool, //a définir plus tard, en relation avec swap addrDisk : i32, //mis à 1 par le système quand cette page est impliquée dans une opération d'IO io : bool } impl PageTableEntry{ //Default PageTableEntry Constructor fn create() -> PageTableEntry { PageTableEntry { valid : false, U : false, M : false, readAllowed : false, writeAllowed : false, physicalPage : -1i32, swap : false, addrDisk : -1i32, io : false } } }