|
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
1.8.14