Advertisement
Guest User

Untitled

a guest
Mar 19th, 2019
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.38 KB | None | 0 0
  1. /*
  2.  
  3. Author: @karngyan
  4. Complete the run_scheduler function as per your requiremnts
  5. tweak take_input function as required
  6. To Do:
  7. - Add function to print gantt chart
  8. - Add function to print Process Table
  9.  
  10. */
  11.  
  12. #include<stdio.h>
  13. #include<stdlib.h>
  14. #include<math.h>
  15. #include<stdbool.h>
  16.  
  17. typedef struct pcb{
  18. int p_id,
  19. arrival_time,
  20. priority,
  21. burst_time,
  22. start_time,
  23. end_time,
  24. turn_around_time,
  25. waiting_time;
  26.  
  27. } pcb;
  28.  
  29. typedef struct process{
  30. pcb x;
  31. struct process *next;
  32. } node;
  33.  
  34. typedef struct queue{
  35. node *front , *rear;
  36. } queue;
  37.  
  38. node* new_node(int p_id , int burst_time ,
  39. int arrival_time, int priority)
  40. {
  41. node * tmp = (node *)malloc(sizeof(node));
  42. (tmp->x).p_id = p_id;
  43. (tmp->x).burst_time = burst_time;
  44. (tmp->x).arrival_time = arrival_time;
  45. (tmp->x).priority = priority;
  46. return tmp;
  47. }
  48.  
  49. queue * create_queue()
  50. {
  51. struct queue *q = (queue *)malloc(sizeof(queue));
  52. q->front = q->rear = NULL;
  53. return q;
  54. }
  55.  
  56. void daal(queue * q , node *process)
  57. {
  58.  
  59.  
  60. if(q->rear == NULL)
  61. {
  62. q -> front = q -> rear = process;
  63. return;
  64. }
  65.  
  66. q->rear->next = process;
  67. q->rear = process;
  68. return;
  69. }
  70.  
  71. node* nikaal(queue *q)
  72. {
  73. if(q->front == NULL)
  74. return NULL;
  75. node * tmp = q->front;
  76. q->front = q->front->next;
  77. if(q->front == NULL)
  78. q->rear = NULL;
  79. return tmp;
  80. }
  81.  
  82. void take_input(int *n , queue *input_queue)
  83. {
  84. pcb x;
  85. int i;
  86. printf("Enter number of processes : ");
  87. scanf("%d" , n);
  88. int p_id , arrival_time , burst_time , priority;
  89.  
  90. printf("\nEnter p_id , arrival_time , burst_time , priority: \n");
  91. for(i = 0 ; i<(*n) ; ++i)
  92. {
  93. scanf("%d %d %d %d" ,
  94. &p_id , &arrival_time , &burst_time , &priority);
  95.  
  96. node* process = new_node(p_id , burst_time ,
  97. arrival_time , priority);
  98.  
  99. daal(input_queue , process);
  100. }
  101. }
  102. int print_queue(queue *q)
  103. {
  104. /*
  105. return value:
  106. 0 if queue empty
  107. 1 if successful printing
  108. */
  109. if(q->rear == NULL)
  110. return 0;
  111. node * tmp = q->front;
  112. printf("FRONT\n");
  113. while(tmp != NULL)
  114. {
  115. printf("p_id = %d\n" , (tmp->x).p_id);
  116. tmp = tmp->next;
  117. }
  118. printf("BACK\n");
  119. return 1;
  120. }
  121.  
  122. void run_scheduler(queue* input_queue , queue* ready_queue)
  123. {
  124.  
  125. }
  126.  
  127.  
  128.  
  129. signed main()
  130. {
  131. int n;
  132. printf("\t-- {NAME of SCHEDULING ALGO - HERE} -- \n\n");
  133. queue *input_queue = create_queue();
  134. queue *ready_queue = create_queue();
  135.  
  136. take_input(&n , input_queue);
  137. if(!print_queue(input_queue))
  138. {
  139. printf("Input Queue Empty!\n\n");
  140. return 0;
  141. }
  142.  
  143. // run_scheduler(input_queue , ready_queue);
  144. return 0;
  145. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement