Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «БистСмноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² срСдС WindowsΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 46

Автор ДТонсон Π₯Π°Ρ€Ρ‚

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π°

ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ², Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΈ ошибки страниц

ОписаниС этих Π²Π°ΠΆΠ½Ρ‹Ρ… понятий содСрТится Π² ΠΊΠ½ΠΈΠ³Π΅ [38], Π° ΠΈΡ… ΡƒΠ³Π»ΡƒΠ±Π»Π΅Π½Π½ΠΎΠ΅ обсуТдСниС Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ, поставляСмой вмСстС с Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎΠΌ ОБ.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹

Π”Π΅Ρ€Π΅Π²ΡŒΡΠΌ поиска ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°ΠΌ сортировки посвящСно мноТСство Ρ€Π°Π±ΠΎΡ‚, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ [39] ΠΈ [34].

ИспользованиС явного связывания

DLL ΠΈ явноС связываниС ΠΈΠΌΠ΅ΡŽΡ‚ Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для использования ΠΌΠΎΠ΄Π΅Π»ΠΈ БОМ, которая ΡˆΠΈΡ€ΠΎΠΊΠΎ примСняСтся ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния Windows. Π’Π°ΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ LoadLibrary ΠΈ GetProcAddress продСмонстрирована Π² Π³Π»Π°Π²Π΅ 1 ΠΊΠ½ΠΈΠ³ΠΈ [3].

УпраТнСния

5.1. Π‘ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Π΄ΠΈΡ‚Π΅ экспСримСнты для ΠΎΡ†Π΅Π½ΠΊΠΈ Π²Ρ‹ΠΈΠ³Ρ€Ρ‹ΡˆΠ° Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, достигаСмого Π·Π° счСт использования Ρ„Π»Π°Π³Π° HEAP_NO_SERIALIZE ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ HeapCreate ΠΈ HeapAlloc. Как зависит этот ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΎΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΊΡƒΡ‡ΠΈ ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π±Π»ΠΎΠΊΠ°? Π—Π°ΠΌΠ΅Ρ‚Π½Π° Π»ΠΈ Ρ€Π°Π·Π½ΠΈΡ†Π° Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°Ρ… для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… вСрсий Windows? На Web-сайтС ΠΊΠ½ΠΈΠ³ΠΈ находится ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° HeapNoSr.c, которая ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°ΠΌ ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ этого ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠΉ.

5.2. Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚Π΅ Ρ‚Π΅ΡΡ‚ΠΎΠ²ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ упраТнСния Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½Π° позволяла ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Π»ΠΈ функция malloc ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈΠ»ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½ΡƒΠ»Π΅Π²ΠΎΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π² случаС Π½Π΅Ρ…Π²Π°Ρ‚ΠΊΠΈ памяти. ЯвляСтся Π»ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ? Π‘Ρ€Π°Π²Π½ΠΈΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Π΅ΠΌΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ malloc, с Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌΠΈ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ упраТнСния.

5.3. Π”оля Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Ρ… ΠΈΠ·Π΄Π΅Ρ€ΠΆΠ΅ΠΊ ΠΏΡ€ΠΈ распрСдСлСнии памяти ΠΈΠ· ΠΊΡƒΡ‡ΠΈ колСблСтся Π² зависимости ΠΎΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ вСрсии Windows, Ρ‡Ρ‚ΠΎ особСнно Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎ Π² случаС выходящих ΠΈΠ· употрСблСния вСрсий Windows 9x. Π‘ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Π΄ΠΈΡ‚Π΅ экспСримСнт для опрСдСлСния количСства Π±Π»ΠΎΠΊΠΎΠ² памяти фиксированного Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ каТдая ΠΈΠ· систСм прСдоставляСт Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΊΡƒΡ‡Π΅. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ SEH для опрСдСлСния Ρ‚ΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°, ΠΊΠΎΠ³Π΄Π° распрСдСлСнными ΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ всС Π±Π»ΠΎΠΊΠΈ, Π²Ρ‹ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ упроститС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ. ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π²Π΅Π΄Π΅Ρ‚ сСбя ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° clear.с, находящаяся Π½Π° Web-сайтС ΠΊΠ½ΠΈΠ³ΠΈ, Ссли ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‡Π°ΡΡ‚ΡŒ Π΅Π΅ ΠΊΠΎΠ΄Π°, ΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ Π·Π° явноС тСстированиС ОБ. ΠœΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€ΠΎΡ‡ΠΈΠΌ, эта ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… тСстах ΠΏΠΎ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΡŽ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… характСристик для Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹Π΅, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ Π² процСссС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ тСста, Π½Π΅ ΠΎΡΡ‚Π°Π»ΠΈΡΡŒ Π² памяти.

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

