Board.KolibriOS.org

Official KolibriOS board
It is currently Sat Aug 17, 2019 4:34 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 47 posts ]  Go to page 1 2 3 4 Next
Author Message
 Post subject: Таймер
PostPosted: Fri Jul 24, 2009 11:37 pm 
Offline

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

Итак, в const.inc добавляем следующие строки:
Code:
;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) это:
Code:
; 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

На это:
Code:
; 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 заменяем это:
Code:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; IRQ0 HANDLER (TIMER INTERRUPT) ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


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

На это:
Code:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 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 Гц виснет все)).
Кто разбирается в ядре: там ничего сильно не скосится при смене частоты?


Top
   
 Post subject: Re: Таймер
PostPosted: Sat Jul 25, 2009 6:57 am 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Cкосится.

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


Top
   
 Post subject: Re: Таймер
PostPosted: Sat Jul 25, 2009 8:26 am 
Offline
User avatar

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


Top
   
 Post subject: Re: Таймер
PostPosted: Sat Jul 25, 2009 10:00 am 
Offline

Joined: Sat Jul 25, 2009 9:53 am
Posts: 4
Serge wrote:
Cкосится.

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


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


Top
   
 Post subject: Re: Таймер
PostPosted: Sat Jul 25, 2009 10:22 am 
Offline
Kernel Developer

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


Top
   
 Post subject: Re: Таймер
PostPosted: Sat Jul 25, 2009 10:28 am 
Offline

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


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


Top
   
 Post subject: Re: Таймер
PostPosted: Sat Jul 25, 2009 12:42 pm 
Offline

Joined: Wed Jul 02, 2008 8:02 pm
Posts: 21
Serge wrote:
Cкосится.

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

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


Top
   
 Post subject: Re: Таймер
PostPosted: Sat Jul 25, 2009 1:05 pm 
Offline
User avatar

Joined: Thu Mar 01, 2007 4:16 pm
Posts: 426
> када будет нормальный шедулер?
Тогда, когда ты его сделаешь :-).

..bw


Top
   
 Post subject: Re: Таймер
PostPosted: Sat Jul 25, 2009 3:27 pm 
Offline

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


Top
   
 Post subject: Re: Таймер
PostPosted: Mon Jul 27, 2009 8:04 am 
Offline
Kernel Developer
User avatar

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

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


Top
   
 Post subject: Re: Таймер
PostPosted: Wed Jul 29, 2009 3:32 pm 
Offline

Joined: Fri Nov 21, 2008 8:16 am
Posts: 180
imsushka wrote:
када будет нормальный шедулер?

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


Top
   
 Post subject: Re: Таймер
PostPosted: Thu Jul 30, 2009 11:16 am 
Offline

Joined: Sat Jul 25, 2009 9:53 am
Posts: 4
Galkov wrote:
imsushka wrote:
када будет нормальный шедулер?

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

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


Top
   
 Post subject: Re: Таймер
PostPosted: Thu Jul 30, 2009 11:45 am 
Offline
User avatar

Joined: Mon Apr 16, 2007 6:38 pm
Posts: 1222
дыки переключение подряд это тоже алгоритм.

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


Top
   
 Post subject: Re: Таймер
PostPosted: Thu Jul 30, 2009 12:12 pm 
Offline
Kernel Developer
User avatar

Joined: Mon Mar 20, 2006 10:44 am
Posts: 557
Quote:
...не тупо переключает задчу каждый тик, а по какомунибуть алгоритму...

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


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


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 47 posts ]  Go to page 1 2 3 4 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Limited