Kintsugi OS 0.2.0
x86 Monolithic OS
Loading...
Searching...
No Matches
paging.h
Go to the documentation of this file.
1#ifndef KKLIBC_PAGING_H
2#define KKLIBC_PAGING_H
3
4#include "../cpu/isr.h"
5#include "ctypes.h"
6
7/* Макросы для работы с битовыми массивами */
8#define INDEX_FROM_BIT(a) (a / (8 * 4))
9#define OFFSET_FROM_BIT(a) (a % (8 * 4))
10
11#define PAGE_SIZE 0x1000
12
13extern u32 nframes;
14
23u32 pkmalloc_internal(u32 sz, int align, u32* phys);
24
32
40u32 pkmalloc_p(u32 sz, u32* phys);
41
49u32 pkmalloc_ap(u32 sz, u32* phys);
50
57u32 pkmalloc(u32 sz);
58
59/* Внешняя переменная текущего адреса свободной памяти */
60extern u32 free_mem_addr;
61
62/* Структура страницы */
63typedef struct page {
64 u32 present : 1; // Страница присутствует в памяти
65 u32 rw : 1; // Только для чтения если 0, чтение/запись если 1
66 u32 user : 1; // Только уровень супервизора если 0
67 u32 accessed : 1; // Страница была доступна с последнего обновления?
68 u32 dirty : 1; // В страницу производилась запись с последнего обновления?
69 u32 unused : 7; // Объединение неиспользуемых и зарезервированных битов
70 u32 frame : 20; // Адрес фрейма (сдвинутый вправо на 12 бит)
72
73/* Структура таблицы страниц */
74typedef struct page_table {
75 page_t pages[1024]; // Массив из 1024 страниц
77
78/* Структура директории страниц */
96
97/* Внешние переменные директорий страниц */
100
104void initialise_paging();
105
111
123page_t* get_page(u32 address, int make, page_directory_t* dir);
124
130void page_fault(registers_t regs);
131
139void alloc_frame(page_t* page, int is_kernel, int is_writeable);
140
146void free_frame(page_t* page);
147
154u32 test_frame(u32 frame_addr);
155
156#endif
unsigned int u32
Definition ctypes.h:11
u32 pkmalloc(u32 sz)
Обычное выделение памяти
Definition paging.c:62
u32 nframes
Definition paging.c:20
void alloc_frame(page_t *page, int is_kernel, int is_writeable)
Аллокация фрейма
Definition paging.c:106
struct page_table page_table_t
void free_frame(page_t *page)
Освобождение фрейма
Definition paging.c:127
void page_fault(registers_t regs)
Обработчик Page Fault.
Definition paging.c:138
page_directory_t * current_directory
Definition paging.c:24
struct page_directory page_directory_t
void switch_page_directory(page_directory_t *dir)
Загрузка указанной директории страниц в регистр CR3.
Definition paging.c:191
u32 free_mem_addr
Definition mem.c:17
u32 test_frame(u32 frame_addr)
Тест фрейма
Definition paging.c:83
u32 pkmalloc_p(u32 sz, u32 *phys)
Выделение с возвратом физического адреса
Definition paging.c:52
u32 pkmalloc_a(u32 sz)
Выделение с выравниванием по странице
Definition paging.c:47
u32 pkmalloc_ap(u32 sz, u32 *phys)
Выделение с выравниванием и возвратом физического адреса
Definition paging.c:57
u32 pkmalloc_internal(u32 sz, int align, u32 *phys)
Внутренняя функция выделения памяти
Definition paging.c:31
void initialise_paging()
Настройка окружения, директорий страниц и включение paging.
Definition paging.c:170
page_directory_t * kernel_directory
Definition paging.c:23
struct page page_t
page_t * get_page(u32 address, int make, page_directory_t *dir)
Get the page object.
Definition paging.c:201
Definition paging.h:79
u32 physicalAddr
Definition paging.h:94
page_table_t * tables[1024]
Definition paging.h:83
u32 tablesPhysical[1024]
Definition paging.h:89
Definition paging.h:74
page_t pages[1024]
Definition paging.h:75
Definition paging.h:63
u32 user
Definition paging.h:66
u32 rw
Definition paging.h:65
u32 present
Definition paging.h:64
u32 dirty
Definition paging.h:68
u32 accessed
Definition paging.h:67
u32 frame
Definition paging.h:70
u32 unused
Definition paging.h:69
Definition isr.h:74