githubEdit

๐Ÿ˜„Expand

1. Task1 LRU REPLACEMENT POLICY#arrow-up-right

0. ไปปๅŠกๆ่ฟฐ#arrow-up-right

่ฟ™ไธชไปปๅŠก่ฆๆฑ‚ๆˆ‘ไปฌๅฎž็Žฐๅœจ่ฏพๅ ‚ไธŠๆ‰€ๆ่ฟฐ็š„LRU็ฎ—ๆณ•ๆœ€่ฟ‘ๆœ€ๅฐ‘ไฝฟ็”จ็ฎ—ๆณ•ใ€‚

ไฝ ้œ€่ฆๅฎž็Žฐไธ‹้ข่ฟ™ไบ›ๅ‡ฝๆ•ฐใ€‚่ฏท็กฎไฟไป–ไปฌ้ƒฝๆ˜ฏ็บฟ็จ‹ๅฎ‰ๅ…จ็š„ใ€‚

  • Victim(T*) : Remove the object that was accessed the least recently compared to all the elements being tracked by the Replacer, store its contents in the output parameter and return True. If the Replacer is empty return False.

  • Pin(T) : This method should be called after a page is pinned to a frame in the BufferPoolManager. It should remove the frame containing the pinned page from the LRUReplacer.

  • Unpin(T) : This method should be called when the pin_count of a page becomes 0. This method should add the frame containing the unpinned page to the LRUReplacer.

  • Size() : This method returns the number of frames that are currently in the LRUReplacer.

ๅ…ณไบŽLockๅ’ŒLathes็š„ๅŒบๅˆซ่ฏท็œ‹ไธ‹ๆ–‡ใ€‚

1. ๅฎž็Žฐ#arrow-up-right

ๅ…ถๅฎž่ฟ™ไธชไปปๅŠก่ฟ˜ๆ˜ฏ่›ฎ็ฎ€ๅ•็š„ใ€‚ไฝ ๅช้œ€่ฆๆธ…ๆฅšไป€ไนˆๆ˜ฏๆœ€่ฟ‘ๆœ€ๅฐ‘ไฝฟ็”จ็ฎ—ๆณ•ๅณๅฏใ€‚

LRU ็ฎ—ๆณ•็š„่ฎพ่ฎกๅŽŸๅˆ™ๆ˜ฏ๏ผšๅฆ‚ๆžœไธ€ไธชๆ•ฐๆฎๅœจๆœ€่ฟ‘ไธ€ๆฎตๆ—ถ้—ดๆฒกๆœ‰่ขซ่ฎฟ้—ฎๅˆฐ๏ผŒ้‚ฃไนˆๅœจๅฐ†ๆฅๅฎƒ่ขซ่ฎฟ้—ฎ็š„ๅฏ่ƒฝๆ€งไนŸๅพˆๅฐใ€‚ไนŸๅฐฑๆ˜ฏ่ฏด๏ผŒๅฝ“้™ๅฎš็š„็ฉบ้—ดๅทฒๅญ˜ๆปกๆ•ฐๆฎๆ—ถ๏ผŒๅบ”ๅฝ“ๆŠŠๆœ€ไน…ๆฒกๆœ‰่ขซ่ฎฟ้—ฎๅˆฐ็š„ๆ•ฐๆฎๆท˜ๆฑฐใ€‚

่ฟ™ไธช้ข˜ๆˆ‘็†Ÿๅ•Šใ€‚leetcodeไธŠๆœ‰ๅŽŸ้ข˜ใ€‚่€Œไธ”่ฆๆฑ‚ๅœจo(1)็š„ๆ—ถ้—ดๅคๆ‚ๅบฆๅฎž็Žฐ่ฟ™ไธ€ไปปๅŠกใ€‚

ไธบไบ†ๅฎž็ŽฐๅœจO(1)ๆ—ถ้—ดๅ†…่ฟ›่กŒๆŸฅๆ‰พใ€‚ๅ› ๆญคๆˆ‘ไปฌๅฏไปฅ็”จไธ€ไธชhash่กจใ€‚่€Œไธ”ๆˆ‘ไปฌ่ฆ่ฎฐๅฝ•ไธ€ไธชๆ—ถ้—ดๆˆณๆฅๅฎŒๆˆ่ฎฐๅฝ•ๆœ€่ฟ‘ๆœ€ๅฐ‘ไฝฟ็”จ็š„ๅ—ๆ˜ฏ่ฐใ€‚่ฟ™้‡Œๆˆ‘ไปฌๅฏไปฅ็”จlistๆฅๅฎž็Žฐใ€‚

