๐Expand
1. Task1 LRU REPLACEMENT POLICY#
0. ไปปๅกๆ่ฟฐ#
่ฟไธชไปปๅก่ฆๆฑๆไปฌๅฎ็ฐๅจ่ฏพๅ ไธๆๆ่ฟฐ็LRU็ฎๆณๆ่ฟๆๅฐไฝฟ็จ็ฎๆณใ
ไฝ ้่ฆๅฎ็ฐไธ้ข่ฟไบๅฝๆฐใ่ฏท็กฎไฟไปไปฌ้ฝๆฏ็บฟ็จๅฎๅ จ็ใ
Victim(T*): Remove the object that was accessed the least recently compared to all the elements being tracked by theReplacer, store its contents in the output parameter and returnTrue. If theReplaceris empty returnFalse.Pin(T): This method should be called after a page is pinned to a frame in theBufferPoolManager. It should remove the frame containing the pinned page from theLRUReplacer.Unpin(T): This method should be called when thepin_countof a page becomes 0. This method should add the frame containing the unpinned page to theLRUReplacer.Size(): This method returns the number of frames that are currently in theLRUReplacer.
ๅ
ณไบLockๅLathes็ๅบๅซ่ฏท็ไธๆใ
1. ๅฎ็ฐ#
ๅ ถๅฎ่ฟไธชไปปๅก่ฟๆฏ่ฎ็ฎๅ็ใไฝ ๅช้่ฆๆธ ๆฅไปไนๆฏๆ่ฟๆๅฐไฝฟ็จ็ฎๆณๅณๅฏใ
LRU ็ฎๆณ็่ฎพ่ฎกๅๅๆฏ๏ผๅฆๆไธไธชๆฐๆฎๅจๆ่ฟไธๆฎตๆถ้ดๆฒกๆ่ขซ่ฎฟ้ฎๅฐ๏ผ้ฃไนๅจๅฐๆฅๅฎ่ขซ่ฎฟ้ฎ็ๅฏ่ฝๆงไนๅพๅฐใไนๅฐฑๆฏ่ฏด๏ผๅฝ้ๅฎ็็ฉบ้ดๅทฒๅญๆปกๆฐๆฎๆถ๏ผๅบๅฝๆๆไน ๆฒกๆ่ขซ่ฎฟ้ฎๅฐ็ๆฐๆฎๆทๆฑฐใ
่ฟไธช้ขๆ็ๅใleetcodeไธๆๅ้ขใ่ไธ่ฆๆฑๅจo(1)็ๆถ้ดๅคๆๅบฆๅฎ็ฐ่ฟไธไปปๅกใ
ไธบไบๅฎ็ฐๅจO(1)ๆถ้ดๅ
่ฟ่กๆฅๆพใๅ ๆญคๆไปฌๅฏไปฅ็จไธไธชhash่กจใ่ไธๆไปฌ่ฆ่ฎฐๅฝไธไธชๆถ้ดๆณๆฅๅฎๆ่ฎฐๅฝๆ่ฟๆๅฐไฝฟ็จ็ๅๆฏ่ฐใ่ฟ้ๆไปฌๅฏไปฅ็จlistๆฅๅฎ็ฐใ
ๅฆๆๆไปฌ่ฎฟ้ฎไบ้พ่กจไธญ็ไธไธชๅ ็ด ใๅฐฑๆ่ฟไธชๅ ็ด ๆพๅจ้พ่กจๅคด้จใ่ฟๆ ทๆพๅจ้พ่กจๅฐพ้จ็ๅ ็ด ไธๅฎๅฐฑๆฏๆ่ฟๆๅฐไฝฟ็จ็ๅ ็ด ใ
ไธบไบ่ฎฉๆๅ ฅๅๅ ้คๅไธบO(1)ๆไปฌๅฏไปฅ็จ้พ่กจๆฅๅฎ็ฐใ
่ฟ้ๅฏนไบpinๅunpinๆไฝๅฎ้
ไธๅฏนไบไบtask2ใๆไปฌไธบไปไน้่ฆpinใไนฆไธ็ปไบๆไปฌ็ญๆกใไธ้ขๆไปฌไน่ฟ่กไบๅๆ
1.1 ๆฐๆฎ็ปๆ่ฎพ่ฎก#
่ฟ้ๆไปฌ็จไบ้พ่กจ + hash่กจใไธป่ฆๆฏไธบไบๅ ้คๅๆๅ
ฅๅไธบ0(1)็ๆถ้ดๅคๆๅบฆใๅผๅ
ฅhash่กจๅฐฑๆฏๅฏไปฅๆ นๆฎframe_idๅฟซ้ๆพๅฐๅ
ถๅจlistไธญๅฏนๅบ็ไฝ็ฝฎใๅฆๅ็่ฏไฝ ้่ฆ้ๅ้พ่กจ่ฟๅฐฑไธๆฏo(1)ไบ
1.2 Victim ๅฝๆฐๅฎ็ฐ#
ๆณจๆ่ฟ้ๅฟ ้กป่ฆๅ ้๏ผไปฅ้ฒๆญขๅนถๅ้่ฏฏใ
ๅฆๆๆฒกๆๅฏไปฅ็บ็ฒ็้กต็ดๆฅ่ฟๅfalse
ๅฆๆๆ็่ฏ้ๆฉๅจ้พ่กจๅฐพ้จ็้กตใremoveๅฎๅณๅฏใ่ฟ้็ๅ ้คๆถๅ้พ่กจๅhash่กจไธคไธชๆฐๆฎ็ปๆ็ๅ ้ค
1.3 pin ๅฝๆฐๅฎ็ฐ#
ๆณจๆ่ฟ้ๅฟ ้กป่ฆๅ ้๏ผไปฅ้ฒๆญขๅนถๅ้่ฏฏใ
pinๅฝๆฐ่กจ็คบ่ฟไธชframe่ขซๆไธช่ฟ็จๅผ็จไบ
่ขซๅผ็จ็frameไธ่ฝๆไธบLRU็ฎๆณ็็บ็ฒ็ฎๆ ๏ผๆไปฅ่ฟ้ๆๅฎไปๆไปฌ็ๆฐๆฎ็ปๆไธญๅ ้ค
1.4 unpin ๅฝๆฐๅฎ็ฐ#
ๆณจๆ่ฟ้ๅฟ ้กป่ฆๅ ้๏ผไปฅ้ฒๆญขๅนถๅ้่ฏฏใ
ๅ ็ไธไธ่ฟไธช้กตๆฏๅฆๅจๅฏๆฟๆข้พ่กจไธญ
ๅฆๆๅฎไธๅญๅจ็่ฏใๅ้่ฆ็ไธไธๅฝๅ้พ่กจๆฏๅฆ่ฟๆ็ฉบ้ฒไฝ็ฝฎใๅฆๆๆ็่ฏๅ็ดๆฅๅ ๅ ฅ
ๅฆๆๆฒกๆๅ้่ฆ็งป้ค้พ่กจๅฐพ้จ็่็น็ฅ้ๆ็ฉบไฝไฝ็ฝฎ
2. ๆต่ฏ#
ๆง่กไธ้ข็่ฏญๅฅๅณๅฏ

