uawikipc.ru

Закінчення часу таймера

Відео: Простий таймер на мікросхемі CD4011

Як вже говорилося, основним завданням ISR-процедури, пов`язаної з перериванням, що генерується RTC або PIT, є відстеження системного часу, яке в основному виконується процедурою KeUpdateSystemTime.

Її друге завдання полягає у відстеженні логічного часу виконання, наприклад, часу виконання процесу або потоку, і системного часу такту, яке є базовим показником, використовуваним такими API-функціями, як GetTickCount, які, в свою чергу, використовуються розробниками для операцій з часом в їх додатках. Ця частина роботи виконується процедурою KeUpdateRunTime. Але перед виконанням будь-якої з цих робіт, процедура KeUpdateRunTime перевіряє, чи не минув чи час будь-якого таймера.

Таймери Windows можуть бути або абсолютними таймерами, що передбачає в майбутньому певний показник закінчення часу, або відносними таймерами, які містять від`ємне значення закінчення терміну, що використовується як позитивний зсув від поточного часу при введенні таймера в дію. Усередині системи все таймери перетворюються до абсолютного часу закінчення терміну, хоча система стежить за тим, чи є цей час «справжнім» абсолютним часом або перетвореним відносним часом.

Ця різниця важлива в деяких сценаріях, наприклад, в таких, як перехід на літній час (або навіть зміна показань годин вручну).

Якщо користувач перевів годинник з 13 годин на 19 годин, абсолютний таймер все одно видасть сигнал в «20 годин», а ось відносний таймер, налаштований, скажімо, на закінчення часу «через 2 години», не відчує впливу зміни показання годин, оскільки 2 години ще не пройшли. При виникненні подібних подій зміни системного часу ядро перепрограмує абсолютне час, пов`язане з відносними таймерами, щоб воно відповідало новим установкам.

Оскільки годинник видають сигнал через відомий кратний інтервал, нижні розряди поточного системного часу будуть в одній з 64 відомих позицій (на APIC HAL). Windows використовує цю обставину для відома всіх таймерів драйверів і додатків в пов`язані списки на основі масиву, в якому кожен елемент відповідає можливого кратному показником системного часу.

Ця таблиця, звана таблицею таймера, знаходиться в блоці управління областю процесора - PRCB, що дозволяє кожному процесору представляти свою власну незалежну закінчення часу таймера без необхідності запиту глобальної блокування.



Далі буде показано, що визначається таблиця таймера логічного процесора, в яку вставляється таймер. Оскільки таблиця таймера є у кожного процесора, робота після закінчення часу таймера проробляється кожним процесором.

При ініціалізації кожного процесора таблиця заповнюється абсолютними таймерами з нескінченним терміном закінчення часу, щоб уникнути не когерентного стану. Кожен кратний показник системного часу, з яким може бути пов`язаний таймер, називається виконавцем і зберігається в заголовку диспетчера об`єкта таймера. Тому, щоб визначити, минув чи час таймера, потрібно тільки лише перевірити, чи є у зв`язаному списку будь-які таймери, пов`язані з поточним виконавцем.

приклад-таймерних-списків

Хоча оновлення лічильників і перевірка пов`язаного списку є швидкими операціями, прохід по кожному таймером і зміна терміну закінчення його часу вдає із себе потенційно витратну операцію, адже слід мати на увазі, що вся ця робота нині виконується на рівні CLOCK_LEVEL, тобто на виключно високому IRQL-рівні.

Відео: Таймер PALISAD 66190 огляд, розбирання, випробування

Аналогічно тому, як ISR-процедура драйвера вибудовує в чергу DPC, щоб відстрочити роботу, ISR-процедура годин запитує програмне переривання DPC, встановлює прапор в PRCB, щоб механізм виснаження DPC знав про те, що таймери потребують закінчення терміну своєї роботи.

Точно так же, при оновленні часу виконання процесу або потоку, якщо ISR-процедура годин визначає, що при потоці закінчився квант часу, вона також ставить в чергу програмне переривання DPC і встановлює інший PRCB прапор. Ці прапори є у кожної PRCB-області, оскільки кожен процесор зазвичай робить свої власні обчислення по оновленню часу виконання, так як кожен процесор виконує індивідуальний потік і має різні пов`язані з ним завдання. У таблиці показані різні поля, які використовуються при обробці таймера і закінчення терміну його роботи.

Як тільки IRQL в рамках обробки DPC знову знизиться до рівня DISPATCH_LEVEL, ці два прапори будуть встановлені.

Поля KPRCB, що відносяться до обробки таймера

поля-KPRCB

Тут буде розглянута робота після закінчення часу таймера. Оскільки таймери пов`язані один з одним виконавцем, код закінчення часу (виконуваний DPC-викликом, пов`язаним з PRCB в поле TimerExpiryDpc) проводить розбір цього списку з голови до хвоста. (Під час ставки таймери, найближчі до значення, кратного інтервалу годин, будуть першими, а за ними послідують таймери, які все ближче і ближче до наступного інтервалу, але ще знаходяться в межах даного виконавця.)

Для закінчення часу таймера потрібно виконати дві основні задачі:

Відео: 3.3 Функція "таймер". Принцип роботи

  • Таймер розглядається як об`єкт синхронізації диспетчера (потоки чекають таймера в рамках закінчення ліміту часу або безпосередньо в рамках очікування). На таймері будуть запущені алгоритми тестування очікування і задоволення очікування. Ця робота розглянута далі в розділі, присвяченому синхронізації. Саме таким чином таймер для програм для користувача режиму і деякими драйверами.
  • Таймер розглядається як об`єкт управління, пов`язаний з процедурою зворотного DPC-виклику, яка виконується після закінчення часу таймера. Цей метод зарезервований лише для драйверів і забезпечує дуже швидку реакцію на закінчення часу таймера. (Метод очікування / диспетчеризації вимагає задіяти всю додаткову логіку сигналізації очікування.) Крім того, оскільки саме закінчення часу таймера виконується на рівні DISPATCH_LEVEL, на якому також запускаються DPC-процедури, для процедури зворотного виклику таймера складаються дуже сприятливі обставини.

Як тільки кожен процесор залучається до обслуговування таймера тактового інтервалу для виконання обробки системного часу і часу виконання, він також обробляє закінчення часу таймера після невеликої затримки, під час якої IRQL-рівень знижується з CLOCK_LEVEL до DISPATCH_LEVEL.

Відео: Що буде якщо закрити суперечку або закінчиться таймер на аліекспресс. Мій вам відповідь

На малюнку ця робота показана на прикладі двох процесорів - суцільні стрілки показують видачу сигналу переривання від годинника, а пунктирні стрілки показують обробку закінчення часу таймера, яка може проводитися, якщо у процесора є пов`язані з ним таймери.

витікання-часу-таймера

Поділитися в соц мережах:
Схожі
» » Закінчення часу таймера