ๅฆ‚ๆžœๆˆ‘ไปฌ่ฎฟ้—ฎไบ†้“พ่กจไธญ็š„ไธ€ไธชๅ…ƒ็ด ใ€‚ๅฐฑๆŠŠ่ฟ™ไธชๅ…ƒ็ด ๆ”พๅœจ้“พ่กจๅคด้ƒจใ€‚่ฟ™ๆ ทๆ”พๅœจ้“พ่กจๅฐพ้ƒจ็š„ๅ…ƒ็ด ไธ€ๅฎšๅฐฑๆ˜ฏๆœ€่ฟ‘ๆœ€ๅฐ‘ไฝฟ็”จ็š„ๅ…ƒ็ด ใ€‚

ไธบไบ†่ฎฉๆ’ๅ…ฅๅ’Œๅˆ ้™คๅ‡ไธบO(1)ๆˆ‘ไปฌๅฏไปฅ็”จ้“พ่กจๆฅๅฎž็Žฐใ€‚

่ฟ™้‡ŒๅฏนไบŽpinๅ’Œunpinๆ“ไฝœๅฎž้™…ไธŠๅฏนไบŽไบ†task2ใ€‚ๆˆ‘ไปฌไธบไป€ไนˆ้œ€่ฆpinใ€‚ไนฆไธŠ็ป™ไบ†ๆˆ‘ไปฌ็ญ”ๆกˆใ€‚ไธ‹้ขๆˆ‘ไปฌไนŸ่ฟ›่กŒไบ†ๅˆ†ๆž

1.1 ๆ•ฐๆฎ็ป“ๆž„่ฎพ่ฎก#arrow-up-right

่ฟ™้‡Œๆˆ‘ไปฌ็”จไบ†้“พ่กจ + hash่กจใ€‚ไธป่ฆๆ˜ฏไธบไบ†ๅˆ ้™คๅ’Œๆ’ๅ…ฅๅ‡ไธบ0(1)็š„ๆ—ถ้—ดๅคๆ‚ๅบฆใ€‚ๅผ•ๅ…ฅhash่กจๅฐฑๆ˜ฏๅฏไปฅๆ นๆฎframe_idๅฟซ้€Ÿๆ‰พๅˆฐๅ…ถๅœจlistไธญๅฏนๅบ”็š„ไฝ็ฝฎใ€‚ๅฆๅˆ™็š„่ฏไฝ ้œ€่ฆ้ๅކ้“พ่กจ่ฟ™ๅฐฑไธๆ˜ฏo(1)ไบ†

1.2 Victim ๅ‡ฝๆ•ฐๅฎž็Žฐ#arrow-up-right

ๆณจๆ„่ฟ™้‡Œๅฟ…้กป่ฆๅŠ ้”๏ผŒไปฅ้˜ฒๆญขๅนถๅ‘้”™่ฏฏใ€‚

  1. ๅฆ‚ๆžœๆฒกๆœ‰ๅฏไปฅ็‰บ็‰ฒ็š„้กต็›ดๆŽฅ่ฟ”ๅ›žfalse

  2. ๅฆ‚ๆžœๆœ‰็š„่ฏ้€‰ๆ‹ฉๅœจ้“พ่กจๅฐพ้ƒจ็š„้กตใ€‚removeๅฎƒๅณๅฏใ€‚่ฟ™้‡Œ็š„ๅˆ ้™คๆถ‰ๅŠ้“พ่กจๅ’Œhash่กจไธคไธชๆ•ฐๆฎ็ป“ๆž„็š„ๅˆ ้™ค

1.3 pin ๅ‡ฝๆ•ฐๅฎž็Žฐ#arrow-up-right

ๆณจๆ„่ฟ™้‡Œๅฟ…้กป่ฆๅŠ ้”๏ผŒไปฅ้˜ฒๆญขๅนถๅ‘้”™่ฏฏใ€‚

  1. pinๅ‡ฝๆ•ฐ่กจ็คบ่ฟ™ไธชframe่ขซๆŸไธช่ฟ›็จ‹ๅผ•็”จไบ†

  2. ่ขซๅผ•็”จ็š„frameไธ่ƒฝๆˆไธบLRU็ฎ—ๆณ•็š„็‰บ็‰ฒ็›ฎๆ ‡๏ผŒๆ‰€ไปฅ่ฟ™้‡ŒๆŠŠๅฎƒไปŽๆˆ‘ไปฌ็š„ๆ•ฐๆฎ็ป“ๆž„ไธญๅˆ ้™ค

