NetcanOS
Netcan OS is an operation system for x86 PCs, for learning how os works.
|
函数 | |
void | alloc_frame (page_t *page, int is_kernel, int is_writeable, u32 frame) |
分配页框。 更多... | |
void | free_frame (page_t *page) |
释放页框 更多... | |
void | init_paging () |
初始化分页管理。 更多... | |
void | switch_page_directory (page_directory_t *dir) |
切换页目录。 更多... | |
page_t * | get_page (u32 address, int make, page_directory_t *dir) |
获取页面。 更多... | |
void | page_fault (registers_t regs) |
缺页中断处理程序。 更多... | |
变量 | |
u32 * | frame_bitset |
页框frame的bitset形式,物理内存 更多... | |
u32 | nframes = 0x100000 |
页框数量,假设物理内存4GB大,那么0x100000000 / 0x1000 = 0x100000 更多... | |
分配页框。
page | 页面 |
is_kernel | 是否属于内核模式 |
is_writeable | 是否可写 |
frame_addr | 若不为~0u,则采用这个地址作为页框地址 |
void free_frame | ( | page_t * | page | ) |
释放页框
page | 页面 |
page_t* get_page | ( | u32 | address, |
int | make, | ||
page_directory_t * | dir | ||
) |
获取页面。
address | 获取页面指针 |
make | 若为真,表明该页面不在页表中,则创建页表 |
dir | 页表指针 |
void init_paging | ( | ) |
初始化分页管理。
分配页框,使得物理地址和虚拟地址一致,并为已用过的内核空间分配页框。 由于内核加载到0x1000,后面有VRAM位于0xb8000,并且栈指针位于0x90000,所以覆盖完整个1MB空间。
void page_fault | ( | registers_t | regs | ) |
缺页中断处理程序。
void switch_page_directory | ( | page_directory_t * | dir | ) |
切换页目录。
dir | 页目录指针 |
u32* frame_bitset |
页框frame的bitset形式,物理内存
u32 nframes = 0x100000 |
页框数量,假设物理内存4GB大,那么0x100000000 / 0x1000 = 0x100000