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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ядра LinuxΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 66

Автор Π ΠΎΠ±Π΅Ρ€Ρ‚ Π›Π°Π²

del_timer_sync(&my_timer);

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ del_timer(), функция del_timer_sync() Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΈΠ· контСкста прСрывания.

Бостояния ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ†ΠΈΠΈ, связанныС с Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°ΠΌΠΈ

Π’Π°ΠΊ ΠΊΠ°ΠΊ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ асинхронно ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ выполняСмому Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠ΄Ρƒ, Ρ‚ΠΎ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ нСсколько Ρ‚ΠΈΠΏΠΎΠ² состояний ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ†ΠΈΠΈ Π·Π° рСсурсы. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Π½ΠΈΠΊΠΎΠ³Π΄Π° нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄, ΠΊΠ°ΠΊ Π·Π°ΠΌΠ΅Π½Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ mod_timer().

del_timer(my_timer);

my_timer->expires = jiffies + new_delay;

add_timer(my_timer);

Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, практичСски Π²ΠΎ всСх случаях слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ del_timer_sync(), Π° Π½Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ del_timer(). Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС нСльзя Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π½Π΅ выполняСтся. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅ сСбС, Ρ‡Ρ‚ΠΎ послС удалСния Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° ΠΊΠΎΠ΄ освободит ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠΌ-Π»ΠΈΠ±ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π²ΠΌΠ΅ΡˆΠ°Π΅Ρ‚ΡΡ Π² рСсурсы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ синхронная вСрсия Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π°.

НаконСц, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°Ρ‰ΠΈΡ‚Ρƒ всСх совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π΄Π°Π½- ΠΏΡ‹Ρ…, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ обращаСтся функция-ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°. Π―Π΄Ρ€ΠΎ выполняСт эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ асинхронно ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ ΠΊΠΎΠ΄Ρƒ. БовмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°Ρ‰ΠΈΡ‰Π°Ρ‚ΡŒΡΡ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Π»ΠΎΡΡŒ Π² Π³Π»Π°Π²Π°Ρ… 8 ΠΈ 9.

РСализация Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠ²

Π―Π΄Ρ€ΠΎ выполняСт ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠ² Π² контСкстС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ прСрывания послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ прСрывания Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ прСрывания Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ update_process_times(), которая Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ run_local_timers(), ΠΈΠΌΠ΅ΡŽΡ‰ΡƒΡŽ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²ΠΈΠ΄.

void run_local_timers(void) {

 raise_softirq(TIMER_SOFTIRQ);

}

ΠžΡ‚Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ΅ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ с Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ TIMER_SOFTIRQ обрабатываСтся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ run_timer_softirq(). Π­Ρ‚Π° функция выполняСт Π½Π° локальном процСссорС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ всСх Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠ², для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… истСк ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ оТидания (Ссли Ρ‚Π°ΠΊΠΈΠ΅ Π΅ΡΡ‚ΡŒ).

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

Π—Π°Π΄Π΅Ρ€ΠΆΠΊΠ° выполнСния

Часто ΠΊΠΎΠ΄Ρƒ ядра (особСнно Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°ΠΌ) Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ дСйствий Π½Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π±Π΅Π· использования Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠ² ΠΈΠ»ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° Π½ΠΈΠΆΠ½ΠΈΡ… ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½. Π­Ρ‚ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π°Ρ‚ΡŒ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠΌΡƒ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½ΠΈΡŽ врСмя Π½Π° Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ выполнСния Π·Π°Π΄Π°Ρ‡ΠΈ. Π’Π°ΠΊΠΎΠΉ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ достаточно ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ. НапримСр, Π² спСцификации сСтСвой интСрфСйсной ΠΏΠ»Π°Ρ‚Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½ΠΎ врСмя измСнСния Ρ€Π΅ΠΆΠΈΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ethernet-ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°, Ρ€Π°Π²Π½ΠΎΠ΅ 2 микросСкундам, Ρ‚.Π΅. послС установки ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠΉ скорости ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ хотя Π±Ρ‹ Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π΄Π²ΡƒΡ… микросСкунд ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ.

