ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании студСнчСских Ρ€Π°Π±ΠΎΡ‚
АнтистрСссовый сСрвис

ΠŸΡ€ΠΎΡ†Π΅ΡΡΡ‹, Π½ΠΈΡ‚ΠΈ ΠΈ Π²ΠΎΠ»ΠΎΠΊΠ½Π° Π² ОБ Windows

Π Π΅Ρ„Π΅Ρ€Π°Ρ‚ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

ΠŸΡ€ΠΎΡ†Π΅ΡΡΡ‹ ΠΈΠ½Π΅Ρ€Ρ‚Π½Ρ‹. ΠžΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‚ ΠΆΠ΅ Π·Π° ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°, содСрТащСгося Π² Π°Π΄Ρ€Π΅ΡΠ½ΠΎΠΌ пространствС процСсса, Π½ΠΈΡ‚ΠΈ. ΠΠΈΡ‚ΡŒ (thread) — нСкая ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€ΠΈ процСсса, ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‰Π°Ρ процСссорноС врСмя для выполнСния. Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ процСссС Π΅ΡΡ‚ΡŒ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ ΠΎΠ΄Π½Π° Π½ΠΈΡ‚ΡŒ. Π­Ρ‚Π° пСрвичная Π½ΠΈΡ‚ΡŒ создаСтся систСмой автоматичСски ΠΏΡ€ΠΈ создании процСсса. Π”Π°Π»Π΅Π΅ эта Π½ΠΈΡ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ€ΠΎΠ΄ΠΈΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π½ΠΈΡ‚ΠΈ, Ρ‚Π΅ Π² ΡΠ²ΠΎΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π½ΠΎΠ²Ρ‹Π΅ ΠΈ Ρ‚. Π΄. Π’Π°ΠΊΠΈΠΌ… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

