ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ мСньший объСм Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ памяти

ΠžΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡ памяти процСсса

ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ мСньший объСм Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ памяти. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ мСньший объСм Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ памяти. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ мСньший объСм Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ памяти. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ мСньший объСм Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ памяти. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ мСньший объСм Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ памяти
Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ – Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΉ аспСкт Π² Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм. Он ΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΎΡΠ½ΠΎΠ²ΠΎΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‰Π΅Π΅ влияниС Π½Π° сфСру программирования ΠΈ систСмного администрирования. Π’ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… постах я ΠΊΠΎΡΠ½ΡƒΡΡŒ вопросов, связанных с Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ памяти. Π£ΠΏΠΎΡ€ Π±ΡƒΠ΄Π΅Ρ‚ сдСлан Π½Π° практичСскиС аспСкты, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΈ Π΄Π΅Ρ‚Π°Π»ΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ устройства ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ. РассматриваСмыС ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ достаточно ΠΎΠ±Ρ‰ΠΈΠΌΠΈ, Π½ΠΎ ΠΏΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Π² основном Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Linux ΠΈ Windows, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΡ…ΡΡ Π½Π° x86-32 ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ пост описываСт ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡŽ памяти ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… процСссов.

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ процСсс Π² ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°Ρ‡Π½ΠΎΠΉ ОБ выполняСтся Π² собствСнной β€œΠΏΠ΅ΡΠΎΡ‡Π½ΠΈΡ†Π΅β€. Π­Ρ‚Π° пСсочница прСдставляСт собой Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ адрСсноС пространство, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π² 32-Π±ΠΈΡ‚Π½ΠΎΠΌ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ всСгда ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ€Π°Π²Π½Ρ‹ΠΉ 4 Π³ΠΈΠ³Π°Π±Π°ΠΉΡ‚Π°ΠΌ. БоотвСтствиС ΠΌΠ΅ΠΆΠ΄Ρƒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌ пространством ΠΈ физичСской ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ описываСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ страниц (page table). Π―Π΄Ρ€ΠΎ создаСт ΠΈ заполняСт Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Π° процСссор обращаСтся ΠΊ Π½ΠΈΠΌ ΠΏΡ€ΠΈ нСобходимости ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚ΡŒ Ρ‚Ρ€Π°Π½ΡΠ»ΡΡ†ΠΈΡŽ адрСса. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ процСсс Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ со своим Π½Π°Π±ΠΎΡ€ΠΎΠΌ Ρ‚Π°Π±Π»ΠΈΡ†. Π•ΡΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ Π²Π°ΠΆΠ½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ β€” концСпция Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ адрСсации распространяСтся Π½Π° всС выполняСмоС ПО, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΈ само ядро. По этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ для Π½Π΅Π³ΠΎ рСзСрвируСтся Ρ‡Π°ΡΡ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ адрСсного пространства (Ρ‚.Π½. kernel space).

Π­Ρ‚ΠΎ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ Π½Π΅ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ядро Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ всС это пространство, просто Π΄Π°Π½Π½Ρ‹ΠΉ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ адрСсов ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использован для мэппирования любой части физичСского адрСсного пространства ΠΏΠΎ Π²Ρ‹Π±ΠΎΡ€Ρƒ ядра. Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Ρ‹ памяти, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ kernel space, ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ… страниц ΠΊΠ°ΠΊ доступныС ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ для ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° (ΠΊΠΎΠ»ΡŒΡ†ΠΎ 2 ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅). ΠŸΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ обращСния ΠΊ этим страницам ΠΈΠ· user mode ΠΊΠΎΠ΄Π° гСнСрируСтся page fault. Π’ случаС с Linux, kernel space всСгда присутствуСт Π² памяти процСсса, ΠΈ Ρ€Π°Π·Π½Ρ‹Π΅ процСссы ΠΌΡΠΏΠΏΠΈΡ€ΡƒΡŽΡ‚ kernel space Π² ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ физичСской памяти. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΊΠΎΠ΄ ΠΈ Π΄Π°Π½Π½Ρ‹Π΅ ядра всСгда доступны ΠΏΡ€ΠΈ нСобходимости ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ ΠΈΠ»ΠΈ систСмный Π²Ρ‹Π·ΠΎΠ². Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ, опСративная ΠΏΠ°ΠΌΡΡ‚ΡŒ, замэппированная Π² user mode space, мСняСтся ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ контСкста.

ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ мСньший объСм Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ памяти. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ мСньший объСм Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ памяти. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ мСньший объСм Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ памяти. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ мСньший объСм Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ памяти. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ мСньший объСм Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ памяти

Π‘ΠΈΠ½ΠΈΠΌ Ρ†Π²Π΅Ρ‚ΠΎΠΌ Π½Π° рисункС ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½Ρ‹ области Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ адрСсного пространства, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π² соотвСтствиС поставлСны участки физичСской памяти; Π±Π΅Π»Ρ‹ΠΌ Ρ†Π²Π΅Ρ‚ΠΎΠΌ β€” Π΅Ρ‰Π΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ области. Как Π²ΠΈΠ΄Π½ΠΎ, Firefox использовал Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ своСго Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ адрСсного пространства. ВсС ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ ΠΎ Π»Π΅Π³Π΅Π½Π΄Π°Ρ€Π½ΠΎΠΉ проТорливости этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти. Π‘ΠΈΠ½ΠΈΠ΅ полосы Π½Π° рисункС β€” это сСгмСнты памяти ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΊΡƒΡ‡Π° (heap), стСк ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΏΠΎΠ΄ сСгмСнтами ΠΌΡ‹ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅ΠΌ просто Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½Ρ‹Π΅ адрСсныС Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ‹. Π­Ρ‚ΠΎ Π½Π΅ Ρ‚Π΅ сСгмСнты, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΏΡ€ΠΈ описании сСгмСнтации Π² Intel процСссорах. Π’Π°ΠΊ ΠΈΠ»ΠΈ ΠΈΠ½Π°Ρ‡Π΅, Π²ΠΎΡ‚ стандартная схСма ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ памяти процСсса Π² Linux:

ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ мСньший объСм Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ памяти. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ мСньший объСм Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ памяти. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ мСньший объСм Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ памяти. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ мСньший объСм Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ памяти. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ мСньший объСм Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ памяти

Π”Π°Π²Π½Ρ‹ΠΌ Π΄Π°Π²Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Π°Ρ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ° Π½Π°Ρ…ΠΎΠ΄ΠΈΠ»Π°ΡΡŒ Π² совсСм Π΅Ρ‰Π΅ младСнчСском возрастС, Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ адрСса сСгмСнтов Π±Ρ‹Π»ΠΈ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ ΠΏΠΎΡ‡Ρ‚ΠΈ для всСх процСссов, выполняСмых машиной. Из-Π·Π° этого Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π»ΠΎΡΡŒ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ΅ эксплуатированиС уязвимостСй. Эксплойту часто Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ памяти ΠΏΠΎ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹ΠΌ адрСсам, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ адрСсу Π² стСкС, ΠΏΠΎ адрСсу Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΈ Ρ‚ΠΎΠΌΡƒ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅. Π₯Π°ΠΊΠ΅Ρ€, Ρ€Π°ΡΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚ΡŒ ΡƒΠ΄Π°Π»Π΅Π½Π½ΡƒΡŽ Π°Ρ‚Π°ΠΊΡƒ, Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ адрСса для обращСния Π² ΡΠ»Π΅ΠΏΡƒΡŽ Π² расчСтС Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ сСгмСнтов ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² памяти Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… ΠΌΠ°ΡˆΠΈΠ½Π°Ρ… Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹ΠΌ. И ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΎ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΎΠ΅, случаСтся, Ρ‡Ρ‚ΠΎ людСй Ρ…Π°ΠΊΠ°ΡŽΡ‚. По этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅, ΠΏΡ€ΠΈΠΎΠ±Ρ€Π΅Π» ΠΏΠΎΠΏΡƒΠ»ΡΡ€Π½ΠΎΡΡ‚ΡŒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Ρ€Π°Π½Π΄ΠΎΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ располоТСния сСгмСнтов Π² адрСсном пространствС процСсса. Linux Ρ€Π°Π½Π΄ΠΎΠΌΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ располоТСниС стСка, сСгмСнта для memory mapping, ΠΈ ΠΊΡƒΡ‡ΠΈ – ΠΈΡ… стартовый адрСс вычисляСтся ΠΏΡƒΡ‚Π΅ΠΌ добавлСния смСщСния. К соТалСнию, 32-Π±ΠΈΡ‚Π½ΠΎΠ΅ пространство Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ-Ρ‚ΠΎ большоС, ΠΈ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ Ρ€Π°Π½Π΄ΠΎΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Π² извСстной стСпСни нивСлируСтся.

