๋ฒจ๋ ์ด๋์ ๋ชจ์์ ์ ์ฅํ ์ ์๋ ํ๋ ์์ ํฌ๊ธฐ๋ฅผ ๋๋ฆฌ๋ฉด ์คํ๋ ค ํ์ด์ง ํดํธ๊ฐ ์ฆ๊ฐํ๋ ํ์์ ์๋ฏธํ๋ค. ํ์ด์ง ๊ต์ฒด ์๊ณ ๋ฆฌ์ฆ์ผ๋ก FIFO๋ฅผ ์ฌ์ฉํ ๋ ์ฃผ๋ก ๋ฐ์ํ๋ค.
๋ค์๊ณผ ๊ฐ์ด ํ์ด์ง๋ฅผ ์์ฒญํ๋ค๊ณ ๊ฐ์ ํด๋ณด์.
page_references = [3, 2, 1, 0, 3, 2, 4, 3, 2, 1, 0, 4]
๊ทธ๋ฆฌ๊ณ FIFO์ ์ฌ์ด์ฆ๋ฅผ 3์์ 4๋ก ๋ฐ๊พธ๋ฉด ํ์ด์ง ํดํธ ์๊ฐ ๊ฐ์ํด์ผํ ๊ฒ ๊ฐ์ง๋ง ์ญ์ค์ ์ผ๋ก ์ฆ๊ฐํ๋ค.
๋ค์์ ๋ฒจ๋ ์ด๋์ ๋ชจ์์ ์๋ฎฌ๋ ์ด์ ํ ์ ์๋ ๊ฐ๋จํ ์ฝ๋์ด๋ค.
from collections import deque
class Fifo:
def __init__(self, init_size: int):
self.queue = deque(maxlen=init_size)
self.count_of_page_fault = 0
self.init_size = init_size
def request_page(self, page_num: int):
if page_num not in self.queue:
self.queue.append(page_num)
self.count_of_page_fault += 1
def bulk(self, page_references: [int]) -> int:
for page in page_references:
self.request_page(page)
return self.count_of_page_fault
def simulate_beladys_anomaly():
page_references = [3, 2, 1, 0, 3, 2, 4, 3, 2, 1, 0, 4]
for n in range(3, 6):
fifo = Fifo(n)
page_faults = fifo.bulk(page_references)
print(f"Size of Fifo: {fifo.init_size}, Page Faults: {page_faults}")
if __name__ == "__main__":
simulate_beladys_anomaly()
๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ๋ค.
Size of Fifo: 3, Page Faults: 9
Size of Fifo: 4, Page Faults: 10
Size of Fifo: 5, Page Faults: 5
๋ญ.. ๋ญ๋ ธ..
๊ทธ๋ฐ๋ฐ FIFO ๊ฐ์ ๋จ์ํ ์๊ณ ๋ฆฌ์ฆ๋ณด๋ค๋ LRU, LFU, 2Q์ ๊ฐ์ ๊ณ ์ค๊ธ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ฉด ํดํธ๊ฐ ๊ฐ์ํ๋ ๊ฒฝํฅ์ ๋ณด์ด๋ FIFO๋ฅผ ๋ฒ๋ฆฌ๊ณ ์ต์ LRU ๊ฐ์ ์น๊ตฌ๋ค์ ์ฌ์ฉํ์.