Вопрос к знатокам. В 486 процессоре (там точно (!)) переключение задач происходило 50 раз в секунду по системному таймеру. А кто скажет точно (!) с какой частотой и как это происходит в Pentium I-IV, Core и современных процессорах AMD? И ссылка на доступный документ где это написано не помешал бы. Надо узнать, а найти никак не могу. Помогите пожалуйста! Спасибо!
avl В самом процессоре ничего не происходило само по себе. Все зависит от ОС. Какаяя у тебя ОС? Стандартная частота таймера 1193180/65536. Но в Win 98 она перепрограмировалась на 1193180/1192. В NT возиожно чаще.
Задачи переключает ОС, а не процессор - обычно ставится обработчик на irq0(прерывание таймера) - он и переключает task'и, а сам таймер можно поставить практически какой угодно.
Ага! Значит после сброса, нынешние процессоры могут принудительно переключать задачи с частотой 18,2 Гц, а если нужно быстрее, то перепрограммируется таймер. Я правильно понял? И копать нужно в направление http://wiki.osdev.ru/index.php/Timer ?
avl Ничего-то ты не понял Процессоры сами по себе никаких задач не переключают это делает ось, используя системный таймер (собственно как она его использует её личное дело и зависит от реализации оси а не от процессора). Просто современные камни имеют возможность аппаратно упростить программеру переключение задачи, но ось во первых вообще не обязана этой "аппаратной поддержкой" пользоваться, а во вторых как правило использует не весь механизм "аппаратного переключения", а только ту его часть что сочтёт нужным Если ты запустишь суперсовременный процессор в среде ДОС то она как была однозадачной так таковой и останется и сколько таймер не перепрограммируй переключения задачи не дождёшся ) Однозадачный режим будет и на стадии загрузки любой оси, просто потому что многзадачность там совершенно не нужна Копай в сторону планировщика потоков в кернел моде.
avl После сброса есть только одна задача. БИОС инициализирует оборудование. Есть прерывания и таймер 8254. Таймер работает с частотой 18,2 Гц и вызывает прерывания. ОС при загрузке инициирует обработку прерывания. Заменяет обработчик прерывания БИОС'а на свой. В обработчике прерывания может быть код который переключает задачи, а может и не быть. К примеру в MS-DOS одна задача и разумеется переключать тут не чего. Частоту таймера 8254 можно сменить http://wiki.osdev.ru/index.php/Timer Нормальная ОС меняет ее на большею частоту с 18,2Гц на 1000 Гц а то и больше. Но прогресс не стоит на месте. На смену 8254 пришел HPET. И теперь ОС может выбирать что использовать старый таймер или новый.
где то в литературе видел цыфру 20 мс - квант процессорного времени в вин2к (50 Гц). Думаю, таймер с такой частотой там и работает? 1000 Гц - кажется слишком сильно. каждую мс дергает irq0 чтоли? не сильно при таких частотах сядет производительность? хотя наверно там обработчик не тяжелый...
Спасибо! Всё ясно, и не только куда копать но и что делать! А то я поисковикам задаю глупые вопросы (переключение задачи и т. п.), а они мне рассказывают то, что я и так помню. "Жаренная колбаса лучше сырой картошки."©
ну от проца напрямую это никак не зависит. Переключение потоков осуществляет планировщик, а он относится к ПО. К примеру, у меня таймер работает на 100 Гц. Времена меньше 10 мс (или более высокой точности) замеряются непосредственно через внутренний счетчик таймера.
может быть, что если система "видела", что она "едет" на 486-м, то и таймер программировался каким то особым образом.
Barbos В микроядерных ОС таймер работает с большой частотой так как там нужно обмениваться сообщениями. И чем больше тем лучше. Там от 1000Гц. На 486 будет тормазить там частота маленькая, а вот на современном компьюторе не сильно заметно. ОС вполне может запрограммировать для разных компьютеров таймер на разные частоты. Что касается 20мс это не верно. В виндах плонировщик времени хитрый и говорить о кванте трудно. Достаточно включить мультимидийный таймер и ты получишь прерывания от таймера в 1 мс. Но это на пользовательском уровне, а в режиме ядра. Насколько я знаю там и меньшие интервалы.