Π’ Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ части user mode space располоТСн стСковый сСгмСнт. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ языков программирования ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π΅Π³ΠΎ для хранСния Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. Π’Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½ΠΈΡŽ Π² стСк Ρ‚.Π½. стСкового Ρ„Ρ€Π΅ΠΉΠΌΠ°. Когда функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅, стСковый Ρ„Ρ€Π΅ΠΉΠΌ уничтоТаСтся. Π‘Ρ‚Π΅ΠΊ устроСн достаточно просто β€” Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π² соотвСтствии с ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠΌ «послСдним ΠΏΡ€ΠΈΡˆΡ‘Π» β€” ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ обслуТСн» (LIFO). По этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅, для отслСТивания содСрТания стСка Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ слоТных ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… структур – достаточно всСго лишь указатСля Π½Π° Π²Π΅Ρ€Ρ…ΡƒΡˆΠΊΡƒ стСка. Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… Π² стСк ΠΈ ΠΈΡ… ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ – быстрая ΠΈ Ρ‡Π΅Ρ‚ΠΊΠΎ опрСдСлСнная опСрация. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎΠ΅ использованиС ΠΎΠ΄Π½ΠΈΡ… ΠΈ Ρ‚Π΅Ρ… ΠΆΠ΅ областСй стСкового сСгмСнта ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, находятся Π² кСшС процСссора, Ρ‡Ρ‚ΠΎ Π΅Ρ‰Π΅ Π±ΠΎΠ»Π΅Π΅ ускоряСт доступ. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ‚Ρ€Π΅Π΄ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… процСсса Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с собствСнным стСком.

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Π° ситуация, ΠΊΠΎΠ³Π΄Π° пространство, ΠΎΡ‚Π²Π΅Π΄Π΅Π½Π½ΠΎΠ΅ ΠΏΠΎΠ΄ стСковый сСгмСнт, Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π² сСбя добавляСмыС Π΄Π°Π½Π½Ρ‹Π΅. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅, Π±ΡƒΠ΄Π΅Ρ‚ сгСнСрирован page fault, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² Linux обрабатываСтся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ expand_stack(). Она, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ β€” acct_stack_growth(), которая ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ возмоТности ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ стСковый сСгмСнт. Если Ρ€Π°Π·ΠΌΠ΅Ρ€ стСкового сСгмСнта мСньшС значСния константы RLIMIT_STACK (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ 8 ΠœΠ‘), Ρ‚ΠΎ ΠΎΠ½ наращиваСтся, ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΊΠ°ΠΊ Π½ΠΈ Π² Ρ‡Π΅ΠΌ Π½Π΅ Π±Ρ‹Π²Π°Π»ΠΎ. Π­Ρ‚ΠΎ стандартный ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ, посрСдством ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ стСкового сСгмСнта увСличиваСтся Π² соотвСтствии с потрСбностями. Однако, Ссли достигнут максимально Ρ€Π°Π·Ρ€Π΅Ρ‰Ρ‘Π½Π½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ стСкового сСгмСнта, Ρ‚ΠΎ происходит ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка (stack overflow), ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ посылаСтся сигнал Segmentation Fault. Π‘Ρ‚Π΅ΠΊΠΎΠ²Ρ‹ΠΉ сСгмСнт ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ нСобходимости, Π½ΠΎ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ΡΡ, Π΄Π°ΠΆΠ΅ Ссли сама стСковая структура, содСрТащаяся Π² Π½Π΅ΠΌ, ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒΡΡ мСньшС. Подобно Ρ„Π΅Π΄Π΅Ρ€Π°Π»ΡŒΠ½ΠΎΠΌΡƒ Π±ΡŽΠ΄ΠΆΠ΅Ρ‚Ρƒ, стСковый сСгмСнт ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ расти.

ДинамичСскоС Π½Π°Ρ€Π°Ρ‰ΠΈΠ²Π°Π½ΠΈΠ΅ стСка – СдинствСнная ситуация, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ «нСмэппированной» области памяти, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ расцСнСно ΠΊΠ°ΠΊ валидная опСрация. Π›ΡŽΠ±ΠΎΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ page fault, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ слСдуСт Segmentation Fault. НСкоторыС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ области ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ ΠΊΠ°ΠΊ read-only, ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ Π½ΠΈΠΌ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Segmentation Fault.

Под стСком располагаСтся сСгмСнт для memory mapping. Π―Π΄Ρ€ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ этот сСгмСнт для мэппирования (отобраТания Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ) содСрТимого Ρ„Π°ΠΉΠ»ΠΎΠ². Π›ΡŽΠ±ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π΄Π°Π½Π½Ρ‹ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΠΎΠΌ посрСдством систСмного Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌΠ° mmap() (ссылка Π½Π° описаниС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π²Ρ‹Π·ΠΎΠ²Π° mmap) ΠΈΠ»ΠΈ CreateFileMapping() / MapViewOfFile() Π² Windows. ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ² Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ – ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΈ Π²Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π° / Π²Ρ‹Π²ΠΎΠ΄Π°, ΠΈ ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ динамичСских Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ. БущСствуСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚ΡŒ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠ΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ (anonymous memory mapping), Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ‡Π΅Π³ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½Π΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Ρ„Π°ΠΉΠ», ΠΈ которая вмСсто этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для размСщСния Ρ€Π°Π·Π½ΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π° Π΄Π°Π½Π½Ρ‹Ρ…, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°. Если Π² Linux Π·Π°ΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ большого Π±Π»ΠΎΠΊΠ° памяти с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ malloc(), Ρ‚ΠΎ вмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ Π² ΠΊΡƒΡ‡Π΅, стандартная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° C задСйствуСт ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠ³ΠΎ отобраТСния. Π‘Π»ΠΎΠ²ΠΎ «большой», Π² Π΄Π°Π½Π½ΠΎΠΌ случаС, ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρƒ Π² Π±Π°ΠΉΡ‚Π°Ρ… Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ, Ρ‡Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ константы MMAP_THRESHOLD. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, это Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Π° Ρ€Π°Π²Π½Π° 128 ΠΊΠ‘, ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‡Π΅Ρ€Π΅Π· Π²Ρ‹Π·ΠΎΠ² mallopt().

ΠšΡΡ‚Π°Ρ‚ΠΈ ΠΎ ΠΊΡƒΡ‡Π΅. Она ΠΈΠ΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π² нашСм описании адрСсного пространства процСсса. Подобно стСку, ΠΊΡƒΡ‡Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для выдСлСния памяти Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ стСка, ΠΏΠ°ΠΌΡΡ‚ΡŒ, выдСлСнная Π² ΠΊΡƒΡ‡Π΅, сохранится послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ функция, Π²Ρ‹Π·Π²Π°Π²ΡˆΠ°Ρ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ этой памяти, Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ языков ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ срСдства управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Π² ΠΊΡƒΡ‡Π΅. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ядро ΠΈ срСда выполнСния языка совмСстно ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‚ динамичСскоС Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ памяти. Π’ языкС C, интСрфСйсом для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΊΡƒΡ‡Π΅ΠΉ являСтся сСмСйство Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ malloc(), Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Π² языках с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ garbage collection, Π²Ρ€ΠΎΠ΄Π΅ C#, основной интСрфСйс – это ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ new.

