round robin scheduling

Reply

Join Date: Jul 2004
Posts: 1
Reputation: blessedrose82 is an unknown quantity at this point 
Solved Threads: 0
blessedrose82 blessedrose82 is offline Offline
Newbie Poster

round robin scheduling

 
0
  #1
Jul 15th, 2004
i need to pass up an operating systems project on the 19th of july. can anyone please help me do this project. i cant manage it by myself :rolleyes: . this is the question:
Develop a program to simulate a computer using a Round-Robin scheduling algorithm with a time slice of 5 milliseconds and with a ready queue but no device queue. Assume all processes arrive at the same time and each process has a random service time of 1 to 10 seconds. Accept processes over 25 seconds period but continue the simulation until all processes are complete.
a. During simulation display all information about the process being executed and the processes in the ready queue. At the end of the simulation display the average turn around time and average waiting time and determine which one gives the best results.
b. Students can experience by changing the quantum and see the effect on Average Turnaround time and Average weighting time and present the results.
Reply With Quote Quick reply to this message  
Join Date: Jun 2003
Posts: 313
Reputation: red_evolve is on a distinguished road 
Solved Threads: 0
red_evolve's Avatar
red_evolve red_evolve is offline Offline
Posting Whiz

Re: round robin scheduling

 
0
  #2
Jul 15th, 2004
Greetings.
Not again...
Please read this reply
"Study the past if you would define the future" - Confucius
Reply With Quote Quick reply to this message  
Join Date: May 2004
Posts: 141
Reputation: meabed is on a distinguished road 
Solved Threads: 3
Team Colleague
meabed's Avatar
meabed meabed is offline Offline
Junior Poster

Re: round robin scheduling

 
0
  #3
