kernel.c 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #include <zivuos.h>
  2. /**
  3. * @brief That initialize kernel structure.
  4. * @param self Pointer to kernel structure to work on.
  5. * @param tasks Pointer to tasks stack.
  6. * @param count Number of tasks slots on stack.
  7. */
  8. void zv_kernel_init(zv_kernel_t *self, zv_task_t *tasks, zv_tid_t count) {
  9. self->tasks = tasks;
  10. self->tasks_count = count;
  11. }
  12. /**
  13. * @brief That boot OS. It return when task stack is empty.
  14. * @return True when everything is executed, and all tasks had been killed.
  15. * False when something went wrong.
  16. */
  17. bool zv_kernel_boot(zv_kernel_t *self) {
  18. while (true) {
  19. }
  20. }
  21. zv_tid_t zv_kernel_create_process(
  22. zv_kernel_t *self,
  23. zv_worker_t worker,
  24. zv_priority_t priority,
  25. void *param
  26. ) {
  27. zv_tid_t slot = __zv_kernel_get_empty_slot(self);
  28. if (slot == ZV_TID_NULL) {
  29. return false;
  30. }
  31. zv_task_t target = self->tasks + slot;
  32. target->param = param;
  33. target->worker = worker;
  34. target->age = 0;
  35. target->priority = priority;
  36. target->state = ZV_TASK_READY;
  37. return slot;
  38. }
  39. void zv_kernel_kill_process(
  40. zv_kernel_t *self,
  41. zv_tid_t target
  42. ) {
  43. zv_task_t current = self->tasks + target;
  44. current->state = ZV_TASK_EMPTY;
  45. }
  46. zv_tid_t __zv_kernel_get_empty_slot(zv_kernel_t *self) {
  47. for (zv_tid_t count = 0; count < self->tasks_count; ++count) {
  48. zv_task_t current = self->tasks + count;
  49. if (current->state == ZV_TASK_EMPTY) {
  50. return count;
  51. }
  52. }
  53. return ZV_TID_NULL;
  54. }
  55. zv_task_t * __zv_kernel_get_task(zv_kernel_t *self, zv_tid_t target) {
  56. return self->tasks + target;
  57. }
  58. zv_tid_t __zv_kernel_get_tid(zv_kernel_t *self, zv_task_t *target) {
  59. return target - self->tasks;
  60. }