ΠŸΡ€ΠΎΡ†Π΅ΡΡΡ‹, Π½ΠΈΡ‚ΠΈ ΠΈ Π²ΠΎΠ»ΠΎΠΊΠ½Π° Π² ОБ Windows (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

Π Π΅Ρ„Π΅Ρ€Π°Ρ‚ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅:

" ΠŸΡ€ΠΎΡ†Π΅ΡΡΡ‹, Π½ΠΈΡ‚ΠΈ ΠΈ Π²ΠΎΠ»ΠΎΠΊΠ½Π° Π² ΠžΠ‘ Windows"

1. ΠŸΡ€ΠΎΡ†Π΅ΡΡΡ‹, Π½ΠΈΡ‚ΠΈ ΠΈ Π²ΠΎΠ»ΠΎΠΊΠ½Π° Π² ΠžΠ‘ Windows

2. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ процСссов

3. Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ процСссов

4. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΈΡ‚Π΅ΠΉ

5. Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ Π½ΠΈΡ‚Π΅ΠΉ

6. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π²ΠΎΠ»ΠΎΠΊΠΎΠ½

7. Π£Π½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²ΠΎΠ»ΠΎΠΊΠΎΠ½

8. Wait-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π’Ρ‹Π²ΠΎΠ΄Ρ‹ Бписок Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹

1. ΠŸΡ€ΠΎΡ†Π΅ΡΡΡ‹, Π½ΠΈΡ‚ΠΈ ΠΈ Π²ΠΎΠ»ΠΎΠΊΠ½Π° Π² ΠžΠ‘ Windows

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

— ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Π΄Π°Π½Π½Ρ‹Ρ…, содСрТащая всю ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅, Π² Ρ‚ΠΎΠΌ числС список ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… дСскрипторов Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… систСмных рСсурсов, ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ процСсса, Ρ€Π°Π·Π»ΠΈΡ‡Π½ΡƒΡŽ ΡΡ‚Π°Ρ‚ΠΈΡΡ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΈ Ρ‚. Π΄.;

— Π°Π΄Ρ€Π΅ΡΠ½ΠΎΠ΅ пространство — Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ адрСсов Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ памяти, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ процСсс;

— ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠ°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈ Π΄Π°Π½Π½Ρ‹Π΅, ΠΏΡ€ΠΎΠ΅Ρ†ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ адрСсноС пространство процСсса.

ΠŸΡ€ΠΎΡ†Π΅ΡΡΡ‹ ΠΈΠ½Π΅Ρ€Ρ‚Π½Ρ‹. ΠžΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‚ ΠΆΠ΅ Π·Π° ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°, содСрТащСгося Π² Π°Π΄Ρ€Π΅ΡΠ½ΠΎΠΌ пространствС процСсса, Π½ΠΈΡ‚ΠΈ. ΠΠΈΡ‚ΡŒ (thread) — нСкая ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€ΠΈ процСсса, ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‰Π°Ρ процСссорноС врСмя для выполнСния. Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ процСссС Π΅ΡΡ‚ΡŒ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ ΠΎΠ΄Π½Π° Π½ΠΈΡ‚ΡŒ. Π­Ρ‚Π° пСрвичная Π½ΠΈΡ‚ΡŒ создаСтся систСмой автоматичСски ΠΏΡ€ΠΈ создании процСсса. Π”Π°Π»Π΅Π΅ эта Π½ΠΈΡ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ€ΠΎΠ΄ΠΈΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π½ΠΈΡ‚ΠΈ, Ρ‚Π΅ Π² ΡΠ²ΠΎΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π½ΠΎΠ²Ρ‹Π΅ ΠΈ Ρ‚. Π΄. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΎΠ΄ΠΈΠ½ процСсс ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π»Π°Π΄Π΅Ρ‚ΡŒ нСсколькими нитями, ΠΈ Ρ‚ΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΈΡΠΏΠΎΠ»Π½ΡΡŽΡ‚ ΠΊΠΎΠ΄ Π² Π°Π΄Ρ€Π΅ΡΠ½ΠΎΠΌ пространствС процСсса. КаТдая Π½ΠΈΡ‚ΡŒ ΠΈΠΌΠ΅Π΅Ρ‚:

— ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π½ΠΈΡ‚ΠΈ;

— ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ Π½Π°Π±ΠΎΡ€Π° рСгистров процСссора, ΠΎΡ‚Ρ€Π°ΠΆΠ°ΡŽΡ‰ΠΈΡ… состояниС процСссора;

— Π΄Π²Π° стСка, ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π½ΠΈΡ‚ΡŒΡŽ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ ядра, Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ — Π² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅;

— Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡƒΡŽ локальной ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Π½ΠΈΡ‚ΠΈ (thread local storage, TLS) ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡƒΡŽ подсистСмами, run-time Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ ΠΈ DLL.

Π§Ρ‚ΠΎΠ±Ρ‹ всС Π½ΠΈΡ‚ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ, опСрационная систСма ΠΎΡ‚Π²ΠΎΠ΄ΠΈΡ‚ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Π½ΠΈΡ… ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ процСссорноС врСмя. Π’Π΅ΠΌ самым создаСтся иллюзия ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ выполнСния Π½ΠΈΡ‚Π΅ΠΉ (разумССтся, для многопроцСссорных ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ² Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ истинный ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ). Π’ Windows Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° систСма Π²Ρ‹Ρ‚Π΅ΡΠ½ΡΡŽΡ‰Π΅Π³ΠΎ планирования Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠ², Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ всСгда выполняСтся Π½ΠΈΡ‚ΡŒ с Π½Π°ΠΈΠ±ΠΎΠ»ΡŒΡˆΠΈΠΌ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠΌ, готовая ΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ. Выбранная для выполнСния Π½ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Π°, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΊΠ²Π°Π½Ρ‚ΠΎΠΌ. ΠšΠ²Π°Π½Ρ‚ опрСдСляСт, сколько Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π½ΠΈΡ‚ΡŒ, ΠΏΠΎΠΊΠ° опСрационная систСма Π½Π΅ ΠΏΡ€Π΅Ρ€Π²Π΅Ρ‚ Π΅Π΅. По ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΠΈ ΠΊΠ²Π°Π½Ρ‚Π° опСрационная систСма провСряСт, Π³ΠΎΡ‚ΠΎΠ²Π° Π»ΠΈ ΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ другая Π½ΠΈΡ‚ΡŒ с Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ (ΠΈΠ»ΠΈ большим) ΡƒΡ€ΠΎΠ²Π½Π΅ΠΌ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π°. Если Ρ‚Π°ΠΊΠΈΡ… Π½ΠΈΡ‚Π΅ΠΉ Π½Π΅ ΠΎΠΊΠ°Π·Π°Π»ΠΎΡΡŒ, Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π½ΠΈΡ‚ΠΈ выдСляСтся Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΊΠ²Π°Π½Ρ‚. Однако Π½ΠΈΡ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ свой ΠΊΠ²Π°Π½Ρ‚. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ другая Π½ΠΈΡ‚ΡŒ с Π±ΠΎΠ»Π΅Π΅ высоким ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠΌ Π³ΠΎΡ‚ΠΎΠ²Π° ΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ, тСкущая Π½ΠΈΡ‚ΡŒ вытСсняСтся, Π΄Π°ΠΆΠ΅ Ссли Π΅Π΅ ΠΊΠ²Π°Π½Ρ‚ Π΅Ρ‰Π΅ Π½Π΅ ΠΈΡΡ‚Π΅ΠΊ.

ΠšΠ²Π°Π½Ρ‚ Π½Π΅ ΠΈΠ·ΠΌΠ΅Ρ€ΡΠ΅Ρ‚ся Π² ΠΊΠ°ΠΊΠΈΡ… Π±Ρ‹ Ρ‚ΠΎ Π½ΠΈ Π±Ρ‹Π»ΠΎ Π΅Π΄ΠΈΠ½ΠΈΡ†Π°Ρ… Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π° Π²Ρ‹Ρ€Π°ΠΆΠ°Π΅Ρ‚ся Ρ†Π΅Π»Ρ‹ΠΌ числом. Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π½ΠΈΡ‚ΠΈ хранится Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΅Π΅ ΠΊΠ²Π°Π½Ρ‚Π°. Когда Π½ΠΈΡ‚ΠΈ выдСляСтся ΠΊΠ²Π°Π½Ρ‚ процСссорного Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, это Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π΅Π΅ ΠΊΠ²Π°Π½Ρ‚ устанавливаСтся Π² Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Оно зависит ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы. НапримСр, для Win2000 Professional Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠ²Π°Π½Ρ‚Π° Ρ€Π°Π²Π½ΠΎ 6, Π° Π΄Π»Ρ Win2000 Server — 36.

Всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ ΠΎΡ‚ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°, ΠΈΠ· ΠΊΠ²Π°Π½Ρ‚Π° Π½ΠΈΡ‚ΠΈ вычитаСтся 3, ΠΈ Ρ‚Π°ΠΊ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΎΠ½ Π½Π΅ Π΄ΠΎΡΡ‚ΠΈΠ³Π½Π΅Ρ‚ нуля. Частота срабатывания Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° зависит ΠΎΡ‚ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹. НапримСр, для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° однопроцСссорных x86 систСм ΠΎΠ½ ΡΠΎΡΡ‚авляСт 10 мс, Π° Π½Π° Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ многопроцСссорных x86 систСм — 15 мс.

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

ΠŸΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Windows осущСствляСтся Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Π½ΠΈΡ‚Π΅ΠΉ, Π° Π½Π΅ ΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΠ². Π­Ρ‚ΠΎ каТСтся понятным, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ сами процСссы Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ся, Π° Π»ΠΈΡˆΡŒ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ рСсурсы ΠΈ ΠΊΠΎΠ½Ρ‚Скст для выполнСния Π½ΠΈΡ‚Π΅ΠΉ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΏΡ€ΠΈ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π½ΠΈΡ‚Π΅ΠΉ, систСма Π½Π΅ ΠΎΠ±Ρ€Π°Ρ‰Π°Π΅Ρ‚ внимания Π½Π° Ρ‚ΠΎ, ΠΊΠ°ΠΊΠΎΠΌΡƒ процСссу ΠΎΠ½ΠΈ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚. НапримСр, Ссли процСсс, А ΠΈΠΌΠ΅Π΅Ρ‚ 10 Π³ΠΎΡ‚ΠΎΠ²Ρ‹Ρ… ΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ Π½ΠΈΡ‚Π΅ΠΉ, Π° ΠΏΡ€ΠΎΡ†Π΅ΡΡ Π‘ — Π΄Π²Π΅, ΠΈ Π²ΡΠ΅ 12 Π½ΠΈΡ‚Π΅ΠΉ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚, каТдая ΠΈΠ· Π½ΠΈΡ… ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ 1/12 процСссорного Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

Π’ Windows сущСствуСт 32 уровня ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π°, ΠΎΡ‚ 0 Π΄ΠΎ 31. Они Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΡƒΡŽΡ‚ΡΡ Ρ‚Π°ΠΊ: 31−16 — ΡƒΡ€ΠΎΠ²Π½ΠΈ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ; 15−1 — динамичСскиС ΡƒΡ€ΠΎΠ²Π½ΠΈ; 0 — систСмный ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ, Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ для процСсса обнулСния страниц (zero-page thread).

ΠŸΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π½ΠΈΡ‚ΠΈ (Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ Π½ΠΈΡ‚ΠΈ) складываСтся ΠΈΠ· ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π° Π΅Π΅ ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ° ΠΈ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π° самой Π½ΠΈΡ‚ΠΈ. Π•ΡΡ‚ΡŒ сСмь ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠ² Π½ΠΈΡ‚Π΅ΠΉ:

Normal: Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ Ρƒ ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ°;

Above normal: +1 ΠΊ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Ρƒ процСсса;

Below normal: -1;

Highest: +2;

Lowest: -2;

Time critical: устанавливаСт Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ ΠΏΠΎΡ‚ΠΎΠΊΠ° для Real time класса Π² 31,

для ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… классов — Π² 15;

Idle: устанавливаСт Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ ΠΏΠΎΡ‚ΠΎΠΊΠ° для Real time класса Π² 16,

для ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… классов — Π² 1.

Если опСрационная систСма выполняСтся Π½Π° ΠΌΠ°ΡˆΠΈΠ½Π΅, Π³Π΄Π΅ установлСно Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ процСссора, Ρ‚ΠΎ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Π½ΠΈΡ‚ΡŒ выполняСтся Π½Π° Π»ΡŽΠ±ΠΎΠΌ доступном процСссорС. Однако Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях, Π½Π°Π±ΠΎΡ€ процСссоров, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½ΠΈΡ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½. Π­Ρ‚ΠΎ явлСниС называСтся привязкой ΠΊ ΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€Π°ΠΌ (processor affinity). МоТно ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ привязку ΠΊ ΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€Π°ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎ, Ρ‡Π΅Ρ€Π΅Π· Win32_Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ планирования.

Π’ΠΎΠ»ΠΎΠΊΠ½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² WIN32 API, начиная с Windows2000. Под Π²ΠΎΠ»ΠΎΠΊΠ½ΠΎΠΌ понимаСтся упрощСнная Π½ΠΈΡ‚ΡŒ, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ планируСтся самим ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, Π° Π½Π΅ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠΎΠΌ процСссорного Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠžΠ‘. ΠŸΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΠΎΠ»ΠΎΠΊΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡƒΡ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π½Π° Π½ΠΈΡ… Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΈΡ… Π²ΠΎΠ»ΠΎΠΊΠΎΠ½. Π’ΠΎΠ»ΠΎΠΊΠ½Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π² ΠΊΠΎΠ½Ρ‚СкстС Π½ΠΈΡ‚Π΅ΠΉ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… планируСтся ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅, ΠΈ Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ ΠΏΠΎΠ»Π½ΡƒΡŽ ΠΈΡ… ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ с Π½ΠΈΡ‚ями. Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π½ΠΈΡ‚ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ нСсколько Π²ΠΎΠ»ΠΎΠΊΠΎΠ½. Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π²ΠΎΠ»ΠΎΠΊΠ½Π° создаСтся собствСнный стСк, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ хранится информация ΠΎ ΡΠΎΡΡ‚оянии Π²ΠΎΠ»ΠΎΠΊΠ½Π°.

2. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ процСссов

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Win32 процСсса осущСствляСтся Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Ρ‚Π°ΠΊΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠ°ΠΊ CreateProcess, CreateProcessAsUser (для WinNT/2000/Vista) ΠΈ CreateProcessWithLogonW (начиная с Win2000) ΠΈ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΎ этапов:

— ΠžΡ‚крываСтся Ρ„Π°ΠΉΠ» ΠΎΠ±Ρ€Π°Π·Π° (EXE), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π² ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅. Если исполняСмый Ρ„Π°ΠΉΠ» Π½Π΅ ΡΠ²Π»ΡΠ΅Ρ‚ся Win32 ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, Ρ‚ΠΎ ΠΈΡ‰Π΅Ρ‚ся ΠΎΠ±Ρ€Π°Π· ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ (support image) для запуска этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. НапримСр, Ссли исполняСтся Ρ„Π°ΠΉΠ» с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ. bat, запускаСтся cmd. exe ΠΈ Ρ‚. ΠΏ.

Π’ WinNT/2000/Vista для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅. CreateProcess, найдя исполняСмый Win32 Ρ„Π°ΠΉΠ», ΠΈΡ‰Π΅Ρ‚ Π² SOFTWAREMicrosoftWindows NTCurrentVersionImage File Execution Option Ρ€Π°Π·Π΄Π΅Π» с ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ запускаСмого Ρ„Π°ΠΉΠ»Π°, Π·Π°Ρ‚Π΅ΠΌ ΠΈΡ‰Π΅Ρ‚ Π² Π½Π΅ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Debugger, ΠΈ Π΅ΡΠ»ΠΈ строка Π½Π΅ ΠΏΡƒΡΡ‚Π°, запускаСт Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π² Π½Π΅ΠΉ написано вмСсто Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

— Π‘оздаСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Win32 «ΠΏΡ€ΠΎΡ†Π΅ΡΡ».

— Π‘оздаСтся пСрвичная Π½ΠΈΡ‚ΡŒ (стСк, контСкст ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ «Π½ΠΈΡ‚ΡŒ»).

— ΠŸΠΎΠ΄ΡΠΈΡΡ‚Π΅ΠΌΠ° Win32 увСдомляСтся ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ процСсса ΠΈ Π½ΠΈΡ‚ΠΈ.

— ΠΠ°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ся Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠΉ Π½ΠΈΡ‚ΠΈ.

— Π’ ΠΊΠΎΠ½Ρ‚СкстС Π½ΠΎΠ²ΠΎΠ³ΠΎ процСсса ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ° инициализируСтся адрСсноС пространство (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ΡΡ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Π΅ DLL) ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ся Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

3. Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ процСссов

ΠŸΡ€ΠΎΡ†Π΅ΡΡ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ Ссли:

— Π’ходная функция ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠΉ Π½ΠΈΡ‚ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΠ»Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅.

— ΠžΠ΄Π½Π° ΠΈΠ· Π½ΠΈΡ‚Π΅ΠΉ процСсса Π²Ρ‹Π·Π²Π°Π»Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ExitProcess.

— ΠΠΈΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ процСсса Π²Ρ‹Π·Π²Π°Π»Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ TerminateProcess.

Когда процСсс Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ, всС UserΠΈ GDI_ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, созданныС процСссом, ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°ΡŽΡ‚ΡΡ, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ядра Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ΡΡ (Ссли ΠΈΡ… Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΉ процСсс), адрСсноС пространство процСсса уничтоТаСтся.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€: ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° создаСт процСсс «ΠšΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€».

#include

int main (int argc, char* argv[])

{

STARTUPINFO si;

PROCESS_INFORMATION pi;

ZeroMemory (&si, sizeof (si));

si.cb = sizeof (si);

ZeroMemory (&pi, sizeof (pi));

if (! CreateProcess (NULL, «c:\windows\calc.exe», NULL, NULL, FALSE,

0, NULL, NULL, &si, &pi))

return 0;

// Close process and thread handles.

CloseHandle (pi.hProcess);

CloseHandle (pi.hThread);

return 0;

}

4. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΈΡ‚Π΅ΠΉ

ΠŸΠ΅Ρ€Π²ΠΈΡ‡Π½Π°Ρ Π½ΠΈΡ‚ΡŒ создаСтся автоматичСски ΠΏΡ€ΠΈ создании процСсса. ΠžΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Π½ΠΈΡ‚ΠΈ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ функциями CreateThread ΠΈ CreateRemoteThread (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² WinNT/2000/XP/Vista).

5. Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ Π½ΠΈΡ‚Π΅ΠΉ

ΠΠΈΡ‚ΡŒ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ Ссли

— Π€ΡƒΠ½ΠΊΡ†ΠΈΡ Π½ΠΈΡ‚ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅.

— ΠΠΈΡ‚ΡŒ самоуничтоТаСтся, Π²Ρ‹Π·Π²Π°Π² ExitThread.

— Π”ругая Π½ΠΈΡ‚ΡŒ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ стороннСго процСсса Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ TerminateThread.

— Π—Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ процСсс, содСрТащий Π΄Π°Π½Π½ΡƒΡŽ Π½ΠΈΡ‚ΡŒ.

6. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π²ΠΎΠ»ΠΎΠΊΠΎΠ½

Π’ΠΎΠ»ΠΎΠΊΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ создано с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ систСмного Π²Ρ‹Π·ΠΎΠ²Π° CreateFiber ΠΈΠ· ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ Π½ΠΈΡ‚ΠΈ процСсса ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎ ΠΏΡƒΡ‚Π΅ΠΌ прСобразования Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π½ΠΈΡ‚ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ConvertThreadToFiber. ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ Π²ΠΎΠ»ΠΎΠΊΠ½Π°ΠΌΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ SwitchToFiber, Π½ΠΎ Π΅Π΅ Π²Ρ‹Π·ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· Π²ΠΎΠ»ΠΎΠΊΠ½Π°.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€: ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° создаСт 4 Π²ΠΎΠ»ΠΎΠΊΠ½Π°, ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… выполняСт ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Π²ΠΎΠ»ΠΎΠΊΠ½ΠΎ, Ссли число ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ большС 10, Ρ€Π°Π±ΠΎΡ‚Π° Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ.

// для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π²ΠΎΠ»ΠΎΠΊΠ½Π°ΠΌΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ 2 строки ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹!

#define WIN32_LEAN_AND_MEAN

#define _WIN32_WINNT 0×0400

#include «stdio.h»

#include «windows.h»

int Counter;

void *fiber[5];

void WINAPI Func (void *)

{

for (;) {

printf («Fiber Number % dn», Counter % 4);

if ((Counter++)<10) {

SwitchToFiber (fiber[Counter % 4]);

} else break;

}

}

int main (int argc, char* argv[])

{

Counter=0;

fiber[0]=CreateFiber (0, Func, NULL);

fiber[1]=CreateFiber (0, Func, NULL);

fiber[2]=CreateFiber (0, Func, NULL);

fiber[3]=CreateFiber (0, Func, NULL);

// для ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠ΅ Π²ΠΎΠ»ΠΎΠΊΠ½ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Π½ΠΈΡ‚ΡŒ Π² Π²ΠΎΠ»ΠΎΠΊΠ½ΠΎ

fiber[4]=ConvertThreadToFiber (NULL);

SwitchToFiber (fiber[0]);

return 0;

}

7. Π£Π½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²ΠΎΠ»ΠΎΠΊΠΎΠ½

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

8. Wait-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Для приостановки выполнСния Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½ΠΈΡ‚ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ способы.

Ѐункция Sleep () приостанавливаСт Ρ€Π°Π±ΠΎΡ‚Ρƒ Π½ΠΈΡ‚ΠΈ Π½Π° Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ число миллисСкунд. Если Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Π²Ρ‹ ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ 0 ms, Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅. ΠΠΈΡ‚ΡŒ откаТСтся ΠΎΡ‚ ΡΠ²ΠΎΠ΅Π³ΠΎ ΠΊΠ²Π°Π½Ρ‚Π° процСссорного Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΎΠ΄Π½Π°ΠΊΠΎ Ρ‚ΡƒΡ‚ ΠΆΠ΅ появится Π² ΡΠΏΠΈΡΠΊΠ΅ Π½ΠΈΡ‚Π΅ΠΉ, Π³ΠΎΡ‚ΠΎΠ²Ρ‹Ρ… ΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ. Π˜Π½Ρ‹ΠΌΠΈ словами ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ Π½Π°ΠΌΠ΅Ρ€Π΅Π½Π½ΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½ΠΈΡ‚Π΅ΠΉ (Π²Π΅Ρ€Π½Π΅Π΅ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ — вСдь ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ для выполнСния Π½ΠΈΡ‚ΡŒΡŽ Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ Ρ‚Π° ΠΆΠ΅ ΡΠ°ΠΌΠ°Ρ).

ΠŸΡ€ΠΈΠΌΠ΅Ρ€. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° создаСт процСсс «ΠšΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€» ΠΈ Ρ‡Π΅Ρ€Π΅Π· 15 сСкунд Π΅Π³ΠΎ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°Π΅Ρ‚.

#include

int main (int argc, char* argv[])

{

STARTUPINFO StartUpInfo;

PROCESS_INFORMATION ProcessInfo;

memset (&StartUpInfo, 0, sizeof (STARTUPINFO));

StartUpInfo.cb=sizeof (STARTUPINFO);

If (CreateProcess (NULL, «c:\windows\calc.exe», NULL, NULL, FALSE,

NORMAL_PRIORITY_CLASS, NULL, NULL,&StartUpInfo,&ProcessInfo))

{

Sleep (15 000);

TerminateProcess (ProcessInfo.hProcess, 0);

}

ExitProcess (0);

}

Ѐункция WaitForSingleObject () приостанавливаСт Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½ΠΈΡ‚ΠΈ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π΄Π²ΡƒΡ… событий:

— ΠΈΡΡ‚Π΅Ρ‡Π΅Ρ‚ Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚ оТидания;

— ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅Ρ‚ Π² ΡΠΈΠ³Π½Π°Π»ΡŒΠ½ΠΎΠ΅ (signaled) состояниС.

По Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠΌΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠ΅ ΠΈΠ· Π΄Π²ΡƒΡ… событий ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ. ΠžΠΆΠΈΠ΄Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ wait_Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ядра, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ «ΠΏΡ€ΠΎΡ†Π΅ΡΡ» ΠΈΠ»ΠΈ «Π½ΠΈΡ‚ΡŒ», Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ°Ρ‚ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ WaitForMultipleObjects пСрСдаСтся сразу массив ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². МоТно ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ срабатывания сразу всСх ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ….

ΠŸΡ€ΠΈΠΌΠ΅Ρ€. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° создаСт Π΄Π²Π΅ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… Π½ΠΈΡ‚ΠΈ ΠΈ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ ΠΈΡ… Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ. Нити просто выводят тСкстовоС сообщСниС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ΠΎ ΠΈΠΌ ΠΏΡ€ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

#include

#include

unsigned ThreadFunc (void * arg)

{

char ** str = (char**) arg;

MessageBox (0, str[0], str[1], 0);

ExitThread (0);

return 0;

}

int main (int argc, char* argv[])

{

char * InitStr1 = {"First thread running!", «11 111"}; // строка для ΠΏΠ΅Ρ€Π²ΠΎΠΉ Π½ΠΈΡ‚ΠΈ

char * InitStr2 = {"Second thread running!", «22 222"}; // строка для Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π½ΠΈΡ‚ΠΈ

unsigned long uThreadIDs[2];

HANDLE hThreads[2];

hThreads[0] = CreateThread (NULL, 0, (LPTHREAD_START_ROUTINE) ThreadFunc,

InitStr1, 0,&uThreadIDs[0]);

hThreads[1] = CreateThread (NULL, 0, (LPTHREAD_START_ROUTINE) ThreadFunc,

InitStr2, 0,&uThreadIDs[1]);

// Π–Π΄Π΅ΠΌ, ΠΏΠΎΠΊΠ° Π½ΠΈΡ‚ΠΈ Π½Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠ°Ρ‚ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ

WaitForMultipleObjects (2, hThreads, TRUE, INFINITE);

// Π—Π°ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ дСскрипторы

CloseHandle (hThreads[0]);

CloseHandle (hThreads[1]);

return 0;

}

Π’Ρ‹Π²ΠΎΠ΄Ρ‹

Π’ Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚Π΅ рассмотрСны Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ WIN API Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ дСйствий для создания ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΡ€ΠΎΡ†Π΅ΡΠ°ΠΌΠΈ, нитями ΠΈ Ρ„ΠΎΠ»ΠΎΠΊΠ½Π°ΠΌΠΈ ΠΏΡ€ΠΈ созданиии Π²ΠΌΠΈΠ½Π΄ΠΎΡƒΠ·-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ. Для получСния ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ, использовании ΠΈ ΡΠΈΠ½Ρ‚аксисС всСх Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ WIN32 API Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ систСмой ΠΏΠΎΠΌΠΎΡ‰ΠΈ MS SDK, входящСй Π² ΡΠΎΡΡ‚Π°Π² срСд программирования Borland Delphi ΠΈΠ»ΠΈ CBuilder, Π° Ρ‚Π°ΠΊΠΆΠ΅ MSDN, поставляСмым Π² ΡΠΎΡΡ‚Π°Π²Π΅ систСмы программирования Visual C.

1. Бэрри Нанс. ΠšΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹Π΅ сСти ΠΏΠ΅Ρ€. Ρ Π°Π½Π³Π». — Πœ.: Π‘Π˜ΠΠžΠœ, 1996.

2. Глоссарий сСтСвых Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ² http://www.bilim.com/koi8/library/glossary/

3. ΠšΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹Π΅ сСти: Π£Ρ‡Π΅Π±Π½Ρ‹ΠΉ курс Microsoft Corporation — М.: Π˜Π·Π΄Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΠΎΡ‚Π΄Π΅Π» «Π ΡƒΡΡΠΊΠ°Ρ рСдакция», 1999.

4. ΠžΡΠ½ΠΎΠ²Ρ‹ соврСмСнных ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹Ρ… Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ ΠΏΠΎΠ΄ Ρ€Π΅Π΄Π°ΠΊΡ†ΠΈΠ΅ΠΉ А. Π”. Π₯ΠΎΠΌΠΎΠ½Π΅Π½ΠΊΠΎ — БПб КОРОНА ΠΏΡ€ΠΈΠ½Ρ‚, 1998.

5. РСсурсы Microsoft Windows NT Workstation 4.0 ΠΏΠ΅Ρ€. Ρ Π°Π½Π³Π». яз. BNV — БПб, 1998.

6. Π‘Π΅Ρ‚Π΅Π²Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ систСмы Н. А. ΠžΠ»ΠΈΡ„Π΅Ρ€, Π’. Π“. ΠžΠ»ΠΈΡ„Π΅Ρ€, 2001, БПб, ΠŸΠΈΡ‚Π΅Ρ€, 544 стр.

7. Бинхронизация Π½ΠΈΡ‚Π΅ΠΉ Π²Π½ΡƒΡ‚Ρ€ΠΈ процСсса Π² ΠžΠ‘ Windows, http://subscribe.ru/ archive/comp.soft.win.swodniwgniqaf/200 305/23131921.text

8. Π‘ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ систСмы, Π­. Π’Π°Π½Π΅Π½Π±Π°ΡƒΠΌ, 2002, БПб, ΠŸΠΈΡ‚Π΅Ρ€, 1040 стр.

9. Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊ Novell Netware 4 Π‘. Π‘. ΠžΡ€Π»ΠΎΠ², ΠΏΠΎ Π·Π°ΠΊΠ°Π·Ρƒ ИИЦ «ΠŸΠΎΠΏΡƒΡ€Ρ€ΠΈ», 1994.

10. Π’ΠΈΡ‚Ρ‚Π΅Π» Π­Π΄, Π₯адсон ΠšΡƒΡ€Ρ‚, Π”ΠΆ. Майкл Π‘Ρ‚ΡŽΠ°Ρ€Π΄ Networking Essentials — БПб ΠŸΠ˜Π’Π•Π , 1999.

11. Π’ΠΈΡ‚Ρ‚Π΅Π» Π­Π΄, Π₯адсон ΠšΡƒΡ€Ρ‚, Π”ΠΆ. Майкл Π‘Ρ‚ΡŽΠ°Ρ€Π΄ TCP/IP — БПб ΠŸΠ˜Π’Π•Π , 1999.

12. Якубайтис Π­. А. Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ сСти ΠΈ ΡΠΈΡΡ‚Π΅ΠΌΡ‹: Бправочная ΠΊΠ½ΠΈΠ³Π°. — Πœ.: Ѐинансы ΠΈ ΡΡ‚атистика, 1996.

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