НизкоуровнСвая модСль памяти

Π’ ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ Ρ€Π°Π·Π±ΠΈΡ€Π°Π»ΠΈΡΡŒ с высокоуровнСвой ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ. БСгодня ΠΌΡ‹ рассмотрим ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ Π΅Ρ‘ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π° Π½ΠΈΠ·ΠΊΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅.

ОблоТка: НизкоуровнСвая модСль памяти

Π’ ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π±Ρ‹Π»Π° рассмотрСна высокоуровнСвая Ρ‡Π°ΡΡ‚ΡŒ ΠΌΠΎΠ΄Π΅Π»ΠΈ памяти. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ описано, Ρ‡Ρ‚ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ происходит с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Π² ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Intel x86_64.

ΠžΠ±Π·ΠΎΡ€

Π‘Ρ…Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ ΠΈ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠΏΡ€ΠΎΡ‰Ρ‘Π½Π½ΠΎ модСль памяти выглядит Ρ‚Π°ΠΊ:

Π‘Ρ‚Π°Ρ‚ΡŒΡ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎ описываСт эту модСль, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ памяти Π² Π·Π°Ρ‰ΠΈΡ‰Ρ‘Π½Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅.

РСгистры

РСгистр процСссора β€” Π±Π»ΠΎΠΊ памяти, располоТСнный прямо Π½Π° кристаллС процСссора ΠΈ ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‰ΠΈΠΉ ΡΠ²Π΅Ρ€Ρ…Π±Ρ‹ΡΡ‚Ρ€ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ (Π‘ΠžΠ—Π£). Π’ x86_64 Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ рСгистра, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Π²Π΅ΠΊΡ‚ΠΎΡ€Π½Ρ‹Ρ…, Π²Π°Ρ€ΡŒΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΎΡ‚ 8 Π΄ΠΎ 64 Π±ΠΈΡ‚.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ‚ быстро Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, находящСйся Π² рСгистрах процСссора. Π”Π°ΠΆΠ΅ для простого ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π° ячСйки памяти ΠΈΠ· RAM (Random Access Memory) Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ 3 ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ: сначала Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ эту ячСйку ΠΈΠ· RAM ΠΈΠ»ΠΈ кэша Π² рСгистр, Π·Π°Ρ‚Π΅ΠΌ ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ послС Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ячСйку ΠΈΠ· рСгистра ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² RAM ΠΈΠ»ΠΈ кэш.

ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΈ спСциализация рСгистров зависит ΠΎΡ‚ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ процСссора, Π½ΠΎ Ρ‚ΠΈΠΏΡ‹ рСгистров ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° Π΄Π²Π΅ Π³Ρ€ΡƒΠΏΠΏΡ‹: рСгистры ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для хранСния ΠΈ использования ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌ, ΠΈ спСциализированныС рСгистры, хранящиС Ρ€Π°Π·Π»ΠΈΡ‡Π½ΡƒΡŽ ΠΌΠ΅Ρ‚Π°ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, которая ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π°ΠΆΠ΅ ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ процСссора.

Если с рСгистрами ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния всё понятно, Ρ‚ΠΎ Π²ΠΎΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ спСциализированныС рСгистры Π² x86_64 ΠΈ ΠΈΡ… Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅:

  • Instruction Pointer (IP) β€” ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ПослС выполнСния ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ IP увСличиваСтся Π½Π° Π΄Π»ΠΈΠ½Ρƒ этой ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ (Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ… Ρ€Π°Π·ΠΌΠ΅Ρ€ инструкции нСконстантный), ΠΈ Ρ‚Π΅ΠΌ самым Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ.
  • Stack Pointer (SP) β€” ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π²Π΅Ρ€ΡˆΠΈΠ½Ρƒ стСка.
  • РСгистр Ρ„Π»Π°Π³ΠΎΠ² (RFLAGS) β€” содСрТит Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ состояниС процСссора ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ (Π±ΠΈΡ‚ пСрСполнСния ΠΏΡ€ΠΈ слоТСнии ΠΈ ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠΈ; Π±ΠΈΡ‚ нуля ΠΏΡ€ΠΈ Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠΈ ΠΈ Ρ‚. Π΄.).
  • Π£ΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ рСгистры (CR0–CR15) β€” основныС рСгистры для управлСния ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ процСссора.
  • РСгистры ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ (DR0–DR15) для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΈ сбора статистики Ρ€Π°Π±ΠΎΡ‚Ρ‹ процСссора.

Π’Π°ΠΊΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π²Π΅ΠΊΡ‚ΠΎΡ€Π½Ρ‹Π΅ рСгистры ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния (ZMM0–ZMM31), Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для матСматичСских ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π°Π΄ нСсколькими числами (Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠΌ) ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.

L1–L3 ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

ΠœΠ½ΠΎΠ³ΠΎΠ³ΠΈΠ³Π°Π±Π°ΠΉΡ‚Π½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ Π² процСссор Π½Π΅ Π·Π°ΡΡƒΠ½ΡƒΡ‚ΡŒ, поэтому Π² Π½Ρ‘ΠΌ Π΅ΡΡ‚ΡŒ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ нСбольшоС количСство рСгистров ΠΈ кэш, Π° ΠΎΡΡ‚Π°Π»ΡŒΠ½Π°Ρ ΠΏΠ°ΠΌΡΡ‚ΡŒ хранится Π² RAM.

Но RAM ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΡƒ (ΠΎΠΊΠΎΠ»ΠΎ 230 Ρ‚Π°ΠΊΡ‚ΠΎΠ² процСссора i7-4770), поэтому Ρ‡Π°ΡΡ‚ΡŒ этой памяти ΠΊΡΡˆΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ Π² самом процСссорС. ΠšΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠ΅, Ρ‡Π΅ΠΌ мСньшС ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΈ нСпосрСдствСнно Π±Π»ΠΈΠΆΠ΅ ΠΊ рСгистрам, Ρ‚Π΅ΠΌ ΠΏΡ€ΠΎΡ‰Π΅ Π΅Ρ‘ Π°Π΄Ρ€Π΅ΡΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Ρ‚Π΅ΠΌ ΠΎΠ½Π° быстрСС.

L1-кэш находится Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ядрС процСссора, ΠΊΡΡˆΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠ°ΠΊ Π΄Π°Π½Π½Ρ‹Π΅, Ρ‚Π°ΠΊ ΠΈ инструкции (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Ρ‚ΠΎΠΆΠ΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ; ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Π½Π°Π±ΠΎΡ€ Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ ΠΈ ΠΊΠ°ΠΊ Π΄Π°Π½Π½Ρ‹Π΅, ΠΈ ΠΊΠ°ΠΊ инструкции). Π—Π°Π΄Π΅Ρ€ΠΆΠΊΠ° минимальна β€” 4 Ρ‚Π°ΠΊΡ‚Π° Π½Π° i7-4770 ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ 64 ΠšΠ‘ (32 ΠšΠ‘ Π½Π° Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ 32 ΠšΠ‘ Π½Π° инструкции) Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ ядро.

L2-кэш Ρ‚Π°ΠΊΠΆΠ΅ находится Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ядрС, Π½ΠΎ ΠΊΡΡˆΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π°Π½Π½Ρ‹Π΅ β€” 12 Ρ‚Π°ΠΊΡ‚ΠΎΠ² ΠΈ 1 ΠœΠ‘ Π½Π° ядро.