Если Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΡƒΡ‡ΠΈ позволяСт Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Π·Π°ΠΏΡ€ΠΎΡˆΠ΅Π½Π½Ρ‹ΠΉ объСм памяти, Ρ‚ΠΎ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ осущСствлСно срСдствами ΠΎΠ΄Π½ΠΎΠΉ лишь срСды выполнСния, Π±Π΅Π· привлСчСния ядра. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС, функция malloc() задСйствуСт систСмный Π²Ρ‹Π·ΠΎΠ² brk() для Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ увСличСния ΠΊΡƒΡ‡ΠΈ (ссылка Π½Π° описаниС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π²Ρ‹Π·ΠΎΠ²Π° brk). Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Π² ΠΊΡƒΡ‡Π΅ – Π½Π΅Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Π°Ρ Π·Π°Π΄Π°Ρ‡Π°, для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ слоТныС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹. Π”Π°Π½Π½Ρ‹Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ стрСмятся Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ высокой скорости ΠΈ эффСктивности Π² условиях нСпрСдсказуСмых ΠΈ Ρ…Π°ΠΎΡ‚ΠΈΡ‡Π½Ρ‹Ρ… пэттСрнов выдСлСния памяти Π² Π½Π°ΡˆΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ…. ВрСмя, Π·Π°Ρ‚Ρ€Π°Ρ‡ΠΈΠ²Π°Π΅ΠΌΠΎΠ΅ Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ запрос ΠΏΠΎ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΡŽ памяти Π² ΠΊΡƒΡ‡Π΅, ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π·ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ. Для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, систСмы Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ спСциализированныС Π°Π»Π»ΠΎΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ памяти. ΠšΡƒΡ‡Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π²Π΅Ρ€ΠΆΠ΅Π½Π° Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ, Ρ‡Ρ‚ΠΎ, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΎ Π½Π° рисункС:

ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ мСньший объСм Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ памяти. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ мСньший объСм Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ памяти. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ мСньший объСм Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ памяти. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ мСньший объСм Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ памяти. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ мСньший объСм Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ памяти

НаконСц, ΠΌΡ‹ Π΄ΠΎΠ±Ρ€Π°Π»ΠΈΡΡŒ Π΄ΠΎ сСгмСнтов, располоТСнных Π² Π½ΠΈΠΆΠ½Π΅ΠΉ части адрСсного пространства процСсса: BSS, сСгмСнт Π΄Π°Π½Π½Ρ‹Ρ… (data segment) ΠΈ сСгмСнт ΠΊΠΎΠ΄Π° (text segment). BSS ΠΈ data сСгмСнт хранят Π΄Π°Π½Π½Ρ‹Π΅, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ static ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ Π² исходном ΠΊΠΎΠ΄Π΅ Π½Π° C. Π Π°Π·Π½ΠΈΡ†Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² BSS хранятся Π΄Π°Π½Π½Ρ‹Π΅, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ, Ρ‡ΡŒΠΈ значСния явно Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½Ρ‹ Π² исходном ΠΊΠΎΠ΄Π΅ (Π² Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Ρ‚Π°ΠΌ хранятся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΏΡ€ΠΈ создании ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π² Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π»ΠΈΠ±ΠΎ явно ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π»ΠΈΠ±ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½ΠΎ, ΠΈ Π² Π»ΠΈΠ½ΠΊΡƒΠ΅ΠΌΡ‹Ρ… Ρ„Π°ΠΉΠ»Π°Ρ… Π½Π΅Ρ‚ Ρ‚Π°ΠΊΠΈΡ… ΠΆΠ΅ common символов, с Π½Π΅Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ. – ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄.). Для сСгмСнта BSS ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠ΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ, Ρ‚.Π΅. Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Ρ„Π°ΠΉΠ» Π² этот сСгмСнт Π½Π΅ мэппируСтся. Если Π² исходном Ρ„Π°ΠΉΠ»Π΅ Π½Π° C ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ int cntActiveUsers, Ρ‚ΠΎ мСсто ΠΏΠΎΠ΄ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΎ Π² BSS.

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΈ ΠΎΡ‚ BSS, data cΠ΅Π³ΠΌΠ΅Π½Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π² исходном ΠΊΠΎΠ΄Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΠΈ static ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π½Π΅Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ. Π­Ρ‚ΠΎΡ‚ сСгмСнт памяти Π½Π΅ являСтся Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹ΠΌ β€” Π² Π½Π΅Π³ΠΎ мэппируСтся Ρ‡Π°ΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ссли ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ static int cntWorkerBees = 10, Ρ‚ΠΎ мСсто ΠΏΠΎΠ΄ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΎ Π² data сСгмСнтС, ΠΈ ΠΎΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 10. Π₯отя Π² data сСгмСнт отобраТаСтся Ρ„Π°ΠΉΠ», это Ρ‚.Π½. Β«ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹ΠΉ мэппинг» (private memory mapping). Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ измСнСния Π΄Π°Π½Π½Ρ‹Ρ… Π² этом сСгмСнтС Π½Π΅ ΠΏΠΎΠ²Π»ΠΈΡΡŽΡ‚ Π½Π° содСрТаниС ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ„Π°ΠΉΠ»Π°. Π’Π°ΠΊ ΠΈ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ, ΠΈΠ½Π°Ρ‡Π΅ присвоСния Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ ΠΏΡ€ΠΈΠ²Π΅Π»ΠΈ Π±Ρ‹ ΠΊ измСнСнию содСрТания Ρ„Π°ΠΉΠ»Π°, хранящСгося Π½Π° дискС. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС это совсСм Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ!

ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ мСньший объСм Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ памяти. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ мСньший объСм Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ памяти. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ мСньший объСм Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ памяти. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ мСньший объСм Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ памяти. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ мСньший объСм Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ памяти

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ области памяти процСсса, ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π² содСрТимоС Ρ„Π°ΠΉΠ»Π° /proc/pid_of_process/maps. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ содСрТимоС самого сСгмСнта ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ ΠΈΠ· Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… областСй. НапримСр, ΠΊΠ°ΠΆΠ΄ΠΎΠΉ мэппируСмой Π² memory mapping сСгмСнт динамичСской Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ отводится своя ΠΎΠ±Π»Π°ΡΡ‚ΡŒ, ΠΈ Π² Π½Π΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ области для BSS ΠΈ data сСгмСнтов Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ постС поясним, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ подразумСваСтся ΠΏΠΎΠ΄ словом β€œΠΎΠ±Π»Π°ΡΡ‚ΡŒβ€. Π£Ρ‡Ρ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° люди говорят β€œdata сСгмСнт”, подразумСвая ΠΏΠΎΠ΄ этим data + BSS + heap.

МоТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ nm ΠΈ objdump для просмотра содСрТимого Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Ρ… исполняСмых ΠΎΠ±Ρ€Π°Π·ΠΎΠ²: символов, ΠΈΡ… адрСсов, сСгмСнтов ΠΈ Ρ‚.Π΄. НаконСц, Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ описано Π² этом постС – это Ρ‚Π°ΠΊ называСмая β€œΠ³ΠΈΠ±ΠΊΠ°Ρβ€ организация памяти процСсса (flexible memory layout), которая Π²ΠΎΡ‚ ΡƒΠΆΠ΅ нСсколько Π»Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Linux ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Данная схСма ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρƒ нас ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ константы RLIMIT_STACK. Когда это Π½Π΅ Ρ‚Π°ΠΊ, Linux ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ‚.Π½. ΠΊΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ, которая ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½Π° Π½Π° рисункС:

ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ мСньший объСм Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ памяти. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ мСньший объСм Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ памяти. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ мСньший объСм Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ памяти. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ мСньший объСм Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ памяти. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ мСньший объСм Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ памяти

Ну Π²ΠΎΡ‚ ΠΈ всС. На этом наш Ρ€Π°Π·Π³ΠΎΠ²ΠΎΡ€ ΠΎΠ± ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ памяти процСсса Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ постС рассмотрим ΠΊΠ°ΠΊ ядро отслСТиваСт Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ описанных областСй памяти. Π’Π°ΠΊΠΆΠ΅ коснСмся вопроса мэппирования, ΠΊΠ°ΠΊΠΎΠ΅ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ ΠΊ этому ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈ запись Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΈ Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ Ρ†ΠΈΡ„Ρ€Ρ‹, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ использованиС памяти.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Если Π΄Π°Π½Π½Ρ‹Π΅ Π½Π΅ ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ. ΠŸΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹

ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ мСньший объСм Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ памяти. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ мСньший объСм Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ памяти. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ мСньший объСм Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ памяти. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ мСньший объСм Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ памяти. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ мСньший объСм Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ памяти

