]> Zhao Yanbai Git Server - kernel.git/commitdiff
pid 从0开始分配, 暂时不考虑pid回绕问题
authoracevest <zhaoyanbai@126.com>
Wed, 3 Nov 2021 01:37:14 +0000 (09:37 +0800)
committeracevest <zhaoyanbai@126.com>
Wed, 3 Nov 2021 02:45:48 +0000 (10:45 +0800)
kernel/sched.c

index a29a0a9c8e762dd8c5cbc61af84e974cf6095bec..2781836dd0f94400ef15c2967fc74fae669a99ea 100644 (file)
 
 task_union root_task __attribute__((__aligned__(PAGE_SIZE)));
 
+// 暂时不考虑pid回绕问题
 pid_t get_next_pid() {
     static pid_t g_pid = ROOT_TSK_PID;
 
-    pid_t pid = ++g_pid;
+    unsigned long iflags;
+    irq_save(iflags);
+
+    pid_t pid = g_pid;
+    g_pid++;
+
+    irq_restore(iflags);
 
     return pid;
 }
@@ -100,7 +107,8 @@ void context_switch(task_union *prev, task_union *next) {
         "1:"
         "popl   %%ebp;"
         "popfl;"
-        : [prev_esp] "=m"(prev->esp), [prev_eip] "=m"(prev->eip), "=a"(prev), "=b"(ebx), "=c"(ecx), "=d"(edx), "=S"(esi), "=D"(edi)
+        : [prev_esp] "=m"(prev->esp), [prev_eip] "=m"(prev->eip), "=a"(prev), "=b"(ebx), "=c"(ecx), "=d"(edx),
+          "=S"(esi), "=D"(edi)
         : [next_esp] "m"(next->esp), [next_eip] "m"(next->eip), [prev] "a"(prev), [next] "d"(next)
         : "memory");
 }
@@ -187,7 +195,7 @@ unsigned long schedule() {
     irq_restore(iflags);
 
     sel->weight++;
-    printd("%08x %s weight %d\n", sel, sel->name, sel->weight);
+    printd("%08x %s:%d weight %d\n", sel, sel->name, sel->pid, sel->weight);
 
     task_union *prev = current;
     task_union *next = sel;