Skip to content

Commit bbab144

Browse files
committed
Update
1 parent fb86c2b commit bbab144

File tree

5 files changed

+28
-16
lines changed

5 files changed

+28
-16
lines changed

devlog/devlog20200306.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,9 @@
88

99
将 bootinit 处的栈切换函数移动到 cpu.hpp,改为 void cpu_switch_stack(ptr_t stack_top)
1010

11-
内核栈现在位于 0xBFFF8000-0xC0000000,即内核开始前的 32KB
11+
内核栈现在位于 0xBFFF8000-0xC0000000,即内核开始前的 32KB。
12+
13+
下一步是为初始进程添加控制信息
14+
15+
完成了除 pt_regs 的分配,pt_regs 要放在栈底,需要重新算一下
1216

iso/boot/kernel.bin

224 Bytes
Binary file not shown.

simplekernel.iso

0 Bytes
Binary file not shown.

src/arch/x86_64/task/task.c

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -67,22 +67,31 @@ void task_init(void) {
6767
cpu_cli();
6868
// 创建一个新的进程作为内核进程
6969
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) );
7372
// 设置进程名
73+
kernel_task->name = (char *)kmalloc(TASK_NAME_MAX + 1);
74+
bzero(kernel_task->name, TASK_NAME_MAX + 1);
7475
strcpy(kernel_task->name, "Kernel task");
7576
// 设置页目录
77+
kernel_task->mm = (task_mem_t *)kmalloc(sizeof(task_mem_t) );
78+
bzero(kernel_task->mm, sizeof(task_mem_t) );
7679
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;
7785
// 设置寄存器信息
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;
8695
// 设置进程运行状态
8796
kernel_task->status = TASK_RUNNING;
8897
curr_task = kernel_task;
@@ -145,14 +154,13 @@ void do_exit(int32_t exit_code) {
145154
return;
146155
}
147156

148-
task_pcb_t * get_current_task() {
157+
// 获取正在运行进程的控制结构体
158+
task_pcb_t * get_current_task(void) {
149159
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) ) ) );
152160
return (task_pcb_t *)(esp & (~(TASK_STACK_SIZE - 1) ) );
153161
}
154162

155-
void kthread_exit() {
163+
void kthread_exit(void) {
156164
register uint32_t val __asm__ ("eax");
157165
printk("Thread exited with value %d\n", val);
158166
while(1);

src/kernel.bin

224 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)