5.5. Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ 5.5 ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Ρ‚ΠΈΠΏΠ° _base, спСцифичСскиС для Microsoft Π‘. Если ваш компилятор Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ это срСдство (Π½ΠΎ Π² любом случаС β€” просто Π² качСствС упраТнСния) ΠΏΠ΅Ρ€Π΅Π΄Π΅Π»Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ 5.5, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ указатСля макрос, массив ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ.

5.6. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ поиска записСй ΠΏΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ ΠΊΠ»ΡŽΡ‡Ρƒ Π² Ρ„Π°ΠΉΠ»Π΅, проиндСксированном с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ 5.5. Для этой Ρ†Π΅Π»ΠΈ ΡƒΠ΄ΠΎΠ±Π½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ bsearch, входящСй Π² состав Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π‘.

5.7. Π Π΅Π°Π»ΠΈΠ·ΡƒΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ tail ΠΈΠ· Π³Π»Π°Π²Ρ‹ 3, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ².

5.8. ΠŸΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚Π΅ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ReportError, PrintStrings, PrintMsg ΠΈ ConsolePrompt Π² DLL ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠΌΠΏΠΎΠ½ΡƒΠΉΡ‚Π΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ Ρ€Π°Π½ΡŒΡˆΠ΅. ΠŸΡ€ΠΎΠ΄Π΅Π»Π°ΠΉΡ‚Π΅ Ρ‚ΠΎ ΠΆΠ΅ самоС с функциями Options ΠΈ GetArgs, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΌΠΈ, соотвСтствСнно, для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². Π’Π°ΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ°ΠΊ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ DLL, Ρ‚Π°ΠΊ ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° использовали Ρ‚Π°ΠΊΠΆΠ΅ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Π‘ Π² Π²ΠΈΠ΄Π΅ DLL. НапримСр, Π² Visual C++ ΠΈ Visual Studio 6.0 Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅, Π½Π°Ρ‡Π°Π² со строки Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ мСню, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹: Project (ΠŸΡ€ΠΎΠ΅ΠΊΡ‚), Settings (ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹), Π²ΠΊΠ»Π°Π΄ΠΊΡƒ C/C++, Category (Code Generation) (ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡ (ГСнСрация ΠΊΠΎΠ΄Π°)), Use Run-Time Library (Multithreaded DLL) (Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния (многопоточная DLL)). Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ DLL, Π²ΠΎΠΎΠ±Ρ‰Π΅ говоря, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΡƒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… процСссов. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ содСрТится Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Utilities_3_0, доступном Π½Π° Web-сайтС ΠΊΠ½ΠΈΠ³ΠΈ.

5.9. Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ 5.7 Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΡƒΡŽ DLL слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Π±Π°Π·ΠΈΡ€ΠΎΠ²Π°Π»ΠΎΡΡŒ Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ€Π΅ Ρ„Π°ΠΉΠ»Π° ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ систСмы. .LIB-Ρ„Π°ΠΉΠ» здСсь Π½Π΅ трСбуСтся, поэтому ΠΏΡ€ΠΎΠ΄ΡƒΠΌΠ°ΠΉΡ‚Π΅, ΠΊΠ°ΠΊ ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΡŽ. Для опрСдСлСния Ρ‚ΠΈΠΏΠ° Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ GetVolumeInformation.

5.10. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ DLL для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ прСобразования ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ упраТнСния, каТдая вСрсия ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΈΠ½ΡƒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΠΊΡƒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΈ Ρ€Π°ΡΡˆΠΈΡ€ΡŒΡ‚Π΅ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½Π° сама Ρ€Π΅ΡˆΠ°Π»Π°, ΠΊΠΎΠ³Π΄Π° ΠΈ ΠΊΠ°ΠΊΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. 

ГЛАВА 6

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ процСссами

ΠŸΡ€ΠΎΡ†Π΅ΡΡ (process) прСдставляСт собой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‰ΠΈΠΉ собствСнным нСзависимым Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌ адрСсным пространством, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊΠΎΠ΄ ΠΈ Π΄Π°Π½Π½Ρ‹Π΅, Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹Π΅ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… процСссов. Π’ свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ процСсса ΠΌΠΎΠ³ΡƒΡ‚ нСзависимо Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΎΠ΄Π½Π° ΠΈΠ»ΠΈ нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² (threads). ΠŸΠΎΡ‚ΠΎΠΊ, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉΡΡ Π²Π½ΡƒΡ‚Ρ€ΠΈ процСсса, ΠΌΠΎΠΆΠ΅Ρ‚ сама ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΈ Π½ΠΎΠ²Ρ‹Π΅ нСзависимыС процСссы, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ взаимодСйствиСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρƒ собой ΠΈ ΠΈΡ… синхронизациСй.

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