Π‘Π°ΠΌΠΊΠ° Ρ‚Ρ€ΡƒΠ±ΠΊΠΎΠ·ΡƒΠ±Π° с Π΄Π΅Ρ‚Ρ‘Π½Ρ‹ΡˆΠ΅ΠΌ. Π€ΠΎΡ‚ΠΎ: Scotto Bear, CC BY-SA 2.0

Π’Ρ‹ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎΠ½Π° ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ тСст Π½Π° нСбольшом Ρ„Π°ΠΉΠ»Π΅, Π½ΠΎ ΠΏΠ°Π΄Π°Π΅Ρ‚ Π½Π° Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² Π½Π΅Ρ…Π²Π°Ρ‚ΠΊΠ΅ памяти. Если Ρƒ вас 16 Π³ΠΈΠ³Π°Π±Π°ΠΉΡ‚ ΠžΠ—Π£, Π²Ρ‹ Π½Π΅ смоТСтС Ρ‚ΡƒΠ΄Π° Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ стогигабайтный Ρ„Π°ΠΉΠ». Π’ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Ρƒ ОБ закончится ΠΏΠ°ΠΌΡΡ‚ΡŒ, ΠΎΠ½Π° Π½Π΅ смоТСт Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ, ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²Ρ‹Π»Π΅Ρ‚ΠΈΡ‚.

Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ?

Ну, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ кластСр Big Data, всСго-Ρ‚ΠΎ:

Нам трСбуСтся простоС ΠΈ Π»Ρ‘Π³ΠΊΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅: ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅, с минимальной настройкой ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ использованиСм ΡƒΠΆΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ. ΠŸΠΎΡ‡Ρ‚ΠΈ всСгда это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ½ΠΎΠ³Π΄Π° Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ «вычислСниями Π²Π½Π΅ памяти» (out-of-core computation).

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ обсудим:

Π—Π°Ρ‡Π΅ΠΌ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½ΡƒΠΆΠ½Π° опСративная ΠΏΠ°ΠΌΡΡ‚ΡŒ?

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ ΠΎΠ±ΡΡƒΠΆΠ΄Π΅Π½ΠΈΡŽ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ проясним, ΠΏΠΎΡ‡Π΅ΠΌΡƒ эта ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π²ΠΎΠΎΠ±Ρ‰Π΅ сущСствуСт. Π’ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ (RAM) ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅, Π½ΠΎ ΠΈ Π½Π° Тёсткий диск Ρ‚ΠΎΠΆΠ΅, Ρ‚Π°ΠΊ Π·Π°Ρ‡Π΅ΠΌ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½ΡƒΠΆΠ½Π° RAM? Диск дСшСвлС, Ρƒ Π½Π΅Π³ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с Π½Π΅Ρ…Π²Π°Ρ‚ΠΊΠΎΠΉ мСста, ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΆΠ΅ просто Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒΡΡ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ΠΌ ΠΈ записью с диска?

ВСорСтичСски это ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. Но Π΄Π°ΠΆΠ΅ соврСмСнныС быстрыС SSD Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ, Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, Ρ‡Π΅ΠΌ RAM:

100 наносСкунд

Для быстрых вычислСний Ρƒ нас Π½Π΅ остаётся Π²Ρ‹Π±ΠΎΡ€Π°: Π΄Π°Π½Π½Ρ‹Π΅ приходится Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π² ΠžΠ—Π£, ΠΈΠ½Π°Ρ‡Π΅ ΠΊΠΎΠ΄ замСдлится Π² 150 Ρ€Π°Π·.

Π‘Π°ΠΌΠΎΠ΅ простоС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅: большС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти

Π‘Π°ΠΌΠΎΠ΅ простоС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π½Π΅Ρ…Π²Π°Ρ‚ΠΊΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти β€” ΠΏΠΎΡ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π΄Π΅Π½Π΅Π³. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΊΡƒΠΏΠΈΡ‚ΡŒ ΠΌΠΎΡ‰Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€, сСрвСр ΠΈΠ»ΠΈ Π°Ρ€Π΅Π½Π΄ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΌΠ°ΡˆΠΈΠ½Ρƒ с большим количСством памяти. Π’ ноябрС 2019 Π³ΠΎΠ΄Π° быстрый поиск ΠΈ ΠΎΡ‡Π΅Π½ΡŒ ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ΅ сравнСниС Ρ†Π΅Π½ Π΄Π°Ρ‘Ρ‚ Ρ‚Π°ΠΊΠΈΠ΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹:

ΠŸΠΎΡ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π΄Π΅Π½Π΅Π³ Π½Π° Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠ΅ обСспСчСниС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΠ»ΠΈΡΡŒ Π² ΠžΠ—Π£, β€” Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ самоС Π΄Π΅ΡˆΡ‘Π²ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅. Π’ ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ½Ρ†ΠΎΠ², нашС врСмя Π΄ΠΎΡ€ΠΎΠ³ΠΎ. Но ΠΈΠ½ΠΎΠ³Π΄Π° этого нСдостаточно.

НапримСр, Ссли Π²Ρ‹ выполняСтС ΠΌΠ½ΠΎΠ³ΠΎ Π·Π°Π΄Π°Π½ΠΈΠΉ ΠΏΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Π° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹Π΅ вычислСния ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ СстСствСнным Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ, Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈ дорогостоящим. На ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· Π½Π°ΡˆΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Ρ‚Π°ΠΊΠΈΠ΅ Π·Π°Ρ‚Ρ€Π°Ρ‚Ρ‹ Π½Π° вычислСния израсходовали Π±Ρ‹ вСсь ΠΏΡ€ΠΎΠ³Π½ΠΎΠ·ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ Π΄ΠΎΡ…ΠΎΠ΄ ΠΎΡ‚ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ самый Π²Π°ΠΆΠ½Ρ‹ΠΉ Π΄ΠΎΡ…ΠΎΠ΄, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ для Π²Ρ‹ΠΏΠ»Π°Ρ‚Ρ‹ ΠΌΠΎΠ΅ΠΉ Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Ρ‹.

Если ΠΏΠΎΠΊΡƒΠΏΠΊΠ°/Π°Ρ€Π΅Π½Π΄Π° большого ΠΎΠ±ΡŠΡ‘ΠΌΠ° RAM Π½Π΅ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΠΈΠ»ΠΈ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π°, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ шаг β€” ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ само ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΎ расходовало мСньшС памяти.

Π’Π΅Ρ…Π½ΠΈΠΊΠ° β„– 1. Π‘ΠΆΠ°Ρ‚ΠΈΠ΅

Π‘ΠΆΠ°Ρ‚ΠΈΠ΅ позволяСт ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Ρ‚Π΅ ΠΆΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ Π² мСньший ΠΎΠ±ΡŠΡ‘ΠΌ памяти. Π•ΡΡ‚ΡŒ Π΄Π²Π΅ Ρ„ΠΎΡ€ΠΌΡ‹ сТатия:

Π§Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ, Ρ‚Π°ΠΊ это сТатиС прСдставлСния Π΄Π°Π½Π½Ρ‹Ρ… Π² памяти.

Π’Π΅Ρ…Π½ΠΈΠΊΠ° β„– 2. Π Π°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ Π½Π° Π±Π»ΠΎΠΊΠΈ, Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ Π±Π»ΠΎΠΊΡƒ Π·Π° Ρ€Π°Π·

ЀрагмСнтация ΠΏΠΎΠ»Π΅Π·Π½Π° Π² ситуации, ΠΊΠΎΠ³Π΄Π° Π΄Π°Π½Π½Ρ‹Π΅ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ. ВмСсто этого ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ ΠΈΡ… частями, обрабатывая ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρƒ Π·Π° Ρ€Π°Π· (ΠΈΠ»ΠΈ, ΠΊΠ°ΠΊ обсудим Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅, нСсколько частСй ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ).

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ самоС большоС слово Π² ΠΊΠ½ΠΈΠ³Π΅. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ сразу всС Π΄Π°Π½Π½Ρ‹Π΅:

