00001 00013 #ifndef _MMU_H_ 00014 #define _MMU_H_ 00015 00016 #include <pthread.h> 00017 #include "vm_types.h" 00018 #include "queue.h" 00019 #include "proc.h" 00020 #include "io_device.h" 00021 00056 #define IS_PAGE_PRESENT(p) ((p).present) 00057 #define IS_PAGE_REFERENCED(p) ((p).reference) 00058 #define IS_PAGE_DIRTY(p) ((p).dirty) 00059 #define PAGE_CLEAR_DIRTY(p) ((p).dirty = 0) 00060 #define PAGE_CLEAR_REFERENCED(p) ((p).reference = 0) 00061 #define PAGE_CLEAR_PRESENT(p) ((p).present = 0) 00062 #define PAGE_CLEAR_FRAMEID(p) ((p).frame_id = (uint16_t) -1) 00063 #define PAGE_SET_DIRTY(p) ((p).dirty = 1) 00064 #define PAGE_SET_REFERENCED(p) ((p).reference = 1) 00065 #define PAGE_SET_PRESENT(p) ((p).present = 1) 00066 #define PAGE_SET_NUM(p, num) ((p).id = num) 00067 #define PAGE_SET_FRAMEID(p, fid) ((p).frame_id = fid) 00068 #define PAGE_NUM(p) ((p).id) 00069 #define FRAME_ID(p) ((p).frame_id) 00070 #define ASSIGN_FRAME_TO_PROC(f,p,n) do {\ 00071 f->debug_info.pid = p->pid; \ 00072 f->debug_info.page_id = n; \ 00073 } while (0) 00074 #define NUM_OF_REQUESTS() (mmu.page_hits+mmu.page_faults) 00075 00076 00083 struct mmu_data { 00085 uint16_t page_bits; 00087 uint16_t offset_bits; 00089 uint32_t offset_mask; 00091 uint32_t total_access; 00093 uint32_t page_faults; 00095 uint32_t page_hits; 00097 uint32_t page_size; 00099 uint32_t ram_size; 00101 uint16_t max_page_count; 00102 } mmu; 00103 00104 00114 struct frame { 00116 uint16_t id; 00118 uint32_t physical_addr; 00120 unsigned int valid:1; 00122 struct { 00124 uint16_t pid; 00126 uint16_t page_id; 00127 } debug_info; 00129 STAILQ_ENTRY(frame) entries; 00130 }; 00131 00132 00136 struct active_page { 00138 uint16_t procnum; 00140 uint16_t page_id; 00142 TAILQ_ENTRY(active_page) entries; 00143 }; 00144 00148 typedef struct active_page active_page_t; 00149 00153 typedef struct frame frame_t; 00154 00155 /* 00156 * Prototipi di funzioni pubbliche 00157 */ 00158 pthread_t *mmu_init(int, int, int); 00159 uint32_t memory_access(int, uint32_t, int); 00160 00161 #endif /* _MMU_H_ */
![]() |
Università degli studi di Urbino "Carlo Bo" |