Feat: kernel thread done
This commit is contained in:
123
kernel/main.c
123
kernel/main.c
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user