Skip to content

Commit 0867ca0

Browse files
committed
improve info command, improve memory system
1 parent 0176c23 commit 0867ca0

File tree

4 files changed

+71
-12
lines changed

4 files changed

+71
-12
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
commit 0176c2367607690e3198f7dccac0a1d26521e82d
2+
Author: Alexeev Bronislav <alexeev.dev@mail.ru>
3+
Date: Fri Aug 22 22:03:20 2025 +0700
4+
5+
add arguments in shell, improve alloc usage, improve libc
6+
17
commit 54f9099f8dbb07eb13ec7c19189144df53bb044f
28
Author: Alexeev Bronislav <alexeev.dev@mail.ru>
39
Date: Fri Aug 22 21:18:22 2025 +0700

src/kernel/kernel/utils.c

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -34,16 +34,22 @@ void halt_cpu(char** args) {
3434
asm volatile("hlt");
3535
}
3636

37-
void help_command_shell(char** args) {
38-
kprint("END - stopping the CPU\n"
39-
"INFO - info about OS\n"
40-
"PAGE - to request a kmalloc()\n"
41-
"CLEAR - clear the screen\n"
42-
"SHUTDOWN - shutdown QEMU\n");
43-
}
44-
4537
void info_command_shell(char** args) {
46-
kprint("Kintsugi OS 0.1.0 by alexeev-prog\n");
38+
// kprint("Kintsugi OS 0.1.0 by alexeev-prog\n");
39+
40+
kprint(" __ _ __ _ \n"
41+
" / /__ (_)__ / /____ __ _____ _(_) ___ ___\n"
42+
" / '_// / _ \\/ __(_-</ // / _ `/ / / _ \\(_-<\n"
43+
"/_/\\_\\/_/_//_/\\__/___/\\_,_/\\_, /_/ \\___/___/\n"
44+
" /___/ \n");
45+
46+
meminfo_t meminfo = get_meminfo();
47+
48+
kprint("MEMORY\n");
49+
kprintf("HEAP (%d): start at %d, minimal block size %d\n", meminfo.heap_size, meminfo.heap_start, meminfo.block_size);
50+
kprintf("Total used: %d\n", meminfo.total_used);
51+
kprintf("Total free: %d\n", meminfo.total_free);
52+
kprintf("Block count: %d\n", meminfo.block_count);
4753
}
4854

4955
void arena_malloc_command_shell(char** args) {

src/kernel/libc/mem.c

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#include "mem.h"
1010
#include "../drivers/screen.h"
1111
#include "../libc/string.h"
12+
#include "../libc/stdio.h"
1213

1314
void memory_copy(u8 *source, u8 *dest, int nbytes) {
1415
int i;
@@ -63,6 +64,8 @@ void* kmalloc_new(u32 size) {
6364

6465
current->size = size;
6566
current->next = new_block;
67+
68+
free_mem_addr += current->size;
6669
}
6770

6871
current->is_free = 0;
@@ -101,6 +104,39 @@ void kfree(void* ptr) {
101104
}
102105
}
103106

107+
meminfo_t get_meminfo() {
108+
meminfo_t meminfo;
109+
110+
mem_block_t* current = free_blocks;
111+
u32 total_used = 0;
112+
u32 total_free = 0;
113+
u32 block_count = 0;
114+
115+
kprint("Memory dump:\n");
116+
117+
while (current) {
118+
block_count++;
119+
120+
if (current->is_free) {
121+
total_free += current->size;
122+
} else {
123+
total_used += current->size;
124+
}
125+
126+
current = current->next;
127+
}
128+
129+
meminfo.heap_start = HEAP_START;
130+
meminfo.heap_size = HEAP_SIZE;
131+
meminfo.block_size = BLOCK_SIZE;
132+
meminfo.free_blocks = free_blocks;
133+
meminfo.total_used = total_used;
134+
meminfo.total_free = total_free;
135+
meminfo.block_count = block_count;
136+
137+
return meminfo;
138+
}
139+
104140
void kmemdump() { // дамп памяти
105141
mem_block_t* current = free_blocks;
106142
u32 total_used = 0;
@@ -176,9 +212,8 @@ u32 kmalloc(u32 size, int align, u32 *phys_addr) {
176212
}
177213

178214
void get_freememaddr() {
179-
char free_mem_addr_str[16] = "";
215+
char free_mem_addr_str[32] = "";
180216
hex_to_ascii(free_mem_addr, free_mem_addr_str);
181217

182-
kprint(free_mem_addr_str);
183-
kprint("\n");
218+
kprintf("%s\n", free_mem_addr_str);
184219
}

src/kernel/libc/mem.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,18 @@ typedef struct mem_block {
2020
u8 is_free;
2121
} mem_block_t;
2222

23+
typedef struct meminfo {
24+
u32 heap_start;
25+
u32 heap_size;
26+
u32 block_size;
27+
mem_block_t* free_blocks;
28+
u32 total_used;
29+
u32 total_free;
30+
u32 block_count;
31+
32+
} meminfo_t;
33+
34+
meminfo_t get_meminfo();
2335
void memory_copy(u8 *source, u8 *dest, int nbytes);
2436
void memory_set(u8 *dest, u8 val, u32 len);
2537
void get_freememaddr();

0 commit comments

Comments
 (0)