NetcanOS
Netcan OS is an operation system for x86 PCs, for learning how os works.
paging.h
浏览该文件的文档.
1 /*************************************************************************
2  > File Name: kernel/paging.h
3  > Author: Netcan
4  > Blog: http://www.netcan666.com
5  > Mail: 1469709759@qq.com
6  > Created Time: 2018-07-13 Fri 16:59:08 CST
7  ************************************************************************/
8 
9 #include <io.h>
10 #include <int_handler.h>
11 #ifndef PAGING_H
12 #define PAGING_H
13 #define FRAME_INDEX_FROM_BITSET(addr) ((addr) / 32)
14 #define FRAME_OFFSET_FROM_BITSET(addr) ((addr) % 32)
15 
19 typedef struct {
20  u32 present :1;
22  u32 user :1;
25  u32 dirty :1;
28  u32 frame :20;
29 } page_t;
30 
33 typedef struct {
34  page_t pages[1024];
35 } page_table_t;
36 
37 
40 typedef struct {
41  page_table_t *tables[1024];
42  u32 tables_physical[1024];
45 
46 void init_paging();
48 page_t *get_page(u32 address, int make, page_directory_t *dir);
49 void page_fault(registers_t regs);
50 void alloc_frame(page_t *page, int is_kernel, int is_writeable, u32 frame_addr);
51 void free_frame(page_t *page);
52 #endif
void switch_page_directory(page_directory_t *dir)
切换页目录。
Definition: paging.c:115
u32 accessed
是否被CPU访问过
Definition: paging.h:24
u32 present
当前页面是否位于内存
Definition: paging.h:20
void alloc_frame(page_t *page, int is_kernel, int is_writeable, u32 frame_addr)
分配页框。
Definition: paging.c:59
Definition: int_handler.h:29
void free_frame(page_t *page)
释放页框
Definition: paging.c:79
页目录(一级页表)。
Definition: paging.h:40
u32 user
是否属于用户模式
Definition: paging.h:22
页表(二级页表)。
Definition: paging.h:33
void init_paging()
初始化分页管理。
Definition: paging.c:89
page_t * get_page(u32 address, int make, page_directory_t *dir)
获取页面。
Definition: paging.c:130
void page_fault(registers_t regs)
缺页中断处理程序。
Definition: paging.c:149
u32 dirty
是否被CPU写过
Definition: paging.h:25
u32 reversed_hi
CPU内部保留用
Definition: paging.h:26
u32 available
未使用,可供内核使用,本内核用来判断是否分配了页框
Definition: paging.h:27
u32 reversed_lo
CPU内部保留用
Definition: paging.h:23
u32 frame
页框号,也就是帧地址/0x1000
Definition: paging.h:28
unsigned int u32
Definition: io.h:14
u32 physical_address
页目录的物理地址,告诉CPU页目录位置,区分页目录用
Definition: paging.h:43
分页页面数据结构。
Definition: paging.h:19
u32 writeable
是否可写
Definition: paging.h:21