Skip to content

Commit 5a4b866

Browse files
committed
try fix memory bugs
1 parent 76a1964 commit 5a4b866

File tree

13 files changed

+134
-339
lines changed

13 files changed

+134
-339
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
commit 76a1964f51c14ff66c3d76090ae331b540758049
2+
Author: Alexeev Bronislav <[email protected]>
3+
Date: Thu Sep 4 00:11:38 2025 +0700
4+
5+
update sysinfo
6+
17
commit f5069700b04867f80b83189152af700a18d30013
28
Author: Alexeev Bronislav <[email protected]>
39
Date: Wed Sep 3 23:10:17 2025 +0700

README.md

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,6 @@ KintsugiOS — это минималистичная x86 операционна
6565
- Типы данных (ctypes.h)
6666
- Общий заголовочный файл kklibc.h
6767
- Страничная обработка памяти (paging.h)
68-
- Библиотека дополнительных типов данных (datatypes)
69-
- Вектора (vector.h)
7068
- Библиотека стандартных методов (stdlib.h)
7169

7270
### В разработке
@@ -221,8 +219,6 @@ KKLibc — это собственная реализация стандартн
221219

222220
+ **`ctypes.h` / `ctypes.c`**: Полная реализация стандартных функций классификации и преобразования символов (`isalpha`, `isdigit`, `toupper`, etc.).
223221

224-
+ **`datatypes/vector.h` / `vector.c`**: Реализация динамического массива (вектора) — фундаментальной структуры данных, которая будет полезна для управления списками процессов, дескрипторов файлов и т.д.
225-
226222
+ **`kklibc.h`**: Главный заголовочный файл, который включает все модули библиотеки для удобства.
227223

228224
**Философия дизайна:**