Task2 BUFFER POOL MANAGER#
0. ไปปๅกๆ่ฟฐ#
ๆฅไธๆฅ๏ผๆจ้่ฆๅจ็ณป็ปไธญๅฎ็ฐ็ผๅฒๆฑ ็ฎก็ๅจ(BufferPoolManager)ใBufferPoolManager่ด่ดฃไปDiskManager่ทๅๆฐๆฎๅบ้กต้ขๅนถๅฐๅฎไปฌๅญๅจๅจๅ
ๅญไธญใBufferPoolManage่ฟๅฏไปฅๅจๆ่ฆๆฑๅฎ่ฟๆ ทๅๆถ๏ผๆ่
ๅฝๅฎ้่ฆ้ฉฑ้ไธไธช้กตไปฅไพฟไธบๆฐ้กต่
พๅบ็ฉบ้ดๆถ๏ผๅฐ่้กตๅๅ
ฅ็ฃ็ใไธบไบ็กฎไฟๆจ็ๅฎ็ฐ่ฝๅคๆญฃ็กฎๅฐไธ็ณป็ป็ๅ
ถไฝ้จๅไธ่ตทๅทฅไฝ๏ผๆไปฌๅฐไธบๆจๆไพไธไบๅทฒ็ปๅกซๅๅฅฝ็ๅ่ฝใๆจไนไธ้่ฆๅฎ็ฐๅฎ้
่ฏปๅๆฐๆฎๅฐ็ฃ็็ไปฃ็ (ๅจๆไปฌ็ๅฎ็ฐไธญ็งฐไธบDiskManager)ใๆไปฌๅฐไธบๆจๆไพ่ฟไธๅ่ฝใ
็ณป็ปไธญ็ๆๆๅ
ๅญ้กต้ขๅ็ฑPageๅฏน่ฑก่กจ็คบใBufferPoolManagerไธ้่ฆไบ่งฃ่ฟไบ้กต้ข็ๅ
ๅฎนใ ไฝๆฏ๏ผไฝไธบ็ณป็ปๅผๅไบบๅ๏ผ้่ฆ็ๆฏ่ฆไบ่งฃPageๅฏน่ฑกๅชๆฏ็ผๅฒๆฑ ไธญ็จไบๅญๅจๅ
ๅญ็ๅฎนๅจ๏ผๅ ๆญคๅนถไธ็นๅฎไบๅฏไธ้กต้ขใ ไนๅฐฑๆฏ่ฏด๏ผๆฏไธชPageๅฏน่ฑก้ฝๅ
ๅซไธๅๅ
ๅญ๏ผDiskManagerไผๅฐๅ
ถ็จไฝๅคๅถไป็ฃ็่ฏปๅ็็ฉ็้กต้ขๅ
ๅฎน็ไฝ็ฝฎใ BufferPoolManagerๅฐๅจๅฐๅ
ถๆฅๅ็งปๅจๅฐ็ฃ็ๆถ้็จ็ธๅ็Pageๅฏน่ฑกๆฅๅญๅจๆฐๆฎใ ่ฟๆๅณ็ๅจ็ณป็ป็ๆดไธช็ๅฝๅจๆไธญ๏ผ็ธๅ็Pageๅฏน่ฑกๅฏ่ฝๅ
ๅซไธๅ็็ฉ็้กต้ขใPageๅฏน่ฑก็ๆ ่ฏ็ฌฆ๏ผpage_id๏ผ่ท่ธชๅ
ถๅ
ๅซ็็ฉ็้กต้ขใ ๅฆๆPageๅฏน่ฑกไธๅ
ๅซ็ฉ็้กต้ข๏ผๅๅฟ
้กปๅฐๅ
ถpage_id่ฎพ็ฝฎไธบINVALID_PAGE_IDใ
ๆฏไธชPageๅฏน่ฑก่ฟ็ปดๆคไธไธช่ฎกๆฐๅจ๏ผไปฅๆพ็คบโๅบๅฎโ่ฏฅ้กต้ข็็บฟ็จๆฐใBufferPoolManagerไธๅ
่ฎธ้ๆพๅบๅฎ็้กต้ขใๆฏไธชPageๅฏน่ฑก่ฟ่ท่ธชๅฎ็่ๆ ่ฎฐใๆจ็ๅทฅไฝๆฏๅคๆญ้กต้ขๅจ่งฃ็ปๅฎไนๅๆฏๅฆๅทฒ็ป่ขซไฟฎๆน๏ผไฟฎๆนๅๆ่ๆ ่ฎฐ็ฝฎไธบ1๏ผใBufferPoolManagerๅฟ
้กปๅฐ่้กต็ๅ
ๅฎนๅๅ็ฃ็๏ผ็ถๅๆ่ฝ้็จ่ฏฅๅฏน่ฑกใ
BufferPoolManagerๅฎ็ฐๅฐไฝฟ็จๅจๆญคๅ้
็ๅ้ขๆญฅ้ชคไธญๅๅปบ็LRUReplacer็ฑปใๅฎๅฐไฝฟ็จLRUReplacerๆฅ่ท่ธชไฝๆถ่ฎฟ้ฎ้กตๅฏน่ฑก๏ผไปฅไพฟๅจๅฟ
้กป้ๆพไธไธชๅธงไปฅไธบไป็ฃ็ๅคๅถๆฐ็็ฉ็้กต่
พๅบ็ฉบ้ดๆถ๏ผๅฎๅฏไปฅๅณๅฎๅๆถๅชไธช้กตๅฏน่ฑก
ไฝ ้่ฆๅฎ็ฐๅจ(src/buffer/buffer_pool_manager.cpp):็ไปฅไธๅฝๆฐ
FetchPageImpl(page_id)NewPageImpl(page_id)UnpinPageImpl(page_id, is_dirty)FlushPageImpl(page_id)DeletePageImpl(page_id)FlushAllPagesImpl()
1. ๅๆ#
1.1 ไธบไปไน้่ฆpin#
ๅ ถๅฎๅคงๆตๅฏไปฅๅฆไธๅพ

