@@ -67,22 +67,31 @@ void task_init(void) {
67
67
cpu_cli ();
68
68
// 创建一个新的进程作为内核进程
69
69
task_pcb_t * kernel_task = get_current_task ();
70
- printk_debug ("get_current_task(): 0x%08X\n" , get_current_task () );
71
- bzero (kernel_task , TASK_STACK_SIZE );
72
- printk_debug ("sdsdsd\n" );
70
+ assert (kernel_task == (ptr_t )KERNEL_STACK_TOP , "kernel_task not correct\n" );
71
+ bzero (kernel_task , sizeof (task_pcb_t ) );
73
72
// 设置进程名
73
+ kernel_task -> name = (char * )kmalloc (TASK_NAME_MAX + 1 );
74
+ bzero (kernel_task -> name , TASK_NAME_MAX + 1 );
74
75
strcpy (kernel_task -> name , "Kernel task" );
75
76
// 设置页目录
77
+ kernel_task -> mm = (task_mem_t * )kmalloc (sizeof (task_mem_t ) );
78
+ bzero (kernel_task -> mm , sizeof (task_mem_t ) );
76
79
kernel_task -> mm -> pgd_dir = pgd_kernel ;
80
+ // 设置上下文
81
+ kernel_task -> context = (task_context_t * )kmalloc (sizeof (task_context_t ) );
82
+ bzero (kernel_task -> context , sizeof (task_context_t ) );
83
+ // context->eip = (ptr_t)forkret_s233;
84
+ // context->esp = (ptr_t)task_pcb->pt_regs;
77
85
// 设置寄存器信息
78
- kernel_task -> pt_regs -> cs = KERNEL_CS ;
79
- kernel_task -> pt_regs -> ds = KERNEL_DS ;
80
- kernel_task -> pt_regs -> es = KERNEL_DS ;
81
- kernel_task -> pt_regs -> fs = KERNEL_DS ;
82
- kernel_task -> pt_regs -> gs = KERNEL_DS ;
83
- kernel_task -> pt_regs -> user_ss = KERNEL_DS ;
84
- kernel_task -> pt_regs -> eflags |= EFLAGS_IF ;
85
- kernel_task -> pt_regs -> eip = (ptr_t )forkret_s233 ;
86
+ // kernel_task->pt_regs = (pt_regs_t *)kmalloc(sizeof(pt_regs_t) );
87
+ // kernel_task->pt_regs->cs = KERNEL_CS;
88
+ // kernel_task->pt_regs->ds = KERNEL_DS;
89
+ // kernel_task->pt_regs->es = KERNEL_DS;
90
+ // kernel_task->pt_regs->fs = KERNEL_DS;
91
+ // kernel_task->pt_regs->gs = KERNEL_DS;
92
+ // kernel_task->pt_regs->user_ss = KERNEL_DS;
93
+ // kernel_task->pt_regs->eflags |= EFLAGS_IF;
94
+ // kernel_task->pt_regs->eip = (ptr_t)forkret_s233;
86
95
// 设置进程运行状态
87
96
kernel_task -> status = TASK_RUNNING ;
88
97
curr_task = kernel_task ;
@@ -145,14 +154,13 @@ void do_exit(int32_t exit_code) {
145
154
return ;
146
155
}
147
156
148
- task_pcb_t * get_current_task () {
157
+ // 获取正在运行进程的控制结构体
158
+ task_pcb_t * get_current_task (void ) {
149
159
register uint32_t esp __asm__ ("esp" );
150
- // printk_debug("esp: 0x%08X\t", esp);
151
- // printk_debug("(esp & (~(TASK_STACK_SIZE - 1) ) : 0x%08X\n", (esp & (~(TASK_STACK_SIZE - 1) ) ) );
152
160
return (task_pcb_t * )(esp & (~(TASK_STACK_SIZE - 1 ) ) );
153
161
}
154
162
155
- void kthread_exit () {
163
+ void kthread_exit (void ) {
156
164
register uint32_t val __asm__ ("eax" );
157
165
printk ("Thread exited with value %d\n" , val );
158
166
while (1 );
0 commit comments