Π―Π΄Ρ€ΠΎ прСдоставляСт нСсколько Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ этой Π·Π°Π΄Π°Ρ‡ΠΈ, Π² зависимости ΠΎΡ‚ сСмантики Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ. Π­Ρ‚ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅ свойства. НСкоторыС Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π²ΠΎ врСмя Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ процСссор, Π½Π΅ давая возмоТности Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΡƒΡŽ, Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π΅Π·Π½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ. Π”Ρ€ΡƒΠ³ΠΈΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π½Π΅ Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ процСссор, Π½ΠΎ Π½Π΅ Π΄Π°ΡŽΡ‚ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΡ‡Π½ΠΎ Π² Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ[60].

Π—Π°Π΄Π΅Ρ€ΠΆΠΊΠ° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ†ΠΈΠΊΠ»Π°

НаиболСС простоС для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ (хотя ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅) Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ β€” это использованиС Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ†ΠΈΠΊΠ»Π° ΠΈΠ»ΠΈ оТидания Π² состоянии занятости (busy loop, busy waiting). Π­Ρ‚Π° Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ являСтся ΠΊΡ€Π°Ρ‚Π½Ρ‹ΠΌ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Ρƒ систСмного Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° ΠΈΠ»ΠΈ ΠΊΠΎΠ³Π΄Π° Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½Π°.

ИдСя проста β€” Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ постоянный Ρ†ΠΈΠΊΠ», ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ количСство ΠΈΠΌΠΏΡƒΠ»ΡŒΡΠΎΠ² систСмного Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°, ΠΊΠ°ΠΊ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅.

unsigned long delay = jiffies + 10; /* Π΄Π΅ΡΡΡ‚ΡŒ ΠΈΠΌΠΏΡƒΠ»ΡŒΡΠΎΠ² Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° */


while (time_before(jiffies, delay))

 ;

Π¦ΠΈΠΊΠ» Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ, ΠΏΠΎΠΊΠ° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ jiffies Π½Π΅ станСт большС, Ρ‡Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ delay, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Ρ‹ 10 ΠΈΠΌΠΏΡƒΠ»ΡŒΡΠΎΠ² систСмного Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°. Для Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ x86 со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° HZ, Ρ€Π°Π²Π½Ρ‹ΠΌ 1000, этот ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» Ρ€Π°Π²Π΅Π½ 10 миллисСкунд.

Аналогично ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

unsigned long delay = jiffies + 2*HZ; /* Π΄Π²Π΅ сСкунды */


while (time_before(jiffies, delay))

 ;

Π’ этом случаС Ρ†ΠΈΠΊΠ» Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ, ΠΏΠΎΠΊΠ° Π½Π΅ поступит 2*HZ ΠΈΠΌΠΏΡƒΠ»ΡŒΡΠΎΠ² систСмного Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°, Ρ‡Ρ‚ΠΎ всСгда Ρ€Π°Π²Π½ΠΎ 2 сСкундам, нСзависимо ΠΎΡ‚ частоты систСмного Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°.

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

Π›ΡƒΡ‡ΡˆΠΈΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ являСтся ΠΏΠ΅Ρ€Π΅ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ процСссор ΠΌΠΎΠ³ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ, ΠΏΠΎΠΊΠ° ваш ΠΊΠΎΠ΄ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚:

unsigned long delay = jiffies + 5*HZ;


while (time_before(jiffies, delay))

 cond_resched();

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

