Skip to content

Commit 87ef6da

Browse files
committed
try fix paging; TODO: FIX PAGING AND FRAME ALLOC
1 parent 5c5167c commit 87ef6da

File tree

7 files changed

+46
-10
lines changed

7 files changed

+46
-10
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
commit 5c5167c783467a1441565edfd12b130a741e999c
2+
Author: Alexeev Bronislav <[email protected]>
3+
Date: Sun Aug 24 06:05:27 2025 +0700
4+
5+
feat: realize paging, add page, frame allocator and change kfree, kmalloc, krealloc
6+
17
commit ffe676bbcd462e3e7d7c8bd82ca1683361ba3bf6
28
Author: Alexeev Bronislav <[email protected]>
39
Date: Sun Aug 24 04:06:51 2025 +0700

Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,11 +71,11 @@ run_bin: $(BIN_DIR)/kintsugios.bin
7171

7272
run: $(DISKIMG_DIR)/$(DISKIMG_NAME)
7373
@printf "$(GREEN)[QEMU] Run img %-50s$(RESET)\n" "$<"
74-
@qemu-system-i386 -fda $< -boot a
74+
@qemu-system-i386 -fda $< -boot a -m 16
7575

7676
debug: $(DISKIMG_DIR)/$(DISKIMG_NAME)
7777
@printf "$(GREEN)[QEMU] Debug img %-50s$(RESET)\n" "$<"
78-
@qemu-system-i386 -fda $< -boot a -s -S
78+
@qemu-system-i386 -fda $< -boot a -s -S -m 16
7979

8080
clean:
8181
@printf "$(RED)[RM] Clean $(BIN_DIR) and $(DISKIMG_DIR)$(RESET)\n"

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
> Также я занимаюсь [переводом OSDEV-Notes](https://github.com/alexeev-prog/Osdev-Notes-RU)
55
6-
![alt text](image.png)
6+
![](image.png)
77

88
<div align="center">
99
<img src=https://img.shields.io/github/languages/top/alexeev-prog/KintsugiOS>

image.png

-3.48 KB
Loading

src/kernel/kklibc/paging/frame_alloc.c

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,10 @@
11
#include "frame_alloc.h"
22
#include "../../drivers/screen.h"
33
#include "../stdlib.h"
4+
#include "paging.h"
45

56
u32 frame_bitmap[FRAME_BITMAP_SIZE]; // битмапа фреймов
67

7-
void init_frame_allocator() {
8-
// инициализируем аллокатор фреймов для пажинга
9-
u32memory_set(frame_bitmap, 0, sizeof(frame_bitmap));
10-
kprint("Frame allocator initialized.\n");
11-
}
12-
138
void set_frame_used(u32 frame_addr) {
149
u32 frame_num = frame_addr / FRAME_SIZE;
1510
u32 index = frame_num / 32;

src/kernel/kklibc/paging/paging.c

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,15 @@
22
#include "../../drivers/screen.h"
33
#include "frame_alloc.h"
44
#include "../stdio.h"
5+
#include "frame_alloc.h"
6+
#include "../stdlib.h"
57
#include "../mem.h"
68
#include "../../cpu/isr.h"
79

810
// внешнии функции из paging.asm
911
extern void load_page_dir(u32 *);
1012
extern void enable_paging();
13+
extern u32 frame_bitmap[FRAME_BITMAP_SIZE];
1114

1215
// каталог страниц, выровненный по границе 4 КБ
1316
u32 page_dir[1024] __attribute__((aligned(4096)));
@@ -36,6 +39,36 @@ void debug_mapping(u32 vaddr) {
3639
}
3740
}
3841

42+
void mark_used_frames() {
43+
// Пометить фреймы, занятые ядром
44+
u32 kernel_start = 0x100000; // Начало ядра
45+
u32 kernel_end = 0x200000;/* твой расчет конца ядра */
46+
47+
for (u32 addr = kernel_start; addr < kernel_end; addr += PAGE_SIZE) {
48+
set_frame_used(addr);
49+
}
50+
51+
// Пометить фреймы, занятые таблицами страниц
52+
set_frame_used((u32)page_dir);
53+
set_frame_used((u32)first_page_tab);
54+
55+
// Пометить другие занятые области (например, видеопамять)
56+
set_frame_used(0xB8000); // Видеопамять
57+
}
58+
59+
60+
void init_frame_allocator() {
61+
// 1. Убедись, что знаешь реальный объем ОЗУ
62+
u32 total_memory = 16 * 1024 * 1024; // Например, 16MB
63+
u32 total_frames = total_memory / PAGE_SIZE;
64+
65+
// 2. Помеь все фреймы как свободные
66+
// u32memory_set(frame_bitmap, 0, sizeof(frame_bitmap));
67+
68+
// 3. Пометиь как занятые только те фреймы, которые действительно заняты
69+
// mark_used_frames();
70+
}
71+
3972
void debug_page_fault(u32 fault_addr) {
4073
kprintf("Page fault at address: %x\n", fault_addr);
4174
debug_mapping(fault_addr);
@@ -79,6 +112,8 @@ void init_paging() {
79112
// 6. энейблим пажинг
80113
enable_paging();
81114

115+
init_frame_allocator();
116+
82117
kprint("Paging enabled!\n");
83118
check_recursive_mapping();
84119
kprintf("Recursive mapping setup at 0xFFC00000, PD physical: %x\n", (u32)page_dir);

src/kernel/kklibc/stdlib.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ void memory_set(u8 *dest, u8 val, u32 len) { // задаем память
6161
}
6262

6363
void u32memory_set(u32 *dest, u32 val, u32 len) { // задаем память u32
64-
u8 *temp = (u8 *)dest;
64+
u32 *temp = (u32 *)dest;
6565
for ( ; len != 0; len--) *temp++ = val;
6666
}
6767

0 commit comments

Comments
 (0)