L3-кэш β€” ΠΎΠ±Ρ‰ΠΈΠΉ для всСго процСссора, ΠΊΡΡˆΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π°Π½Π½Ρ‹Π΅ β€” 36 Ρ‚Π°ΠΊΡ‚ΠΎΠ² ΠΈ 8 ΠœΠ‘.

Π—Π°Π΄Π΅Ρ€ΠΆΠΊΠ° Π² Ρ‚Π°ΠΊΡ‚Π°Ρ… примСрная ΠΈ Π½Π΅ ΠΎΡ‚Ρ€Π°ΠΆΠ°Π΅Ρ‚ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ полоТСния Π΄Π΅Π», Ρ†ΠΈΡ„Ρ€Ρ‹ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Π½Π° основС Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠΎΠ² Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ кэшСй ΠΈ RAM.

Π”Π΅Ρ‚Π°Π»ΠΈ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ L1 ΠΈ Haswell

Кэш L1 прСдставляСт собой Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΠΈΠ· сСтов, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… формируСтся ΠΈΠ· записСй, состоящих ΠΈΠ· Π±ΠΈΡ‚ΠΎΠ² состояния, Ρ‚Π΅Π³Π° ΠΈ кэш-Π»ΠΈΠ½ΠΈΠΈ. Π’ΠΎΡ‚ урСзанная вСрсия Ρ‚Π°ΠΊΠΎΠΉ записи:

ИндСкс β€” это Π½ΠΎΠΌΠ΅Ρ€ сСта Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅, Π° Ρ‚Π°ΠΊΠΆΠ΅ с 6-Π³ΠΎ ΠΏΠΎ 11-ΠΉ Π±ΠΈΡ‚Ρ‹ указатСля Π½Π° ΠΏΠ°ΠΌΡΡ‚ΡŒ Π² RAM. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΎΡ‚ располоТСния Π² RAM (Π½ΠΎΠΌΠ΅Ρ€ адрСса) зависит Ρ‚ΠΎ, Π² ΠΊΠ°ΠΊΠΎΠΌ сСтС Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ этот Π±Π»ΠΎΠΊ памяти Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ Π² кэш-линию.

Π‘ 0-Π³ΠΎ ΠΏΠΎ 5-ΠΉ Π±ΠΈΡ‚Ρ‹ β€” это смСщСниС Π²Π½ΡƒΡ‚Ρ€ΠΈ кэш-Π»ΠΈΠ½ΠΈΠΈ.

Π‘Π΅Ρ‚ состоит ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… записСй, Π² случаС с Haswell ΠΈΡ… 8.

Π’Π΅Π³ β€” это ΠΎΡΡ‚Π°Π»ΡŒΠ½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ указатСля с 12-Π³ΠΎ Π±ΠΈΡ‚Π° для нахоТдСния Π½ΡƒΠΆΠ½ΠΎΠΉ записи Π² сСтС.

Π‘ΠΈΡ‚Ρ‹ состояния ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π½Π° Ρ‚ΠΎ, ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π»Π°ΡΡŒ Π»ΠΈ кэш-линия, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ кэш-Π»ΠΈΠ½ΠΈΠΈ. Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ядра свой L1- ΠΈ L2-кэш, поэтому ΠΈΡ… Π½ΡƒΠΆΠ½ΠΎ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Для этого ΠΈ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π±ΠΈΡ‚Ρ‹ состояния. Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Π½Π° Π₯Π°Π±Ρ€Π΅.

Кэш-линия β€” это нСсколько физичСски подряд располоТСнных Π±Π°ΠΉΡ‚ΠΎΠ² ΠΈΠ· RAM, Π² нашСм случаС 64 Π±Π°ΠΉΡ‚Π°.

Π’ i7-4770 128 сСтов Π² L1-кэшС Π½Π° ΠΎΠ΄Π½ΠΎ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ ядро β€” 64 Π½Π° Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ 64 Π½Π° инструкции. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ для индСксирования этих кэш-сСтов Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ 6 Π±ΠΈΡ‚ (2^6 = 64).
ВсСго Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ 1024 записи (128 сСтов ΠΏΠΎ 8 записСй), Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠΎ 64 Π±Π°ΠΉΡ‚Π° Π² кэш-Π»ΠΈΠ½ΠΈΠΈ. Π’ суммС 64 ΠšΠ‘ L1-кэша Π½Π° ядро.

Π—Π΄Π΅ΡΡŒ Π΅ΡΡ‚ΡŒ нСбольшая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°: Ссли произвСсти нСбольшиС вычислСния, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ 64 ΠšΠ‘ Π² памяти Π±ΡƒΠ΄ΡƒΡ‚ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈ Ρ‚ΠΎΠΌ ΠΆΠ΅ сСтС. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ использованиС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹Ρ… 64 ΠšΠ‘ ΠΈΠ»ΠΈ бо́льшСй стСпСни Π΄Π²ΠΎΠΉΠΊΠΈ, ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π½ΠΈΠ²Π΅Π»ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΎΡ„ΠΈΡ‚ ΠΎΡ‚ использования L1-кэша. Π­Ρ‚ΠΎ доказываСтся ΠΌΠ½ΠΎΠ³ΠΈΠΌΠΈ Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠ°ΠΌΠΈ, Π½ΠΎ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ Π½ΠΈΠΊΡ‚ΠΎ Ρ‚Π°ΠΊ Π΄Π΅Π»Π°Ρ‚ΡŒ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚. Кэши ΠΏΡ€ΠΎΡ‡ΠΈΡ… ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ ΠΈΠΌΠ΅ΡŽΡ‚ эту ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для индСкса ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ большС Π±ΠΈΡ‚.

ΠΡ‚ΠΎΠΌΠ°Ρ€Π½ΠΎΡΡ‚ΡŒ

ΠŸΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ Π΄Π²ΡƒΡ… ядСр ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Π±Π°ΠΉΡ‚ RAM памяти, допустим, Ρ€Π°Π²Π½Ρ‹ΠΉ 0, Π² зависимости ΠΎΡ‚ Β«Ρ„Π°Π·Ρ‹ Π»ΡƒΠ½Ρ‹Β» ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ любоС число ΠΎΡ‚ 0 Π΄ΠΎ 2. НапримСр, ΠΎΠ±Π° процСссора ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π»ΠΈ ΠΈΠ· RAM 0, Π·Π°Ρ‚Π΅ΠΌ ΠΎΠ±Π° ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ свои рСгистры Π΄ΠΎ 1, Π·Π°Ρ‚Π΅ΠΌ ΠΎΠ±Π° записали 1 ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² RAM.

Π­Ρ‚ΠΎ ΠΎΠ΄Π½Π° ΠΈΠ· самых основных ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΈ Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ с ΠΎΠ±Ρ‰Π΅ΠΉ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ.

Π Π΅ΡˆΠ°Π΅Ρ‚ΡΡ это Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ прСфиксного Π±Π°ΠΉΡ‚Π° LOCK Π² Π½Π°Ρ‡Π°Π»ΠΎ ассСмблСрной инструкции (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ xaddl), Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Π΅Ρ‘ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎΠΉ. Данная опСрация посылаСт сигнал Π² Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ядра, запрСщая использованиС Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π° ассСмблСрная инструкция. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΠΎΠΊΠ° ΠΎΠ΄Π½ΠΎ ядро занято ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ΠΎΠΌ, Π΄Ρ€ΡƒΠ³ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΆΠ΄Π°Ρ‚ΡŒ.

