|
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 | 页目录指针 |
1.8.14