Skip to content
Snippets Groups Projects
Commit 3119a62e authored by Thierno souleymane Bah's avatar Thierno souleymane Bah
Browse files

feat(ppage_of_vpage and mmu_handler functions done)

parent c115b086
No related branches found
No related tags found
No related merge requests found
#include <stdlib.h>
#include <stdio.h>
#include "hardware.h"
#include "process.h"
int current_process = NULL;
int ppage_of_vpage(int process, unsigned vpage)
{
if (vpage < N)
{
if (process == PROCESS_0)
return 2 * vpage + 2;
if (process == PROCESS_1)
return 2 * vpage + 1;
}
return -1;
}
void mmu_handler()
{
tlb_entry_t tlb;
unsigned int vaddr = ((long int)_in(MMU_FAULT_ADDR_HI) << 32) | (_in(MMU_FAULT_ADDR_LO) & 0xFFFFFFFF);
unsigned int vpage = (vaddr >> 12) & 0xFFF;
unsigned int ppage = ppage_of_vpage(current_process, vpage);
if (vaddr < virtual_memory || vaddr > virtual_memory + VM_SIZE || vpage == -1)
{
fprintf(stderr, "Echec");
exit(EXIT_FAILURE);
}
tlb.s.tlb_vpage = vpage;
tlb.s.tlb_ppage = ppage;
tlb.s.tlb_rwx = 7;
tlb.s.tlb_used = 1;
_out(TLB_ADD_ENTRY, tlb.i);
}
#if !defined(PROCESS)
#define PROCESS
#define PROCESS_1 1
#define PROCESS_0 0
#define N 127
#define VM_SIZE 160000 * 8
#define MMU_FAULT_ADDR_LO 0xCC
#define MMU_FAULT_ADDR_HI 0xCD
#define TLB_ADD_ENTRY 0xCE
struct tlb_entry_s
{
unsigned tlb_RFU : 8;
unsigned tlb_vpage : 12;
unsigned tlb_ppage : 8;
unsigned tlb_rwx : 3;
unsigned tlb_used : 1;
};
union tlb_entry_u
{
int i;
struct tlb_entry_s s;
};
typedef union tlb_entry_u tlb_entry_t;
int ppage_of_vpage(int process, unsigned vpage);
void mmu_handler();
#endif // PROCESS
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment