Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 1. Napišite program koji simulira First-fit algoritam za dodjeljivanje memorije.
- Naredba za kreiranje datoteke: touch zadatak1.c
- Naredba za pokretanje uređivača teksta: nano zadatak1.c
- Naredba za izlistanje sadržaja datoteke: cat zadatak1.c
- Kod:
- #include <stdio.h>
- #include <stdlib.h>
- int main() {
- int n,m,i,j;
- printf("Unesite broj procesa\n");
- scanf("%d", &n);
- printf("Unesite broj memorijskih blokova\n");
- scanf("%d", &m);
- int *processSize = (int*) calloc(n, sizeof(int));
- int *blockSize = (int*) calloc(m, sizeof(int));
- int *allocation = (int*) calloc(n, sizeof(int));
- printf("Unesite velicine procesa:\n");
- for (i=0; i<n; i++)
- scanf("%d", &processSize[i]);
- printf("Unesite velicine memorijskih blokova:\n");
- for (i=0; i<m; i++)
- scanf("%d", &blockSize[i]);
- for(i=0;i<n;i++){
- for(j=0;j<m;j++){
- if(blockSize[j]>=processSize[i]){
- allocation[i]=j;
- blockSize[j]-=processSize[i]; }
- }
- }
- printf("\nProcess PID \t Process size \t Block number\n");
- for (i=0; i<n; i++){
- printf(" %d \t\t\t %d \t\t\t", i+1, processSize[i]);
- if (allocation[i] != -1)
- printf("%d\n", allocation[i] +1);
- else
- printf("Not allocated\n");
- }
- return 0;
- }
- //////////////////////////////////////////////////////////////////////////////////////////
- Naredba za prevođenje datoteke: gcc zadatak1.c -o zadatak1
- Naredba za pokretanje datoteke: ./zadatak1
- Izlaz:
- Unesite broj procesa
- 3
- Unesite broj memorijskih blokova
- 4
- Unesite velicine procesa:
- 5
- 3
- 2
- Unesite velicine memorijskih blokova:
- 2
- 5
- 3
- 4
- Process PID Process size Block number
- 1 5 2
- 2 3 4
- 3 2 1
- ///////////////////////////////////////////////////////////////////////////////////////
- 2. Napišite program koji simulira Worst-fit algoritam za dodjeljivanje memorije.
- Naredba za kreiranje datoteke: touch zadatak2.c
- Naredba za pokretanje uređivača teksta: nano zadatak2.c
- Naredba za izlistanje sadržaja datoteke: cat zadatak2.c
- Kod:
- #include <stdio.h>
- #include <stdlib.h>
- int main() {
- int n,m,i,j;
- printf("Unesite broj procesa\n");
- scanf("%d", &n);
- printf("Unesite broj memorijskih blokova\n");
- scanf("%d", &m);
- int *processSize = (int*) calloc(n, sizeof(int));
- int *blockSize = (int*) calloc(m, sizeof(int));
- int *allocation = (int*) calloc(n, sizeof(int));
- printf("Unesite velicine procesa:\n");
- for (i=0; i<n; i++)
- scanf("%d", &processSize[i]);
- printf("Unesite velicine memorijskih blokova:\n");
- for (i=0; i<m; i++)
- scanf("%d", &blockSize[i]);
- for(i=0;i<n;i++){
- for(j=0;j<m;j++){
- if(blockSize[j]>=processSize[i]){
- allocation[i]=j;
- blockSize[j]-=processSize[i]; }
- }
- }
- printf("\nProcess PID \t Process size \t Block number\n");
- for (i=0; i<n; i++){
- printf(" %d \t\t\t %d \t\t\t", i+1, processSize[i]);
- if (allocation[i] != -1)
- printf("%d\n", allocation[i] +1);
- else
- printf("Not allocated\n");
- }
- return 0;
- }
- ////////////////////////////////////////////////////////////////////////////////////////////
- Naredba za prevođenje datoteke: gcc zadatak2.c -o zadatak2
- Naredba za pokretanje datoteke: ./zadatak2
- Izlaz:
- Unesite broj procesa
- 3
- Unesite broj memorijskih blokova
- 5
- Unesite velicine procesa:
- 1
- 7
- 5
- Unesite velicine memorijskih blokova:
- 6
- 4
- 7
- 3
- 4
- Process PID Process size Block number
- 1 1 3
- 2 7 1
- 3 5 1
- //////////////////////////////////////////////////////////////////////////////////////////////
- 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.
- Napravimo tablicu u kojoj će prvi redak označavati indekse znakova stringa.
- U drugi redak upisujemo zadane znakove redom: a, c, d, b, b, a, e, d, a, b, c, e, a
- 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.
- 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'.
- 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'.
- 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'.
- Nadolazeći znakovi su 'b', zatim 'a' i njih smještamo u ćelije njima odgovarajućih redaka.
- 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').
- Ostatak stupca popunimo njemu odgovarajućim znakovima (gledamo retke).
- Znak 'd' upišemo u peti redak.
- Znak 'a' upišemo u četvrti redak, deveti stupac.
- Znak 'b' ostaje u retku šestom retku.
- Znak 'c' prelazi u peti redak, jedanaeti stupac.
- Znakovi 'e' i 'a' nastavljamo upisivati kao i prije, znak 'e' u treći redak, a znak 'a' u četvrti redak.
- 1 2 3 4 5 6 7 8 9 10 11 12 13
- a c d b b a e d a b c e a
- a a a a a a e e e e e e e
- c c c c c c c a a a a a
- d d d d d d d d c c c
- b b b b b b b b b b
- x x x x x x x
- -> broj Page faulta = 7
- 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.
- Napravimo tablicu u kojoj će prvi redak označavati indekse znakova stringa.
- U drugi redak upisujemo zadane znakove redom: a, c, d, b, b, a, e, d, a, b, c, e, a.
- 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.
- 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'.
- 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'.
- 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'.
- Nadolazeći znakovi su 'b', zatim 'a' i njih smještamo u ćelije njima odgovarajućih redaka.
- 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.
- Ostatak stupca popunimo njemu odgovarajućim znakovima (gledamo retke).
- Znak 'd' upišemo u peti redak, a ostatak stupca popunimo odgovarajućim znakovima.
- Znak 'a' upišemo u treći redak, a ostatak stupca popunimo odgovarajućim znakovima.
- Znak 'b' upišemo u šesti redak, a ostatak stupca popunimo odgovarajućim znakovima.
- 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'.
- Znak 'e' upišemo u peti redak umjesto znaka 'd' jer je on "least recently used".
- Zadnji znak je 'a' kojeg smještamo u prvu ćeliju 13. stupca, trećeg retka.
- 1 2 3 4 5 6 7 8 9 10 11 12 13
- a c d b b a e d a b c e a
- a a a a a a a a a a a a a
- c c c c c e e e e c c c
- d d d d d d d d d e e
- b b b b b b b b b b
- x x x x x x x
- -> broj Page faulta = 7
Add Comment
Please, Sign In to add comment