process.hpp 720 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. #pragma once
  2. #include <kernel/interrupt.h>
  3. #include <kernel/task.h>
  4. #include <types/types.h>
  5. #ifdef __cplusplus
  6. #include <kernel/mm.hpp>
  7. #include <types/list.hpp>
  8. struct process;
  9. struct thread;
  10. struct process_attr {
  11. uint16_t system : 1;
  12. };
  13. struct thread {
  14. void* eip;
  15. process* owner;
  16. regs_32 regs;
  17. uint32_t eflags;
  18. uint16_t cs;
  19. uint16_t ss;
  20. uint32_t esp;
  21. };
  22. struct process {
  23. mm_list mms;
  24. types::list<thread> thds;
  25. void* kernel_esp;
  26. uint16_t kernel_ss;
  27. process_attr attr;
  28. };
  29. // in process.cpp
  30. extern process* current_process;
  31. extern "C" void NORETURN init_scheduler();
  32. void context_switch(irq0_data* intrpt_data);
  33. #else
  34. void NORETURN init_scheduler();
  35. #endif