 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
PeterC Član

Pridružen-a: Tor 14 Dec 2004 20:22 Prispevkov: 204 Aktiv.: 0.86
|
Objavljeno: Tor Okt 16, 2007 7:29 pm Naslov sporočila: Real Time operacijski sistem |
|
|
Ravno delam zelo preprost in okrnjen RTOS v asemblerju za Atmelov mega8 kontroler.
U bistvu sem naredil interrupt s timerjem, ki ob interruptu preklaplja med taski - time slice (časovno rezinenje).
Zadeva mi je jasna in logična, paziti je treba da ni task predolg, da ga interrupt ne povozi v naslednjem ciklu.
Poraja se mi vprašanje, kako se tega lotiti v C-ju, kjer ni takega nadzora nad prevedeno dolžino kode v asemblerju. Se uporablja enak način z malo bolj inteligentnim task managerjem ali čisto drug princip.
LP
Peter |
|
Nazaj na vrh |
|
 |
Glitch Član

Pridružen-a: Pet 07 Apr 2006 11:40 Prispevkov: 1477 Aktiv.: 6.32
|
Objavljeno: Tor Okt 16, 2007 7:42 pm Naslov sporočila: |
|
|
RTOS je možno narediti v Cju, zakaj pa ne. Višji nivo ti omogoča skoraj dobesedno izživljanje pri kontroli. Metode so različne, odvisno od potreb. Tvoja je cooperative time-sliced round-robin. Poskusi s preemptive in dinamičnim dodeljevanjem časa
Tudi nadzor nad prevedeno kodo je možen. Kar ostane v asemblerju je kontrola preklopa med taski, če se uporabljajo kakšni posebni triki. |
|
Nazaj na vrh |
|
 |
alessio Član

Pridružen-a: Pon 04 Dec 2006 8:39 Prispevkov: 363 Aktiv.: 1.61 Kraj: Ljubljana
|
Objavljeno: Tor Okt 16, 2007 8:20 pm Naslov sporočila: Re: Real Time operacijski sistem |
|
|
PeterC je napisal/a: |
Poraja se mi vprašanje, kako se tega lotiti v C-ju, kjer ni takega nadzora nad prevedeno dolžino kode v asemblerju. Se uporablja enak način z malo bolj inteligentnim task managerjem ali čisto drug princip.
|
Za idejo si lahko pogledaš www.freertos.org, ki ima port tudi za AVR familijo.
Na strani je tudi tutorial "How FreeRTOS works", ki razloži osnove RTOS-a v splošnem
in podrobneje opiše tudi preklaplanje med taski za AVR-je. Poučno.
Aleš |
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.57
|
Objavljeno: Tor Okt 16, 2007 8:42 pm Naslov sporočila: Re: Real Time operacijski sistem |
|
|
PeterC je napisal/a: |
Zadeva mi je jasna in logična, paziti je treba da ni task predolg, da ga interrupt ne povozi v naslednjem ciklu. |
Tole ne ne jasno, ne logicno - task scheduler ob vsakem preklopu popravi zadnji stack frame in to je to. Informacije se morajo shranjevati v tabeli za vsak task posebej ob vsakem preklopu (context switch).
V takem primeru je povsem nepomembno koliko ciklov je dolg katerikoli task, vsi bodo dobili enako ciklov (to lahko po potrebi scheduler tudi spremeni tako, da dobi vsak task arzlicno stevilo ciklov ...) in dokler noben task ne posega v delovanje timerja, ki poganja scheduler (tega na 8-bitnem MCUju ponavadi ni mogoce prepreciti in je potrebno na to paziti v kodi), je vse skupaj pre-emptive. _________________ Ka ti bo pa torba ce si kupu kolo ? |
|
Nazaj na vrh |
|
 |
PeterC Član

Pridružen-a: Tor 14 Dec 2004 20:22 Prispevkov: 204 Aktiv.: 0.86
|
Objavljeno: Sre Okt 17, 2007 5:15 pm Naslov sporočila: |
|
|
Torej, če pravilno razumem, ob časovnih prekinitvah jedro operacijskega sistema sledi nekemu urniku (scheduler) - ki je lahko dinamičen ali fiksen.
Potem pa ostajajo opcije:
Moja varjanta v asemblerju - time-sliced round-robin - časovni interval taskov je enako dolg, task se mora zaključiti pred naslednjim interruptom.
Pre-emptive z dinamičnim dodeljevanjem časa - če si pravilno razlagam, lahko v tem primeru task z višjo prioriteto ustavi task z nižjo. Torej taski komunicirajo s kernelom in povejo kakšno je njihovo stanje.
Ali si lahko v tem primeru en task rezervira ves procesorski čas samo zase za kakšne kritične trenutke (recimo branje 1wire komunikacije na I/O pinu se mi zdi en izmed takih problemov)? |
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.57
|
Objavljeno: Sre Okt 17, 2007 5:55 pm Naslov sporočila: |
|
|
I/O izvaja kernel, taski samo komunicirajo z modulom, ki skrbi za dolocen del.
Tisto z omejevanjem dolzine taska da bo delovalo pravilno je bedarija. Imas seznam taskov, v katerem pise koliksen delez (oz. se lazje: koliko ciklov absolutno) naj doticni task dobi ter nekaj njegovih parametrov, ki so potrebni za rekonstrukcijo stack frame-a. Vsak novo zagnan task se mora vpisati v tabelo, vsak dokoncan task mora iz tabele izginiti.
En interrupt dovolj visoke prioritete (odvisno od drugih stvari, ki naj bi jih tvoj OS pocel - ce kernel skrbi za I/O, potem mora imeti I/O se visjo prioriteto), ki ga poganja timer, skrbi za preklop med taski in v njegovo delovanje ne sme (oz. na normalnih sistemih z zascito sistemskih sredstev preprosto niti ne more) posegati noben task.
Vsakic, ko se sprozi, pogleda kateri task se trenutno izvaja, s stacka pobere frame, katerega je CPU sestavil ob sprozitvi interrupta, prepise relevantne podatke (vsaj return address, ce ne se cesa drugega, odvisno od izvedbe ... zraven bodo najbrz vsaj se registri) v tabelo, pogleda v tabeli kateri task je naslednji na vrsti, iz tabele prebere relevantne podatke in zgradi nov stack frame, popravi stevilo ciklov do ponovne sprozitve interrupta (ce se le-to razlikuje med taski, torej da nima vsak enako procesorskega casa) in zapusti interrupt handler.
Od tukaj se naprej izvaja drugi task, dokler se interrupt spet ne sprozi in pride do naslednjega context switcha, kjer se postopek ponovi, in tako naprej v neskoncnost ... nobene potrebe ni za omejevanje dolizne taska; bo pac potrebnih vec sliceov za njegovo izvedbo, nic tragicnega, tako delujejo vsi programi, katere pravkar poganjas na svojem namiznem racunalu. _________________ Ka ti bo pa torba ce si kupu kolo ? |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 493 dni
Powered by phpBB © 2001, 2005 phpBB Group
|