merge branch memory-shit into higher-half
This commit is contained in:
+3
-1
@@ -88,7 +88,9 @@ struct tss_entry_struct {
|
||||
uint32_t ldt;
|
||||
uint16_t trap;
|
||||
uint16_t iomap_base;
|
||||
} __packed;
|
||||
} __attribute__((packed));
|
||||
|
||||
extern struct tss_entry_struct tss;
|
||||
|
||||
struct seg_desc gdt[NR_GDT_ENTRIES];
|
||||
|
||||
|
||||
+4
-2
@@ -230,8 +230,10 @@ struct multiboot_color
|
||||
struct multiboot_mmap_entry
|
||||
{
|
||||
multiboot_uint32_t size;
|
||||
multiboot_uint64_t addr;
|
||||
multiboot_uint64_t len;
|
||||
multiboot_uint32_t addr_low;
|
||||
multiboot_uint32_t addr_high;
|
||||
multiboot_uint32_t len_low;
|
||||
multiboot_uint32_t len_high;
|
||||
#define MULTIBOOT_MEMORY_AVAILABLE 1
|
||||
#define MULTIBOOT_MEMORY_RESERVED 2
|
||||
#define MULTIBOOT_MEMORY_ACPI_RECLAIMABLE 3
|
||||
|
||||
@@ -22,10 +22,23 @@
|
||||
#define GET_PGDIR(address) ((uint32_t)((address) >> 22) & 0x3FF)
|
||||
#define GET_PGTBL(address) ((uint32_t)((address) >> 12) & 0x3FF)
|
||||
|
||||
#define PAGE_SIZE 0x1000 // 4 КБ
|
||||
|
||||
// Общий размер памяти
|
||||
#define MEMORY_SIZE (0xFFFFFFFF-0xC0000000)
|
||||
|
||||
// Количество страниц
|
||||
#define PAGE_COUNT (MEMORY_SIZE / PAGE_SIZE)
|
||||
|
||||
// Размер битмапа в байтах (округлено вверх)
|
||||
#define BITMAP_SIZE (PAGE_COUNT / 8)
|
||||
|
||||
extern uint32_t kernel_page_directory[1024] __attribute__((aligned(4096)));
|
||||
extern uint32_t kernel_page_table[1024] __attribute__((aligned(4096)));
|
||||
extern uint32_t user_page_table[1024] __attribute__((aligned(4096)));
|
||||
|
||||
extern uint32_t *kpage_dir;
|
||||
|
||||
//paging.c
|
||||
void grub_memory_map(unsigned int magic, struct multiboot_info* mbi);
|
||||
void enablePaging();
|
||||
@@ -34,13 +47,17 @@ void paging_init();
|
||||
void test_paging();
|
||||
|
||||
//page_alloc.c
|
||||
void set_bit(uint32_t page_index);
|
||||
void clear_bit(uint32_t page_index);
|
||||
void init_allocator();
|
||||
void* alloc_page();
|
||||
void free_page(void* physaddr);
|
||||
|
||||
//page_tables.c
|
||||
void *get_physaddr(void *virtualaddr);
|
||||
uint32_t get_pte(void *virtualaddr);
|
||||
void map_page(void* physaddr, void* virtualaddr, unsigned int flags);
|
||||
void unmap_page(void *virtualaddr);
|
||||
void map_kernel_page(void* virtualaddr, unsigned int flags);
|
||||
void* setup_user_process(void* user_code_phys, uint32_t* user_stack_top);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user