Но Ссли ΠΊΠ½ΠΈΠ³Π° Π½Π΅ помСщаСтся Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π΅Ρ‘ постранично:

Π­Ρ‚ΠΎ сильно ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ памяти, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π² ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Π° страница ΠΊΠ½ΠΈΠ³ΠΈ. ΠŸΡ€ΠΈ этом Π² ΠΈΡ‚ΠΎΠ³Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΎΡ‚Π²Π΅Ρ‚.

Π’Π΅Ρ…Π½ΠΈΠΊΠ° β„– 3. Π˜Π½Π΄Π΅ΠΊΡΠ°Ρ†ΠΈΡ, ΠΊΠΎΠ³Π΄Π° трСбуСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ подмноТСство Π΄Π°Π½Π½Ρ‹Ρ…

Π˜Π½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, Ссли Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ подмноТСство Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π²Ρ‹ ΡΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ подмноТСства Π² Ρ€Π°Π·Π½ΠΎΠ΅ врСмя.

Π’ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅, Π² Ρ‚Π°ΠΊΠΎΠΉ ситуации ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ Π½ΡƒΠΆΠ½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ ΠΈ ΠΎΡ‚Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ Π½Π΅Π½ΡƒΠΆΠ½ΠΎΠ΅. Но Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΠΈ Π½Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ придётся сначала Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Π»ΠΈΡˆΠ½ΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΈΡ… ΠΎΡ‚Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ.

Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π°ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ…, вмСсто Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ индСкс β€” Π²Ρ‹ΠΆΠΈΠΌΠΊΡƒ Π΄Π°Π½Π½Ρ‹Ρ…, которая ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΠΈΡ… Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ΅ мСстополоТСниС.

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠ½ΠΈΠ³ΠΈ, Π³Π΄Π΅ упоминаСтся Ρ‚Ρ€ΡƒΠ±ΠΊΠΎΠ·ΡƒΠ± (симпатичноС ΠΌΠ»Π΅ΠΊΠΎΠΏΠΈΡ‚Π°ΡŽΡ‰Π΅Π΅ Π½Π° Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΈ Π² Π½Π°Ρ‡Π°Π»Π΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ). Если ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ всС страницы ΠΏΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ, Ρ‚ΠΎ Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π° ΠΏΠΎ частям вся ΠΊΠ½ΠΈΠ³Π°, страница Π·Π° страницСй, Π² поисках Ρ‚Ρ€ΡƒΠ±ΠΊΠΎΠ·ΡƒΠ±ΠΎΠ² β€” ΠΈ это Π·Π°ΠΉΠΌΡ‘Ρ‚ довольно ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

Или ΠΌΠΎΠΆΠ΅Ρ‚Π΅ сразу ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π°Π»Ρ„Π°Π²ΠΈΡ‚Π½Ρ‹ΠΉ индСкс Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠ½ΠΈΠ³ΠΈ β€” ΠΈ Π½Π°ΠΉΡ‚ΠΈ слово Β«Ρ‚Ρ€ΡƒΠ±ΠΊΠΎΠ·ΡƒΠ±Β». Π’Π°ΠΌ ΡƒΠΊΠ°Π·Π°Π½ΠΎ, Ρ‡Ρ‚ΠΎ упоминания слова Π΅ΡΡ‚ΡŒ Π½Π° страницах 7, 19 ΠΈ 120-123. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ эти страницы, ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΡ…, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ быстрСС.

Π­Ρ‚ΠΎ эффСктивный ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ индСкс Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ мСньшС, Ρ‡Π΅ΠΌ вся ΠΊΠ½ΠΈΠ³Π°, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ индСкс для поиска ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ….

Π‘Π°ΠΌΡ‹ΠΉ простой ΠΌΠ΅Ρ‚ΠΎΠ΄ индСксирования

Π‘Π°ΠΌΡ‹ΠΉ простой ΠΈ распространённый способ индСксирования β€” ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ² Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅:

Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹ Π΄Π°Π½Π½Ρ‹Π΅ Π·Π° ΠΌΠ°Ρ€Ρ‚ 2019 Π³ΠΎΠ΄Π°, Π²Ρ‹ просто Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚Π΅ Ρ„Π°ΠΉΠ» 2019-Mar.csv β€” Π½Π΅Ρ‚ нСобходимости Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π·Π° Ρ„Π΅Π²Ρ€Π°Π»ΡŒ, июль ΠΈΠ»ΠΈ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ мСсяц.

Π”Π°Π»ΡŒΡˆΠ΅: ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ этих ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ Π½Π΅Ρ…Π²Π°Ρ‚ΠΊΠΈ RAM ΠΏΡ€ΠΎΡ‰Π΅ всСго Ρ€Π΅ΡˆΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄Π΅Π½Π΅Π³, Π΄ΠΎΠΊΡƒΠΏΠΈΠ² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти. Но Ссли это Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ»ΠΈ нСдостаточно, Π²Ρ‹ Ρ‚Π°ΠΊ ΠΈΠ»ΠΈ ΠΈΠ½Π°Ρ‡Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚Π΅ сТатиС, Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ ΠΈΠ»ΠΈ индСксированиС.

Π’Π΅ ΠΆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… ΠΏΠ°ΠΊΠ΅Ρ‚Π°Ρ… ΠΈ инструмСнтах. На Π½ΠΈΡ… построСны Π΄Π°ΠΆΠ΅ Π²Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ систСмы Big Data: Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Π°Ρ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ….

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΡΡ‚Π°Ρ‚ΡŒΡΡ… рассмотрим, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ эти ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π² ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ… ΠΈ инструмСнтах, Π² Ρ‚ΠΎΠΌ числС NumPy ΠΈ Pandas.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ΠžΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡ памяти

Π—Π° послСднюю нСдСлю Π΄Π²Π°ΠΆΠ΄Ρ‹ объяснял людям ΠΊΠ°ΠΊ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Π² Ρ…86, с Ρ†Π΅Π»ΡŒΡŽ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΎΠ±ΡŠΡΡΠ½ΡΡ‚ΡŒ Π² Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ Ρ€Π°Π· написал эту ΡΡ‚Π°Ρ‚ΡŒΡŽ.

И Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡŽ памяти ΠΎΡ‚ вас потрСбуСтся знания Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π±Π°Π·ΠΎΠ²Ρ‹Ρ… понятий, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ рСгистры, стСк ΠΈ Ρ‚Π΄. Π― ΠΏΠΎ Ρ…ΠΎΠ΄Ρƒ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΡŽ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ ΠΈ это Π½Π° ΠΏΠ°Π»ΡŒΡ†Π°Ρ…, Π½ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΠΊΡ€Π°Ρ‚ΠΊΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ это Π½Π΅ Ρ‚Π΅ΠΌΠ° для этой ΡΡ‚Π°Ρ‚ΡŒΠΈ. Π˜Ρ‚Π°ΠΊ Π½Π°Ρ‡Π½Π΅ΠΌ.

Как извСстно программист, ΠΊΠΎΠ³Π΄Π° ΠΏΠΈΡˆΠ΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π΅ с физичСским адрСсом, Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с логичСским. И Ρ‚ΠΎ Ссли ΠΎΠ½ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΠ΅Ρ‚ Π½Π° ассСмблСрС. Π’ Ρ‚ΠΎΠΌ ΠΆΠ΅ Π‘ΠΈ ячСйки памяти ΠΎΡ‚ программиста ΡƒΠΆΠ΅ скрыты указатСлями, для Π΅Π³ΠΎ ΠΆΠ΅ удобства, Π½ΠΎ Ссли Π³Ρ€ΡƒΠ±ΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ это Π΄Ρ€ΡƒΠ³ΠΎΠ΅ прСдставлСниС логичСского адрСса памяти, Π° Π² Java ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π΅Ρ‚, совсСм ΠΏΠ»ΠΎΡ…ΠΎΠΉ язык. Однако Π³Ρ€Π°ΠΌΠΎΡ‚Π½ΠΎΠΌΡƒ программисту Π½Π΅ ΠΏΠΎΠΌΠ΅ΡˆΠ°ΡŽΡ‚ знания ΠΎ Ρ‚ΠΎΠΌ ΠΊΠ°ΠΊ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΏΠ°ΠΌΡΡ‚ΡŒ хотя Π±Ρ‹ Π½Π° ΠΎΠ±Ρ‰Π΅ΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅. МСня Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΠΎΠ³ΠΎΡ€Ρ‡Π°ΡŽΡ‚ программисты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Π·Π½Π°ΡŽΡ‚ ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ машина, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ это программисты Java ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΠ΅ php-ΠΏΠ°Ρ€Π½ΠΈ, с ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠ΅ΠΉ Π½ΠΈΠΆΠ΅ плинтуса.

