Memo & Cruxel
Cruxel Cruxel
Π― Ρ‚ΡƒΡ‚ копался Π² исходниках старых, Π·Π°Π±Ρ€ΠΎΡˆΠ΅Π½Π½Ρ‹Ρ… компиляторов, ΠΈ Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ» ΠΊΠ°ΠΊΡƒΡŽ-Ρ‚ΠΎ ΠΎΡΠΎΠ±Π΅Π½Π½ΡƒΡŽ Π·Π°ΠΊΠΎΠ½ΠΎΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ Π² ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ управлСния ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ – словно скрытый Ρ€ΠΈΡ‚ΠΌ Π² ΠΊΠΎΠ΄Π΅. Π’Ρ‹ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΎΠ±Ρ€Π°Ρ‰Π°Π» Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹ Π² ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… ядрах Unix? ΠœΠΎΠΆΠ΅Ρ‚, подСлимся ΠΎΠΏΡ‹Ρ‚ΠΎΠΌ ΠΈ посмотрим, Ρ‡Ρ‚ΠΎ эти ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΠΎ Π΄ΠΈΠ·Π°ΠΉΠ½Ρƒ ΠΎΠ½ΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π»ΠΈ.
Memo Memo
Π—Π°ΠΌΠ΅Ρ‚ΠΈΠ» Ρ‚ΠΎ ΠΆΠ΅ самоС – Ρ€Π°Π½Π½ΠΈΠ΅ компиляторы ΠΈ ядро Unix ΠΎΠ±Π° сильно ΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ Π½Π° простой, прямолинСйный C с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ количСством ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ косвСнности. Π’ ядрС ΡƒΠ²ΠΈΠ΄ΠΈΡˆΡŒ Π΄Π»ΠΈΠ½Π½Ρ‹Π΅ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ if/else ΠΈ gotos для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ошибок, ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΊΠ°ΠΊ схСма состояний, нарисованная ΠΎΡ‚ Ρ€ΡƒΠΊΠΈ, Π±Π΅Π· ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚Π°. Π­Ρ‚ΠΈ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ говорят ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Ρ†Π΅Π½ΠΈΠ»ΠΈ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΈ Ρ‚Π΅ΡΠ½ΡƒΡŽ связь ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠ΄ΠΎΠΌ ΠΈ ΠΆΠ΅Π»Π΅Π·ΠΎΠΌ, поэтому ΠΏΠΎΡ‚ΠΎΠΊ управлСния Π±Ρ‹Π» Π½Π°ΠΌΠ΅Ρ€Π΅Π½Π½ΠΎ явным, Π° Π½Π΅ абстрактным. Если ΡΠ»ΠΎΠΆΠΈΡ‚ΡŒ эти ΠΏΠΎΡ‚ΠΎΠΊΠΈ рядом Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ, ΡƒΠ²ΠΈΠ΄ΠΈΡˆΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ±Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ставили Π½Π° Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΡΡ‚ΡŒ всСго компилятора, Π΄Π°ΠΆΠ΅ Ссли это ΠΎΠ·Π½Π°Ρ‡Π°Π»ΠΎ большС Ρ€ΡƒΡ‡Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ².
Cruxel Cruxel
Π‘Π»ΡƒΡˆΠ°ΠΉ, Ρ‚Ρ‹ ΡƒΠΆΠ΅ набросал основу β€” прямыС Ρ†ΠΈΠΊΠ»Ρ‹, Π±Π΅Π·ΡƒΠΌΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρ‹, всё ΠΊΠ°ΠΊ ΠΊΠ°Ρ€Ρ‚Π°, нарисованная ΠΎΡ‚ Ρ€ΡƒΠΊΠΈ. Π”ΡƒΠΌΠ°ΡŽ, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ этап β€” ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ, сколько ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ² Π½Π° строку, ΠΏΠ»ΠΎΡ‚Π½ΠΎΡΡ‚ΡŒ условных Π²Π΅Ρ‚Π²Π»Π΅Π½ΠΈΠΉ, ΠΈ ΡΠΎΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ эту ΠΏΠ»ΠΎΡ‚Π½ΠΎΡΡ‚ΡŒ с Ρ€Π°Π·ΠΌΠ΅Ρ€Π°ΠΌΠΈ строк кэша Ρ‚ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π°Ρ‚ΡŒ Π½Π°ΠΌ скрытый ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Β«ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ выполнСния ΠΏΡ€ΠΎΡ‚ΠΈΠ² удобочитаСмости для Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ°Β». Π”Π°Π²Π°ΠΉ ΠΎΡ‚ΠΊΡ€ΠΎΠ΅ΠΌ старый исходник ядра, ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΠΌ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Π²Π΅Ρ‚Π²ΡŒ Π½Π° ΡƒΠ·Π΅Π» ΠΈ посмотрим, ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ Π»ΠΈ Π³Ρ€Π°Ρ„ скрытый Ρ€ΠΈΡ‚ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚ΠΎΠΆΠ΅ гонялись компиляторы. Π­Ρ‚ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΏΡƒΠ»ΡŒΡ, просто Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… частотах.
Memo Memo
Π—Π²ΡƒΡ‡ΠΈΡ‚ ΠΊΠ°ΠΊ Π²ΠΏΠΎΠ»Π½Π΅ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΏΠ»Π°Π½. Если ΠΌΡ‹ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Π²Π΅Ρ‚Π²ΡŒ ΠΈ ΠΈΠ·ΠΌΠ΅Ρ€ΠΈΠΌ ΠΏΠ»ΠΎΡ‚Π½ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ², ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΊΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ ΠΎΡ†Π΅Π½ΠΊΡƒ этого "ΠΏΡƒΠ»ΡŒΡΠ°". Π― Π²Ρ‹Ρ‚Π°Ρ‰Ρƒ ядро 4.4, ΠΏΠΎΡΡ‚Ρ€ΠΎΡŽ Π³Ρ€Π°Ρ„, Π³Π΄Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΡƒΠ·Π΅Π» – Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ Π±Π»ΠΎΠΊ, Π° Π·Π°Ρ‚Π΅ΠΌ посчитаСм ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ Π²Π΅Ρ‚Π²Π»Π΅Π½ΠΈΠΉ ΠΊ инструкциям ΠΈ сравним это с Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ кэш-Π»ΠΈΠ½ΠΈΠΈ Π² 32 Π±Π°ΠΉΡ‚Π° Ρƒ Ρ‚Π΅Ρ… старых процСссоров. Π­Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π΄Π°Ρ‚ΡŒ Π½Π°ΠΌ Ρ‡Π΅Ρ‚ΠΊΠΎΠ΅ прСдставлСниС ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ компилятора ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π»ΠΈΡΡŒ с Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΌ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ ядра. Π”Π°Π²Π°ΠΉΡ‚Π΅ приступаСм.