Π—Π°Ρ‰ΠΈΡ‰Ρ‘Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ

Π’ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π° DOS-систСм процСссоры Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ Π² Β«Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅Β», Π³Π΄Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ сСгмСнтная адрСсация памяти, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π»ΡŽΠ±ΠΎΠΌΡƒ процСссу доступна вся ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°, ΠΈ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ Π΄ΠΎΠΏΡƒΡΡ‚ΠΈΠΌΡƒΡŽ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ процСссора. Когда процСсс Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² срСдС ОБ монопольно, это ΠΎΡ‡Π΅Π½ΡŒ Π²Ρ‹Π³ΠΎΠ΄Π½ΠΎ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π½ΠΎ ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΏΡ€ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ процСссах. Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ΄ΠΈΠ½ процСсс Π½Π΅ смог случайно ΠΈΠ»ΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ нСсогласованно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ процСсса ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ, которая ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ²Π»ΠΈΡΡ‚ΡŒ Π½Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ ОБ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… процСссов, ΠΈ Π±Ρ‹Π» ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π½ Β«Π—Π°Ρ‰ΠΈΡ‰Ρ‘Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌΒ».

Для этого Π²ΠΎ всС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ ΠΏΡ€Π°Π² доступа. ΠŸΡ€Π°Π²Π° доступа Π½Π° инструкции ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠ»ΡŒΡ†Π° Π·Π°Ρ‰ΠΈΡ‚Ρ‹, Π° памяти β€” Ρ‡Π΅Ρ€Π΅Π· Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ Π°Π΄Ρ€Π΅ΡΠ°Ρ†ΠΈΡŽ.

Π—Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… тонкостСй, Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Ρ… Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅, для ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² Π·Π°Ρ‰ΠΈΡ‰Ρ‘Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ x86_64 (Π΅ΡΡ‚ΡŒ Π΅Ρ‰Ρ‘ классичСский Π·Π°Ρ‰ΠΈΡ‰Ρ‘Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ x86) Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π±ΠΈΡ‚Ρ‹ PE (Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π·Π°Ρ‰ΠΈΡ‚Ρ‹, Π±ΠΈΡ‚ 0) ΠΈ PG (Π‘Ρ‚Ρ€Π°Π½ΠΈΡ‡Π½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ, Π±ΠΈΡ‚ 31), Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠΉ MMU, Π² рСгистрС CR0, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ PML4 Π² рСгистрС CR3 (c 13 ΠΏΠΎ 63 Π±ΠΈΡ‚). ИмСнно Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ PML4 ΠΈ хранится информация ΠΎΠ± адрСсах, ΠΏΡ€Π°Π²Π°Ρ… доступа ΠΈ ΠΏΡ€ΠΎΡ‡Π΅ΠΌ.

ΠšΠΎΠ»ΡŒΡ†Π° Π·Π°Ρ‰ΠΈΡ‚Ρ‹

Π’ процСссорах x86 ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ систСма ΠΊΠΎΠ»Π΅Ρ† Π·Π°Ρ‰ΠΈΡ‚Ρ‹. КаТдая инструкция ΠΈΠΌΠ΅Π΅Ρ‚ свои трСбования ΠΊ ΠΏΡ€Π°Π²Π°ΠΌ процСсса. Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΏΡ€Π°Π² Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅Π³ΠΎΡΡ процСсса ΡƒΠΊΠ°Π·Π°Π½ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ… дСскрипторов, ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π»Π΅ΠΆΠ°Ρ‚ Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… рСгистрах. Π’ x86 сущСствуСт 4 ΠΊΠΎΠ»ΡŒΡ†Π° Π·Π°Ρ‰ΠΈΡ‚Ρ‹, ΠΎΡ‚ ΠΏΠΎΠ»Π½Ρ‹Ρ… ΠΏΡ€Π°Π² доступа (0) Π΄ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… ΠΏΡ€Π°Π² (3). Но для пСрСносимости Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ОБ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π²Π° ΠΊΠΎΠ»ΡŒΡ†Π°. Π”Π°ΠΆΠ΅ Windows NT, которая Ρ€Π°Π½ΡŒΡˆΠ΅ Π±Ρ‹Π»Π° ΠΎΡ‡Π΅Π½ΡŒ Π΄Π°ΠΆΠ΅ кроссплатформСнной, сСйчас ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€Π΅Π΄Π°ΠΊΡ†ΠΈΡŽ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для x86 ΠΈ ARM-систСм.

Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ адрСсация

Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ адрСсация β€” ΠΌΠ΅Ρ‚ΠΎΠ΄ управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΠ΅ большС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти, Ρ‡Π΅ΠΌ имССтся Π² ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ процСссов Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π°.

Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π΅ соотвСтствуСт физичСскому ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ Π½Π° ячСйку Π² RAM. Π­Ρ‚ΠΎ сдСлано для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΌΠΎΠ³Π»Π° Π±Ρ‹Ρ‚ΡŒ большС Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ RAM-памяти, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ для Ρ„Π°ΠΉΠ»Π° ΠΏΠΎΠ΄ΠΊΠ°Ρ‡ΠΊΠΈ (физичСская ΠΏΠ°ΠΌΡΡ‚ΡŒ + ΠΏΠΎΠ΄ΠΊΠ°Ρ‡ΠΊΠ° явно большС, Ρ‡Π΅ΠΌ просто физичСская ΠΏΠ°ΠΌΡΡ‚ΡŒ) ΠΈΠ»ΠΈ ΠΏΠΎΠ±Π»ΠΎΡ‡Π½ΠΎΠ³ΠΎ отобраТСния Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ устройств Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ.

А Ρ‚Π°ΠΊΠΆΠ΅ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ‹ΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠΈ указатСля ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΠ» процСсс ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΏΡ€Π°Π² доступа ΠΊ этой памяти ΠΏΡ€ΠΈ трансляции адрСса ΠΈΠ· Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π² физичСский, Ρ‡Ρ‚ΠΎΠ±Ρ‹ случайно ΠΈΠ»ΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ Π½Π΅ Π·Π°Π»Π΅Π·Ρ‚ΡŒ Π² Ρ‡ΡƒΠΆΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ.

Врансляция адрСсов

Π’ Π·Π°Ρ‰ΠΈΡ‰Ρ‘Π½Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ сам процСссор ΠΈ L1-кэш Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌ адрСсом, Π° L2, L3 ΠΈ RAM β€” с физичСским. ВрансляциСй адрСсов ΠΈΠ· Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π² физичСский, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ ΠΏΡ€Π°Π² доступа занимаСтся MMU (Memory Management Unit) β€” Π±Π»ΠΎΠΊ управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ PML4.

PML4

