process.hpp 816 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  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. class 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. uint32_t esp;
  19. };
  20. class process {
  21. public:
  22. mm_list mms;
  23. types::list<thread> thds;
  24. void* k_esp;
  25. process_attr attr;
  26. public:
  27. process(process&& val);
  28. process(const process&) = delete;
  29. process(void* start_eip, uint8_t* image, size_t image_size, bool system);
  30. };
  31. // in process.cpp
  32. extern process* current_process;
  33. extern "C" void NORETURN init_scheduler();
  34. void context_switch(irq0_data* intrpt_data);
  35. #else
  36. void NORETURN init_scheduler();
  37. #endif