diff --git a/src/simulator/mmu.rs b/src/simulator/mmu.rs new file mode 100644 index 0000000..e69de29 diff --git a/src/simulator/translationtable.rs b/src/simulator/translationtable.rs new file mode 100644 index 0000000..d0d8fc2 --- /dev/null +++ b/src/simulator/translationtable.rs @@ -0,0 +1,78 @@ +//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 + } + } + +} \ No newline at end of file