Π’Π°Π±Π»ΠΈΡ†Π° выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Β 

Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ дСлится Π½Π° Π΄Π²Π΅ части: с 12-Π³ΠΎ ΠΏΠΎ 47-ΠΉ Π±ΠΈΡ‚ β€” сдвиги Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ‚Π°Π±Π»ΠΈΡ† Π² PML4, с 0-Π³ΠΎ ΠΏΠΎ 11-ΠΉ Π±ΠΈΡ‚ β€” сдвиг Π²Π½ΡƒΡ‚Ρ€ΠΈ физичСского адрСса для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Π°Ρ€ΠΈΡ„ΠΌΠ΅Ρ‚ΠΈΠΊΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ.

Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π½Π°Ρ‡Π°Π»ΠΎ PML4-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π»Π΅ΠΆΠΈΡ‚ Π² CR3 с 12-Π³ΠΎ ΠΏΠΎ 51-ΠΉ Π±ΠΈΡ‚Ρ‹. Π‘ 39-Π³ΠΎ ΠΏΠΎ 47-ΠΉ Π±ΠΈΡ‚ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ указатСля β€” Π½ΠΎΠΌΠ΅Ρ€ страницы ΠΈΠ· PML4-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π»Π΅ΠΆΠΈΡ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π½Π°Ρ‡Π°Π»ΠΎ PDPT-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Π‘ 30-Π³ΠΎ ΠΏΠΎ 38-ΠΉ Π±ΠΈΡ‚ находится Π½ΠΎΠΌΠ΅Ρ€ страницы ΠΈΠ· PDPT-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π»Π΅ΠΆΠΈΡ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π½Π°Ρ‡Π°Π»ΠΎ PD. Аналогично ΠΈ с PT, Π½ΠΎ Π² Π½Π΅ΠΉ ΡƒΠΆΠ΅ Π»Π΅ΠΆΠΈΡ‚ физичСский адрСс, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ добавляСтся сдвиг Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ указатСля β€” с 0-Π³ΠΎ ΠΏΠΎ 11-ΠΉ Π±ΠΈΡ‚Ρ‹. Π’ ΠΈΡ‚ΠΎΠ³Π΅ получаСтся физичСский адрСс, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ MMU ΠΈ обращаСтся ΠΊ физичСской памяти.

Π’Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠ³ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Π΄Π²Π΅ слоТности:

  1. Π’ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 48 Π±ΠΈΡ‚, Ρ‡Ρ‚ΠΎ позволяСт Π°Π΄Ρ€Π΅ΡΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 2^48 Π±Π°ΠΉΡ‚ ΠΈΠ»ΠΈ 2^8 Π’Π‘ ΠΈΠ»ΠΈ 256 Π’Π‘. Если Π±Ρ‹ Π±Ρ‹Π»ΠΈ всС 64 Π±ΠΈΡ‚, Ρ‚ΠΎΠ³Π΄Π° Ρ‚Π°Π±Π»ΠΈΡ†Π° PML4 Π±Ρ‹Π»Π° Π±Ρ‹ Π΅Ρ‰Ρ‘ большС, Ρ‡Ρ‚ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ»ΠΎ Π±Ρ‹ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ‹ΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠΈ указатСля. Π’ соврСмСнных сСрвСрных процСссорах Intel Π΅ΡΡ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ адрСсация Π²ΠΏΠ»ΠΎΡ‚ΡŒ Π΄ΠΎ 57 Π±ΠΈΡ‚ (128 ΠŸΠ‘), которая добавляСт ΠΏΠ΅Ρ€Π΅Π΄ PML4 Π΅Ρ‰Ρ‘ ΠΎΠ΄Π½Ρƒ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ.
  2. Π”Π°ΠΆΠ΅ с 4 Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ Ρ€Π°Π·Ρ‹ΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΡ‡Π΅Π½ΡŒ Π΄ΠΎΠ»Π³ΠΎΠ΅. Для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ TLB-кэш для ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ PML4-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.

TLB-кэш Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ схоТ с LX-кэшами, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ слуТит для трансляции Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… адрСсов ΠΈ прСдставляСт собой Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΠΈΠ· сСтов, Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… записи: Β«Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ адрСс ↔ физичСский адрСс». PML4 адрСсована Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ физичСским адрСсам, поэтому сама PML4 ΠΌΠΎΠΆΠ΅Ρ‚ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² L2-L3 ΠΊΡΡˆΠ°Ρ….

Π‘Π΄Π²ΠΈΠ³ Π²Π½ΡƒΡ‚Ρ€ΠΈ страницы β€” 12 Π±ΠΈΡ‚, поэтому ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ‚Π°ΠΊΠΎΠΉ страницы β€” 4 ΠšΠ‘. ΠŸΡ€ΠΎΡ†Π΅ΡΡΡƒ ΠΎΡ‡Π΅Π½ΡŒ Ρ€Π΅Π΄ΠΊΠΎ Π½ΡƒΠΆΠ½Ρ‹ сразу 4 ΠšΠ‘ памяти (Π° мСньшС Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρƒ ОБ нСльзя). ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ процСссы ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π°Π»Π»ΠΎΠΊΠ°Ρ‚ΠΎΡ€Ρ‹, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π±Ρ‹Π»ΠΎ сказано Π² ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅.

Для увСличСния скорости трансляции Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… адрСсов ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ±Ρ€Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Π½ΠΎ Π² Ρ‚Π°ΠΊΠΎΠΌ случаС освободившиСся Π±ΠΈΡ‚Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ для сдвига Π²Π½ΡƒΡ‚Ρ€ΠΈ страницы, Ρ‡Ρ‚ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ‚Π°ΠΊΠΈΡ… страниц. Π’ x86_64 Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ страниц Π±Ρ‹Π²Π°ΡŽΡ‚ 4 ΠšΠ‘ (12 Π±ΠΈΡ‚), 2 ΠœΠ‘ (12 + 9 Π±ΠΈΡ‚ вмСсто PT), 1 Π“Π‘ (12 + 9 + 9 Π±ΠΈΡ‚ вмСсто PD). ИспользованиС большого количСства 4 ΠšΠ‘ страниц ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΡΠΈΠ»ΡŒΠ½ΠΎΠΌΡƒ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΡŽ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° PML4, которая пСрСстанСт ΠΏΠΎΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ Π² L2-L3 кэши, Ρ‡Ρ‚ΠΎ сильно ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ врСмя разымСнования.

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ TLB Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Haswell

TLB прСдставляСт собой ΡΡ…ΠΎΠΆΡƒΡŽ с LX-кэшами структуру. Π’ процСссорС Intel Haswell сущСствуСт Π΄Π²Π° TLB Ρ€Π°Π·Π½ΠΎΠ³ΠΎ уровня. Π˜Π½Π΄Π΅ΠΊΡΠ°Ρ†ΠΈΡ ΠΈ Ρ‚Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ производятся Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ, Π½ΠΎ кэш-линия Π·Π°ΠΌΠ΅Π½Π΅Π½Π° Π½Π° адрСс физичСской Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈ Π΅Ρ‘ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ΠΈ ΠΏΡ€Π°Π²Π° доступа ΠΈΠ· PML4, Π½ΠΎ Π½Π΅ всСгда ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ (ΠΎΠ± этом Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΏΡ€ΠΎ Meltdown). TBL Ρ‚ΠΎΠΆΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΉ ΠΈ Ρ‚ΠΎΠΆΠ΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΊΡΡˆΠΈΡ€ΡƒΠ΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° инструкции.

TLB ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ уровня Π² Haswell дСлится Π½Π° ITLB (instructions) ΠΈ Π½Π° DTLB (data). Минимальная Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ° β€” 1 Ρ‚Π°ΠΊΡ‚, Ρ€Π°Π·ΠΌΠ΅Ρ€ сСта β€” 4 записи, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для 4 ΠšΠ‘ сСгмСнтов, Π»ΠΈΠ±ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для 2 ΠœΠ‘ сСгмСнтов (зависит ΠΎΡ‚ ОБ ΠΈ Π΅Ρ‘ настроСк). Π Π°Π·ΠΌΠ΅Ρ€ β€” 32 записи для 2 ΠœΠ‘ сСгмСнтов ΠΈ 64 β€” для 4 ΠšΠ‘.

