(Začátky teorie zde)
Příklad:
| Číslo stránky | 2 | 3 | 2 | 1 | 5 | 2 | 4 | 5 | 3 | 2 | 5 | 2 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Rámec a | 2 | 2 | 2 | 4 | 2 | 2 | ||||||
| Rámec b | 3 | 3 | ||||||||||
| Rámec c | 1 | 5 | 5 | 5 | ||||||||
| Výpadek stránky | X | X | X | X | X | X |
# Výpadků: 6.
Komentovaný postup:
Načteme (2) a (3) popořádku do rámců. Při dalším přístupu je (2) již v rámci
a(nedošlo k výpadku).
(1) se načte do prázdnéc. (5) - zde se koukneme do budoucnosti a vidíme, že (1) se nebude používat dále (ale (2) a (3) ano), tím pádem přepíšeme rámecc. (2) je načtená, zase nedojde k výpadku. (4) - zase se koukáme do budoucnosti, (2) se použije jako poslední, tedy přepíšemea. atd.
Příklad:
| Číslo stránky | 2 | 3 | 2 | 1 | 5 | 2 | 4 | 5 | 3 | 2 | 5 | 2 | ||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| R/W | r | r | w | r | r | r | r | r | r | w | w | r | ||||
| time | 1 | 4 | 9 | 10 | 15 | 17 | 20 | 21 | 22 | 25 | 27 | 30 | 31 | 32 | 37 | |
| Rámec a | Stránka | 2 | 2 | 2 | 2 | 2 | ||||||||||
| Rámec a | R | 1 | 1 | 0 | 0 | 1 | 0 | 1 | 1 | |||||||
| Rámec a | M | 0 | 1 | 1 | 1 | 1 | ||||||||||
| Rámec b | Stránka | 3 | 5 | 4 | 3 | |||||||||||
| Rámec b | R | 1 | 0 | 1 | 0 | 1 | 1 | 0 | ||||||||
| Rámec b | M | 0 | 0 | 0 | 0 | |||||||||||
| Rámec c | Stránka | 1 | 5 | 5 | ||||||||||||
| Rámec c | R | 1 | 0 | 1 | 0 | 1 | ||||||||||
| Rámec c | M | 0 | 0 | 1 | ||||||||||||
| Výpadek stránky | X | X | X | X | X | X | X |
# Výpadků: 7.
Komentovaný postup:
Prvně máme read na (2), použijeme rámec
adosteneme výpadek a nastavíme R=1,M=0.
Dále máme read na (3), použijemeb, apod.
Ještě jednou jsme dostali write na (2), tu máme již uloženou va, přepíšeme M=1 a nedojde k výpadku.
Dojde k resetu všech R bitů na 0
Dostaneme read na (1), použijemec.
Další je read na (5), a víme, že va(R:0,M:1),b(R:0,M:0),c(R:1,M:0) -> použijemeb(pak bychom použilia, pakc).
Dojde k dalšímu resetu.
Dále read na (2), kterou máme uloženou va. Nedojde k resetování Modify bitu na 0. Změní se hodnota R=1.
Read na (4) - vidíme, že va(R:1,M:1),b(R:0,M:0),c(R:0,M:0) - postupujeme podle abecedy, takže použijemeb.
atd..
| Číslo stránky | 2 | 3 | 2 | 1 | 5 | 2 | 4 | 5 | 3 | 2 | 5 | 2 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Rámec a | 2 | 2 | 5 | 5 | 3 | |||||||
| Rámec b | 3 | 2 | 2 | 5 | ||||||||
| Rámec c | 1 | 4 | 2 | |||||||||
| Začátek seznamu | a | a | a | a | b | c | a | a | b | b | c | a |
| Výpadek stránky | X | X | X | X | X | X | X | X | X |
(Pokud je více možností: volíme rámec ze začátku abecedy)
# Výpadků: 9.
Komentovaný postup:
Přiřadíme (2) do rámce
a. Ve frontě máme (2) - ještě někde si pamatujeme, kam jsme uložili tu (2) - ale rozhodla jsem se, že zde to nebudu psát. Dostaneme výpadek
Přiřadíme (3) do rámceb. Ve frontě máme (3, 2), další výpadek
Dostaneme požadavek na (2), ten je již uložený v paměti.
Dále máme 1, ve frontě jsou tyto prvky (1, 3, 2).
Další stránkou je (5), ta se dostane na místo (2) - je poslední v seznamu, a nyní fronta bude vypadat takto: (5, 1, 3)
...
| Číslo stránky | 2 | 3 | 2 | 1 | 5 | 2 | 4 | 5 | 3 | 2 | 5 | 2 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Rámec a, Stránka | 2 | 2 | 5 | 5 | 3 | |||||||
| Rámec a, R | 1 | 1 | 1 | 1 | 1 | |||||||
| Rámec b, Stránka | 3 | 2 | 2 | 2 | ||||||||
| Rámec b, R | 1 | 0 | 1 | 0 | 1 | 0 | 1 | |||||
| Rámec c, Stránka | 1 | 4 | 5 | |||||||||
| Rámec c, R | 1 | 0 | 1 | 0 | 1 | |||||||
| Ručička ukazuje na | a | a | a | a | b | c | a | a | b | b | a | |
| Výpadek stránky | X | X | X | X | X | X | X | X |
# Výpadků: 8.
Komentovaný postup:
Nahrajeme stránku (2) do paměti, R=1. Ručička ukazuje na
a
Nahrajeme stránku (3) do paměti, R=1. Ručička bude stále ukazovat naajelikož nehledáme náhradu pro stránku.
Pro (2) nemusíme nic dělat, je stále ještě nahraná v paměti. Nic se nemění.
Situace se opakuje s (1), R=1. Ručička stále ukazuje naa. (Ručička se ve fázi, kdy stále ještě máme v rámcích místo, nemění)
Chceme nahrát (5). Ručička ukazuje naa, kde R=1. Přepíšeme uaR=0, pokračujeme sb, kde taky nastavíme R=0, to samé uděláme i sc. Nakonec se dostaneme zpátky naa, kde R=0. Zde nahrajeme (5) s R=1. Ručička se posune na další rámec -b.
Zase chceme nahrát (2). Ručička ukazuje nab, kde R=0 -> Nahrazujeme. Ručička se posune nac.
Máme další kolizi, chceme nahrát (4), ale to není problém, protože R=1. Přepíšeme a ručička ukazuje naa.
atd.. (Jestliže dojde k nahrání té samé stránky, která je již uložená a R=0, tak se nic neposouvá, jenom se přenastaví R na 1)
Dodatek (není potřeba ke zkoušce) - existuje two-handed clock algoritmus (který už se používá v reálných OS). Víc v 9. přednášce z BI-OSY.
| Číslo stránky | 2 | 3 | 2 | 1 | 5 | 2 | 4 | 5 | 3 | 2 | 5 | 2 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Rámec a | 2 | 2 | 2 | 3 | ||||||||
| Rámec b | 3 | 5 | 5 | 5 | ||||||||
| Rámec c | 1 | 4 | 2 | 2 | ||||||||
| Výpadek stránky | X | X | X | X | X | X | X |
# Výpadků: 7.
Nahrazujeme nejstarší stránku v tabulce
Příklad ze zkoušky:
V systému jsou k dispozici celkem 4 rámce, které pro přehlednost označíme a, b, c a d. Pro konfiguraci platí:
| time | 11 | 17 | 29 | 42 | 53 | 55 | 68 | 73 | 77 | 88 | 96 | 104 | 110 | 118 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| R/W | r | w | w | w | w | r | r | w | r | w | r | w | r | r |
| page# | 2 | 0 | 3 | 3 | 9 | 2 | 5 | 1 | 1 | 5 | 3 | 9 | 8 | 9 |
Ke kolika výpakům stránky (page fault) by došlo, pokud by systém používal algoritmus LRU?
Jaké stránky budou v jednotlivých rámcích po posledním přístupu? Uveďte jako uspořádaný seznam čísel stránek nahraných v rámcích a, b, c a d (např. 70, 63, 85, 46).
Podstatné je zde pro nás jenom to číslo stránky, v tomto případě.
| page# | 2 | 0 | 3 | 3 | 9 | 2 | 5 | 1 | 1 | 5 | 3 | 9 | 8 | 9 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| a | 2 | 2 | 9 | 9 | ||||||||||
| b | 0 | 5 | 5 | |||||||||||
| c | 3 | 3 | 1 | 1 | 8 | |||||||||
| d | 9 | 3 | ||||||||||||
| Výpadek | X | X | X | X | X | X | X | X | X |
# Výpadků: 9, a=(9), b=(5), c=(8), d=(3).
Čítač C je reprezentován 3 bity
| Číslo stránky | 2 | 3 | 2 | 1 | 5 | 2 | 4 | 5 | 3 | 2 | 5 | 2 | ||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| time | 1 | 4 | 9 | 10 | 15 | 17 | 20 | 21 | 22 | 25 | 27 | 30 | 31 | 32 | 37 | |
| Rámec a | Stránka | 2 | 2 | 5 | 4 | 5 | 3 | |||||||||
| Rámec a | R | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 1 | 0 | ||||||
| Rámec a | C | 7 | 7 | 7 | 7 | 7 | 7 | 7 | 7 | 7 | ||||||
| Rámec b | Stránka | 3 | 2 | 2 | 2 | |||||||||||
| Rámec b | R | 1 | 0 | 0 | 1 | 0 | 1 | 1 | ||||||||
| Rámec b | C | 7 | 7 | 3 | 7 | 7 | 7 | 7 | ||||||||
| Rámec c | Stránka | 1 | 5 | |||||||||||||
| Rámec c | R | 1 | 0 | 0 | 1 | |||||||||||
| Rámec c | C | 7 | 7 | 3 | 7 | |||||||||||
| Výpadek stránky | X | X | X | X | x | X | X | X | X |
# Výpadků: 9.