burritos/src/simulator/translationtable.rs
2023-03-13 17:42:03 +01:00

78 lines
1.8 KiB
Rust

//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<PageTableEntry>
}
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
}
}
}