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