TLB Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ уровня (STLB) β€” Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Π΄Π°Π½Π½Ρ‹Ρ…, Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ° β€” 22 Ρ‚Π°ΠΊΡ‚Π°, Ρ€Π°Π·ΠΌΠ΅Ρ€ сСта β€” 8 записСй, Ρ€Π°Π·ΠΌΠ΅Ρ€ β€” 1024 записи для 2 ΠœΠ‘ ΠΈ 4 ΠšΠ‘ сСгмСнтов ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.

ΠŸΡ€ΠΈ смСнС контСкста TLB приходится ΡΠ±Ρ€Π°ΡΡ‹Π²Π°Ρ‚ΡŒ ΠΈΠ·-Π·Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ³ΠΎ совпадСния Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… адрСсов.

Π•Ρ‰Ρ‘ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

По ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ адрСсации кэши Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ инструкций ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ΄Π΅Π»Π΅Π½Ρ‹ Π½Π° 3 ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π² Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… процСссорах Ρ‚ΠΈΠΏΠ°.

Physically indexed, physically tagged (PIPT) β€” физичСски индСксируСмыС ΠΈ физичСски Ρ‚Π΅Π³ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ (Ρ‚Π΅Π³ ΠΈ индСкс бСрутся ΠΈΠ· физичСского адрСса). Π’Π°ΠΊΠΈΠ΅ кэши просты ΠΈ ΠΈΠ·Π±Π΅Π³Π°ΡŽΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с Π½Π°Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ (aliasing), Π½ΠΎ ΠΎΠ½ΠΈ ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅Π΄ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ΠΌ Π² кэш трСбуСтся запрос физичСского адрСса Π² TLB. Π­Ρ‚ΠΎΡ‚ запрос ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΌΠ°Ρ… Π² TLB ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ Π² PML4.
L2 ΠΈ L3 располоТСны послС MMU, поэтому ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ этот Ρ‚ΠΈΠΏ. L1 остаётся Π»ΠΈΠ±ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· Π»Π΅Π·Ρ‚ΡŒ Π² MMU, Ρ‡Ρ‚ΠΎ слишком Π΄ΠΎΠ»Π³ΠΎ, Π»ΠΈΠ±ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚ΠΈΠΏ, Ρ‡Ρ‚ΠΎ L1 ΠΈ Π΄Π΅Π»Π°Π΅Ρ‚.

Virtually indexed, virtually tagged (VIVT) β€” Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎ индСксируСмыС ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎ Ρ‚Π΅Π³ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅. И для тСгирования, ΠΈ для индСкса ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ адрСс. Благодаря этому ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ наличия Π΄Π°Π½Π½Ρ‹Ρ… Π² кэшС проходят быстрСС, Π½Π΅ трСбуя обращСния ΠΊ MMU.

Однако Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° налоТСния, ΠΊΠΎΠ³Π΄Π° нСсколько Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… адрСсов ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ физичСскому. Π’ этом случаС Π΄Π°Π½Π½Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Π΄Π²Π°ΠΆΠ΄Ρ‹, Ρ‡Ρ‚ΠΎ сильно услоТняСт ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ когСрСнтности. Π”Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠΌΠΎΠ½ΠΈΠΌΡ‹, ситуации, ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ адрСс (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Ρ€Π°Π·Π½Ρ‹Ρ… процСссах) ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ физичСскиС адрСса. Бтановится Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ отобраТСния ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ индСксу.

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ: сброс кэша ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ процСссами, Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ нСпСрСсСчСния адрСсных пространств процСссов, Ρ‚Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… адрСсов ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ адрСсного пространства (address space ID, ASID) ΠΈΠ»ΠΈ использованиС физичСских Ρ‚Π΅Π³ΠΎΠ². Π’Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ отобраТСния Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… адрСсов Π² физичСскиС: трСбуСтся сброс кэш-Π»ΠΈΠ½ΠΈΠΉ, для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… измСнилось ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.

Virtually indexed, physically tagged (VIPT) β€” Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎ индСксируСмыС ΠΈ физичСски Ρ‚Π΅Π³ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅. Для индСкса ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ адрСс, Π° для Ρ‚Π΅Π³Π° β€” физичСский. ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠΌ ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ являСтся мСньшая Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ°, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΊΠ°Ρ‚ΡŒ кэш-линию ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ с трансляциСй адрСсов Π² TLB, ΠΎΠ΄Π½Π°ΠΊΠΎ сравнСниС Ρ‚Π΅Π³Π° задСрТиваСтся Π΄ΠΎ получСния физичСского адрСса. ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠΌ ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ являСтся ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠΌΠΎΠ½ΠΈΠΌΠΎΠ² (homonyms), Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ‚Π΅Π³ содСрТит физичСский адрСс. Для Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° трСбуСтся большС Π±ΠΈΡ‚ для Ρ‚Π΅Π³Π°, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ индСксныС Π±ΠΈΡ‚Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΈΠ½ΠΎΠΉ Ρ‚ΠΈΠΏ адрСсации.

Но Π΄Π°ΠΆΠ΅ Ρƒ VIPT-кэша Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°: ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ кэш-записи Π² кэшС ΠΎΠ΄Π½ΠΎΠ³ΠΎ ядра ΠΈΠ»ΠΈ Π² RAM придётся ΠΈΡΠΊΠ°Ρ‚ΡŒ эту ΠΆΠ΅ кэш-запись Π² ΠΊΡΡˆΠ°Ρ… Π΄Ρ€ΡƒΠ³ΠΈΡ… ядСр для ΠΈΠ½Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ. Но ΠΈΡΠΊΠ°Ρ‚ΡŒ придётся ΠΏΠΎ физичСскому адрСсу (Π΄Π²Π° ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… адрСса Ρƒ Ρ€Π°Π·Π½Ρ‹Ρ… процСссов ΠΌΠΎΠ³ΡƒΡ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° Ρ€Π°Π·Π½ΡƒΡŽ Ρ„ΠΈΠ·ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ), поэтому использованиС индСксации ΠΏΠΎ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ адрСсу заставляСт ΠΏΡ€ΠΎΠ±Π΅Π³Π°Ρ‚ΡŒ вСсь кэш ΠΈ ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ‚Π΅Π³.

Π’ процСссорах Intel это Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ индСксациСй ΠΈ ΠΏΠΎ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ, ΠΈ ΠΏΠΎ физичСскому адрСсу. Из-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π±ΠΈΡ‚Ρ‹ с 0-Π³ΠΎ ΠΏΠΎ 11-ΠΉ β€” это смСщСниС Π²Π½ΡƒΡ‚Ρ€ΠΈ страницы Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ PML4, ΠΎΠ½ΠΈ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚ Ρƒ физичСского ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ адрСса. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ для индСкса с 6-Π³ΠΎ ΠΏΠΎ 11-ΠΉ Π±ΠΈΡ‚Ρ‹ указатСля ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚ ΠΈ Ρƒ физичСского, ΠΈ Ρƒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ адрСса. Благодаря этому L1-кэш ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ ΠΊΠ°ΠΊ PIPT, Ρ‚Π°ΠΊ ΠΈ VIPT, Π½ΠΎ Π΅Π³ΠΎ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π² процСссорах Intel Ρ€Π°Π²Π΅Π½ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ страницы ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ PML4, ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½Π½ΠΎΠΌΡƒ Π½Π° количСство записСй Π² сСтС кэша: 64 ΠšΠ‘ * 8 = 512 ΠšΠ‘ β€” L1-кэш Π½Π° всС ядра ΠΈ 64 ΠšΠ‘ β€” L1 Π½Π° ΠΎΠ΄Π½ΠΎ ядро. Но ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° записСй Π² сСтС ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΡƒ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π² соврСмСнных процСссорах Intel L1-кэш особо Π½Π΅ растёт, ΠΈΠ±ΠΎ это ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΡƒ.

