78 lines
1.8 KiB
Rust
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
|
|
}
|
|
}
|
|
|
|
} |