๐Buffer Pool
PROJECT #1 - BUFFER POOL
ๅฎ็ฐๅญๅจ็ฎก็็
buffer pool
ๆฅ็
lru_replace.h
ๅbuffer_pool_manager.h
ไธญ้่ฆๅฎ็ฐ็ๅฝๆฐๆฅ็
Page
๏ผDiskManager
็ฑป็ไธไบๆๅๅ้ๅๅฝๆฐ
TASK #1 - LRU REPLACEMENT POLICY
ๅฎ็ฐ้กต้ขๆฟๆข็ LRU ็ญ็ฅ๏ผๅณไผๅ ๆฟๆขๆ่ฟๆๅฐไฝฟ็จ็้กต้ข
ๆ่ทฏ
ไฝฟ็จ
std::list<frame_id_t> lru
ๅ้พ่กจ็ๆฐๆฎ็ปๆๆฅๆทปๅ ๅฏไปฅ่ขซๆทๆฑฐ็้กต้ขไฝฟ็จ
std::unordered_map<frame_id_t, std::list<frame_id_t>::iterator> mp
ๆฅๅ ้frame
็ๆฅๆพๅๅ ้คไฝฟ็จ
std::mutex latch_;
ๆฅๆฏๆๅค็บฟ็จ
ไฝฟ็จ std::lock_guard<std::mutex> guard(latch_);
่ฏญๅฅ๏ผๅจๆ้ guard
ๆถไผ่ชๅจ่ฐ็จ latch_.lock()
ๅ ้๏ผๅนถไธๅจ guard
ๆๆ็ๆถๅ่ชๅจ่ฐ็จ latch_.unlock()
้ๆพ้ใ
Victim
ๅฝ
Size()
ไธบ 0 ๆถ่ฟๅfalse
ๅ
lru
็ๅคด้จๅ ็ด ็ปframe_id
๏ผๅ ้คๅคด้จๅ ็ด ๏ผๅนถไธๅจmp
ไธญๅ ้คframe_id
Pin
ๅฝ
frame_id
ๅจmp
ไธญๆถ๏ผๆไปฌ้่ฆๅจlru
้พ่กจๅmp
ๅญๅ ธไธญๅ ้คframe_id
่ฟไธชๅ ็ดๅ ไธบ
mp
ไธญๅทฒ็ปไฟๅญไบframe_id
็่ฟญไปฃๅจ๏ผๅ ๆญคไปlru
ไธญๅ ้คๅฎ็ๆถ้ดๅคๆๅบฆไธบ O(1)O(1)
Unpin
ๅฆๆ
frame_id
ๅทฒ็ปๅจmp
ไธญไบ๏ผ้ฃไน็ดๆฅ่ฟๅๅฆๅ็่ฏๅฐ
frame_id
ๆทปๅ ๅฐlru
็ๆซๅฐพ๏ผ็ถๅๅจmp
ไธญไฟๅญ่ฟไธชframe_id
ๅๅฎ็่ฟญไปฃๅจ๏ผ--lru.end()
๏ผ
TASK #2 - BUFFER POOL MANAGER
ๅจๅฎ็ฐ
buffer_pool_manager
ๆถ๏ผๅบ่ฏฅ็ไธไธPage
ๅฏน่ฑก็ไธไบๆๅๅ้๏ผๅไธชๅฝๆฐๅฆไฝๅฎ็ฐๅทฒ็ป่ฏฆ็ป็ปๅบไบใ
ๆณจๆ
page_id
่กจ็คบ็ๆฏ็ฃ็ไธ็้กตpage_table_
ๅฏไปฅๆ นๆฎpage_id
ๆพๅฐๅฏนๅบ็frame_id
pages_
ๆๅไบไธไธชPage
ๆฐ็ป๏ผๆไปฌไผ็จframe_id
ๆฅๆพๅฐๆไธไธชPage
ๅฏน่ฑกๅจ
UnpinPageImpl
ๅฝๆฐไธญ๏ผๅฆๆpage_id
ไธๅจpage_table_
ไธญ๏ผๆไปฌๅบ่ฏฅ่ฟๅtrue
๏ผ่ไธๆฏfalse
๏ผ่ฟๆๅฐฑๆฏๅชๆๅฝis_dirty
ไธบtrue
ๆถ๏ผๆไปฌๆ่ฎพ็ฝฎPage
็is_dirty_
ๅจ
DeletePageImpl(page_id_t page_id)
ไธญ๏ผ้คไบๆpage_id
ๅฏนๅบ็้กตไปpage_table_
็งป้ค๏ผ่ฟ้่ฆ่ฐ็จPin
ๅฐ่ฏฅ้กตไปreplacer_
ไธญ็งป้ค
ๆต่ฏ
ไปฃ็ ๆ ผๅผ้ช่ฏ
ๆๅ
ๆๅ
็ถๅๅๅพ https://www.gradescope.com ๆไบคไปฃ็
Last updated