๐Ÿ˜‰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_ ไธญ็งป้™ค


ๆต‹่ฏ•

make lru_replacer_test
./test/lru_replacer_test
make buffer_pool_manager_test
./test/buffer_pool_manager_test

ไปฃ็ ๆ ผๅผ้ชŒ่ฏ

make format
make check-lint
make check-clang-tidy

ๆ‰“ๅŒ…

  • ๆ‰“ๅŒ…

zip project1-submission.zip src/include/buffer/lru_replacer.h src/buffer/lru_replacer.cpp src/include/buffer/buffer_pool_manager.h src/buffer/buffer_pool_manager.cpp

Last updated