Π’Π°ΠΊ Π»Π°Π΄Π½ΠΎ, Ρ…Π²Π°Ρ‚ΠΈΡ‚ ΠΎ ΠΏΠ΅Ρ‡Π°Π»ΡŒΠ½ΠΎΠΌ, ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ Π΄Π΅Π»Ρƒ.
Рассмотрим адрСсноС пространство ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π΅ΠΆΠΈΠΌΠ° 32 Π±ΠΈΡ‚Π½ΠΎΠ³ΠΎ процСссора (для 64 Π±ΠΈΡ‚ всС ΠΏΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ)
АдрСсноС пространство этого Ρ€Π΅ΠΆΠΈΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ ΠΈΠ· 2^32 ячССк памяти ΠΏΡ€ΠΎΠ½ΡƒΠΌΠ΅Ρ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΎΡ‚ 0 ΠΈ Π΄ΠΎ 2^32-1.
ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с этой ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, Ссли Π΅ΠΌΡƒ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, ΠΎΠ½ просто Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ячСйка памяти с адрСсом Ρ‚Π°ΠΊΠΈΠΌ-Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ-Ρ‚ΠΎ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΡ€ΠΈ этом сам програмист ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈ Π½Π΅ Π·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ Π½ΠΎΠΌΠ΅Ρ€ Ρƒ этой ячСйки ΠΎΠ½ просто Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅:
int data = 10;
ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ ΠΏΠΎΠΉΠΌΠ΅Ρ‚ это Ρ‚Π°ΠΊ: Π½ΡƒΠΆΠ½ΠΎ Π²Π·ΡΡ‚ΡŒ ΠΊΠ°ΠΊΡƒΡŽ-Ρ‚ΠΎ ячСйку с Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ стопицот ΠΈ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π² Π½Π΅Π΅ Ρ†Π΅Π»ΠΎ число 10. ΠŸΡ€ΠΈ Ρ‚ΠΎΠΌ ΠΏΡ€ΠΎ адрСс ячСйки 18894 Π²Ρ‹ ΠΈ Π½Π΅ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, ΠΎΠ½ ΠΎΡ‚ вас Π±ΡƒΠ΄Π΅Ρ‚ скрыт.

ВсС Π±Ρ‹ Ρ…ΠΎΡ€ΠΎΡˆΠΎ, Π½ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ вопрос, Π° ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ ΠΈΡ‰Π΅Ρ‚ эту ячСйку памяти, вСдь ΠΏΠ°ΠΌΡΡ‚ΡŒ Ρƒ нас ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ разная:
3 ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ кэша
2 ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ кэша
1 ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ кэша
основная ΠΏΠ°ΠΌΡΡ‚ΡŒ
ТСсткий диск

Π­Ρ‚ΠΎ всС Ρ€Π°Π·Π½Ρ‹Π΅ памяти, Π½ΠΎ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ Π»Π΅Π³ΠΊΠΎ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ Π² ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ· Π½ΠΈΡ… Π»Π΅ΠΆΠΈΡ‚ наша пСрСмСнная int data.
Π­Ρ‚ΠΎΡ‚ вопрос Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой совмСстно с процСссором.
Вся дальнСйшая ΡΡ‚Π°Ρ‚ΡŒΡ Π±ΡƒΠ΄Π΅Ρ‚ посвящСна Ρ€Π°Π·Π±ΠΎΡ€Ρƒ этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π°.

АрхитСктура Ρ…86 ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ стСк.
ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ мСньший объСм Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ памяти. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ мСньший объСм Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ памяти. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ мСньший объСм Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ памяти. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ мСньший объСм Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ памяти. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ мСньший объСм Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ памяти
Π‘Ρ‚Π΅ΠΊ это нСпрСрывная ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти организованная ΠΏΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ стопки Ρ‚Π°Ρ€Π΅Π»ΠΎΠΊ, Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π±Ρ€Π°Ρ‚ΡŒ Ρ‚Π°Ρ€Π΅Π»ΠΊΠΈ ΠΈΠ· сСрСдины стопки, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π±Ρ€Π°Ρ‚ΡŒ Π²Π΅Ρ€Ρ…Π½ΡŽΡŽ ΠΈ ΠΊΠ»Π°ΡΡ‚ΡŒ Ρ‚Π°Ρ€Π΅Π»ΠΊΡƒ Π²Ρ‹ Ρ‚ΠΎΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° Π²Π΅Ρ€Ρ… стопки.
Π’ процСссорС для Ρ€Π°Π±ΠΎΡ‚Ρ‹ со стСком ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Π΅ ΠΊΠΎΠ΄Ρ‹, ассСмблСрныС ΠΌΠ½Π΅ΠΌΠΎΠ½ΠΈΠΊΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… выглядят Ρ‚Π°ΠΊ:

push operand
ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ Π² стСк

pop operand
ΠΈΠ·Ρ‹ΠΌΠ°Π΅Ρ‚ ΠΈΠ· Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ стСка Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π΅Π³ΠΎ Π² свой ΠΎΠΏΠ΅Ρ€Π°Π½Π΄

Π‘Ρ‚Π΅ΠΊ Π² памяти растСт свСрху Π²Π½ΠΈΠ·, это Π·Π½Π°Ρ‡ΠΈΡ‚ Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ значСния Π² Π½Π΅Π³ΠΎ адрСс Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ стСка ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ΡΡ, Π° ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚Π΅ ΠΈΠ· Π½Π΅Π³ΠΎ, Ρ‚ΠΎ адрСс Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ стСка увСличиваСтся.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΊΡ€Π°Ρ‚ΠΊΠΎ рассмотрим Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ рСгистры.
Π­Ρ‚ΠΎ ячСйки памяти Π² самом процСссорС. Π­Ρ‚ΠΎ самый быстрый ΠΈ самый Π΄ΠΎΡ€ΠΎΠ³ΠΎΠΉ Ρ‚ΠΈΠΏ памяти, ΠΊΠΎΠ³Π΄Π° процСссор ΡΠΎΠ²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΈΠ»ΠΈ с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, ΠΎΠ½ Π±Π΅Ρ€Π΅Ρ‚ эти значСния нСпосрСдствСнно ΠΈΠ· рСгистров.
Π’ процСссорС Π΅ΡΡ‚ΡŒ нСсколько Π½Π°Π±ΠΎΡ€ΠΎΠ² Π»ΠΎΠ³ΠΈΠΊ, каТдая ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΠΌΠ΅Π΅Ρ‚ свои ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Π΅ ΠΊΠΎΠ΄Ρ‹ ΠΈ свои Π½Π°Π±ΠΎΡ€Ρ‹ рСгистров.
Basic program registers (ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ рСгистры) Π­Ρ‚ΠΈ рСгистры ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ всСми ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ с ΠΈΡ… ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ выполняСтся ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° цСлочислСнных Π΄Π°Π½Π½Ρ‹Ρ….
Floating Point Unit registers (FPU) Π­Ρ‚ΠΈ рСгистры Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ прСдставлСнными Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ.
Π•Ρ‰Π΅ Π΅ΡΡ‚ΡŒ MMX ΠΈ XMM registers эти рСгистры ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½Π°Π΄ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ Π½Π°Π΄ большим количСством ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ².

Рассмотрим ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ основныС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ рСгистры. К Π½ΠΈΠΌ относятся восСмь 32 Π±ΠΈΡ‚Π½Ρ‹Ρ… рСгистров ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния: EAX, EBX, ECX, EDX, EBP, ESI, EDI, ESP
Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π² рСгистр Π΄Π°Π½Π½Ρ‹Π΅, ΠΈΠ»ΠΈ для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΡŠΡΡ‚ΡŒ ΠΈΠ· рСгистра Π² ячСйку памяти Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π° mov:

