Feat: kernel thread done

This commit is contained in:
2025-04-27 11:04:28 +08:00
parent 02b2a87fed
commit 981cae803b
14 changed files with 303 additions and 122 deletions

View File

@@ -8,10 +8,12 @@
#include <shell.h>
#include <vector.h>
#include <utils.h>
#include <thread.h>
#include <exception.h>
#include <interrupt.h>
void init(void *dtb, file_node_t **initrd_root)
static inline
void _init(void *dtb, file_node_t **initrd_root)
{
init_exception();
@@ -33,6 +35,9 @@ void init(void *dtb, file_node_t **initrd_root)
// Memory (Buddy system)
mman_init();
// Threads
thread_init();
init_interrupt();
}
@@ -58,116 +63,22 @@ void _print_time(uint64_t)
}
static inline
void _test() {
INFOR("start test");
void *p1, *p2, *p3, *p4, *p5, *p6, *p7;
void *c1, *c2, *c3, *c4, *c5, *c6, *c7, *c8;
p1 = kmalloc(4095);
INFOR(p1);
kfree(p1); // 4095
p1 = kmalloc(4095);
c1 = kmalloc(1000);
INFOR(c1);
c2 = kmalloc(1023);
INFOR(c2);
c3 = kmalloc(999);
INFOR(c3);
c4 = kmalloc(1010);
INFOR(c4);
kfree(c3); // 999
c5 = kmalloc(989);
INFOR(c5);
c3 = kmalloc(88);
INFOR(c3);
c6 = kmalloc(1001);
INFOR(c6);
kfree(c3); // 88
c7 = kmalloc(2045);
c8 = kmalloc(1);
p2 = kmalloc(4096);
kfree(c8); // 1
p3 = kmalloc(16000);
kfree(p1); // 4095
kfree(c3); // 88
kfree(c7); // 2045
p4 = kmalloc(4097);
p5 = kmalloc(4096 + 1);
p6 = kmalloc(4096);
kfree(p2); // 4096
kfree(p5); // MAX_BLOCK_SIZE + 1
kfree(p4); // 4097
p7 = kmalloc(7197);
kfree(p6); // MAX_BLOCK_SIZE
kfree(p3); // 16000
kfree(p7); // 7197
kfree(c1); // 1000
kfree(c6); // 1001
kfree(c2); // 1023
kfree(c5); // 989
kfree(c4); // 1010
int32_t _test(uint64_t)
{
for (int i = 0; i < 10; ++i) {
LOG(i); DEBUG_THREAD(get_current());
sleep(1000000);
}
return 0;
}
void main(void *dtb)
{
file_node_t *initrd_root = 0x0;
init(dtb, &initrd_root);
_init(dtb, &initrd_root);
// LOG("system booting in");
// _print_time(0x0);
for (int i = 0; i < 3; ++i)
run_thread(_test, 0x0);
uint64_t el;
R_SYSREG(el, CurrentEL);
INFOR(el);
void *page1 = allocate_page(1);
INFOR(page1);
void *page2 = allocate_page(2);
INFOR(page2);
void *page4 = allocate_page(4);
INFOR(page4);
void *page16 = allocate_page(16);
INFOR(page16);
free_page(page1);
free_page(page2);
free_page(page4);
free_page(page16);
void *page32 = allocate_page(32);
INFOR(page32);
page1 = allocate_page(1);
INFOR(page1);
free_page(page1);
void *kmalloc8 = kmalloc(8);
INFOR(kmalloc8);
kfree(kmalloc8);
kmalloc8 = kmalloc(8);
INFOR(kmalloc8);
kfree(kmalloc8);
void *kmalloc7k = kmalloc(7 * (1 << 10));
INFOR(kmalloc7k);
void *kmalloc8k = kmalloc(1 << 13);
INFOR(kmalloc8k);
kfree(kmalloc7k);
kfree(kmalloc8k);
page1 = allocate_page(1);
INFOR(page1);
int shell_cont = 1;
while (shell_cont) {
shell_cont = shell(initrd_root);
}
schedule();
}