amarek

OS LV7

Dec 6th, 2019
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.75 KB | None | 0 0
  1. 1. Napišite program koji simulira First-fit algoritam za dodjeljivanje memorije.
  2. Naredba za kreiranje datoteke: touch zadatak1.c
  3. Naredba za pokretanje uređivača teksta: nano zadatak1.c
  4. Naredba za izlistanje sadržaja datoteke: cat zadatak1.c
  5. Kod:
  6.  
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9.  
  10. int main() {
  11. int n,m,i,j;
  12. printf("Unesite broj procesa\n");
  13. scanf("%d", &n);
  14. printf("Unesite broj memorijskih blokova\n");
  15. scanf("%d", &m);
  16. int *processSize = (int*) calloc(n, sizeof(int));
  17. int *blockSize = (int*) calloc(m, sizeof(int));
  18. int *allocation = (int*) calloc(n, sizeof(int));
  19. printf("Unesite velicine procesa:\n");
  20. for (i=0; i<n; i++)
  21. scanf("%d", &processSize[i]);
  22. printf("Unesite velicine memorijskih blokova:\n");
  23. for (i=0; i<m; i++)
  24. scanf("%d", &blockSize[i]);
  25.  
  26. for(i=0;i<n;i++){
  27. for(j=0;j<m;j++){
  28. if(blockSize[j]>=processSize[i]){
  29. allocation[i]=j;
  30. blockSize[j]-=processSize[i]; }
  31. }
  32. }
  33. printf("\nProcess PID \t Process size \t Block number\n");
  34. for (i=0; i<n; i++){
  35. printf(" %d \t\t\t %d \t\t\t", i+1, processSize[i]);
  36. if (allocation[i] != -1)
  37. printf("%d\n", allocation[i] +1);
  38. else
  39. printf("Not allocated\n");
  40. }
  41.  
  42. return 0;
  43. }
  44. //////////////////////////////////////////////////////////////////////////////////////////
  45. Naredba za prevođenje datoteke: gcc zadatak1.c -o zadatak1
  46. Naredba za pokretanje datoteke: ./zadatak1
  47. Izlaz:
  48.  
  49. Unesite broj procesa
  50. 3
  51. Unesite broj memorijskih blokova
  52. 4
  53. Unesite velicine procesa:
  54. 5
  55. 3
  56. 2
  57. Unesite velicine memorijskih blokova:
  58. 2
  59. 5
  60. 3
  61. 4
  62.  
  63. Process PID Process size Block number
  64. 1 5 2
  65. 2 3 4
  66. 3 2 1
  67.  
  68. ///////////////////////////////////////////////////////////////////////////////////////
  69.  
  70. 2. Napišite program koji simulira Worst-fit algoritam za dodjeljivanje memorije.
  71. Naredba za kreiranje datoteke: touch zadatak2.c
  72. Naredba za pokretanje uređivača teksta: nano zadatak2.c
  73. Naredba za izlistanje sadržaja datoteke: cat zadatak2.c
  74. Kod:
  75.  
  76. #include <stdio.h>
  77. #include <stdlib.h>
  78.  
  79. int main() {
  80. int n,m,i,j;
  81. printf("Unesite broj procesa\n");
  82. scanf("%d", &n);
  83. printf("Unesite broj memorijskih blokova\n");
  84. scanf("%d", &m);
  85. int *processSize = (int*) calloc(n, sizeof(int));
  86. int *blockSize = (int*) calloc(m, sizeof(int));
  87. int *allocation = (int*) calloc(n, sizeof(int));
  88. printf("Unesite velicine procesa:\n");
  89. for (i=0; i<n; i++)
  90. scanf("%d", &processSize[i]);
  91. printf("Unesite velicine memorijskih blokova:\n");
  92. for (i=0; i<m; i++)
  93. scanf("%d", &blockSize[i]);
  94.  
  95. for(i=0;i<n;i++){
  96. for(j=0;j<m;j++){
  97. if(blockSize[j]>=processSize[i]){
  98. allocation[i]=j;
  99. blockSize[j]-=processSize[i]; }
  100. }
  101. }
  102. printf("\nProcess PID \t Process size \t Block number\n");
  103. for (i=0; i<n; i++){
  104. printf(" %d \t\t\t %d \t\t\t", i+1, processSize[i]);
  105. if (allocation[i] != -1)
  106. printf("%d\n", allocation[i] +1);
  107. else
  108. printf("Not allocated\n");
  109. }
  110.  
  111. return 0;
  112. }
  113.  
  114. ////////////////////////////////////////////////////////////////////////////////////////////
  115. Naredba za prevođenje datoteke: gcc zadatak2.c -o zadatak2
  116. Naredba za pokretanje datoteke: ./zadatak2
  117. Izlaz:
  118.  
  119. Unesite broj procesa
  120. 3
  121. Unesite broj memorijskih blokova
  122. 5
  123. Unesite velicine procesa:
  124. 1
  125. 7
  126. 5
  127. Unesite velicine memorijskih blokova:
  128. 6
  129. 4
  130. 7
  131. 3
  132. 4
  133.  
  134. Process PID Process size Block number
  135. 1 1 3
  136. 2 7 1
  137. 3 5 1
  138.  
  139. //////////////////////////////////////////////////////////////////////////////////////////////
  140.  
  141.  
  142. 3. Zadan je referentni string koji treba pohraniti u memoriju koristeći FIFO algoritam: a, c, d, b, b, a, e, d, a, b, c, e, a. Veličina okvira (broj stranica) je 4. Napišite postupak upisivanja referentnog stringa u memoriju i označite svaki "Page fault". Zadatak riješite ručno, a korake rješenja skicirajte i opišite u zadaći na Loomenu.
  143.  
  144. Napravimo tablicu u kojoj će prvi redak označavati indekse znakova stringa.
  145. U drugi redak upisujemo zadane znakove redom: a, c, d, b, b, a, e, d, a, b, c, e, a
  146. Veličina okvira je 4 pa će retci 3,4,5 i 6 predstavljati okvir stranice, a 1 i 2 indeks te nadolazeći znak.
  147. Tablicu popunjavamo tako da u treći redak upišemo prvi zadani znak 'a', u četvrti redak upišemo drugi zadani znak 'c' ispod njegovog indeksa (gledamo stupac), a u treći redak opet upišemo znak 'a'.
  148. U peti redak upišemo idući zadani znak, a to je znak 'd', u stupac u kojem se nalazi njegov indeks. U treći redak opet upišemo 'a', a u četvrti redak upišemo znak 'c'.
  149. U šesti redak upišemo znak 'b', ispod odgovarajućeg indeksa. U retke iznak nastavljamo upisivati odgovarajuće znakove, u treći redak znak 'a', u četvrti redak znak 'c', u peti redak znak 'd'.
  150. Nadolazeći znakovi su 'b', zatim 'a' i njih smještamo u ćelije njima odgovarajućih redaka.
  151. Kako idući znak 'e' nema odgovarajući redak, njega upisujemo u prvi koji dolazi, a to je treći redak, sedmi stupac (umjesto znaka 'a').
  152. Ostatak stupca popunimo njemu odgovarajućim znakovima (gledamo retke).
  153. Znak 'd' upišemo u peti redak.
  154. Znak 'a' upišemo u četvrti redak, deveti stupac.
  155. Znak 'b' ostaje u retku šestom retku.
  156. Znak 'c' prelazi u peti redak, jedanaeti stupac.
  157. Znakovi 'e' i 'a' nastavljamo upisivati kao i prije, znak 'e' u treći redak, a znak 'a' u četvrti redak.
  158.  
  159.  
  160. 1 2 3 4 5 6 7 8 9 10 11 12 13
  161. a c d b b a e d a b c e a
  162.  
  163. a a a a a a e e e e e e e
  164. c c c c c c c a a a a a
  165. d d d d d d d d c c c
  166. b b b b b b b b b b
  167. x x x x x x x
  168.  
  169. -> broj Page faulta = 7
  170.  
  171. 4. Zadan je referentni string koji treba pohraniti u memoriju koristeći LRU algoritam: a, c, d, b, b, a, e, d, a, b, c, e, a. Veličina okvira (broj stranica) je 4. Napišite postupak upisivanja referentnog stringa u memoriju i označite svaki "Page fault". Zadatak riješite ručno, a korake rješenja skicirajte i opišite u zadaći na Loomenu.
  172.  
  173. Napravimo tablicu u kojoj će prvi redak označavati indekse znakova stringa.
  174. U drugi redak upisujemo zadane znakove redom: a, c, d, b, b, a, e, d, a, b, c, e, a.
  175. Veličina okvira je 4 pa će retci 3,4,5 i 6 predstavljati okvir stranice, a 1 i 2 indeks te nadolazeći znak.
  176. Tablicu popunjavamo tako da u treći redak upišemo prvi zadani znak 'a', u četvrti redak upišemo drugi zadani znak 'c' ispod njegovog indeksa (gledamo stupac), a u treći redak opet upišemo znak 'a'.
  177. U peti redak upišemo idući zadani znak, a to je znak 'd', u stupac u kojem se nalazi njegov indeks. U treći redak opet upišemo 'a', a u četvrti redak upišemo znak 'c'.
  178. U šesti redak upišemo znak 'b', ispod odgovarajućeg indeksa. U retke iznak nastavljamo upisivati odgovarajuće znakove, u treći redak znak 'a', u četvrti redak znak 'c', u peti redak znak 'd'.
  179. Nadolazeći znakovi su 'b', zatim 'a' i njih smještamo u ćelije njima odgovarajućih redaka.
  180. Kako idući znak 'e' nema odgovarajući redak, njega upisujemo u četvrti redak, sedmi stupac (umjesto znaka 'c') jer se taj znak nije pojavio ponovno nakon znakova a, b i d.
  181. Ostatak stupca popunimo njemu odgovarajućim znakovima (gledamo retke).
  182. Znak 'd' upišemo u peti redak, a ostatak stupca popunimo odgovarajućim znakovima.
  183. Znak 'a' upišemo u treći redak, a ostatak stupca popunimo odgovarajućim znakovima.
  184. Znak 'b' upišemo u šesti redak, a ostatak stupca popunimo odgovarajućim znakovima.
  185. Nadolazeći znak 'c' više nema svoj redak pa njega smještamo u četvrti redak jer se znak 'e' najranije pojavio te se poslije nije ponavljao nako znakova 'a', 'b' i 'd'.
  186. Znak 'e' upišemo u peti redak umjesto znaka 'd' jer je on "least recently used".
  187. Zadnji znak je 'a' kojeg smještamo u prvu ćeliju 13. stupca, trećeg retka.
  188.  
  189. 1 2 3 4 5 6 7 8 9 10 11 12 13
  190. a c d b b a e d a b c e a
  191. a a a a a a a a a a a a a
  192. c c c c c e e e e c c c
  193. d d d d d d d d d e e
  194. b b b b b b b b b b
  195. x x x x x x x
  196.  
  197. -> broj Page faulta = 7
Add Comment
Please, Sign In to add comment