1.4 unpin ๅ‡ฝๆ•ฐๅฎž็Žฐ#arrow-up-right

ๆณจๆ„่ฟ™้‡Œๅฟ…้กป่ฆๅŠ ้”๏ผŒไปฅ้˜ฒๆญขๅนถๅ‘้”™่ฏฏใ€‚

  1. ๅ…ˆ็œ‹ไธ€ไธ‹่ฟ™ไธช้กตๆ˜ฏๅฆๅœจๅฏๆ›ฟๆข้“พ่กจไธญ

  2. ๅฆ‚ๆžœๅฎƒไธๅญ˜ๅœจ็š„่ฏใ€‚ๅˆ™้œ€่ฆ็œ‹ไธ€ไธ‹ๅฝ“ๅ‰้“พ่กจๆ˜ฏๅฆ่ฟ˜ๆœ‰็ฉบ้—ฒไฝ็ฝฎใ€‚ๅฆ‚ๆžœๆœ‰็š„่ฏๅˆ™็›ดๆŽฅๅŠ ๅ…ฅ

  3. ๅฆ‚ๆžœๆฒกๆœ‰ๅˆ™้œ€่ฆ็งป้™ค้“พ่กจๅฐพ้ƒจ็š„่Š‚็‚น็Ÿฅ้“ๆœ‰็ฉบไฝ™ไฝ็ฝฎ

2. ๆต‹่ฏ•#arrow-up-right

ๆ‰ง่กŒไธ‹้ข็š„่ฏญๅฅๅณๅฏ

Task2 BUFFER POOL MANAGER#arrow-up-right

0. ไปปๅŠกๆ่ฟฐ#arrow-up-right

