mirror of
https://github.com/0Nera/BMOSP.git
synced 2024-11-22 16:41:23 +03:00
GDT больше не используется
This commit is contained in:
parent
7c07bf5ffd
commit
8c54109dc9
@ -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( );
|
||||
|
@ -1,66 +0,0 @@
|
||||
/**
|
||||
* gdt.c
|
||||
* Функции таблицы глобальных дескрипторов
|
||||
*
|
||||
* Настройка таблицы глобальных дескрипторов для управления сегментами памяти
|
||||
*
|
||||
*/
|
||||
|
||||
#include <arch.h>
|
||||
#include <fb.h>
|
||||
#include <log.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
#include <tool.h>
|
||||
|
||||
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");
|
||||
}
|
@ -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);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user