Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Ср ноя 22, 2017 2:02 pm

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 47 сообщений ]  На страницу 1 2 3 4 След.
Автор Сообщение
 Заголовок сообщения: Таймер
СообщениеДобавлено: Пт июл 24, 2009 11:37 pm 
Не в сети

Зарегистрирован: Ср июл 02, 2008 8:02 pm
Сообщения: 21
Подправил в ядре работу с таймером. А точнее - сделал счетчик миллисекунд, прошедших с начала запуска, более независимым от частоты таймера. Частоту таймера можно настраивать при компиляции ядра, в файле const.inc.
Публикую сдесь, ибо как SVN-ами пользоваться не учен, а diff-ы выкладывать - так многие в винде сидят. Лучше так код выложу сюда, что менять, что удалять.

Итак, в const.inc добавляем следующие строки:
Код:
;Don't set hight values on slow machines\emulators!
TIMER_FREQ      equ      250   ; From 20 to ...
TIMER_SCALE      equ      10000 ; or 1000, etc...


В файле kernel.asm заменяем(строка 564) это:
Код:
; TIMER SET TO 1/100 S

        mov   al,0x34              ; set to 100Hz
        out   0x43,al
        mov   al,0x9b              ; lsb    1193180 / 1193
        out   0x40,al
        mov   al,0x2e              ; msb
        out   0x40,al

На это:
Код:
; TIMER SET TO 1/TIMER_FREQ S

        mov   al,0x34
        out   0x43,al
        mov   al, (((1193180 / TIMER_FREQ) and 0x00ff))
        out   0x40,al
        mov   al, (((1193180 / TIMER_FREQ) shr 8) and 0x00ff)
        out   0x40,al


А в файле core/sched.inc заменяем это:
Код:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; IRQ0 HANDLER (TIMER INTERRUPT) ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


align 32
irq0:
        pushad
        Mov     ds, ax, app_data
        mov     es, ax
        inc     [timer_ticks]

На это:
Код:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; IRQ0 HANDLER (TIMER INTERRUPT) ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

timer_frequency      dd   TIMER_FREQ ; Need for ``div''
timer_scale         dd  TIMER_SCALE
timer_accumulator   dd   0

align 32
irq0:
        pushad
        Mov     ds, ax, app_data
        mov     es, ax
       
        mov     eax, 100 * TIMER_SCALE
        xor     edx, edx
        div     [timer_frequency]
       
        add     eax, edx
        add     eax, [timer_accumulator]
        cmp     eax, TIMER_SCALE
        jb      .notick
       
        xor     edx, edx
        div     [timer_scale]
        add     [timer_ticks], eax
        xchg    eax, edx       

    .notick:
        mov     [timer_accumulator], eax

Дальше все то же.

Вроде часы идут ровно, программы тоже работают(таймер сапера) при любой частоте(тестил от 20 то 1000 Гц(На VBox, на qemu при частоте, большей 350 Гц виснет все)).
Кто разбирается в ядре: там ничего сильно не скосится при смене частоты?


Вернуться к началу
 Заголовок сообщения: Re: Таймер
СообщениеДобавлено: Сб июл 25, 2009 6:57 am 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3929
Cкосится.

Планировщик переключает задачи на каждом тике.
Почему ? Надо спросить у Вилле.


Вернуться к началу
 Заголовок сообщения: Re: Таймер
СообщениеДобавлено: Сб июл 25, 2009 8:26 am 
Не в сети
Аватара пользователя

Зарегистрирован: Вт янв 24, 2006 8:50 am
Сообщения: 249
>а diff-ы выкладывать - так многие в винде сидят.
с каких времен diff'ы стали проблемой для венды??? или я не правильный вендузятник.. =((


Вернуться к началу
 Заголовок сообщения: Re: Таймер
СообщениеДобавлено: Сб июл 25, 2009 10:00 am 
Не в сети

Зарегистрирован: Сб июл 25, 2009 9:53 am
Сообщения: 4
Serge писал(а):
Cкосится.

Планировщик переключает задачи на каждом тике.
Почему ? Надо спросить у Вилле.


смысл переключать задачу на каждом тике?????
ни где так не делается
прерывания по таймеру должны отрабатываться в текущем коетексте


Вернуться к началу
 Заголовок сообщения: Re: Таймер
СообщениеДобавлено: Сб июл 25, 2009 10:22 am 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3929
Цитата:
прерывания по таймеру должны отрабатываться в текущем контексте
Так и происходит с аппаратным таймером, а программных таймеров в Колибри нет.
Цитата:
Планировщик переключает задачи на каждом тике.
Точнее обработчик аппратного таймера на каждом тике переключает контекст
Код:
        call    find_next_task
        jz      .return  ; if there is only one running process
        call    do_change_task
  .return:
        popad
        iretd


Вернуться к началу
 Заголовок сообщения: Re: Таймер
СообщениеДобавлено: Сб июл 25, 2009 10:28 am 
Не в сети