Поклонники языка Π‘ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΠΎΠ²Π°Ρ‚ΡŒΡΡ, ΠΊΠ°ΠΊΠΈΠ΅ Π΅ΡΡ‚ΡŒ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ, Ρ‡Ρ‚ΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ Ρ†ΠΈΠΊΠ»Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ? ΠžΠ±Ρ‹Ρ‡Π½ΠΎ компилятор Π‘ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ всСго ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·. Π’ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ ситуации Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ, Ρ‡Ρ‚ΠΎ пСрСмСнная jiffies Π±ΡƒΠ΄Π΅Ρ‚ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»Π°. Нам ΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ jiffies ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Π»ΠΎΡΡŒ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»Π°, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ увСличиваСтся Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ мСстС, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ Π² ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΈ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°. ИмСнно поэтому данная пСрСмСнная ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° Π² Ρ„Π°ΠΉΠ»Π΅ <linux/jiffies.h> с Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ volatile. ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово volatile ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ компилятору, Ρ‡Ρ‚ΠΎ эту ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΠ· Ρ‚ΠΎΠ³ΠΎ мСста, Π³Π΄Π΅ ΠΎΠ½Π° хранится Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти, ΠΈ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ копию, Ρ…Ρ€Π°Π½ΡΡ‰ΡƒΡŽΡΡ Π² рСгистрС процСссора. Π­Ρ‚ΠΎ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» выполнится, ΠΊΠ°ΠΊ ΠΈ оТидаСтся.

ΠšΠΎΡ€ΠΎΡ‚ΠΊΠΈΠ΅ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ

Иногда ΠΊΠΎΠ΄Ρƒ ядра (ΠΈ снопа ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°ΠΌ) Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ Π½Π° ΠΎΡ‡Π΅Π½ΡŒ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠ΅ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Ρ‹ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ (ΠΊΠΎΡ€ΠΎΡ‡Π΅, Ρ‡Π΅ΠΌ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ систСмного Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°), ΠΏΡ€ΠΈΡ‡Π΅ΠΌ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ с достаточно высокой Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ. Π­Ρ‚ΠΎ часто Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ для синхронизации с Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹ΠΌ обСспСчСниСм, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ описано Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ минимальноС врСмя выполнСния дСйствий, ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ часто Π±Ρ‹Π²Π°Π΅Ρ‚ мСньшС ΠΎΠ΄Π½ΠΎΠΉ миллисСкунды. Π’ случаС Ρ‚Π°ΠΊΠΈΡ… ΠΌΠ°Π»Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ Π½Π° основании ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ jiffies, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅. ΠŸΡ€ΠΈ частотС систСмного Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°, Ρ€Π°Π²Π½ΠΎΠΉ 100 Π“Ρ†, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Π° систСмного Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° достаточно большоС β€” 10 миллисСкунд! Π”Π°ΠΆΠ΅ ΠΏΡ€ΠΈ частотС систСмного Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° 1000 Π“Ρ†, ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ систСмного Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° Ρ€Π°Π²Π΅Π½ ΠΎΠ΄Π½ΠΎΠΉ миллисСкундС. Ясно, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ обСспСчиваСт Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠ΅ ΠΈ Ρ‚ΠΎΡ‡Π½Ρ‹Π΅ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ.

Π―Π΄Ρ€ΠΎ прСдоставляСт Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для обСспСчСния микросСкундных ΠΈ миллисСкундных Π·Π°Π΄Π΅Ρ€ΠΆΠ΅ΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π² Ρ„Π°ΠΉΠ»Π΅ <linux/delay.h> ΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ jiffies.

void udelay(unsigned long usecs);

void mdelay(unsigned long msecs);

ΠŸΠ΅Ρ€Π²Π°Ρ функция позволяСт Π·Π°Π΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ количСство микросСкунд с использованиСм Ρ†ΠΈΠΊΠ»Π°. Вторая функция Π·Π°Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ количСство миллисСкунд. Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ Π²ΡΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ΄Π½Π° сСкунда Ρ€Π°Π²Π½Π° 1000 миллисСкундам, Ρ‡Ρ‚ΠΎ эквивалСнтно 1000000 микросСкунд. ИспользованиС этих Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½ΠΎ.