่่่ฟๆ ทไธ็งๆ ๅตใไธไธชๅ่ขซๆพๅ ฅ็ผๅฒๅบ๏ผ่ฟ็จไป็ผๅฒๅบๅ ๅญไธญ่ฏปๅๅ็ๅ ๅฎนใไฝๆฏ๏ผๅฝ่ฟไธชๅ่ขซ่ฏปๅ็ๆถๅ๏ผๅฆๆไธไธชๅนถๅ่ฟ็จๅฐ่ฟไธชๅ้ฉฑ้ๅบๆฅ๏ผๅนถ็จไธไธชไธๅ็ๅๆฟๆขๅฎ๏ผ่ฏปๅๆงๅๅ ๅฎน็่ฟ็จ(reader)ๅฐ็ๅฐไธๆญฃ็กฎ็ๆฐๆฎ;ๅฆๆๅ่ขซ้ฉฑ้ๆถๆญฃๅจๅๅ ฅๅฎ๏ผ้ฃไนๅๅ ฅ่ ๆ็ปไผ็ ดๅๆฟๆขๅ็ๅ ๅฎนใ
ๅ ๆญค๏ผๅจ่ฟ็จไป็ผๅฒๅบๅ่ฏปๅๆฐๆฎไนๅ๏ผ็กฎไฟ่ฏฅๅไธไผ่ขซ้ๅบๆฏๅพ้่ฆ็ใไธบๆญค๏ผ่ฟ็จๅจๅไธๆง่กไธไธชpinๆไฝ;็ผๅฒๅบ็ฎก็ๅจไปไธๆธ ้คๅบๅฎ็ๅ๏ผpinๅผไธไธบ0็ๅ๏ผใๅฝ่ฟ็จๅฎๆ่ฏปๅๆฐๆฎๆถ๏ผๅฎๅบ่ฏฅๆง่กไธไธชunpinๆไฝ๏ผๅ ่ฎธๅจ้่ฆๆถๅฐๅๅๅบใ
ๅ ๆญคๆไปฌ้่ฆไธไธชpin_couterๆฅ่ฎฐๅฝpin็ๆฐ้ใๅ
ถๅฎไนๅฐฑๆฏๅผ็จ่ฎกๆฐ็ๆๆณใ
1.2 ๅฆไฝ็ฎก็้กตๅ่ฎฟ้ฎ้กต#
ไธๅฅ่ฏๅบๅฐๅ+ๅ็งป้
page(ๅบๅฐๅผ)+frame_id(ๅ็งป้) ๅฎ้ ไธๅฐฑๆฏๆฐ็ปๅฏปๅ
ๅๆถ DBMS ไผ็ปดๆคไธไธช page table๏ผ่ด่ดฃ่ฎฐๅฝๆฏไธช page ๅจๅ ๅญไธญ็ไฝ็ฝฎ๏ผไปฅๅๆฏๅฆ่ขซๅ่ฟ๏ผDirty Flag๏ผ๏ผๆฏๅฆ่ขซๅผ็จๆๅผ็จ่ฎกๆฐ๏ผPin/Reference Counter๏ผ็ญๅ ไฟกๆฏ๏ผๅฆไธๅพๆ็คบ๏ผ
่ฟ้็จไบhash่กจๆฅๅฎ็ฐpage_tableๆฅๆ ๅฐpage_idๅframe_i