Π’ этой Π³Π»Π°Π²Π΅ ΠΎΠ±ΡŠΡΡΠ½ΡΡŽΡ‚ΡΡ основы управлСния процСссами ΠΈ вводятся; ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ синхронизации, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π° протяТСнии ΠΎΡΡ‚Π°Π²ΡˆΠ΅ΠΉΡΡ части ΠΊΠ½ΠΈΠ³ΠΈ.

ΠŸΡ€ΠΎΡ†Π΅ΡΡΡ‹ ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Windows

Π’Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ процСсса ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΎΠ΄Π½Π° ΠΈΠ»ΠΈ нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΈ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΡ‚ΠΎΠΊ являСтся Π±Π°Π·ΠΎΠ²ΠΎΠΉ Π΅Π΄ΠΈΠ½ΠΈΡ†Π΅ΠΉ выполнСния Π² Windows. Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² планируСтся систСмой Π½Π° основС ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ²: Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Ρ‚Π°ΠΊΠΈΡ… рСсурсов, ΠΊΠ°ΠΊ CPU ΠΈ физичСская ΠΏΠ°ΠΌΡΡ‚ΡŒ, ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Ρ‹, Ρ€Π°Π²Π½ΠΎΠ΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ рСсурсов ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Начиная с вСрсии NT4, Π² Windows поддСрТиваСтся симмСтричная многопроцСссорная ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° (Symmetric Multiprocessing, SMP), ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ процСссорами, установлСнными Π² систСмС.

Π‘ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния программиста ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ процСссу ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ рСсурсы, прСдставлСнныС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ:

β€’ ΠžΠ΄Π½Π° ΠΈΠ»ΠΈ нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².

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

β€’ ΠžΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ нСсколько сСгмСнтов ΠΊΠΎΠ΄Π°, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΊΠΎΠ΄ DLL.

β€’ ΠžΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ нСсколько сСгмСнтов Π΄Π°Π½Π½Ρ‹Ρ…, содСрТащих Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅.

β€’ Π‘Ρ‚Ρ€ΠΎΠΊΠΈ, содСрТащиС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ ΠΏΡƒΡ‚ΠΈ доступа ΠΊ Ρ„Π°ΠΉΠ»Π°ΠΌ.

β€’ ΠšΡƒΡ‡Π° процСсса.

β€’ Π Π°Π·Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π° рСсурсы, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, дСскрипторы ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΊΡƒΡ‡ΠΈ.

ΠŸΠΎΡ‚ΠΎΠΊ раздСляСт вмСстС с процСссом ΠΊΠΎΠ΄, Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, строки окруТСния ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ рСсурсы. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ планируСтся нСзависимо ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΈ располагаСт ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ элСмСнтами:

β€’ Π‘Ρ‚Π΅ΠΊ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ для Π²Ρ‹Π·ΠΎΠ²Π° ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€, ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, Π° Ρ‚Π°ΠΊΠΆΠ΅ хранСния автоматичСских ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ….

β€’ Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ области хранСния ΠΏΠΎΡ‚ΠΎΠΊΠ° (Thread Local Storage, SLT) β€” массивы ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ срСду.

β€’ ΠΡ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π² стСкС, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌΡ‹ΠΉ ΠΎΡ‚ ΡΠΎΠ·Π΄Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ являСтся ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°.

β€’ Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° контСкста, поддСрТиваСмая ядром систСмы ΠΈ содСрТащая значСния ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Ρ… рСгистров.

На рис. 6.1 ΠΏΠΎΠΊΠ°Π·Π°Π½ процСсс с нСсколькими ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ. Рисунок являСтся схСматичСским, поэтому Π½Π° Π½Π΅ΠΌ Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½Ρ‹ фактичСскиС адрСса памяти ΠΈ Π½Π΅ ΡΠΎΠ±Π»ΡŽΠ΄Π΅Π½Ρ‹ ΠΌΠ°ΡΡˆΡ‚Π°Π±Ρ‹.

Π’ Π΄Π°Π½Π½ΠΎΠΉ Π³Π»Π°Π²Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с процСссами, состоящими ΠΈΠ· СдинствСнного ΠΏΠΎΡ‚ΠΎΠΊΠ°. О Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², рассказываСтся Π² Π³Π»Π°Π²Π΅ 7.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

Рисунок 6.1 являСтся высокоуровнСвым с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния программиста прСдставлСниСм процСсса. Π’ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ эта ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½Π° мноТСством тСхничСских Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ ΠΈ особСнностями Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ заинтСрСсованныС Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°ΠΉΡ‚ΠΈ Π² ΠΊΠ½ΠΈΠ³Π΅ Π‘ΠΎΠ»ΠΎΠΌΠΎΠ½Π° (Solomon) ΠΈ Руссиновича (Russinovich) Inside Windows 2000. 

ΠŸΡ€ΠΎΡ†Π΅ΡΡΡ‹ UNIX сопоставимы с процСссами Windows, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΌΠΈ СдинствСнный ΠΏΠΎΡ‚ΠΎΠΊ.