src/kernel/kernel/kernel.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ void user_input(char* input) {
9090
{.text = "echo", .hint = "Echo an text", .command = &echo_command},
9191
{.text = "sleep", .hint = "Wait time. Usage: sleep <ms>", .command = &sleep_command},
9292
{.text = "reboot", .hint = "Reboot system", .command = &reboot_command},
93-
{.text = "rand", .hint = "Gen random num. Usage: rand <seed>", .command = &rand_comamnd},
93+
{.text = "rand", .hint = "Gen random num. Usage: rand <seed>", .command = &rand_command},
9494
{.text = "randrange",
9595
.hint = "Get random num from range. Usage: randrange <seed> <min> <max>",
9696
.command = &rand_range_command},

src/kernel/kernel/sysinfo.c

Lines changed: 8 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -7,45 +7,26 @@
77

88
static system_info_t sys_info;
99

10-
/**
11-
* @brief Обнаружение информации о процессоре
12-
*/
1310
void detect_cpu(void) {
1411
u32 eax, ebx, ecx, edx;
1512
char vendor[13];
1613

17-
// Получаем информацию о вендоре
1814
__asm__ volatile("cpuid" : "=a"(eax), "=b"(ebx), "=c"(ecx), "=d"(edx) : "a"(0));
19-
2015
*((u32*)vendor) = ebx;
2116
*((u32*)(vendor + 4)) = edx;
2217
*((u32*)(vendor + 8)) = ecx;
2318
vendor[12] = '\0';
24-
2519
strcpy(sys_info.cpu_vendor, vendor);
2620

27-
// Получаем дополнительную информацию о процессоре
2821
__asm__ volatile("cpuid" : "=a"(eax), "=b"(ebx), "=c"(ecx), "=d"(edx) : "a"(1));
29-
30-
// Упрощение - предполагаем 1 ядро
3122
sys_info.cpu_cores = 1;
3223
}
3324

34-
/**
35-
* @brief Обнаружение информации о памяти
36-
*/
3725
void detect_memory() {
38-
// Используем битовую карту фреймов из пейджинга для определения памяти
39-
sys_info.total_memory = nframes * PAGE_SIZE;
40-
41-
// Получаем информацию о куче
4226
meminfo_t info = get_meminfo();
43-
sys_info.free_memory = info.total_free;
44-
sys_info.used_memory = info.total_used;
45-
sys_info.kernel_memory = free_mem_addr - HEAP_START;
46-
sys_info.heap_size = heap_current_end - HEAP_START;
27+
sys_info.total_memory = nframes * PAGE_SIZE;
4728

48-
// Более точный подсчет использования памяти
29+
// Улучшенный подсчет используемой памяти через фреймы
4930
u32 used_frames = 0;
5031
for (u32 i = 0; i < nframes; i++) {
5132
if (test_frame(i * PAGE_SIZE)) {
@@ -54,15 +35,15 @@ void detect_memory() {
5435
}
5536
sys_info.used_memory = used_frames * PAGE_SIZE;
5637
sys_info.free_memory = sys_info.total_memory - sys_info.used_memory;
38+
39+
// Получение информации о heap из менеджера памяти
40+
sys_info.kernel_memory = free_mem_addr - HEAP_START;
41+
sys_info.heap_size = heap_current_end - HEAP_START;
42+
sys_info.heap_used = info.total_used;
43+
sys_info.heap_free = info.total_free;
5744
}
5845

59-
/**
60-
* @brief Получение системной информации
61-
*
62-
* @return system_info_t*
63-
*/
6446
system_info_t* get_system_info() {
65-
// Обновляем информацию при каждом запросе
6647
detect_memory();
6748
return &sys_info;
6849
}

src/kernel/kernel/sysinfo.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ typedef struct {
1313
u32 used_memory;
1414
u32 kernel_memory;
1515
u32 heap_size;
16+
u32 heap_used;
17+
u32 heap_free;
1618
u32 cpu_speed; // в MHz
1719
char cpu_vendor[13];
1820
u8 cpu_cores;

src/kernel/kernel/utils.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ void binary_pow_command(char** args) {
3939
printf("%d ** %d = %d", b, e, powered);
4040
}
4141

42-
void rand_comamnd(char** args) {
42+
void rand_command(char** args) {
4343
if (!args[0]) {
4444
kprint("rand usage: rand <seed>");
4545
return;
@@ -103,7 +103,10 @@ void sysinfo_command() {
103103
info->free_memory / KB,
104104
info->used_memory / KB);
105105
printf("Kernel memory: %d KB\n", info->kernel_memory / KB);
106-
printf("Heap size: %d KB", info->heap_size / KB);
106+
printf("Heap size: %d KB, used: %d KB, free: %d KB\n",
107+
info->heap_size / KB,
108+
info->heap_used / KB,
109+
info->heap_free / KB);
107110
}
108111

109112
void info_command_shell(char** args) {

src/kernel/kernel/utils.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ void binary_pow_command(char** args);
2121
*
2222
* @param args аргументы
2323
**/
24-
void rand_comamnd(char** args);
24+
void rand_command(char** args);
2525

2626
/**
2727
* @brief Команда обертка шелла для генерации случайного числа в диапазоне

src/kernel/kklibc/ctypes.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,14 @@
77

88
#include "ctypes.h"
99

10+
#include "stdlib.h"
11+
12+
void panic_assert(const char* file, u32 line, const char* desc) {
13+
char buffer[256];
14+
snprintf(buffer, sizeof(buffer), "Assertion failed: %s, file %s, line %d", desc, file, line);
15+
panic_red_screen("Kernel Panic", buffer);
16+
}
17+
1018
/**
1119
* @brief Классификация буквенно-цифровых символов
1220
*

src/kernel/kklibc/ctypes.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,10 @@ typedef char s8;
2929
#define ZB (1024 * 1024 * 1024 * 1024 * 1024 * 1024 * 1024)
3030
#define YB (1024 * 1024 * 1024 * 1024 * 1024 * 1024 * 1024 * 1024)
3131

32+
#define ASSERT(b) ((b) ? (void)0 : panic_assert(__FILE__, __LINE__, #b))
33+
34+
void panic_assert(const char* file, u32 line, const char* desc);
35+
3236
int isalnum(int c);
3337
int isalpha(int c);
3438
int isblank(int c);

src/kernel/kklibc/datatypes/vector.c

Lines changed: 0 additions & 25 deletions
This file was deleted.

0 commit comments

Comments
 (0)