1 #pragma once 2 #include <common/glib.h> 3 4 #pragma GCC push_options 5 #pragma GCC optimize("O0") 6 struct process_control_block; 7 // 获取当前的pcb get_current_pcb()8struct process_control_block *get_current_pcb() 9 { 10 struct process_control_block *current = NULL; 11 // 利用了当前pcb和栈空间总大小为32k大小对齐,将rsp低15位清空,即可获得pcb的起始地址 12 barrier(); 13 __asm__ __volatile__("andq %%rsp, %0 \n\t" 14 : "=r"(current) 15 : "0"(~32767UL)); 16 barrier(); 17 18 return current; 19 }; 20 #define current_pcb get_current_pcb() 21 #pragma GCC pop_options