kernel.c 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  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. #ifndef ZV_DISABLE_DYNAMIC
  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. #else
  16. zv_kernel_t * zv_kernel_create() {
  17. return (zv_kernel_t *) NULL;
  18. }
  19. #endif
  20. /* For dynamic also kernel. */
  21. #ifndef ZV_DISABLE_DYNAMIC
  22. void zv_kernel_init(
  23. zv_kernel_t *self,
  24. zv_process_t *container,
  25. zv_pid_t processes_count
  26. ) {
  27. self->current_process = ZV_IDLE_PROCESS;
  28. if (container != NULL) {
  29. self->processes = container;
  30. self->processes_count = processes_count;
  31. self->is_dynamic = false;
  32. return;
  33. }
  34. self->processes_count = ZV_PROCESSES_STEP * 1;
  35. self->processes = (zv_process_t *) malloc(ZV_PROCESSES_STEP_SIZE * 1);
  36. self->is_dynamic = true;
  37. /* When cannot alloc, make kernel unuseable. */
  38. if (self->processes == NULL) {
  39. self->processes_count = 0x00;
  40. self->is_dynamic = false;
  41. }
  42. }
  43. #else
  44. void zv_kernel_init(
  45. zv_kernel_t *self,
  46. zv_process_t *container,
  47. zv_pid_t processes_count
  48. ) {
  49. self->current_process = ZV_IDLE_PROCESS;
  50. self->processes = container;
  51. self->processes_count = processes_count;
  52. }
  53. #endif