Зарегистрирован: Сб июл 25, 2009 9:53 am
Сообщения: 4
Serge писал(а):
Цитата:
прерывания по таймеру должны отрабатываться в текущем контексте
Так и происходит с аппаратным таймером, а программных таймеров в Колибри нет.
Цитата:
Планировщик переключает задачи на каждом тике.
Точнее обработчик аппратного таймера на каждом тике переключает контекст
Код:
        call    find_next_task
        jz      .return  ; if there is only one running process
        call    do_change_task
  .return:
        popad
        iretd


ну получается что планировщика как токового нет
идет тупое переключение задач
када будет нормальный шедулер?


Вернуться к началу
 Заголовок сообщения: Re: Таймер
СообщениеДобавлено: Сб июл 25, 2009 12:42 pm 
Не в сети

Зарегистрирован: Ср июл 02, 2008 8:02 pm
Сообщения: 21
Serge писал(а):
Cкосится.

Планировщик переключает задачи на каждом тике.
Почему ? Надо спросить у Вилле.

Хех, ну так-то смысл изменения частоты таймера был в том, чтоб сделать переключение задач чаще, а значит сделать работу системы более "мягкой". Только при этом сбивалось время, вот я и поправил этот недостаток.


Вернуться к началу
 Заголовок сообщения: Re: Таймер
СообщениеДобавлено: Сб июл 25, 2009 1:05 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Чт мар 01, 2007 4:16 pm
Сообщения: 426
> када будет нормальный шедулер?
Тогда, когда ты его сделаешь :-).

..bw


Вернуться к началу
 Заголовок сообщения: Re: Таймер
СообщениеДобавлено: Сб июл 25, 2009 3:27 pm 
Не в сети

Зарегистрирован: Сб июл 25, 2009 9:53 am
Сообщения: 4
ее я себе (в своей ОСи) не могу сделать а тут еще каким то птичкам делать :)


Вернуться к началу
 Заголовок сообщения: Re: Таймер
СообщениеДобавлено: Пн июл 27, 2009 8:04 am 
Не в сети
Kernel Developer
Аватара пользователя

Зарегистрирован: Пн мар 20, 2006 10:44 am
Сообщения: 557
wolf.ram писал(а):
Хех, ну так-то смысл изменения частоты таймера был в том, чтоб сделать переключение задач чаще, а значит сделать работу системы более "мягкой". Только при этом сбивалось время, вот я и поправил этот недостаток.

От того что задачи будут переключатся чаще, мы лишь получим много впустую потраченного паразитного времени, "мягкости" не будет.


Вернуться к началу
 Заголовок сообщения: Re: Таймер
СообщениеДобавлено: Ср июл 29, 2009 3:32 pm 
Не в сети

Зарегистрирован: Пт ноя 21, 2008 8:16 am
Сообщения: 180
imsushka писал(а):
када будет нормальный шедулер?

Хотелось бы услышать развернутое определение для "нормальный шедулер" :)


Вернуться к началу
 Заголовок сообщения: Re: Таймер
СообщениеДобавлено: Чт июл 30, 2009 11:16 am 
Не в сети

Зарегистрирован: Сб июл 25, 2009 9:53 am
Сообщения: 4
Galkov писал(а):
imsushka писал(а):
када будет нормальный шедулер?

Хотелось бы услышать развернутое определение для "нормальный шедулер" :)

нормальный эт который не тупо переключает задчу каждый тик, а по какомунибуть алгоритму. в линуксе 4 разных алгоритма есть (или было)


Вернуться к началу
 Заголовок сообщения: Re: Таймер
СообщениеДобавлено: Чт июл 30, 2009 11:45 am 
Не в сети
Аватара пользователя

Зарегистрирован: Пн апр 16, 2007 6:38 pm
Сообщения: 1222
дыки переключение подряд это тоже алгоритм.

_________________
И мы уже давно не пешки,
Мы пули, мы орлы, и решки!
Война ютит бинарный код,
Умри, или иди вперед!


Вернуться к началу
 Заголовок сообщения: Re: Таймер
СообщениеДобавлено: Чт июл 30, 2009 12:12 pm 
Не в сети
Kernel Developer
Аватара пользователя

Зарегистрирован: Пн мар 20, 2006 10:44 am
Сообщения: 557
Цитата:
...не тупо переключает задчу каждый тик, а по какомунибуть алгоритму...

Видится мне здесь идея ради идеи.
Алгоритмов менеджера задачь много (а с вариациями оооочень много), и каждый хорошо работает для своей задачи, для других задачь он плох. Под линукс может официальных 4 а сколько тестовых, сделаных из академического интереса, их сотни, но собирая дома вам вообще пофиг как там задачи переключаются.
Так как понимание автора не прослеживается это пустая тема.


Вернуться к началу
 Заголовок сообщения: Re: Таймер
СообщениеДобавлено: Сб апр 07, 2012 4:32 am 
Может в теме было зерно истины? На форуме встречал упоминание Serge о том что 100 Гц всем не хватает. Так может поднять частоту аппартного таймера до нужной, а в планировщике и в остальных местах сделать счетчики дополнительные. Или все упрется в нестабильность?


Вернуться к началу
   
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 47 сообщений ]  На страницу 1 2 3 4 След.

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB