Переключение задачи по системным часам (таймеру)

Тема в разделе "WASM.HARDWARE", создана пользователем avl, 11 сен 2008.

  1. avl

    avl New Member

    Публикаций:
    0
    Регистрация:
    11 сен 2008
    Сообщения:
    4
    Вопрос к знатокам.
    В 486 процессоре (там точно (!)) переключение задач происходило 50 раз в секунду по системному таймеру. А кто скажет точно (!) с какой частотой и как это происходит в Pentium I-IV, Core и современных процессорах AMD? И ссылка на доступный документ где это написано не помешал бы.
    Надо узнать, а найти никак не могу. Помогите пожалуйста!
    Спасибо!
     
  2. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    avl
    В самом процессоре ничего не происходило само по себе. Все зависит от ОС. Какаяя у тебя ОС?
    Стандартная частота таймера 1193180/65536. Но в Win 98 она перепрограмировалась на 1193180/1192.
    В NT возиожно чаще.
     
  3. glaon

    glaon New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2008
    Сообщения:
    13
    Задачи переключает ОС, а не процессор - обычно ставится обработчик на irq0(прерывание таймера) - он и переключает task'и, а сам таймер можно поставить практически какой угодно.
     
  4. avl

    avl New Member

    Публикаций:
    0
    Регистрация:
    11 сен 2008
    Сообщения:
    4
    Ага!
    Значит после сброса, нынешние процессоры могут принудительно переключать задачи с частотой 18,2 Гц, а если нужно быстрее, то перепрограммируется таймер. Я правильно понял? И копать нужно в направление http://wiki.osdev.ru/index.php/Timer ?
     
  5. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    avl
    Ничего-то ты не понял ;)
    Процессоры сами по себе никаких задач не переключают это делает ось, используя системный таймер (собственно как она его использует её личное дело и зависит от реализации оси а не от процессора). Просто современные камни имеют возможность аппаратно упростить программеру переключение задачи, но ось во первых вообще не обязана этой "аппаратной поддержкой" пользоваться, а во вторых как правило использует не весь механизм "аппаратного переключения", а только ту его часть что сочтёт нужным ;)
    Если ты запустишь суперсовременный процессор в среде ДОС то она как была однозадачной так таковой и останется и сколько таймер не перепрограммируй переключения задачи не дождёшся :)) Однозадачный режим будет и на стадии загрузки любой оси, просто потому что многзадачность там совершенно не нужна ;)
    Копай в сторону планировщика потоков в кернел моде.
     
  6. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    avl
    После сброса есть только одна задача. БИОС инициализирует оборудование. Есть прерывания и таймер 8254. Таймер работает с частотой 18,2 Гц и вызывает прерывания. ОС при загрузке инициирует обработку прерывания. Заменяет обработчик прерывания БИОС'а на свой. В обработчике прерывания может быть код который переключает задачи, а может и не быть. К примеру в MS-DOS одна задача и разумеется переключать тут не чего.

    Частоту таймера 8254 можно сменить http://wiki.osdev.ru/index.php/Timer
    Нормальная ОС меняет ее на большею частоту с 18,2Гц на 1000 Гц а то и больше.

    Но прогресс не стоит на месте. На смену 8254 пришел HPET. И теперь ОС может выбирать что использовать старый таймер или новый.
     
  7. Barbos

    Barbos Slavon

    Публикаций:
    0
    Регистрация:
    13 ноя 2007
    Сообщения:
    280
    Адрес:
    Kharkov
    где то в литературе видел цыфру 20 мс - квант процессорного времени в вин2к (50 Гц).
    Думаю, таймер с такой частотой там и работает?
    1000 Гц - кажется слишком сильно. каждую мс дергает irq0 чтоли? не сильно при таких частотах сядет производительность?
    хотя наверно там обработчик не тяжелый...
     
  8. avl

    avl New Member

    Публикаций:
    0
    Регистрация:
    11 сен 2008
    Сообщения:
    4
    Спасибо!
    Всё ясно, и не только куда копать но и что делать! А то я поисковикам задаю глупые вопросы (переключение задачи и т. п.), а они мне рассказывают то, что я и так помню.

    "Жаренная колбаса лучше сырой картошки."© :derisive:
     
  9. avl

    avl New Member

    Публикаций:
    0
    Регистрация:
    11 сен 2008
    Сообщения:
    4
    В 486 так и было. А сейчас по другому, как мне подсказали специалисты.
     
  10. Barbos

    Barbos Slavon

    Публикаций:
    0
    Регистрация:
    13 ноя 2007
    Сообщения:
    280
    Адрес:
    Kharkov
    ну от проца напрямую это никак не зависит. Переключение потоков осуществляет планировщик, а он относится к ПО. К примеру, у меня таймер работает на 100 Гц. Времена меньше 10 мс (или более высокой точности) замеряются непосредственно через внутренний счетчик таймера.
     
  11. Barbos

    Barbos Slavon

    Публикаций:
    0
    Регистрация:
    13 ноя 2007
    Сообщения:
    280
    Адрес:
    Kharkov
    может быть, что если система "видела", что она "едет" на 486-м, то и таймер программировался каким то особым образом.
     
  12. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Barbos
    В микроядерных ОС таймер работает с большой частотой так как там нужно обмениваться сообщениями. И чем больше тем лучше. Там от 1000Гц. На 486 будет тормазить там частота маленькая, а вот на современном компьюторе не сильно заметно. ОС вполне может запрограммировать для разных компьютеров таймер на разные частоты.

    Что касается 20мс это не верно. В виндах плонировщик времени хитрый и говорить о кванте трудно. Достаточно включить мультимидийный таймер и ты получишь прерывания от таймера в 1 мс. Но это на пользовательском уровне, а в режиме ядра. Насколько я знаю там и меньшие интервалы.