mov eax, 10
Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ число 10 Π² рСгистр eax.

mov data, ebx
ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ число, содСрТащССся Π² рСгистрС ebx Π² ячСйку памяти data.

РСгистр ESP содСрТит адрСс Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ стСка.
ΠšΡ€ΠΎΠΌΠ΅ рСгистров ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния, ΠΊ основным ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΌ рСгистрам относят ΡˆΠ΅ΡΡ‚ΡŒ 16Π±ΠΈΡ‚Π½Ρ‹Ρ… сСгмСнтных рСгистров: CS, DS, SS, ES, FS, GS, EFLAGS, EIP
EFLAGS ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π±ΠΈΡ‚Ρ‹, Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ Ρ„Π»Π°Π³ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ‚Ρ€Π°ΠΆΠ°ΡŽΡ‚ состояниС процСссора ΠΈΠ»ΠΈ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ΠΈΠ·ΡƒΡŽΡ‚ Ρ…ΠΎΠ΄ выполнСния ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… ΠΊΠΎΠΌΠ°Π½Π΄.
Π’ рСгистрС EIP содСрТится адрСс ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, которая Π±ΡƒΠ΄Π΅Ρ‚ выполнятся процСссором.
Π― Π½Π΅ Π±ΡƒΠ΄Ρƒ Ρ€Π°ΡΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ рСгистры FPU, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π½Π°ΠΌ Π½Π΅ понадобятся. Π˜Ρ‚Π°ΠΊ нашС нСбольшоС отступлСниС ΠΏΡ€ΠΎ рСгистры ΠΈ стСк Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»ΠΎΡΡŒ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ ΠΊ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ памяти.

Как Π²Ρ‹ ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅ Ρ†Π΅Π»ΡŒΡŽ ΡΡ‚Π°Ρ‚ΡŒΠΈ являСтся рассказ ΠΏΡ€ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ логичСской памяти Π² Ρ„ΠΈΠ·ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ, Π½Π° самом Π΄Π΅Π»Π΅ Π΅ΡΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ этап ΠΈ полная Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ° выглядит Ρ‚Π°ΠΊ:

Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ адрСс=Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ адрСс сСгмСнта(Π½Π° ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ΅ это Π½Π°Ρ‡Π°Π»ΠΎ сСгмСнта) + смСщСниС
Π‘Π΅Π³ΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠ΄Π°
Π‘Π΅Π³ΠΌΠ΅Π½Ρ‚ Π΄Π°Π½Π½Ρ‹Ρ…
Π‘Π΅Π³ΠΌΠ΅Π½Ρ‚ стСка

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ сСгмСнт стСка задаСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ рСгистра SS.
Π‘ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ этого сСгмСнта прСдставлСно рСгистром ESP, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Π²Π΅Ρ€ΡˆΠΈΠ½Ρƒ стСка, ΠΊΠ°ΠΊ Π²Ρ‹ ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅.
Π‘Π΅Π³ΠΌΠ΅Π½Ρ‚Ρ‹ Π² памяти ΠΌΠΎΠ³ΡƒΡ‚ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π° ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ, ΠΌΠ°Π»ΠΎ Ρ‚ΠΎΠ³ΠΎ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ адрСс всСх сСгмСнтов ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π² Π½ΡƒΠ»Π΅. Π’Π°ΠΊΠΎΠΉ Π²Ρ‹Ρ€ΠΎΠΆΠ΄Π΅Π½Π½Ρ‹ΠΉ случай называСтся Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΌ прСдставлСниСм памяти. Π’ соврСмСнных систСмах, ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Ρ‚Π°ΠΊ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Π°.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ рассмотрим ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π±Π°Π·ΠΎΠ²Ρ‹Ρ… адрСсов сСгмСнта, я писал Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒΡΡ Π² рСгистрах SS, DS, CS, Π½ΠΎ это Π½Π΅ совсСм Ρ‚Π°ΠΊ, Π² Π½ΠΈΡ… содСрТится Π½Π΅ΠΊΠΈΠΉ 16 Π±ΠΈΡ‚Π½Ρ‹ΠΉ сСлСктор, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Π½Π΅ΠΊΠΈΠΉ дСскриптор сСгмСнтов, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΡƒΠΆΠ΅ хранится Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ адрСс.
ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ мСньший объСм Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ памяти. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ мСньший объСм Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ памяти. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ мСньший объСм Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ памяти. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ мСньший объСм Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ памяти. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ мСньший объСм Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ памяти
Π’Π°ΠΊ выглядит сСлСктор, Π² Ρ‚Ρ€ΠΈΠ½Π°Π΄Ρ†Π°Ρ‚ΠΈ Π΅Π³ΠΎ Π±ΠΈΡ‚Π°Ρ… содСрТится индСкс дСскриптора Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ дСскрипторов. НС Ρ…ΠΈΡ‚Ρ€ΠΎ ΠΏΠΎΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‡Ρ‚ΠΎ 2^13 = 8192 это максимальноС количСство дСскрипторов Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅.
Π’ΠΎΠΎΠ±Ρ‰Π΅ дСскрипторных Ρ‚Π°Π±Π»ΠΈΡ† Π±Ρ‹Π²Π°Π΅Ρ‚ Π΄Π²Π° Π²ΠΈΠ΄Π° GDT ΠΈ LDT ΠŸΠ΅Ρ€Π²Π°Ρ называСтся глобальная Ρ‚Π°Π±Π»ΠΈΡ†Π° дСскрипторов, ΠΎΠ½Π° Π² систСмС всСгда Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Π°, Π΅Π΅ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ адрСс, Ρ‚ΠΎΡ‡Π½Π΅Π΅ адрСс Π΅Π΅ Π½ΡƒΠ»Π΅Π²ΠΎΠ³ΠΎ дСскриптора хранится Π² 48 Π±ΠΈΡ‚Π½ΠΎΠΌ систСмном рСгистрС GDTR. И с ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° старта систСмы Π½Π΅ мСняСтся ΠΈ Π² свопС Π½Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ участия.
А Π²ΠΎΡ‚ значСния дСскрипторов ΠΌΠΎΠ³ΡƒΡ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ. Если Π² сСлСкторС Π±ΠΈΡ‚ TI Ρ€Π°Π²Π΅Π½ Π½ΡƒΠ»ΡŽ, Ρ‚ΠΎΠ³Π΄Π° процСссор просто ΠΈΠ΄Π΅Ρ‚ Π² GDT ΠΈΡ‰Π΅Ρ‚ ΠΏΠΎ индСксу Π½ΡƒΠΆΠ½Ρ‹ΠΉ дСскриптор с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ осущСствляСт доступ ΠΊ этому сСгмСнту.
Пока всС просто Π±Ρ‹Π»ΠΎ, Π½ΠΎ Ссли TI Ρ€Π°Π²Π΅Π½ 1 Ρ‚ΠΎΠ³Π΄Π° это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π±ΡƒΠ΄Π΅Ρ‚ LDT. Π’Π°Π±Π»ΠΈΡ† этих ΠΌΠ½ΠΎΠ³ΠΎ, Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π° сСлСктор ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½ Π² систСмный рСгистр LDTR, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΈ ΠΎΡ‚ GDTR ΠΌΠΎΠΆΠ΅Ρ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ.
ИндСкс сСлСктора ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° дСскриптор, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΡƒΠΆΠ΅ Π½Π΅ Π½Π° Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ адрСс сСгмСнта, Π° Π½Π° ΠΏΠ°ΠΌΡΡ‚ΡŒ Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ хранится локальная Ρ‚Π°Π±Π»ΠΈΡ†Π° дСскрипторов, Ρ‚ΠΎΡ‡Π½Π΅Π΅ Π΅Π΅ Π½ΡƒΠ»Π΅Π²ΠΎΠΉ элСмСнт. Ну Π° дальшС всС Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ с GDT. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π²ΠΎ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒΡΡ ΠΈ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°Ρ‚ΡŒΡΡ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ нСобходимости. LDT Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ дСскрипторы Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ LDT.
Π˜Ρ‚Π°ΠΊ ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ ΠΊΠ°ΠΊ процСссор добираСтся Π΄ΠΎ дСскриптора, Π° Ρ‡Ρ‚ΠΎ содСрТится Π² этом дСскрипторС посмотрим Π½Π° ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ΅: ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ мСньший объСм Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ памяти. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ мСньший объСм Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ памяти. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ мСньший объСм Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ памяти. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ мСньший объСм Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ памяти. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ мСньший объСм Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ памяти
ДСскрипторы состоит ΠΈΠ· 8 Π±Π°ΠΉΡ‚.
Π‘ΠΈΡ‚Ρ‹ с 15-39 ΠΈ 56-63 содСрТат Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ адрСс описываСмым Π΄Π°Π½Π½Ρ‹ΠΌ дСскриптором сСгмСнта. Напомню Π½Π°ΡˆΡƒ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρƒ для нахоТдСния Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ адрСса:

Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ адрСс = Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ адрСс + смСщСниС
[Π±Π°Π·Π°; Π±Π°Π·Π°+ΠΏΡ€Π΅Π΄Π΅Π»)
(Π±Π°Π·Π°+ΠΏΡ€Π΅Π΄Π΅Π»; Π²Π΅Ρ€ΡˆΠΈΠ½Π°]