ๆŽฅไธ‹ๆฅ๏ผŒๆ‚จ้œ€่ฆๅœจ็ณป็ปŸไธญๅฎž็Žฐ็ผ“ๅ†ฒๆฑ ็ฎก็†ๅ™จ(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. ๅˆ†ๆž#arrow-up-right

1.1 ไธบไป€ไนˆ้œ€่ฆpin#arrow-up-right

ๅ…ถๅฎžๅคงๆŠตๅฏไปฅๅฆ‚ไธ‹ๅ›พ

่€ƒ่™‘่ฟ™ๆ ทไธ€็งๆƒ…ๅ†ตใ€‚ไธ€ไธชๅ—่ขซๆ”พๅ…ฅ็ผ“ๅ†ฒๅŒบ๏ผŒ่ฟ›็จ‹ไปŽ็ผ“ๅ†ฒๅŒบๅ†…ๅญ˜ไธญ่ฏปๅ–ๅ—็š„ๅ†…ๅฎนใ€‚ไฝ†ๆ˜ฏ๏ผŒๅฝ“่ฟ™ไธชๅ—่ขซ่ฏปๅ–็š„ๆ—ถๅ€™๏ผŒๅฆ‚ๆžœไธ€ไธชๅนถๅ‘่ฟ›็จ‹ๅฐ†่ฟ™ไธชๅ—้ฉฑ้€ๅ‡บๆฅ๏ผŒๅนถ็”จไธ€ไธชไธๅŒ็š„ๅ—ๆ›ฟๆขๅฎƒ๏ผŒ่ฏปๅ–ๆ—งๅ—ๅ†…ๅฎน็š„่ฟ›็จ‹(reader)ๅฐ†็œ‹ๅˆฐไธๆญฃ็กฎ็š„ๆ•ฐๆฎ;ๅฆ‚ๆžœๅ—่ขซ้ฉฑ้€ๆ—ถๆญฃๅœจๅ†™ๅ…ฅๅฎƒ๏ผŒ้‚ฃไนˆๅ†™ๅ…ฅ่€…ๆœ€็ปˆไผš็ ดๅๆ›ฟๆขๅ—็š„ๅ†…ๅฎนใ€‚

ๅ› ๆญค๏ผŒๅœจ่ฟ›็จ‹ไปŽ็ผ“ๅ†ฒๅŒบๅ—่ฏปๅ–ๆ•ฐๆฎไน‹ๅ‰๏ผŒ็กฎไฟ่ฏฅๅ—ไธไผš่ขซ้€ๅ‡บๆ˜ฏๅพˆ้‡่ฆ็š„ใ€‚ไธบๆญค๏ผŒ่ฟ›็จ‹ๅœจๅ—ไธŠๆ‰ง่กŒไธ€ไธชpinๆ“ไฝœ;็ผ“ๅ†ฒๅŒบ็ฎก็†ๅ™จไปŽไธๆธ…้™คๅ›บๅฎš็š„ๅ—๏ผˆpinๅ€ผไธไธบ0็š„ๅ—๏ผ‰ใ€‚ๅฝ“่ฟ›็จ‹ๅฎŒๆˆ่ฏปๅ–ๆ•ฐๆฎๆ—ถ๏ผŒๅฎƒๅบ”่ฏฅๆ‰ง่กŒไธ€ไธชunpinๆ“ไฝœ๏ผŒๅ…่ฎธๅœจ้œ€่ฆๆ—ถๅฐ†ๅ—ๅ–ๅ‡บใ€‚

ๅ› ๆญคๆˆ‘ไปฌ้œ€่ฆไธ€ไธชpin_couterๆฅ่ฎฐๅฝ•pin็š„ๆ•ฐ้‡ใ€‚ๅ…ถๅฎžไนŸๅฐฑๆ˜ฏๅผ•็”จ่ฎกๆ•ฐ็š„ๆ€ๆƒณใ€‚

1.2 ๅฆ‚ไฝ•็ฎก็†้กตๅ’Œ่ฎฟ้—ฎ้กต#arrow-up-right

ไธ€ๅฅ่ฏๅŸบๅœฐๅ€+ๅ็งป้‡

page(ๅŸบๅœฐๅ€ผ)+frame_id(ๅ็งป้‡) ๅฎž้™…ไธŠๅฐฑๆ˜ฏๆ•ฐ็ป„ๅฏปๅ€

ๅŒๆ—ถ DBMS ไผš็ปดๆŠคไธ€ไธช page table๏ผŒ่ดŸ่ดฃ่ฎฐๅฝ•ๆฏไธช page ๅœจๅ†…ๅญ˜ไธญ็š„ไฝ็ฝฎ๏ผŒไปฅๅŠๆ˜ฏๅฆ่ขซๅ†™่ฟ‡๏ผˆDirty Flag๏ผ‰๏ผŒๆ˜ฏๅฆ่ขซๅผ•็”จๆˆ–ๅผ•็”จ่ฎกๆ•ฐ๏ผˆPin/Reference Counter๏ผ‰็ญ‰ๅ…ƒไฟกๆฏ๏ผŒๅฆ‚ไธ‹ๅ›พๆ‰€็คบ๏ผš

่ฟ™้‡Œ็”จไบ†hash่กจๆฅๅฎž็Žฐpage_tableๆฅๆ˜ ๅฐ„page_idๅ’Œframe_i

2. ๅฎž็Žฐ#arrow-up-right

2.1 find_replace()ๅ‡ฝๆ•ฐ#arrow-up-right

  1. ๅฆ‚ๆžœ็ฉบ้—ฒ้“พ่กจ้ž็ฉบ๏ผŒๅˆ™ไธ้œ€่ฆ่ฟ›่กŒๆ›ฟๆข็ฎ—ๆณ•ใ€‚็›ดๆŽฅ่ฟ”ๅ›žไธ€ไธช็ฉบ้—ฒframeๅฐฑokayๅ•ฆใ€‚่ฟ™ไธชๆƒ…ๅ†ตๆ˜ฏbuffer poolๆœชๆปก

  2. ๅฆ‚ๆžœ็ฉบ้—ฒ้“พ่กจไธบ็ฉบ๏ผŒๅˆ™่กจ็คบๅฝ“ๅ‰buffer poolๅทฒ็ปๆปกไบ†๏ผŒ่ฟ™ไธชๆ—ถๅ€™ๅฟ…้กป่ฆๆ‰ง่กŒLRU็ฎ—ๆณ•

ๅฏปๆ‰พๆ›ฟๆขframe่ฟ‡็จ‹

  1. ่ฐƒ็”จๅ‰้ขๅฎž็Žฐ็š„Victimๅ‡ฝๆ•ฐ่Žทๅ–็‰บ็‰ฒๅธง็š„frame id

  2. ๅœจpages_ไธญๆ‰พๅˆฐๅฏนๅบ”็š„็‰บ็‰ฒ้กต๏ผŒๅฆ‚ๆžœ่ฏฅ้กตdirtyๅˆ™้œ€่ฆๅ†™ๅ›ž็ฃ็›˜๏ผŒๅนถไธ”reset pin count

  3. ็„ถๅŽๅœจpage_tableไธญๅˆ ้™คๅฏนๅบ”ๆ˜ ๅฐ„ๅ…ณ็ณป [page_id --> frame_id]

ไธ€ๅฎš่ฆๆณจๆ„2ๅ’Œ3็š„้กบๅบไธ่ƒฝ้ข ๅ€’ใ€ไธ็„ถๆฒกๆœ‰ๅŠžๆณ•ๆ‰พๅˆฐๅฏนๅบ”็š„็‰บ็‰ฒ้กต

2.2 FetchPageImpl ๅฎž็Žฐ#arrow-up-right

่ฟ™ไธชๅ‡ฝๆ•ฐๅฐฑๆ˜ฏๆˆ‘ไปฌ่ฆๆ‹ฟๅˆฐไธ€ไธชpageใ€‚่ฟ™ไธชๅ‡ฝๆ•ฐๅฏไปฅๅˆ†ไธบไธ‰็งๆƒ…ๅ†ตๅˆ†ๆž

  1. ๅฆ‚ๆžœ่ฏฅ้กตๅœจ็ผ“ๅ†ฒๆฑ ไธญ็›ดๆŽฅ่ฎฟ้—ฎๅนถไธ”่ฎฐๅพ—ๆŠŠๅฎƒ็š„pin_count++๏ผŒ็„ถๅŽๆŠŠ่ฐƒ็”จPinๅ‡ฝๆ•ฐ้€š็Ÿฅreplacer

  2. ๅฆๅˆ™่ฐƒ็”จfind_replaceๅ‡ฝๆ•ฐ๏ผŒๆ— ่ฎบ็ผ“ๅ†ฒๆฑ ๆ˜ฏๅฆๆœ‰็ฉบ้—ฒ๏ผŒ้ƒฝๅฏไปฅ่Žทๅพ—ๅฏ็”จ็š„frame_id

  3. ๅฝ“็„ถๅฆ‚ๆžœๆ›ฟๆข้กตไธบ็ฉบ๏ผŒๆ‹ฉ่ฆ

  4. ็„ถๅŽๅปบ็ซ‹ๆ–ฐ็š„page_tableๆ˜ ๅฐ„ๅ…ณ็ณป

2.3 UnpinPageImpl ๅฎž็Žฐ#arrow-up-right

ๅ‡ฝๆ•ฐๅฎšไน‰ๅฆ‚ไธŠใ€‚

่ฟ™ไธชๅ‡ฝๆ•ฐๅฐฑๆ˜ฏๅฆ‚ๆžœๆˆ‘ไปฌ่ฟ™ไธช่ฟ›็จ‹ๅทฒ็ปๅฎŒๆˆไบ†ๅฏน่ฟ™ไธช้กต็š„ๆ“ไฝœใ€‚ๆˆ‘ไปฌ้œ€่ฆunpinๆ“ไฝœ

  1. ๅฆ‚ๆžœ่ฟ™ไธช้กต็š„pin_couter>0ๆˆ‘ไปฌ็›ดๆŽฅ--

  2. ๅฆ‚ๆžœ่ฟ™ไธช้กต็š„pin _couter==0ๆˆ‘ไปฌ้œ€่ฆ็ป™ๅฎƒๅŠ ๅˆฐLru_replacerไธญใ€‚ๅ› ไธบๆฒกๆœ‰ไบบๅผ•็”จๅฎƒใ€‚ๆ‰€ไปฅๅฎƒๅฏไปฅๆˆไธบ่ขซๆ›ฟๆข็š„ๅ€™้€‰ไบบ

2.4 FlushPageImpl ๅฎž็Žฐ#arrow-up-right

่ฟ™ไธชๅ‡ฝๆ•ฐๆ˜ฏ่ฆๆŠŠไธ€ไธชpageๅ†™ๅ…ฅ็ฃ็›˜ใ€‚

  1. ้ฆ–ๅ…ˆๆ‰พๅˆฐ่ฟ™ไธ€ไธช้กตๅœจ็ผ“ๅ†ฒๆฑ ไน‹ไธญ็š„ไฝ็ฝฎ

  2. ๅ†™ๅ…ฅ็ฃ็›˜

2.5 NewPageImpl ๅฎž็Žฐ#arrow-up-right

ๅˆ†้…ไธ€ไธชๆ–ฐ็š„pageใ€‚

  1. ๅˆฉ็”จfind_replaceๅ‡ฝๆ•ฐๅœจๆˆ‘ไปฌ็š„็ผ“ๅ†ฒๆฑ ๆ‰พๅˆฐๅˆ้€‚็š„ๅœฐๆ–นๅปบ็ซ‹page_id --> frame_id็š„ๆ˜ ๅฐ„

  2. ๆ›ดๆ–ฐ ๆ–ฐ้กต็š„ๅ…ƒๆ•ฐๆฎ ่ฟ™้‡Œๆณจๆ„ๆ–ฐๅˆ›ๅปบ็š„้กต่ฆๅ†™ๅ›ž็ฃ็›˜

2.6 DeletePageImpl ๅฎž็Žฐ#arrow-up-right

่ฟ™้‡Œๆ˜ฏ่ฆๆˆ‘ไปฌๆŠŠ็ผ“ๅ†ฒๆฑ ไธญ็š„page็งปๅ‡บ

  1. ๅฆ‚ๆžœ่ฟ™ไธชpageๆ นๆœฌๅฐฑไธๅœจ็ผ“ๅ†ฒๆฑ ๅˆ™็›ดๆŽฅ่ฟ”ๅ›ž

  2. ๅฆ‚ๆžœ่ฟ™ไธชpage ็š„ๅผ•็”จ่ฎกๆ•ฐๅคงไบŽ0(pin_counter>0)่กจ็คบๆˆ‘ไปฌไธ่ƒฝ่ฟ”ๅ›ž

  3. ๅฆ‚ๆžœ่ฟ™ไธชpage่ขซไฟฎๆ”น่ฟ‡ๅˆ™่ฆๅ†™ๅ›ž็ฃ็›˜

  4. ๅฆๅˆ™ๆญฃๅธธ็งป้™คๅฐฑๅฅฝไบ†ใ€‚๏ผˆๅœจhash่กจไธญerase๏ผ‰

3. ๆบ็ ่งฃๆž#arrow-up-right

3.1 ResetMemory()#arrow-up-right

่ฟ™ไธช้žๅธธ็ฎ€ๅ•ๅฐฑๆ˜ฏไธ€ไธช็ฎ€ๅ•็š„ๅ†…ๅญ˜ๅˆ†้…ใ€‚็ป™ๆˆ‘ไปฌ็š„frameๅˆ†้…ๅ†…ๅญ˜ๅŒบๅŸŸ

3.2 ReadPage#arrow-up-right

3.3 WritePage#arrow-up-right

3.4 DiskManager ๆž„้€ ๅ‡ฝๆ•ฐ

ๅฐฑๆ˜ฏ่Žทๅ–ๆ–‡ไปถๆŒ‡้’ˆ

4. ๆต‹่ฏ•#arrow-up-right

4.1 ๆœฌๅœฐๆต‹่ฏ•#arrow-up-right

4.2 cmuๅฎ˜็ฝ‘ๆต‹่ฏ•#arrow-up-right

ๅŽ้ขๅ‘็ŽฐๅŽŸๆฅไธๆ˜ฏcmu่‡ชๅทฑ็š„ๅญฆ็”ŸไนŸๅฏไปฅ็”จๅฎƒไปฌ็š„่ฝฏไปถ่ฟ›่กŒๆต‹่ฏ•ใ€‚ไฟฎๆ”นไบ†ๅฅฝไน…ๅŒๆ—ถๅพ—ๅˆฐไบ†ๅคงไฝฌ็š„ๅธฎๅŠฉใ€‚ๆ‰ๆˆๅŠŸๅฎž็Žฐๆปกๅˆ†#arrow-up-right

cmu็š„ๆต‹่ฏ•็ฝ‘็ซ™ๅฆ‚ไธ‹

Last updated