ΠŸΡ€ΠΎΡ†Π΅ΡΡ трансляции

Π’ Π·Π°Ρ‰ΠΈΡ‰Ρ‘Π½Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€Π°Π·Ρ‹ΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ΄Ρ‘Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

1. Π˜Π΄Ρ‘ΠΌ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ Π² L1 ΠΈ Π² TLB. Π”Π°Π»Π΅Π΅ вСсь процСсс дСлится Π½Π° Π΄Π²Π΅ части: поиск Π½ΡƒΠΆΠ½ΠΎΠΉ кэш-Π»ΠΈΠ½ΠΈΠΈ (ΠΏ. 2) ΠΈ трансляция Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ адрСса (ΠΏ. 3).

2.1. Π‘Π΅Ρ€Ρ‘ΠΌ индСкс ΠΈΠ· Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ указатСля ΠΈ ΠΈΡ‰Π΅ΠΌ Π½ΡƒΠΆΠ½Ρ‹ΠΉ сСт. Π”Π°Π»Π΅Π΅ ΠΆΠ΄Ρ‘ΠΌ, ΠΏΠΎΠΊΠ° закончится процСсс трансляции Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ адрСса (ΠΏ. 3).

2.2. ПослС получСния физичСского адрСса сравниваСм Ρ‚Π΅Π³ΠΈ Π² записях Π²Π½ΡƒΡ‚Ρ€ΠΈ сСта. Если нашлось совпадСниС, это нуТная Π½Π°ΠΌ кэш-линия. Если Π½Π΅Ρ‚, ΠΈΠ΄Ρ‘ΠΌ дальшС Π² L2.

2.3 ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Π΅ дСйствия, Π½ΠΎ ΡƒΠΆΠ΅ с кэшами L2 ΠΈ L3. Π’ Π½ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ физичСскиС адрСса, Π±Π»Π°Π³ΠΎ Ρ‚Π°ΠΊΠΎΠΉ ΠΌΡ‹ ΡƒΠΆΠ΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ, вСдь процСсс трансляции (ΠΏ. 3) закончился Π΄ΠΎ Π½Π°Ρ‡Π°Π»Π° этапа (ΠΏ. 2.2).

2.4 Если Π² ΠΊΡΡˆΠ°Ρ… Π½Π΅ нашлось, ΠΈΠ΄Ρ‘ΠΌ Π² ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΉ RAM.

3.1 Π˜Π΄Ρ‘ΠΌ Π² TLB ΠΈ сравниваСм индСксы ΠΈ Ρ‚Π΅Π³ΠΈ ΠΏΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ с кэшами. Если нашли совпадСниС, возвращаСмся Π² этап 2.1.

3.2 Если Π½Π΅Ρ‚ (такая ситуация называСтся Page walk), Π±Π΅Ρ€Ρ‘ΠΌ физичСский адрСс ΠΈΠ· рСгистра CR3 ΠΈ повторяСм этапы 2.3–2.4, Π½ΠΎ для поиска ΠΈ чтСния PML4. Если нашли совпадСния Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅, провСряСм ΠΏΡ€Π°Π²Π° доступа ΠΈ возвращаСмся Π½Π° этап 2.1 с ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΌ физичСским адрСсом.

3.3 Если совпадСния Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π½Π΅Ρ‚, Π»ΠΈΠ±ΠΎ Π±Ρ‹Π»ΠΈ Π½Π°Ρ€ΡƒΡˆΠ΅Π½Ρ‹ ΠΏΡ€Π°Π²Π° доступа, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° произвСсти запись, ΠΊΠΎΠ³Π΄Π° доступно Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ (такая ситуация называСтся Page fault), Ρ‚ΠΎ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅. Π”Π°Π»Π΅Π΅ вызываСтся ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ ОБ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π΅ΡˆΠ°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ с этой ситуациСй.

Роль ОБ Π² Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ памяти Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Linux

Π’ΠΎΡ‚ Ρ‚ΡƒΡ‚ ΠΌΡ‹ ΠΏΠ»Π°Π²Π½ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ высокоуровнСвой памяти.

Запуск процСсса

ΠŸΠ΅Ρ€Π΅Π΄ запуском процСсса ОБ выдСляСт Π΅ΠΌΡƒ сСгмСнты Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π² PML4 (выбирая срСди 4 ΠšΠ‘, 2 ΠœΠ‘, 1 Π“Π‘) для стСка ΠΈ статичСской памяти. Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ процСсса своя Ρ‚Π°Π±Π»ΠΈΡ†Π° PML4. ΠŸΡ€ΠΈ смСнС контСкста ОБ выставит ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π² CR3 Π½Π° Π½ΡƒΠΆΠ½ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ.

ΠŸΡ€ΠΈ нСобходимости процСсс ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ Ρƒ ОБ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ сСгмСнт, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Π΅Ρ€Π΅Π· систСмный Π²Ρ‹Π·ΠΎΠ² mmap. ОБ ΠΏΡ€ΠΈ возмоТности Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ запись Π² PML4, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π² свои Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, ΠΈ Π²Π΅Ρ€Π½Ρ‘Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π½Π°Ρ‡Π°Π»ΠΎ этой памяти процСссу, ΠΈΠ½Π°Ρ‡Π΅ β€” Π²Π΅Ρ€Π½Ρ‘Ρ‚ Π½ΡƒΠ»Π΅Π²ΠΎΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ.

ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ Π½Π° Π½ΠΈΠ·ΠΊΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ автоматичСская, статичСская, динамичСская ΠΏΠ°ΠΌΡΡ‚ΡŒ β€” это всё сСгмСнты.

Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ ΠΏΠ°ΠΌΡΡ‚ΡŒ Π² ОБ

PML4 ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π±Ρ‹Π»Π° создана для Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ памяти, Π½ΠΎ ОБ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π΅Ρ‘ ΠΈ для Π΄Ρ€ΡƒΠ³ΠΈΡ… Π·Π°Π΄Π°Ρ‡.

Π€Π°ΠΉΠ» ΠΏΠΎΠ΄ΠΊΠ°Ρ‡ΠΊΠΈ

