NetcanOS
Netcan OS is an operation system for x86 PCs, for learning how os works.
函数 | 变量
paging.c 文件参考
#include <paging.h>
#include <video_terminal.h>
#include <heap.h>
#include <string.h>

函数

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_tget_page (u32 address, int make, page_directory_t *dir)
 获取页面。 更多...
 
void page_fault (registers_t regs)
 缺页中断处理程序。 更多...
 

变量

u32frame_bitset
 页框frame的bitset形式,物理内存 更多...
 
u32 nframes = 0x100000
 页框数量,假设物理内存4GB大,那么0x100000000 / 0x1000 = 0x100000 更多...
 

函数说明

◆ alloc_frame()

void alloc_frame ( page_t page,
int  is_kernel,
int  is_writeable,
u32  frame 
)

分配页框。

参数
page页面
is_kernel是否属于内核模式
is_writeable是否可写
frame_addr若不为~0u,则采用这个地址作为页框地址

◆ free_frame()

void free_frame ( page_t page)

释放页框

参数
page页面

◆ get_page()

page_t* get_page ( u32  address,
int  make,
page_directory_t dir 
)

获取页面。

参数
address获取页面指针
make若为真,表明该页面不在页表中,则创建页表
dir页表指针
返回
返回页面。

◆ init_paging()

void init_paging ( )

初始化分页管理。

分配页框,使得物理地址和虚拟地址一致,并为已用过的内核空间分配页框。 由于内核加载到0x1000,后面有VRAM位于0xb8000,并且栈指针位于0x90000,所以覆盖完整个1MB空间。

◆ page_fault()

void page_fault ( registers_t  regs)

缺页中断处理程序。

◆ switch_page_directory()

void switch_page_directory ( page_directory_t dir)

切换页目录。

参数
dir页目录指针

变量说明

◆ frame_bitset

u32* frame_bitset

页框frame的bitset形式,物理内存

◆ nframes

u32 nframes = 0x100000

页框数量,假设物理内存4GB大,那么0x100000000 / 0x1000 = 0x100000