Buffer Manager
- class pf.buffer.PfFrameKey(fid: PfFileId, pid: PfPageId)[소스]
기반 클래스:
NamedTuplebuffer에 있는 page frame의 key를 나타내는 클래스입니다.
- class pf.buffer.PfBufferManager(page_size: int, capacity: int, cache_policy: PfCachePolicy | None = None)[소스]
기반 클래스:
objectbuffer manager를 나타내는 클래스입니다.
- 변수:
_page_size (int) – page의 크기.
_capacity (int) – buffer의 크기.
_cache_policy (PfCachePolicy) – 사용할 cache policy 정책.
_cache_hit (int) – cache hit 횟수.
_cache_miss (int) – cache miss 횟수.
_frames (dict[PfFrameKey, PfPage]) – buffer에 있는 page frame들.
- __init__(page_size: int, capacity: int, cache_policy: PfCachePolicy | None = None) None[소스]
buffer manager를 초기화합니다.
- 매개변수:
page_size (int) – page의 크기.
capacity (int) – buffer의 크기.
cache_policy (PfCachePolicy | None) – 사용할 cache policy. None 이면 PfRandomPolicy 를 사용합니다.
- 예외 발생:
PfInvalidPageSizeError – page_size 가 유효하지 않은 경우.
PfInvalidBufferCapacityError – capacity 가 유효하지 않은 경우.
- read_page(file: PfFile, pid: PfPageId) PfPage[소스]
(internal) file에서 page를 read합니다.
- 매개변수:
- 반환:
read한 page.
- 반환 형식:
- 예외 발생:
PfInvalidPageDataSizeError – page data의 크기가 유효하지 않은 경우.
- write_page(file: PfFile, page: PfPage, fsync: bool = False) bool[소스]
(internal) page를 file에 write하고, dirty 상태를 해제합니다.
- 매개변수:
- 반환:
write가 발생했는지 여부.
- 반환 형식:
bool
- 예외 발생:
PfInvalidPageDataSizeError – page data의 크기가 유효하지 않은 경우.
- fetch_page(file: PfFile, pid: PfPageId) PfPage[소스]
file에서 page를 가져옵니다.
page가 buffer에 있으면, 그것을 반환합니다. 이때 _cache_hit 를 하나 증가시킵니다.
page가 buffer에 없는 경우, 만약 buffer가 가득 차있으면, 하나를 evict하면서 file에 write해서 빈 공간을 만듭니다. buffer에 빈 공간이 있으면, file에서 page를 read하고, buffer에 추가한 뒤, 반환합니다. buffer에 추가할때는 frame key를 cache policy에도 insert합니다. 이때 _cache_miss 를 하나 증가시킵니다.
- 매개변수:
- 반환:
가져온 page.
- 반환 형식:
- 예외 발생:
PfNoEvictableFrameError – buffer에 있는 모든 page가 pin 되어있어서 evict할 수 없는 경우.
- allocate_page(file: PfFile, pid: PfPageId) PfPage[소스]
file에 새로운 page를 allocate하고, buffer에 추가합니다.
buffer가 가득 차있으면, 하나를 evict하면서 file에 write해서 빈 공간을 만듭니다. buffer에 빈 공간이 있으면, 새로운 page를 생성하고, page header와 data를 초기화한 뒤, buffer에 추가합니다. buffer에 추가할때는 frame key를 cache policy에도 insert합니다.
- 매개변수:
- 반환:
새로 allocate된 page.
- 반환 형식:
- 예외 발생:
PfNoEvictableFrameError – buffer에 있는 모든 page가 pin 되어있어서 evict할 수 없는 경우.
- touch_page(file: PfFile, pid: PfPageId) None[소스]
buffer에서 page를 가장 최근에 접근한 것으로 표시합니다.
cache policy에서 access를 해줍니다.
- persist_page(file: PfFile, pid: PfPageId) bool[소스]
page를 file에 즉시 write합니다.
즉, fsync 옵션을 True 로 설정한 write_page 메서드를 사용합니다. buffer에 있는 page만 대상으로 한다고 가정합니다.
- flush(file: PfFile) int[소스]
file을 flush 합니다.
buffer에 있는, 해당하는 file의 모든 page를 file에 write하고, buffer에서 제거합니다. cache policy에서도 remove 해줍니다.
- 반환:
write가 발생한 page의 수.
- 반환 형식:
int
- 예외 발생:
PfFlushingPinnedPageError – page가 pin 되어있어서 flush할 수 없는 경우.