Renamed exceptions to follow CamlCase convention
This commit is contained in:
parent
43de76bd72
commit
21159d3d98
@ -11,16 +11,17 @@ use std::fs::File;
|
|||||||
* Decommenter la variant si il est utilisé quelque part
|
* Decommenter la variant si il est utilisé quelque part
|
||||||
*/
|
*/
|
||||||
pub enum ExceptionType {
|
pub enum ExceptionType {
|
||||||
NO_EXCEPTION,//Everything ok!
|
//Everything ok!
|
||||||
|
NoException,
|
||||||
//SYSCALL_EXCEPTION,//A program executed a system call.
|
//SYSCALL_EXCEPTION,//A program executed a system call.
|
||||||
PAGEFAULT_EXCEPTION,//Page fault exception
|
PagefaultException,//Page fault exception
|
||||||
READONLY_EXCEPTION,//Write attempted to a page marked "read-only" */
|
ReadOnlyException,//Write attempted to a page marked "read-only" */
|
||||||
BUSERROR_EXCEPTION,
|
BusErrorException,
|
||||||
/* translation resulted
|
/* translation resulted
|
||||||
in an invalid physical
|
in an invalid physical
|
||||||
address (mis-aligned or
|
address (mis-aligned or
|
||||||
out-of-bounds) */
|
out-of-bounds) */
|
||||||
ADDRESSERROR_EXCEPTION, /* Reference that was
|
AddressErrorException, /* Reference that was
|
||||||
not mapped in the address
|
not mapped in the address
|
||||||
space */
|
space */
|
||||||
//OVERFLOW_EXCEPTION, //Integer overflow in add or sub.
|
//OVERFLOW_EXCEPTION, //Integer overflow in add or sub.
|
||||||
@ -30,18 +31,15 @@ pub enum ExceptionType {
|
|||||||
|
|
||||||
|
|
||||||
pub const STACK_REG: usize = 2;
|
pub const STACK_REG: usize = 2;
|
||||||
|
|
||||||
pub const NUM_INT_REGS: usize = 32;
|
pub const NUM_INT_REGS: usize = 32;
|
||||||
pub const NUM_FP_REGS: usize = 32;
|
pub const NUM_FP_REGS: usize = 32;
|
||||||
|
/// max number of physical pages
|
||||||
//max number of physical page
|
|
||||||
pub const NUM_PHY_PAGE : u64 = 400;
|
pub const NUM_PHY_PAGE : u64 = 400;
|
||||||
//doit etre une puissance de deux
|
/// Must be 2^x
|
||||||
pub const PAGE_SIZE : u64 = 128;
|
pub const PAGE_SIZE : u64 = 128;
|
||||||
//doit etre un multiple de PAGE_SIZE
|
/// Must be a multiple of PAGE_SIZE
|
||||||
pub const MEM_SIZE : usize = (PAGE_SIZE*NUM_PHY_PAGE*100) as usize;
|
pub const MEM_SIZE : usize = (PAGE_SIZE*NUM_PHY_PAGE*100) as usize;
|
||||||
|
|
||||||
|
|
||||||
pub trait RegisterNum: Add<Output=Self> + Sub<Output=Self> + PartialEq + Copy {}
|
pub trait RegisterNum: Add<Output=Self> + Sub<Output=Self> + PartialEq + Copy {}
|
||||||
|
|
||||||
impl RegisterNum for i64 {}
|
impl RegisterNum for i64 {}
|
||||||
|
@ -29,7 +29,7 @@ impl <'a>MMU <'_>{
|
|||||||
MMU::translate(mmu, virt_addr, &mut phy_addr_double_check, false);
|
MMU::translate(mmu, virt_addr, &mut phy_addr_double_check, false);
|
||||||
|
|
||||||
match exc {
|
match exc {
|
||||||
ExceptionType::NO_EXCEPTION => {
|
ExceptionType::NoException => {
|
||||||
if phy_addr != phy_addr_double_check {
|
if phy_addr != phy_addr_double_check {
|
||||||
//Besoin ici d'une impl pour gestion d'exeption
|
//Besoin ici d'une impl pour gestion d'exeption
|
||||||
//dans nachos : g-machine->RaiseException(exc, virt_addr);
|
//dans nachos : g-machine->RaiseException(exc, virt_addr);
|
||||||
@ -44,7 +44,7 @@ impl <'a>MMU <'_>{
|
|||||||
_ => {
|
_ => {
|
||||||
//Besoin ici d'une impl pour gestion d'exeption
|
//Besoin ici d'une impl pour gestion d'exeption
|
||||||
//dans nachos : g-machine->RaiseException(exc, virt_addr);
|
//dans nachos : g-machine->RaiseException(exc, virt_addr);
|
||||||
println!("Error from mmu_read_mem :: Exception different from NO_EXCEPTION");
|
println!("Error from mmu_read_mem :: Exception different from NoException");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -63,7 +63,7 @@ impl <'a>MMU <'_>{
|
|||||||
MMU::translate(mmu, virt_addr, &mut phy_addr_double_check, true);
|
MMU::translate(mmu, virt_addr, &mut phy_addr_double_check, true);
|
||||||
|
|
||||||
match exc {
|
match exc {
|
||||||
ExceptionType::NO_EXCEPTION => {
|
ExceptionType::NoException => {
|
||||||
if phy_addr != phy_addr_double_check {
|
if phy_addr != phy_addr_double_check {
|
||||||
//Besoin ici d'une impl pour gestion d'exeption
|
//Besoin ici d'une impl pour gestion d'exeption
|
||||||
//dans nachos : g-machine->RaiseException(exc, virt_addr);
|
//dans nachos : g-machine->RaiseException(exc, virt_addr);
|
||||||
@ -78,7 +78,7 @@ impl <'a>MMU <'_>{
|
|||||||
_ => {
|
_ => {
|
||||||
//Besoin ici d'une impl pour gestion d'exeption
|
//Besoin ici d'une impl pour gestion d'exeption
|
||||||
//dans nachos : g-machine->RaiseException(exc, virt_addr);
|
//dans nachos : g-machine->RaiseException(exc, virt_addr);
|
||||||
println!("Error from mmu_write_mem :: Exception different from NO_EXCEPTION");
|
println!("Error from mmu_write_mem :: Exception different from NoException");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -96,7 +96,7 @@ impl <'a>MMU <'_>{
|
|||||||
match &mut mmu.translationTable {
|
match &mut mmu.translationTable {
|
||||||
None => {
|
None => {
|
||||||
println!("Error from translate : MMU refers to None (No page Table)");
|
println!("Error from translate : MMU refers to None (No page Table)");
|
||||||
return ExceptionType::ADDRESSERROR_EXCEPTION;
|
return ExceptionType::AddressErrorException;
|
||||||
}
|
}
|
||||||
|
|
||||||
Some(table_ref) => {
|
Some(table_ref) => {
|
||||||
@ -104,7 +104,7 @@ impl <'a>MMU <'_>{
|
|||||||
//On verifie que notre index est valide
|
//On verifie que notre index est valide
|
||||||
if vpn >= table_ref.get_max_num_pages(){
|
if vpn >= table_ref.get_max_num_pages(){
|
||||||
println!("Error from translate :: index is out of bound");
|
println!("Error from translate :: index is out of bound");
|
||||||
return ExceptionType::ADDRESSERROR_EXCEPTION;
|
return ExceptionType::AddressErrorException;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*Doc nachos dit que ce test sert a savoir si la page est mappée
|
/*Doc nachos dit que ce test sert a savoir si la page est mappée
|
||||||
@ -113,13 +113,13 @@ impl <'a>MMU <'_>{
|
|||||||
*/
|
*/
|
||||||
if !table_ref.get_bit_read(vpn) && !table_ref.get_bit_write(vpn) {
|
if !table_ref.get_bit_read(vpn) && !table_ref.get_bit_write(vpn) {
|
||||||
println!("Error from translate :: virtual page # {} not mapped",vpn);
|
println!("Error from translate :: virtual page # {} not mapped",vpn);
|
||||||
return ExceptionType::ADDRESSERROR_EXCEPTION;
|
return ExceptionType::AddressErrorException;
|
||||||
}
|
}
|
||||||
|
|
||||||
//si on souhaite effectuer un acces lecture, on verifie que l'on dispose du droit d'acces sur cette page
|
//si on souhaite effectuer un acces lecture, on verifie que l'on dispose du droit d'acces sur cette page
|
||||||
if writing && !table_ref.get_bit_write(vpn) {
|
if writing && !table_ref.get_bit_write(vpn) {
|
||||||
println!("Error from translate :: write access on a read only virtual page # {}",vpn);
|
println!("Error from translate :: write access on a read only virtual page # {}",vpn);
|
||||||
return ExceptionType::READONLY_EXCEPTION;
|
return ExceptionType::AddressErrorException;
|
||||||
}
|
}
|
||||||
|
|
||||||
//if the page is not yet in main memory, run the page fault manager
|
//if the page is not yet in main memory, run the page fault manager
|
||||||
@ -129,13 +129,13 @@ impl <'a>MMU <'_>{
|
|||||||
println!("We need to update the page table by raising an exception -> not implemented");
|
println!("We need to update the page table by raising an exception -> not implemented");
|
||||||
|
|
||||||
//Ici il faudra reverifier le bit valid apres intervention du page fault manager
|
//Ici il faudra reverifier le bit valid apres intervention du page fault manager
|
||||||
return ExceptionType::ADDRESSERROR_EXCEPTION;
|
return ExceptionType::AddressErrorException;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Make sure that the physical adress is correct
|
//Make sure that the physical adress is correct
|
||||||
if table_ref.get_physical_page(vpn) < 0 || table_ref.get_physical_page(vpn) >= (NUM_PHY_PAGE as i32) {
|
if table_ref.get_physical_page(vpn) < 0 || table_ref.get_physical_page(vpn) >= (NUM_PHY_PAGE as i32) {
|
||||||
println!("Error from translate :: no valid correspondance");
|
println!("Error from translate :: no valid correspondance");
|
||||||
return ExceptionType::BUSERROR_EXCEPTION;
|
return ExceptionType::BusErrorException;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Set U/M bits to 1
|
//Set U/M bits to 1
|
||||||
@ -151,6 +151,6 @@ impl <'a>MMU <'_>{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ExceptionType::NO_EXCEPTION
|
ExceptionType::NoException
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user