kernel.c 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. #ifndef ZV_DISABLE_DYNAMIC
  2. #include <malloc.h>
  3. #endif
  4. #include "zivu_types.h"
  5. #include "kernel.h"
  6. #include "process.h"
  7. zv_kernel_t * zv_kernel_create();
  8. zv_kernel_t * zv_kernel_create() {
  9. zv_kernel_t *self = (zv_kernel_t *) malloc(sizeof(zv_kernel_t));
  10. if (self != NULL) {
  11. zv_kernel_init(self, NULL, 0x00);
  12. }
  13. return self;
  14. }
  15. /* For dynamic also kernel. */
  16. #ifndef ZV_DISABLE_DYNAMIC
  17. void zv_kernel_init(
  18. zv_kernel_t *self,
  19. zv_process_t *container,
  20. zv_pid_t processes_count
  21. ) {
  22. self->current_process = ZV_IDLE_PROCESS;
  23. if (container != NULL) {
  24. self->processes = container;
  25. self->processes_count = processes_count;
  26. self->is_dynamic = false;
  27. return;
  28. }
  29. self->processes_count = ZV_DYNAMIC_PROCESSES_STEP * 1;
  30. self->processes = (zv_process_t *) malloc(ZV_DYNAMIC_PROCESSES_STEP * 1);
  31. self->is_dynamic = true;
  32. /* When cannot alloc, make kernel unuseable. */
  33. if (self->processes == NULL) {
  34. self->processes_count = 0x00;
  35. self->is_dynamic = false;
  36. }
  37. }
  38. #else
  39. void zv_kernel_init(
  40. zv_kernel_t *self,
  41. zv_process_t *container,
  42. zv_pid_t processes_count
  43. ) {
  44. self->current_process = ZV_IDLE_PROCESS;
  45. self->processes = container;
  46. self->processes_count = processes_count;
  47. }
  48. #endif