NetcanOS
Netcan OS is an operation system for x86 PCs, for learning how os works.
|
类 | |
struct | page_t |
分页页面数据结构。 更多... | |
struct | page_table_t |
页表(二级页表)。 更多... | |
struct | page_directory_t |
页目录(一级页表)。 更多... | |
宏定义 | |
#define | FRAME_INDEX_FROM_BITSET(addr) ((addr) / 32) |
#define | FRAME_OFFSET_FROM_BITSET(addr) ((addr) % 32) |
函数 | |
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) |
缺页中断处理程序。 更多... | |
void | alloc_frame (page_t *page, int is_kernel, int is_writeable, u32 frame_addr) |
分配页框。 更多... | |
void | free_frame (page_t *page) |
释放页框 更多... | |
#define FRAME_INDEX_FROM_BITSET | ( | addr | ) | ((addr) / 32) |
#define FRAME_OFFSET_FROM_BITSET | ( | addr | ) | ((addr) % 32) |
分配页框。
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 | 页目录指针 |