scheduler.c 817 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. #include "kernel.h"
  2. static inline bool zv_kernel_is_process_ready(
  3. zv_kernel_t *self,
  4. zv_process_t *target
  5. ) {
  6. zv_status_t status = target->status;
  7. if (status == ZV_STATUS_READY) {
  8. return true;
  9. }
  10. }
  11. static inline zv_process_t * zv_kernel_select_next_process(
  12. zv_kernel_t *self
  13. ) {
  14. zv_process_t *current = self->processes;
  15. zv_pid_t step = self->processes_count;
  16. while (true) {
  17. if (step == 0) {
  18. return NULL;
  19. }
  20. if (current == NULL) {
  21. return NULL;
  22. }
  23. if (zv_kernel_is_process_ready(self, current)) {
  24. return current;
  25. }
  26. current = current->next;
  27. step = step - 1;
  28. }
  29. }
  30. void zv_kernel_scheduler(zv_kernel_t *self, bool exitable) {
  31. while (!exitable) {
  32. }
  33. }