diff --git a/include/arch.h b/include/arch.h index dadf4ef..d5ffd02 100644 --- a/include/arch.h +++ b/include/arch.h @@ -66,7 +66,6 @@ void task_switch( ); uint64_t task_new_thread(void (*func)(void *)); void task_del_current( ); void cpu_init( ); -void gdt_init( ); void pic_init( ); void pit_init( ); void idt_init( ); diff --git a/kernel/cpu/gdt.c b/kernel/cpu/gdt.c deleted file mode 100644 index a708d67..0000000 --- a/kernel/cpu/gdt.c +++ /dev/null @@ -1,66 +0,0 @@ -/** - * gdt.c - * Функции таблицы глобальных дескрипторов - * - * Настройка таблицы глобальных дескрипторов для управления сегментами памяти - * - */ - -#include -#include -#include -#include -#include -#include - -typedef struct __attribute__((packed)) { - uint16_t limit; - uint16_t base_16; - uint8_t base_middle_16; - uint8_t access; - uint8_t granularity; - uint8_t base_hight_8; -} gdt_entry_t; - -typedef struct __attribute__((packed)) { - uint16_t limit; - uint64_t base; -} gdt_reg_t; - -gdt_entry_t gdt[11]; -gdt_reg_t gdtr; - -extern void load_gdt(uint64_t gdtr); - -void gdt_load( ) { - gdtr.limit = (sizeof(gdt) - 1); - gdtr.base = (uint64_t)&gdt; - - load_gdt((uint64_t)&gdtr); -} - -void set_gdt_entry(gdt_entry_t *entry, uint16_t limit, uint64_t base, uint8_t access, uint8_t granularity) { - entry->limit = limit; - entry->base_16 = base & 0xFFFF; - entry->base_middle_16 = (base >> 16) & 0xFF; - entry->base_hight_8 = (base >> 24) & 0xFF; - entry->access = access; - entry->granularity = granularity; -} - -void gdt_init( ) { - set_gdt_entry(&gdt[0], 0, 0, 0, 0); - set_gdt_entry(&gdt[1], 0xFFFF, 0, 0x9A, 0); - set_gdt_entry(&gdt[2], 0xFFFF, 0, 0x92, 0); - set_gdt_entry(&gdt[3], 0xFFFF, 0, 0x9A, 0xCF); - set_gdt_entry(&gdt[4], 0xFFFF, 0, 0x92, 0xCF); - set_gdt_entry(&gdt[5], 0, 0, 0x9A, 0x20); - set_gdt_entry(&gdt[6], 0, 0, 0x92, 0); - set_gdt_entry(&gdt[7], 0, 0, 0xFA, 0x20); - set_gdt_entry(&gdt[8], 0, 0, 0xF2, 0); - set_gdt_entry(&gdt[9], 104, 0, 0x89, 0); - set_gdt_entry(&gdt[10], 0, 0, 0, 0); - - gdt_load( ); - LOG("GDT инициализирован\n"); -} \ No newline at end of file diff --git a/kernel/mem.c b/kernel/mem.c index 916a716..833f87b 100644 --- a/kernel/mem.c +++ b/kernel/mem.c @@ -318,14 +318,17 @@ void mem_init( ) { } LOG("%u / %u блоков доступно\n", bitmap_available, bitmap_limit); - // LOG("Размер битовой карты: %u\n", bitmap_size); + LOG("Размер битовой карты: %u\n", bitmap_size); + alloc_init(mem_frame_alloc(1024), 1024 * BLOCK_SIZE); LOG("%u мегабайт выделено в динамичную память\n", (256 * 32 * BLOCK_SIZE + BLOCK_SIZE) / 1024 / 1024); // Выделяем по 4 мегабайта в аллокатор динамичной памяти - for (int64_t i = 0; i < 64; i += 8) { mem_add_block(mem_frame_alloc(1024), 1024 * BLOCK_SIZE); } + for (uint64_t i = 0; i < 64; i += 8) { mem_add_block(mem_frame_alloc(1024), 1024 * BLOCK_SIZE); } + mem_merge_all_blocks( ); mem_dump_memory( ); + LOG("%u МБ объем доступной памяти, %u МБ объем виртуальной памяти\n", (bitmap_available * BLOCK_SIZE) / 1024 / 1024, available / 1024 / 1024);