가상 메모리 문서의 검증 코드다. if __name__ == "__main__": 아래가 자체 테스트다.

"""페이징에서 가상 주소를 (페이지 번호, 오프셋)으로 나누고 실제 주소로 바꾸는 계산을 확인한다."""


def split(vaddr, page_size):
    return divmod(vaddr, page_size)           # (페이지 번호, 페이지 안 위치)


def translate(vaddr, page_size, page_table):
    page, offset = split(vaddr, page_size)
    if page not in page_table:
        raise LookupError(f"{page}번 페이지가 메모리에 없다 (디스크에서 가져와야 함)")
    return page_table[page] * page_size + offset


if __name__ == "__main__":
    # 본문 예: 페이지 1,024워드, 가상 주소 3,000, 2번 페이지가 실제 7번 칸
    assert split(3000, 1024) == (2, 952)
    assert translate(3000, 1024, {2: 7}) == 8120
    # 카드 C1: 페이지 512워드, 가상 주소 1,300, 2번 페이지가 실제 4번 칸
    assert split(1300, 512) == (2, 276)
    assert translate(1300, 512, {2: 4}) == 2324
    # 없는 페이지는 실패해야 한다
    try:
        translate(5000, 1024, {2: 7})
        raise AssertionError("없는 페이지인데 통과함")
    except LookupError:
        pass
    print("ALL CHECKS PASSED")