2. ๅฎ็ฐ#
2.1 find_replace()ๅฝๆฐ#
ๅฆๆ็ฉบ้ฒ้พ่กจ้็ฉบ๏ผๅไธ้่ฆ่ฟ่กๆฟๆข็ฎๆณใ็ดๆฅ่ฟๅไธไธช็ฉบ้ฒframeๅฐฑokayๅฆใ่ฟไธชๆ ๅตๆฏbuffer poolๆชๆปก
ๅฆๆ็ฉบ้ฒ้พ่กจไธบ็ฉบ๏ผๅ่กจ็คบๅฝๅbuffer poolๅทฒ็ปๆปกไบ๏ผ่ฟไธชๆถๅๅฟ ้กป่ฆๆง่กLRU็ฎๆณ
ๅฏปๆพๆฟๆขframe่ฟ็จ
่ฐ็จๅ้ขๅฎ็ฐ็
Victimๅฝๆฐ่ทๅ็บ็ฒๅธง็frame idๅจ
pages_ไธญๆพๅฐๅฏนๅบ็็บ็ฒ้กต๏ผๅฆๆ่ฏฅ้กตdirtyๅ้่ฆๅๅ็ฃ็๏ผๅนถไธreset pin count็ถๅๅจpage_tableไธญๅ ้คๅฏนๅบๆ ๅฐๅ ณ็ณป [page_id --> frame_id]
ไธๅฎ่ฆๆณจๆ2ๅ3็้กบๅบไธ่ฝ้ข ๅใไธ็ถๆฒกๆๅๆณๆพๅฐๅฏนๅบ็็บ็ฒ้กต
2.2 FetchPageImpl ๅฎ็ฐ#
่ฟไธชๅฝๆฐๅฐฑๆฏๆไปฌ่ฆๆฟๅฐไธไธชpageใ่ฟไธชๅฝๆฐๅฏไปฅๅไธบไธ็งๆ
ๅตๅๆ
ๅฆๆ่ฏฅ้กตๅจ็ผๅฒๆฑ ไธญ็ดๆฅ่ฎฟ้ฎๅนถไธ่ฎฐๅพๆๅฎ็
pin_count++๏ผ็ถๅๆ่ฐ็จPinๅฝๆฐ้็ฅreplacerๅฆๅ่ฐ็จ
find_replaceๅฝๆฐ๏ผๆ ่ฎบ็ผๅฒๆฑ ๆฏๅฆๆ็ฉบ้ฒ๏ผ้ฝๅฏไปฅ่ทๅพๅฏ็จ็frame_idๅฝ็ถๅฆๆๆฟๆข้กตไธบ็ฉบ๏ผๆฉ่ฆ
็ถๅๅปบ็ซๆฐ็
page_tableๆ ๅฐๅ ณ็ณป
2.3 UnpinPageImpl ๅฎ็ฐ#
ๅฝๆฐๅฎไนๅฆไธใ
่ฟไธชๅฝๆฐๅฐฑๆฏๅฆๆๆไปฌ่ฟไธช่ฟ็จๅทฒ็ปๅฎๆไบๅฏน่ฟไธช้กต็ๆไฝใๆไปฌ้่ฆunpinๆไฝ
ๅฆๆ่ฟไธช้กต็
pin_couter>0ๆไปฌ็ดๆฅ--ๅฆๆ่ฟไธช้กต็
pin _couter==0ๆไปฌ้่ฆ็ปๅฎๅ ๅฐLru_replacerไธญใๅ ไธบๆฒกๆไบบๅผ็จๅฎใๆไปฅๅฎๅฏไปฅๆไธบ่ขซๆฟๆข็ๅ้ไบบ
2.4 FlushPageImpl ๅฎ็ฐ#
่ฟไธชๅฝๆฐๆฏ่ฆๆไธไธชpageๅๅ
ฅ็ฃ็ใ
้ฆๅ ๆพๅฐ่ฟไธไธช้กตๅจ็ผๅฒๆฑ ไนไธญ็ไฝ็ฝฎ
ๅๅ ฅ็ฃ็
2.5 NewPageImpl ๅฎ็ฐ#
ๅ้ ไธไธชๆฐ็pageใ
ๅฉ็จ
find_replaceๅฝๆฐๅจๆไปฌ็็ผๅฒๆฑ ๆพๅฐๅ้็ๅฐๆนๅปบ็ซpage_id --> frame_id็ๆ ๅฐๆดๆฐ ๆฐ้กต็ๅ ๆฐๆฎ ่ฟ้ๆณจๆๆฐๅๅปบ็้กต่ฆๅๅ็ฃ็
2.6 DeletePageImpl ๅฎ็ฐ#
่ฟ้ๆฏ่ฆๆไปฌๆ็ผๅฒๆฑ ไธญ็page็งปๅบ
ๅฆๆ่ฟไธชpageๆ นๆฌๅฐฑไธๅจ็ผๅฒๆฑ ๅ็ดๆฅ่ฟๅ
ๅฆๆ่ฟไธชpage ็ๅผ็จ่ฎกๆฐๅคงไบ0(pin_counter>0)่กจ็คบๆไปฌไธ่ฝ่ฟๅ
ๅฆๆ่ฟไธชpage่ขซไฟฎๆน่ฟๅ่ฆๅๅ็ฃ็
ๅฆๅๆญฃๅธธ็งป้คๅฐฑๅฅฝไบใ๏ผๅจhash่กจไธญerase๏ผ
3. ๆบ็ ่งฃๆ#
3.1 ResetMemory()#
่ฟไธช้ๅธธ็ฎๅๅฐฑๆฏไธไธช็ฎๅ็ๅ ๅญๅ้ ใ็ปๆไปฌ็frameๅ้ ๅ ๅญๅบๅ
3.2 ReadPage#
3.3 WritePage#
3.4 DiskManager ๆ้ ๅฝๆฐ
ๅฐฑๆฏ่ทๅๆไปถๆ้
4. ๆต่ฏ#
4.1 ๆฌๅฐๆต่ฏ#

4.2 cmuๅฎ็ฝๆต่ฏ#
ๅ้ขๅ็ฐๅๆฅไธๆฏcmu่ชๅทฑ็ๅญฆ็ไนๅฏไปฅ็จๅฎไปฌ็่ฝฏไปถ่ฟ่กๆต่ฏใไฟฎๆนไบๅฅฝไน ๅๆถๅพๅฐไบๅคงไฝฌ็ๅธฎๅฉใๆๆๅๅฎ็ฐๆปกๅ#
cmu็ๆต่ฏ็ฝ็ซๅฆไธ
Last updated