NetcanOS
Netcan OS is an operation system for x86 PCs, for learning how os works.
src
kernel
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;
21
u32
writeable
:1;
22
u32
user
:1;
23
u32
reversed_lo
:2;
24
u32
accessed
:1;
25
u32
dirty
:1;
26
u32
reversed_hi
:2;
27
u32
available
:3;
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];
43
u32
physical_address
;
44
}
page_directory_t
;
45
46
void
init_paging
();
47
void
switch_page_directory
(
page_directory_t
*dir);
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
switch_page_directory
void switch_page_directory(page_directory_t *dir)
切换页目录。
Definition:
paging.c:115
page_t::accessed
u32 accessed
是否被CPU访问过
Definition:
paging.h:24
page_t::present
u32 present
当前页面是否位于内存
Definition:
paging.h:20
alloc_frame
void alloc_frame(page_t *page, int is_kernel, int is_writeable, u32 frame_addr)
分配页框。
Definition:
paging.c:59
registers
Definition:
int_handler.h:29
free_frame
void free_frame(page_t *page)
释放页框
Definition:
paging.c:79
int_handler.h
page_directory_t
页目录(一级页表)。
Definition:
paging.h:40
page_t::user
u32 user
是否属于用户模式
Definition:
paging.h:22
page_table_t
页表(二级页表)。
Definition:
paging.h:33
init_paging
void init_paging()
初始化分页管理。
Definition:
paging.c:89
io.h
get_page
page_t * get_page(u32 address, int make, page_directory_t *dir)
获取页面。
Definition:
paging.c:130
page_fault
void page_fault(registers_t regs)
缺页中断处理程序。
Definition:
paging.c:149
page_t::dirty
u32 dirty
是否被CPU写过
Definition:
paging.h:25
page_t::reversed_hi
u32 reversed_hi
CPU内部保留用
Definition:
paging.h:26
page_t::available
u32 available
未使用,可供内核使用,本内核用来判断是否分配了页框
Definition:
paging.h:27
page_t::reversed_lo
u32 reversed_lo
CPU内部保留用
Definition:
paging.h:23
page_t::frame
u32 frame
页框号,也就是帧地址/0x1000
Definition:
paging.h:28
u32
unsigned int u32
Definition:
io.h:14
page_directory_t::physical_address
u32 physical_address
页目录的物理地址,告诉CPU页目录位置,区分页目录用
Definition:
paging.h:43
page_t
分页页面数据结构。
Definition:
paging.h:19
page_t::writeable
u32 writeable
是否可写
Definition:
paging.h:21
制作者
1.8.14