mmu & translation table def
This commit is contained in:
parent
5b4683c736
commit
172dad6598
0
src/simulator/mmu.rs
Normal file
0
src/simulator/mmu.rs
Normal file
78
src/simulator/translationtable.rs
Normal file
78
src/simulator/translationtable.rs
Normal file
@ -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<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
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user