Π§Π°ΡΡ‚ΡŒ памяти ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² Ρ„Π°ΠΉΠ»Π΅ ΠΏΠΎΠ΄ΠΊΠ°Ρ‡ΠΊΠΈ. ΠŸΡ€ΠΈ Π½Π΅Ρ…Π²Π°Ρ‚ΠΊΠ΅ памяти ОБ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‡Π°ΡΡ‚ΡŒ этой памяти пСрСнСсти Π½Π° диск. ВмСстС с этим ОБ удаляСт запись ΠΈΠ· PML4, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ этой памяти Π±Ρ‹Π» сгСнСрирован Page Fault. Π­Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ сдСлано для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ памяти, которая Π±Ρ‹Π»Π° ΠΎΡ‚Π³Ρ€ΡƒΠΆΠ΅Π½Π° Π½Π° диск, Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ОБ, которая Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΈΠ· диска ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² ОБ, Π²Π΅Ρ€Π½Ρ‘Ρ‚ запись Π² PML4 ΠΈ пСрСдаст ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ процСссу, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π° сСй Ρ€Π°Π· Π±Π»Π°Π³ΠΎΠΏΠΎΠ»ΡƒΡ‡Π½ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ процСсс разымСнования.

Π€Π°ΠΉΠ» ΠΈΠ»ΠΈ устройство, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΡ‘Π½Π½ΠΎΠ΅ Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ

mmap ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ для отобраТСния Ρ„Π°ΠΉΠ»Π° (Π² *nix систСмах устройства β€” Ρ‚ΠΎΠΆΠ΅ Ρ„Π°ΠΉΠ»Ρ‹) Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ. Для этого создаётся Π±ΡƒΡ„Π΅Ρ€ Π² физичСской памяти, Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ записываСтся Ρ‡Π°ΡΡ‚ΡŒ Ρ„Π°ΠΉΠ»Π°, ΠΈ создаётся запись Π² PML4. Если процСсс Π²Ρ‹ΠΉΠ΄Π΅Ρ‚ Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρƒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ памяти Π² PML4, Ρ‚ΠΎ ОБ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ Π½ΠΎΠ²Ρ‹ΠΉ кусок Ρ„Π°ΠΉΠ»Π° Π² Π±ΡƒΡ„Π΅Ρ€ ΠΈ ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠ΅Ρ‚ PML4, сдвинув Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ, Π½ΠΎ оставив физичСский.

Π’ ΠΈΡ‚ΠΎΠ³Π΅ для процСсса внСшнС Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ вСсь Ρ„Π°ΠΉΠ» Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½ Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° Π½Π° самом Π΄Π΅Π»Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π°ΡΡ‚ΡŒ этого Ρ„Π°ΠΉΠ»Π° Π² Π±ΡƒΡ„Π΅Ρ€Π΅.

COW-ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΈ лСнивая аллокация

ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ mmap Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ОБ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ памяти Π½Π° самом Π΄Π΅Π»Π΅ Π½Π΅ выдСляСтся, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ добавляСтся запись Π² структурах самой ОБ. ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ процСсса ΠΊ Π΅Ρ‰Ρ‘ Π½Π΅ Π°Π»Π»ΠΎΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ памяти Π±ΡƒΠ΄Π΅Ρ‚ Page Fault, Π²ΠΎ врСмя ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ОБ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Ρ‘Ρ‚ ΠΏΠΎΠ»Π½ΡƒΡŽ Π°Π»Π»ΠΎΠΊΠ°Ρ†ΠΈΡŽ. Π­Ρ‚ΠΎ ΡƒΠ΄ΠΎΠ±Π½ΠΎ Π² случаС, ΠΊΠΎΠ³Π΄Π° процСсс Π°Π»Π»ΠΎΡ†ΠΈΡ€ΠΎΠ²Π°Π» ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π½ΠΎ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π΅Ρ‘ Π½Π΅ использовал. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС ΠΏΡ€ΠΎΠΉΠ΄Ρ‘Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ, Π»Π΅Π½ΠΈΠ²Ρ‹ΠΉ ΠΈ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ быстрый этап Π°Π»Π»ΠΎΠΊΠ°Ρ†ΠΈΠΈ.

Π‘ COW Π΄Π΅Π»Π° обстоят схоТС.

Copy On Write ΠΏΠ°ΠΌΡΡ‚ΡŒ β€” это ΠΏΠ°ΠΌΡΡ‚ΡŒ, общая для чтСния Ρƒ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² систСмС (ΠΏΠΎΠ΄ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ имССтся Π² Π²ΠΈΠ΄Ρƒ Ρ‡Ρ‚ΠΎ ΡƒΠ³ΠΎΠ΄Π½ΠΎ, начиная ΠΎΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² ООП ΠΈ заканчивая процСссами с раздСляСмой ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ). Если ΠΆΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ, Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ этим такая ΠΏΠ°ΠΌΡΡ‚ΡŒ дСлится Π½Π° Π΄Π²Π΅ части: ΠΎΠ΄Π½Π° остаётся Ρƒ всСх ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π° другая становится ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ…ΠΎΡ‡Π΅Ρ‚ Π΅Ρ‘ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ. Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ экономию памяти, Π° Π² случаС нСобходимости записи Π² эту ΠΏΠ°ΠΌΡΡ‚ΡŒ, ΠΌΡ‹ Π΅Ρ‘ ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌ.

Π£ всСх процСссов с COW-ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Π² PML4 ставится Ρ„Π»Π°Π³ Β«Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅Β» для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈ записи Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ОБ Ρ‡Π΅Ρ€Π΅Π· Page Fault для раздСлСния памяти. Π Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΆΠ΅ ΠΏΡ€Π°Π²Π° доступа Π½Π° запись ОБ Ρ…Ρ€Π°Π½ΠΈΡ‚ Π² своих Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ….

Π­Ρ‚ΠΎ Π±Ρ‹Π»ΠΈ нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ОБ ΠΏΠΎ-Ρ…ΠΈΡ‚Ρ€ΠΎΠΌΡƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ PML4 для своих Π½ΡƒΠΆΠ΄.

Meltdown

Π’ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… соврСмСнных процСссорах ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ»ΠΈ ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ Π² этой систСмС Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… адрСсов ΠΈ кэшСй. Π•Ρ‘ Π½Π°Π·Π²Π°Π»ΠΈ Meltdown.

Π•Ρ‰Ρ‘ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎ PML4

ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ, рассмотрим Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ PML4. Π’ Π½Π΅ΠΉ ΠΈ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠΎΠ΄Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π΅ΡΡ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ адрСс ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Π½ΠΎ ΠΈ Π±ΠΈΡ‚Ρ‹ с ΠΌΠ΅Ρ‚Π°ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ этой Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Рассмотрим Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½ΠΈΡ….

  • P (Present) ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π΄Π°Π»Π΅Π΅ ΠΈΠ΄Ρ‘Ρ‚ Ρ‚Π°Π±Π»ΠΈΡ†Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ уровня. Если 0, Ρ‚ΠΎ вмСсто указатСля Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Π»Π΅ΠΆΠΈΡ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ„ΠΈΠ·ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ страницу Π±Π΅Π· смСщСния. Если Π² PT Π±ΡƒΠ΄Π΅Ρ‚ Π»Π΅ΠΆΠ°Ρ‚ΡŒ сразу ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° физичСский сСгмСнт, Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠΉ сСгмСнт Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 2 ΠœΠ‘. C 1 Π“Π‘ сСгмСнтами Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² PD-Ρ‚Π°Π±Π»ΠΈΡ†Π΅.
  • R/W (Read/Write) ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° доступ для чтСния. Если стоит 0, Ρ‚ΠΎ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅.
  • NX (No Execute) (самый Π»Π΅Π²Ρ‹ΠΉ), установлСнный Π² 1, Π·Π°ΠΏΡ€Π΅Ρ‰Π°Π΅Ρ‚ исполнСниС Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄.
  • U/S (User/Supervisor), установлСнный Π² 0, Π·Π°ΠΏΡ€Π΅Ρ‰Π°Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ процСссам (User, ΠΊΠΎΠ»ΡŒΡ†ΠΎ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ 3), ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использована Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ОБ ΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°ΠΌΠΈ (Supervisor, ΠΊΠΎΠ»ΡŒΡ†ΠΎ 0) (это ΠΏΠΎ сути самый Π²Π°ΠΆΠ½Ρ‹ΠΉ Ρ„Π»Π°Π³ для Meltdown).
  • A (Accessed) ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ, Π±Ρ‹Π»Π° Π»ΠΈ ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ‚Π°Π±Π»ΠΈΡ†Π°, использована хотя Π±Ρ‹ Ρ€Π°Π·.

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ Ρ€Π°Π±ΠΎΡ‚Ρ‹