Aug 2nd, 2004
hi man .. see this code it may help u to figure out ur problem .. and try to make an effort in ur assignment Cuz no one can do t for u ..
  1. /* Scheduling Simulation*/
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5.  
  6. /* Process Data Structure */
  7. struct process {
  8. int pid; /* Process ID */
  9. int burst; /* CPU Burst Time */
  10. int priority; /* Priority */
  11. int working; /* Working time, for round-robin scheduling */
  12. int waiting; /* Waiting time, for round-robin scheduling */
  13. struct process *next;
  14. };
  15.  
  16. /* Function Prototype Declarations */
  17. struct process *init_process (int pid, int burst, int priority);
  18. void fcfs (struct process *proc);
  19. void listprocs (struct process *proc);
  20. void priority (struct process *proc);
  21. void rr (struct process *proc, int quantum);
  22. void sjf (struct process *proc);
  23.  
  24. /* Main Program Segment */
  25. int main (void) {
  26. /* Initialize process list */
  27. struct process *plist, *ptmp;
  28. plist = init_process(1, 10, 3);
  29. plist->next = init_process(2, 1, 1); ptmp = plist->next;
  30. ptmp->next = init_process(3, 2, 3); ptmp = ptmp->next;
  31. ptmp->next = init_process(4, 1, 4); ptmp = ptmp->next;
  32. ptmp->next = init_process(5, 5, 2);
  33.  
  34. /* Perform simulations */
  35. listprocs(plist);
  36. fcfs(plist);
  37. sjf(plist);
  38. priority(plist);
  39. rr(plist, 1);
  40.  
  41. /* Terminate cleanly */
  42. while (plist != NULL) {
  43. ptmp = plist;
  44. plist = plist->next;
  45. free(ptmp);
  46. };
  47. return(0);
  48. };
  49.  
  50.  
  51. /* Process list entry initialization routine */
  52. struct process *init_process (int pid, int burst, int priority) {
  53. struct process *proc;
  54. proc = malloc(sizeof(struct process));
  55. if (proc == NULL) {
  56. printf("Fatal error: memory allocation failure.\nTerminating.\n");
  57. exit(1);
  58. };
  59. proc->pid = pid;
  60. proc->burst = burst;
  61. proc->priority = priority;
  62. proc->working = 0;
  63. proc->waiting = 0;
  64. proc->next = NULL;
  65. return(proc);
  66. };
  67.  
  68.  
  69. /* First-Come-First-Served scheduling simulation */
  70. void fcfs (struct process *proc) {
  71. int time = 0, start, end;
  72. struct process *tmp = proc;
  73.  
  74. printf("BEGIN:\tFirst-Come-First-Served scheduling simulation\n");
  75.  
  76. while (tmp != NULL) {
  77. start = time;
  78. time += tmp->burst;
  79. end = time;
  80. printf("Process: %d\tEnd Time: %d\tWaiting: %d\tTurnaround: %d\n", tmp->pid, time, start, end);
  81. tmp = tmp->next;
  82. };
  83.  
  84. printf("END:\tFirst-Come-First-served scheduling simulation\n\n");
  85. };
  86.  
  87.  
  88. /* Process listing */
  89. void listprocs (struct process *proc) {
  90. struct process *tmp = proc;
  91.  
  92. printf("BEGIN:\tProcess Listing\n");
  93.  
  94. while (tmp != NULL) {
  95. printf("PID: %d\t\tPriority: %d\tBurst: %d\n", tmp->pid, tmp->priority, tmp->burst);
  96. tmp = tmp->next;
  97. };
  98.  
  99. printf("END:\tProcess Listing\n\n");
  100. };
  101.  
  102.  
  103. /* Priority scheduling simulation
  104.  * Note: lower priority value gets a higher priority
  105.  */
  106. void priority (struct process *proc) {
  107. int time, start, end, highest;
  108. struct process *copy, *tmpsrc, *tmp, *beforehighest;
  109.  
  110. printf("BEGIN:\tPriority scheduling simulation\n");
  111.  
  112. /* Duplicate process list */
  113. tmpsrc = proc;
  114. copy = tmp = NULL;
  115. while (tmpsrc != NULL) {
  116. if (copy == NULL) {
  117. copy = init_process(tmpsrc->pid, tmpsrc->burst, tmpsrc->priority);
  118. tmp = copy;
  119. } else {
  120. tmp->next = init_process(tmpsrc->pid, tmpsrc->burst, tmpsrc->priority);
  121. tmp = tmp->next;
  122. };
  123. tmpsrc = tmpsrc->next;
  124. };
  125.  
  126. /* Main routine */
  127. time = 0;
  128. while (copy != NULL) {
  129. /* Find the next job */
  130. beforehighest = NULL;
  131. highest = copy->priority;
  132. tmp = copy->next;
  133. tmpsrc = copy;
  134. while (tmp != NULL) {
  135. if (tmp->priority < highest) {
  136. highest = tmp->priority;
  137. beforehighest = tmpsrc;
  138. };
  139. tmpsrc = tmp;
  140. tmp = tmp->next;
  141. };
  142.  
  143. /* Process job and remove from copy of process list */
  144. if (beforehighest == NULL) {
  145. /* Handle first job is highest priority case */
  146. start = time;
  147. time += copy->burst;
  148. end = time;
  149. printf("Process: %d\tEnd Time: %d\tWaiting: %d\tTurnaround: %d\n", copy->pid, time, start, end);
  150. tmpsrc = copy->next;
  151. free(copy);
  152. copy = tmpsrc;
  153. } else {
  154. /* Handle first job is not highest priority case */
  155. tmp = beforehighest->next;
  156. start = time;
  157. time += tmp->burst;
  158. end = time;
  159. printf("Process: %d\tEnd Time: %d\tWaiting: %d\tTurnaround: %d\n", tmp->pid, time, start, end);
  160. beforehighest->next = tmp->next;
  161. free(tmp);
  162. };
  163. };
  164.  
  165. printf("END:\tPriority scheduling simulation\n\n");
  166. };
  167.  
  168.  
  169. /* Round-Robin scheduling simulation */
  170. void rr (struct process *proc, int quantum) {
  171. int jobsremain, passes;
  172. struct process *copy, *tmpsrc, *tmp, *slot;
  173.  
  174. printf("BEGIN:\tRound-Robin scheduling simulation (Quantum: %d)\n", quantum);
  175. /* Duplicate process list */
  176. tmpsrc = proc;
  177. copy = tmp = NULL;
  178. while (tmpsrc != NULL) {
  179. if (copy == NULL) {
  180. copy = init_process(tmpsrc->pid, tmpsrc->burst, tmpsrc->priority);
  181. tmp = copy;
  182. } else {
  183. tmp->next = init_process(tmpsrc->pid, tmpsrc->burst, tmpsrc->priority);
  184. tmp = tmp->next;
  185. };
  186. tmpsrc = tmpsrc->next;
  187. };
  188.  
  189. /* Main routine */
  190. jobsremain = 1;
  191. slot = NULL;
  192. while (jobsremain) {
  193. jobsremain = 0;
  194.  
  195. /* Pick next working slot */
  196. if (slot == NULL) {
  197. slot = copy;
  198. jobsremain = 1;
  199. } else {
  200. passes = 0;
  201. do {
  202. if (slot->next == NULL) {
  203. passes++;
  204. slot = copy;
  205. } else {
  206. slot = slot->next;
  207. };
  208. } while (passes <= 2 && slot->burst == slot->working);
  209. if (passes <= 2) {
  210. jobsremain = 1;
  211. };
  212. };
  213.  
  214. /* Perform a cycle */
  215. tmp = copy;
  216. while (tmp != NULL) {
  217. if (tmp->burst > tmp->working) {
  218. if (tmp == slot) {
  219. tmp->working += quantum;
  220. } else {
  221. tmp->waiting += quantum;
  222. };
  223. };
  224. tmp = tmp->next;
  225. };
  226. };
  227.  
  228. /* Display statistics and clean up copy */
  229. tmp = copy;
  230. while (tmp != NULL) {
  231. printf("Process: %d\tWorking: %d\tWaiting: %d\tTurnaround: %d\n", tmp->pid, tmp->working, tmp->waiting, tmp->working + tmp->waiting);
  232. tmpsrc = tmp;
  233. tmp = tmp->next;
  234. free(tmpsrc);
  235. };
  236.  
  237. printf("END:\tRR scheduling simulation\n\n");
  238. };
  239.  
  240.  
  241. /* Shortest Job First scheduling simulation */
  242. void sjf (struct process *proc) {
  243. int time, start, end, shortest;
  244. struct process *copy, *tmpsrc, *tmp, *beforeshortest;
  245.  
  246. printf("BEGIN:\tShortest Job First scheduling simulation\n");
  247.  
  248. /* Duplicate process list */
  249. tmpsrc = proc;
  250. copy = tmp = NULL;
  251. while (tmpsrc != NULL) {
  252. if (copy == NULL) {
  253. copy = init_process(tmpsrc->pid, tmpsrc->burst, tmpsrc->priority);
  254. tmp = copy;
  255. } else {
  256. tmp->next = init_process(tmpsrc->pid, tmpsrc->burst, tmpsrc->priority);
  257. tmp = tmp->next;
  258. };
  259. tmpsrc = tmpsrc->next;
  260. };
  261.  
  262. /* Main routine */
  263. time = 0;
  264. while (copy != NULL) {
  265. /* Find the next job */
  266. beforeshortest = NULL;
  267. shortest = copy->burst;
  268. tmp = copy->next;
  269. tmpsrc = copy;
  270. while (tmp != NULL) {
  271. if (tmp->burst < shortest) {
  272. shortest = tmp->burst;
  273. beforeshortest = tmpsrc;
  274. };
  275. tmpsrc = tmp;
  276. tmp = tmp->next;
  277. };
  278.  
  279. /* Process job and remove from copy of process list */
  280. if (beforeshortest == NULL) {
  281. /* Handle first job is shortest case */
  282. start = time;
  283. time += copy->burst;
  284. end = time;
  285. printf("Process: %d\tEnd Time: %d\tWaiting: %d\tTurnaround: %d\n", copy->pid, time, start, end);
  286. tmpsrc = copy;
  287. copy = copy->next;
  288. free(tmpsrc);
  289. } else {
  290. /* Handle first job is not shortest case */
  291. tmp = beforeshortest->next;
  292. start = time;
  293. time += tmp->burst;
  294. end = time;
  295. printf("Process: %d\tEnd Time: %d\tWaiting: %d\tTurnaround: %d\n", tmp->pid, time, start, end);
  296. beforeshortest->next = tmp->next;
  297. free(tmp);
  298. };
  299. };
  300.  
  301. printf("END:\tShortest Job First scheduling simulation\n\n");
  302. };
Real Eyes Realize Real Lies
My Resume
Reply With Quote Quick reply to this message  
Reply

This thread is more than three months old.
Perhaps start a new thread instead?
Message:


Thread Tools Search this Thread



About Us | Contact Us | Advertise | DaniWeb | Acceptable Use Policy | RSS Feed

©2003 - 2009 DaniWeb® LLC