Управление переключением задач в Windows

Тема в разделе "WASM.NT.KERNEL", создана пользователем vadimec, 6 окт 2008.

  1. vadimec

    vadimec New Member

    Публикаций:
    0
    Регистрация:
    6 окт 2008
    Сообщения:
    7
    Помогите ответить на вопрос: можно ли в Windows (NT) организовать запуск своей задачи
    по прерыванию от системного таймера, минуя штатный планировщик Windows?
    Другими словами, чтобы задача получала управление в строго определенные моменты времени,
    независимо от Windows.
    Виндусовые таймеры (типа мультимедия) не годятся.

    Немного подумал и решил уточнить. Дело вот в чем: существует некоторое
    множество КОММЕРЧЕСКИХ разработок (например, RTX), которые, являясь надстройкой Windows, реализуют в данной ОС подобие реального времени. Но сами понимаете,
    всегда хочется иметь свое ;) Поэтому и решил разобраться в данном вопросе.
     
  2. Velheart

    Velheart New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    526
    Может похукать прерывание от таймера и выполнять там свой код до передачи управления оригинальному обработчику и понижению IRQL?
     
  3. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Нельзя. Виндовс не является системой реального времени.
     
  4. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    можно поднять приоритет потока и он будет получать сообщения от стд таймеров без задержек.
     
  5. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Он будет получать их с минимальными задержками :)
    Даже поток с real time приоритетом не вытеснит предыдущий поток, пока у того не закончится квант времени.
     
  6. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    Partner
    Именно так и пишут в осрв. Задержка не меньше и задержка не больше, просто указываются цифры на которые разрабы могут ориентироваться. Само переключение контекстов с запчастями происходит не мгновенно.
     
  7. vadimec

    vadimec New Member

    Публикаций:
    0
    Регистрация:
    6 окт 2008
    Сообщения:
    7
    А как на счет передачи управления на код в ring3 после перехвата прерывания таймера?
    То есть выполнить за Windows SwapContext на наш код.
    Насколько это вообще возможно?
     
  8. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Ну дык автор не озвучил какая требуется точность .
    Сказал только, что точнось multimedia таймера (1мс вроде) его не устраивает.
     
  9. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    [vadimec прав. Partner вы не правы, вотъ]
    Аппаратные прерывания заканчиваются(сходятся в общей точке) функцией HalEndSystemInterrupt():
    ISR -> HalBeginSystemInterrupt() -> [...] -> HalEndSystemInterrupt() -> KiDispatchInterrupt() -> KiQueueReadyThread()/SwapContext().
    Отсюда и вызывается планировщик. По дефолту юзается низкоточный PIT.
    Но есть возможность заюзать таймер APIC - ось поддерживает его, высокоточный таймер, даже рантайм есть - HalStartProfileInterrupt() и тп.
     
  10. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Если не ошибаюсь, точность PIT таймера - 10 мс APIC таймера - 15 мс
     
  11. vadimec

    vadimec New Member

    Публикаций:
    0
    Регистрация:
    6 окт 2008
    Сообщения:
    7
    Partner
    В принципе, достаточно килогерца (1мс). Но мультимедийный таймер не держит
    заявленную частоту, часто случаются пропуски (паузы около 10 мс).
    Насколько я знаю, RTC-таймер можно настроить хоть на 8 килогерц. Можно ли
    к нему привязаться в Винде? В Линуксе вроде было можно.
    Только вот SwapContext из обработчика прерывания от RTC наверное пытаться
    вызывать бесполезно.
     
  12. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Привязать что ? Переключение контекста ? Сомневаюсь...
     
  13. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    vadimec
    Значит ты его не настроил. Стандартный таймер yf сообщениях сробатывает через 15мс и это очень заметно на Gettickcount так как он тоже обновляется с этой частотой, после настройки мультимедийного таймера будет 1мс. Но раз в несколько секунд виндовс будет переключать процессы и будут большии задержки.
    Так устроин планировщик времени.

    Бред. Частота таймер PIT настриваться 1193180/x где x от 1 до 65536
    1/1193180~0,838 мкс, какая именно частота выбранна в виндоусе незнаю. Но если мультимидмйный таймер работает с частотой 1мс то явно таймер настрой как минимум на равное время но скорее всего на большее.

    APIC он вообще на частотуу процессора завязан и может сробатывать каждые 2,4,8,16,32,64,128 тика.

    Есть PM Timer он используется в SMI.А также в виндоусе как мультимидийный счетчик. Прерывания по нему идут только на SMI а вот число тиков использует виндовс.

    Есть HPET он имеет частоту 14,31818МГц вот он может заменять PIT.

    RTC сидит на 8 IRQ. Частоту можно менять, от 2Гц до 8192Гц через степень двойки. Лучше использовать PIC, его можно настройть на больший диапозон частот.
     
  14. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Pavia
    А как их программировать, или для каждой железки свой кодес тоскать;
    Случайно в биос прерывания нужного нет ?
     
  15. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    когдато шевеление нт4 предлагалось ускорять перепрограммированием 53(54?), может даже тут. Как с хр - не знаю. Однако это не спасет. ОСРВ имеют не мгновенный отклик, а отклик гарантировано происходящий в пределах от и до. В выни такой гарантии нет. Да и зачем в громоздкой десктопно-игрушечной вводить железовстраиваемые заморочки? Осрв, они могут быть даже тормознутее вынь/линь тк второе требование - повышеная надежность, 3-тье скромность по ресурсам, 4-тое размеры итд. Встраивать вынь в прибор, когда 99.99999% вирусов написано именно под нее - редчайшая глупость. Имхо.

    Хотите сделать свою осрв - отталкивайтесь от миникса, он очень подходящ для этой цели.
     
  16. vadimec

    vadimec New Member

    Публикаций:
    0
    Регистрация:
    6 окт 2008
    Сообщения:
    7
    Насколько мне известно, передать управление jmp-ом на код с иными привелегиями нельзя (т.е. напрямую ring0->ring3).
    Есть исходники драйвера что перехватывает IRQ8 (CMOS RTC) и следят за переключением потоков. Но перехват - дело одно, а запустить собственную задачу -
    совершенно другое...

    Можно ли проделать такой трюк: используя архитектурные возможности IA32
    производить самостоятельно запуск своих задач (возможно, порожденных
    изначально средствами Windows, пусть она создает там свои таблицы, TEB-ы там всякие и тд., нам на это всё равно) в реальном времени, т.е. по прерыванию от таймера.
     
  17. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    _basmp_
    Зато прибор удобно иметь в винде с её кучей полезных возможностей и инструментов ;) имхо для этого устройство должно иметь приличный буфер, чтобы обмен инфой не зависел её от капризов с задержками.

    vadimec
    http://www.wasm.ru/forum/viewtopic.php?id=24967
     
  18. PROFi

    PROFi New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2003
    Сообщения:
    690
    vadimec

    На свою задачу переключишся, а вот обратно - короче посмотри селектор задачи винды - плохо станает :)

    В целом эффективный метод используемый в приватных отладчиках ядра :)
     
  19. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    Y_Mur
    девайсориентированых, встраиваемых возможностей в выни как раз и нет. Например, на 3й месяц эксплуатации ваш прибор заглючил, причем крепко. Что вы сделаете? перегрузите? Он пойдет, а еще через 2 месяца заглючит еще крепче и делов натворит, кто отвечать будет? А бсоды? Как отлаживать, как последствия смягчать? Не сразу в лаборатории, а потом, в реале. Ведь девайс закрыт извне и управляет, напр, тормозами у машины (ABS) или впрыском топлива, или отсосом шахтных газов, или турбинами на электростанции итд. Представьте себе как оно зависание или глюк выглядеть будут. А интерфейс с вынью можно организовать, если организованного уже нету. Это проще чем рт возможности в вынь втюхивать.
     
  20. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    _basmp_
    Гы-Гы :))
    Кроме этого существует ещё немаленький выбор девайсов, для которых win управление самое оно ;)
    - осциллографы, для которых можно слепить удобный виртуальный интерфейс + возможность экспорта сигнала в различные анализаторы, как сторонние, так и самописные-заточенные под спец. задачу;
    - генераторы, для которых тоже самое + звуковые редакторы;
    - поделки, а-ля плоттер в том числе 3D (типа фреза на манипуляторе) ;) для которых поддержка мощными редакторами графических "исходников" гораздо важнее отсутствию сбоев - подумаешь запортится из-за бсода/вируса и т.п. один образец из 100, на пробники всё равно больше материала изведётся ;)
    и т.д.
    Так что не стоит быть категоричным - всему своё место ;)