НаконСц, ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Ρ‘ΠΌ ΠΊ самому ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ уязвимости Metldown.

Π Π°Π½Π΅Π΅ ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΎ написано ΠΎ спСкулятивном исполнСнии ΠΊΠΎΠΌΠ°Π½Π΄ Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΎΠ± Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅ процСссора. Π¦ΠΈΡ‚Π°Ρ‚Π° ΠΈΠ· ΡΡ‚Π°Ρ‚ΡŒΠΈ: «БпСкулятивноС исполнСниС ΠΊΠΎΠΌΠ°Π½Π΄ β€” это Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ станСт извСстно, понадобится эта ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΈΠ»ΠΈ Π½Π΅Ρ‚Β».

Π‘ΡƒΡ‚ΡŒ Π°Ρ‚Π°ΠΊΠΈ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ соврСмСнныС ОБ всё своё адрСсноС пространство ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ Π² адрСсном пространствС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ (процСсса). Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ Π² PML4-Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ процСсса ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° ΠΏΠΎΠ΄Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ОБ, Π½ΠΎ с Ρ„Π»Π°Π³ΠΎΠΌ U/S, установлСнным Π² 0. Π­Ρ‚ΠΎ сдСлано для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ контСкста процСсса ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ количСство ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ пСрСзаписи CR3 ΠΈ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… ОБ с чистыми VIPT- ΠΈΠ»ΠΈ VIVP-кэшами (PML4 ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ процСсса β†’ PML4 Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ процСсса вмСсто PML4 ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ процСсса β†’ PML4 ОБ β†’ PML4 Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ процСсса), Π½ΠΎ эту Π·Π°Ρ‰ΠΈΡ‚Ρƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… процСссорах Intel ΠΈ ARM (Ρƒ AMD ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ»ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ Spectre, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Ρ€Π°Π±ΠΎΡ‚Ρ‹).

НСкоторыС ОБ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΎΠ΄Π½Ρƒ PML4-Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Π½Π° всю систСму, Π° ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ контСкста ΠΌΠ΅Π½ΡΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ΄Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. ΠžΡ‚ΡΡŽΠ΄Π° Π² Ρ‚ΠΎΠΉ ΠΆΠ΅ Windows ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠžΠ—Π£ 256 Π“Π‘ β€” ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ PDP.

ΠŸΡ€ΠΈ спСкулятивном исполнСнии Π² уязвимых процСссорах Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒΡΡ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½ΠΎ, стоит Π»ΠΈ Π±ΠΈΡ‚ 0 Π² U/S Ρ„Π»Π°Π³Π΅. ΠŸΡ€ΠΈΡ‡Ρ‘ΠΌ благодаря спСкуляции ΠΊΠΎΠ΄ Π°Ρ‚Π°ΠΊΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ ΠΈΠ· нСдостиТимого ΠΊΠΎΠ΄Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Π²Π΅Ρ‚ΠΊΠ΅ else ΠΏΡ€ΠΈ всСгда истинном условии Π² if, ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ процСссору станСт извСстно, Ρ‡Ρ‚ΠΎ этот ΠΊΠΎΠ΄ нСдостиТим. ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ процСссор ΠΏΠΎΠΉΠΌΡ‘Ρ‚, Ρ‡Ρ‚ΠΎ доступа ΠΊ этой памяти Π½Π΅Ρ‚, ΠΎΠ½ ΠΎΠ±Π½ΡƒΠ»ΠΈΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄ доступа ΠΊ памяти, сбросив ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ рСгистры, Π½ΠΎ TLB- ΠΈ L1-кэш ΠΎΠ½ ΡΠ±Ρ€Π°ΡΡ‹Π²Π°Ρ‚ΡŒ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚. А Π² Π½ΠΈΡ… ΡƒΠΆΠ΅ Π½Π΅ хранится Ρ„Π»Π°Π³ U/S, поэтому процСсс ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ»Π½Ρ‹ΠΉ доступ ΠΊ ΡƒΡΠΏΠ΅Π²ΡˆΠ΅ΠΉ Π·Π°ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΎΠΉ памяти ядра ОБ, вСдь процСссор, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°ΡˆΡ‘Π» Π½ΡƒΠΆΠ½ΡƒΡŽ запись Π² L1 ΠΈ TLB, Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Π΅Ρ‘ Π² PML4. Π Π΅ΡˆΠ°Π΅Ρ‚ΡΡ эта ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π»ΠΈΠ±ΠΎ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎ β€” Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Ρ„Π»Π°Π³ΠΎΠ² ΠΈΠ· PML4 Π² TLB, Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎ β€” ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Ρ‚Π°Π±Π»ΠΈΡ† памяти ОБ ΠΈΠ· PML4-процСссов, Ρ‡Ρ‚ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ врСмя смСны контСкста ΠΈ систСмных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ².

Π’Ρ‹Π²ΠΎΠ΄

Π­Ρ‚ΠΎ Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ всё, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΡ€ΠΎ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΈ ΡƒΠΆ Ρ‚Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎ всю Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ ПК ΠΏΡƒΡΡ‚ΡŒ Π΄Π°ΠΆΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ x86_64. Π­Ρ‚ΠΎ лишь нСкоторая Ρ‡Π°ΡΡ‚ΡŒ Π±Π°Π·Ρ‹, сильно привязанная ΠΊ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅, Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ схоТиС, Π½ΠΎ Π½Π΅ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹.

Для Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ³ΠΎ изучСния этой Ρ‚Π΅ΠΌΡ‹ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Ρƒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚Ρ€Ρ‘Ρ…Ρ‚ΠΎΠΌΠ½ΠΈΠΊ Π­. Π‘. Π’Π°Π½Π΅Π½Π±Π°ΡƒΠΌΠ° ΠΈΠ»ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΎΡ‚ Intel ΠΏΡ€ΠΎ x86_64 β€” Π±Π»Π°Π³ΠΎ ΠΎΠ½ΠΈ Π΅ΡΡ‚ΡŒ Π² свободном доступС β€” ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΌΠΈΠΊΡ€ΠΎΠ°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π΄ΠΎΠΊΠ»Π°Π΄ с ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ C++ Russia 2018 для уточнСния Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠ΅Π»ΠΎΡ‡Π΅ΠΉ ΠΏΡ€ΠΎ кэши ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ Π°Π΄Ρ€Π΅ΡΠ°Ρ†ΠΈΡŽ, Π½Π΅ описанных Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅.

Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