round_roubin_first_match_scheduler.c 592 B

1234567891011121314151617181920212223242526272829
  1. #include "kernel.h"
  2. #include "scheduler.h"
  3. #ifndef ZV_FULL_DISABLE_ROUND_ROUBIN_FIRST_MATCH
  4. zv_process_t * zv_kernel_round_first_match(zv_kernel_t *self) {
  5. zv_pid_t size = self->processes_count;
  6. zv_pid_t count = (self->last + 1) % size;
  7. while (count != self->last) {
  8. zv_process_t *current = self->processes + count;
  9. if (zv_process_is_ready(current)) {
  10. return current;
  11. }
  12. count = (count + 1) % size;
  13. }
  14. return NULL;
  15. }
  16. #else
  17. zv_process_t * zv_kernel_round_first_match(zv_kernel_t *self) {
  18. return NULL;
  19. }
  20. #endif