๐Ÿ”™ ์ด์ „ ๋ฌธ์„œ๋กœ

๋ฒจ๋ ˆ์ด๋””์˜ ๋ชจ์ˆœ

๋ฒจ๋ ˆ์ด๋””์˜ ๋ชจ์ˆœ์€ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋ ˆ์ž„์˜ ํฌ๊ธฐ๋ฅผ ๋Š˜๋ฆฌ๋ฉด ์˜คํžˆ๋ ค ํŽ˜์ด์ง€ ํดํŠธ๊ฐ€ ์ฆ๊ฐ€ํ•˜๋Š” ํ˜„์ƒ์„ ์˜๋ฏธํ•œ๋‹ค. ํŽ˜์ด์ง€ ๊ต์ฒด ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ 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 ๊ฐ™์€ ์นœ๊ตฌ๋“ค์„ ์‚ฌ์šฉํ•˜์ž.