diff --git a/kernel/ktest/Makefile b/kernel/ktest/Makefile index ef3b8a20..6791ab98 100644 --- a/kernel/ktest/Makefile +++ b/kernel/ktest/Makefile @@ -2,7 +2,10 @@ CFLAGS += -I . -all: bitree.o kfifo.o +all: ktest.o bitree.o kfifo.o + +ktest.o: ktest.c + gcc $(CFLAGS) -c ktest.c -o ktest.o bitree.o: test-bitree.c gcc $(CFLAGS) -c test-bitree.c -o test-bitree.o diff --git a/kernel/ktest/ktest.c b/kernel/ktest/ktest.c new file mode 100644 index 00000000..9f480314 --- /dev/null +++ b/kernel/ktest/ktest.c @@ -0,0 +1,14 @@ +#include "ktest.h" +#include + +/** + * @brief 开启一个新的内核线程以进行测试 + * + * @param func 测试函数 + * @param arg 传递给测试函数的参数 + * @return pid_t 测试内核线程的pid + */ +pid_t ktest_start(uint64_t (*func)(uint64_t arg), uint64_t arg) +{ + return kernel_thread(func, arg, 0); +} \ No newline at end of file diff --git a/kernel/ktest/ktest.h b/kernel/ktest/ktest.h index 86c717df..936f81ae 100644 --- a/kernel/ktest/ktest.h +++ b/kernel/ktest/ktest.h @@ -2,4 +2,13 @@ #include uint64_t ktest_test_bitree(uint64_t arg); -uint64_t ktest_test_kfifo(uint64_t arg); \ No newline at end of file +uint64_t ktest_test_kfifo(uint64_t arg); + +/** + * @brief 开启一个新的内核线程以进行测试 + * + * @param func 测试函数 + * @param arg 传递给测试函数的参数 + * @return pid_t 测试内核线程的pid + */ +pid_t ktest_start(uint64_t (*func)(uint64_t arg), uint64_t arg); \ No newline at end of file diff --git a/kernel/mm/slab.c b/kernel/mm/slab.c index 9f13df84..d4bffd82 100644 --- a/kernel/mm/slab.c +++ b/kernel/mm/slab.c @@ -541,11 +541,13 @@ void *kmalloc(unsigned long size, unsigned long flags) } int index; for (int i = 0; i < 16; ++i) + { if (kmalloc_cache_group[i].size >= size) { index = i; break; } + } struct slab_obj *slab_obj_ptr = kmalloc_cache_group[index].cache_pool_entry; diff --git a/kernel/process/process.c b/kernel/process/process.c index ccd2a73f..508db515 100644 --- a/kernel/process/process.c +++ b/kernel/process/process.c @@ -416,8 +416,8 @@ ul initial_kernel_thread(ul arg) usb_init(); // 对一些组件进行单元测试 - kernel_thread(ktest_test_bitree, 0, 0); - kernel_thread(ktest_test_kfifo, 0, 0); + ktest_start(ktest_test_bitree, 0); + ktest_start(ktest_test_kfifo, 0); // 准备切换到用户态 struct pt_regs *regs; diff --git a/kernel/process/process.h b/kernel/process/process.h index 61f7f110..cdb5a828 100644 --- a/kernel/process/process.h +++ b/kernel/process/process.h @@ -115,7 +115,7 @@ struct process_control_block // 进程切换时保存的状态信息 struct thread_struct *thread; - // 连接各个pcb的双向链表(todo:删除这个变量) + // 连接各个pcb的双向链表 struct List list; // 地址空间范围