current.h 557 B

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