ΠšΡΡ‚Π°Ρ‚ΠΈ интСрСсно ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π±Π°Π·Π° ΠΈ ΠΏΡ€Π΅Π΄Π΅Π» Ρ‚Π°ΠΊ Ρ€Π²Π°Π½ΠΎ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ Π² дСскрипторС. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ Ρ‡Ρ‚ΠΎ процСссоры Ρ…86 Ρ€Π°Π·Π²ΠΈΠ²Π°Π»ΠΈΡΡŒ ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΎΠ½Π½ΠΎ ΠΈ Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π° 286Ρ… дСскрипторы Π±Ρ‹Π»ΠΈ ΠΏΠΎ 8 Π±ΠΈΡ‚ всСго, ΠΏΡ€ΠΈ этом ΡΡ‚Π°Ρ€ΡˆΠΈΠ΅ 2 Π±Π°ΠΉΡ‚Π° Π±Ρ‹Π»ΠΈ Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹, Π½Ρƒ Π° Π² ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… модСлях процСссоров с ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ΠΌ разрядности дСскрипторы Ρ‚ΠΎΠΆΠ΅ выросли, Π½ΠΎ для сохранСния ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ совмСстимости ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ структуру ΠΊΠ°ΠΊ Π΅ΡΡ‚ΡŒ.
Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ адрСса Β«Π²Π΅Ρ€ΡˆΠΈΠ½Π°Β» зависит ΠΎΡ‚ 54Π³ΠΎ D Π±ΠΈΡ‚Π°, Ссли ΠΎΠ½ Ρ€Π°Π²Π΅Π½ 0, Ρ‚ΠΎΠ³Π΄Π° Π²Π΅Ρ€ΡˆΠΈΠ½Π° Ρ€Π°Π²Π½Π° 0xFFF(64ΠΊΠ±-1), Ссли D Π±ΠΈΡ‚ Ρ€Π°Π²Π΅Π½ 1, Ρ‚ΠΎΠ³Π΄Π° Π²Π΅Ρ€ΡˆΠΈΠ½Π° Ρ€Π°Π²Π½Π° 0xFFFFFFFF (4Π“Π±-1)
Π‘ 41-43 Π±ΠΈΡ‚ кодируСтся Ρ‚ΠΈΠΏ сСгмСнта.
000 β€” сСгмСнт Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ считываниС
001 β€” сСгмСнт Π΄Π°Π½Π½Ρ‹Ρ…, считываниС ΠΈ запись
010 β€” сСгмСнт стСка, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ считываниС
011 β€” сСгмСнт стСка, считываниС ΠΈ запись
100 β€” сСгмСнт ΠΊΠΎΠ΄Π°, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅
101- сСгмСнт ΠΊΠΎΠ΄Π°, считываниС ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅
110 β€” ΠΏΠΎΠ΄Ρ‡ΠΈΠ½Π΅Π½Π½Ρ‹ΠΉ сСгмСнт ΠΊΠΎΠ΄Π°, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅
111 β€” ΠΏΠΎΠ΄Ρ‡ΠΈΠ½Π΅Π½Π½Ρ‹ΠΉ сСгмСнт ΠΊΠΎΠ΄Π°, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΈ считываниС

44 S Π±ΠΈΡ‚ Ссли Ρ€Π°Π²Π΅Π½ 1 Ρ‚ΠΎΠ³Π΄Π° дСскриптор описываСт Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ сСгмСнт ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти, ΠΈΠ½Π°Ρ‡Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ S Π±ΠΈΡ‚Π° Ρ€Π°Π²Π½ΠΎ 0.

Π‘Π°ΠΌΡ‹ΠΌ Π²Π°ΠΆΠ½Ρ‹ΠΌ Π±ΠΈΡ‚ΠΎΠΌ являСтся 47-ΠΉ P Π±ΠΈΡ‚ присутствия. Если Π±ΠΈΡ‚ Ρ€Π°Π²Π΅Π½ 1 Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ сСгмСнт ΠΈΠ»ΠΈ локальная Ρ‚Π°Π±Π»ΠΈΡ†Π° дСскрипторов Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π° Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²ΠΊΡƒ, Ссли этот Π±ΠΈΡ‚ Ρ€Π°Π²Π΅Π½ 0, Ρ‚ΠΎΠ³Π΄Π° это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½ΠΎΠ³ΠΎ сСгмСнта Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²ΠΊΠ΅ Π½Π΅Ρ‚, ΠΎΠ½ находится Π½Π° ТСстком дискС, случаСтся ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅, особый случай Ρ€Π°Π±ΠΎΡ‚Ρ‹ процСссора запускаСтся ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ особого случая, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ Π½ΡƒΠΆΠ½Ρ‹ΠΉ сСгмСнт с ТСсткого диска Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ, Ссли P Π±ΠΈΡ‚ Ρ€Π°Π²Π΅Π½ 0, Ρ‚ΠΎΠ³Π΄Π° всС поля дСскриптора Ρ‚Π΅Ρ€ΡΡŽΡ‚ смысл, ΠΈ становятся свободными для сохранСния Π² Π½ΠΈΡ… слуТСбной ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. ПослС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°, P Π±ΠΈΡ‚ устанавливаСтся Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 1, ΠΈ производится ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ дСскриптору, сСгмСнт ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ находится ΡƒΠΆΠ΅ Π² памяти.

На этом заканчиваСтся ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ логичСского адрСса Π² Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ, ΠΈ я Π΄ΡƒΠΌΠ°ΡŽ Π½Π° этом стоит ΠΏΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒΡΡ. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π°Π· я расскаТу Π²Ρ‚ΠΎΡ€ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ прСобразования ΠΈΠ· Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ Π² физичСский.
А Ρ‚Π°ΠΊ ΠΆΠ΅ Π΄ΡƒΠΌΠ°ΡŽ стоит Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΈ ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π² памяти, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Π»Π° какая-Ρ‚ΠΎ связь с Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π² памяти это ΡƒΠΆΠ΅ нСпосрСдствСнно, Ρ‚ΠΎ с Ρ‡Π΅ΠΌ Π²Π°ΠΌ приходится ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Ρ‚ΡŒΡΡ Π² Ρ€Π°Π±ΠΎΡ‚Π΅, Π° Π½Π΅ просто ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ тСорСтичСскиС ΠΈΠ·ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΡ для систСмного программиста. Но Π±Π΅Π· понимания, ΠΊΠ°ΠΊ устроСна ΠΏΠ°ΠΌΡΡ‚ΡŒ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΊΠ°ΠΊ эти самыС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ хранятся Π² памяти.
Π’ ΠΎΠ±Ρ‰Π΅ΠΌ надСюсь Π±Ρ‹Π»ΠΎ интСрСсно ΠΈ Π΄ΠΎ Π½ΠΎΠ²Ρ‹Ρ… встрСч.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *