RTOS VxWorks 6.x. Ing. Michal Sojka, Ing. Zdeněk Šebek Katedra řídicí techniky ČVUT FEL, Praha

Podobné dokumenty
Přednáška. Vstup/Výstup. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012

Procesy a vlákna - synchronizace

Management procesu I Mgr. Josef Horálek

Architektura rodiny operačních systémů Windows NT Mgr. Josef Horálek

Procesy a vlákna (Processes and Threads)

Služba ve Windows. Služba (service) je program

Obsah. Kapitola 1 Hardware, procesory a vlákna Prohlídka útrob počítače...20 Motivace pro vícejádrové procesory...21

Přerušovací systém s prioritním řetězem

Windows a real-time. Windows Embedded

Operační systémy pro systémy sběru dat (=DAQ systems). Vývoj aplikačních programů. Operační systémy pro DAQ RTOS VxWorks Windows CE RTX LabVIEW RT

Výpočet v módu jádro. - přerušení (od zařízení asynchronně) - výjimky - softvérové přerušení. v důsledku událostí

Linux Teorie operačních systémů a realita

Procesy a vlákna Mgr. Josef Horálek

3. Počítačové systémy

Real Time programování v LabView. Ing. Martin Bušek, Ph.D.

Operační systémy. Tomáš Vojnar IOS 2009/2010. Vysoké učení technické v Brně Fakulta informačních technologií Božetěchova 2, Brno

Řízení IO přenosů DMA řadičem

Vlákno (anglicky: thread) v informatice označuje vlákno výpočtu neboli samostatný výpočetní tok, tedy posloupnost po sobě jdoucích operací.

Přidělování CPU Mgr. Josef Horálek

Ovladače pro Windows. Ovladače Windows A4M38KRP. Str. 1

MS WINDOWS II. Jádro. Správa objektů. Správa procesů. Zabezpečení. Správa paměti

ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE

Činnost počítače po zapnutí

Architektura a koncepce OS OS a HW (archos_hw) Architektura a koncepce OS Jádro OS (archos_kernel) Architektura a koncepce OS Typy OS (archos_typy)

Řada programovacích jazyků nabízí prostředky pro řešení meziprocesové komunikace jako je synchronizace a řízení přístupu do kritické sekce.

Paralelní programování

Novinky u zařízení pro sériovou komunikaci. Michal Kahánek

ÚVOD DO OPERAČNÍCH SYSTÉMŮ

Konstruktory a destruktory

Česká letecká servisní a. s.

TG Motion verze 4 Modul Virtuální PLC návod k obsluze

Pár odpovědí jsem nenašla nikde, a tak jsem je logicky odvodila, a nebo jsem ponechala odpověď z pefky, proto je možné, že někde bude chyba.

Úvod do Linuxu. SŠSI Tábor 1

Více o konstruktorech a destruktorech

ČÁST 1. Základy 32bitového programování ve Windows

Operační systémy. Přednáška 4: Komunikace mezi procesy

TG Motion verze 4 Modul Virtuální PLC návod k obsluze

Ukázka zkouškové písemka OSY

Principy operačních systémů. Lekce 5: Multiprogramming a multitasking, vlákna

Firmware řídící jednotky stejnosměrného generátoru

Semestrální práce z předmětu Speciální číslicové systémy X31SCS

Pavel Procházka. 3. prosince 2014

ZOS OPAKOVÁNÍ. L. Pešička

Když se Linux nevejde. Jiné operační systémy Lenka Kosková Třísková, LinuxDays2018

Synchronizace Mgr. Josef Horálek

setup() { I = 0; } loop() { I = I + 1; }

Operační systémy. Přednáška 3: Plánování procesů a vláken

Struktura programu v době běhu

Von Neumannovo schéma

Činnost CPU. IMTEE Přednáška č. 2. Několik úrovní abstrakce od obvodů CPU: Hodinový cyklus fáze strojový cyklus instrukční cyklus

OS Plánování procesů

Přerušení POT POT. Přerušovací systém. Přerušovací systém. skok do obslužného programu. vykonávaný program. asynchronní událost. obslužný.

Spuštění instalace. nastavení boot z cd v BIOSu vložení CD s instal. médiem spuštění PC. nastavení parametrů instalace (F2 čěština)

Lekce 7 IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ

Software pro vzdálenou laboratoř

MS WINDOWS I. řada operačních systémů firmy Microsoft *1985 -? Historie. Práce ve Windows XP. Architektura. Instalace. Spouštění

Principy komunikace s adaptéry periferních zařízení (PZ)

Systémy pro sběr a přenos dat

Principy operačních systémů. Lekce 7: Obrana proti deadlocku

Základy informatiky. 2. Přednáška HW. Lenka Carr Motyčková. February 22, 2011 Základy informatiky 2

Sběrnicová struktura PC Procesory PC funkce, vlastnosti Interní počítačové paměti PC

Roury a zprávy Mgr. Josef Horálek

Definice OS. Operační systém je základní programové vybavení počítače, nezbytné pro jeho provoz.

Operační systémy. Jednoduché stránkování. Virtuální paměť. Příklad: jednoduché stránkování. Virtuální paměť se stránkování. Memory Management Unit

Operační systémy (OS)

Komunikační protokol

Správa procesoru. Petr Krajča. Katedra informatiky Univerzita Palackého v Olomouci. 11. březen, 2011

Přidělování zdrojů (prostředků)

ZOS 9. cvičení, ukázky kódu. Pavel Bžoch

int ii char [16] double dd název adresa / proměnná N = nevyužito xxx xxx xxx N xxx xxx N xxx N

PROGRAMOVÁNÍ ŘÍDÍCÍCH SYSTÉMŮ

Počítačové sítě Systém pro přenos souborů protokol FTP

Metody připojování periferií BI-MPP Přednáška 2

Principy operačních systémů. Lekce 6: Synchronizace procesů

ZOS. Verze 2010-srpen-31, v3 L. Pešička

Metody připojování periferií

Panel IPP. Ovladač řídící jednotka

Přidělování paměti II Mgr. Josef Horálek

09. Memory management. ZOS 2006, L.Pešička

2010/2011 ZS. Operační systém. procesy a vlákna. interakce a synchronizace

Konzistentnost. Přednášky z distribuovaných systémů

Základní principy konstrukce systémové sběrnice - shrnutí. Shrnout základní principy konstrukce a fungování systémových sběrnic.

První kroky s METEL IEC IDE

Operační systémy. Tomáš Vojnar IOS 2010/2011. Vysoké učení technické v Brně Fakulta informačních technologií Božetěchova 2, Brno

PB153 Operační systémy a jejich rozhraní

Obsluha periferních operací, přerušení a jeho obsluha, vybavení systémových sběrnic

Paměti a jejich organizace

Příloha č.2 - Technická specifikace předmětu veřejné zakázky

1. Zpracování událostí na pozadí aplikace

Nastavení programu pro práci v síti

Aplikace. Hlásič SMS

Pokročilé architektury počítačů

Systém elektronické evidence návštěvnosti TDL500

Uživatelský modul. DF1 Ethernet

Přednáška. Správa paměti II. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }

IMTEE Přednáška č. 8. interrupt vector table CPU při vzniku přerušení skáče na pevně dané místo v paměti (obvykle začátek CODE seg.

Koncepce DMA POT POT. Při vstupu nebo výstupu dat se opakují jednoduché činnosti. Jednotlivé kroky lze realizovat pomocí speciálního HW.

1. Popis a použití Xilinx EDK

Transkript:

RTOS VxWorks 6.x Ing. Michal Sojka, Ing. Zdeněk Šebek Katedra řídicí techniky ČVUT FEL, Praha

Témata Jádro VxWorks 6.x komponenty, vlastnosti Přizpůsobení jádra konkrétní aplikaci Konfigurace vývojového pracoviště, základní pojmy

VxWorks 6.x základní vlastnosti I. Neomezený počet procesů/úloh (lépe vláken) Preemptivní plánování Prioritní Round-robin 256 úrovní priorit Rychlá a flexibilní meziprocesní komunikace

VxWorks 6.x základní vlastnosti II. Binární, počítací a mutex semafory Podporuje dědění priorit Fronty zpráv Signály Roury Sokety Sdílená paměť

VxWorks 6.x základní vlastnosti III. Asynchronní I/O SCSI MSDOS (FAT16) file system raw file system TrueFFS (pro flash paměti) ISO9660 (CDROM) Podpora PCMCIA

VxWorks 6.x podporované CPU PowerPC ARM Intel x86 Intel XScale MIPS SuperH

VxWorks 6.x Wind API základní API OS VxWorks není POSIX kompatibilní méně komplikované často řeší nedostatky POSIX specifikace výsledkem hůře přenositelný kód

VxWorks 6.x POSIX API Standardní API kompatibilní se specifikací POSIX 1003.1b pro Asynchronní I/O Semafory Fronty zpráv Správu paměti Signály Plánovač Časovače

Real-time procesy (RTP) I. podobné procesům v jiných OS (Unix) optimalizovány pro RT každý RTP obsahuje jednu nebo více úloh (task) tj. vlákno v jiných OS každý RTP má vlastní adresový prostor pozor, uživatelská úloha může být spuštěna i v prostoru jádra, tj. nemusí být nutně součástí RTP

Real-time procesy (RTP) II. zabírá kontinuální oblast paměti do paměti je vždy zaveden jako celek RTP můžeme chápat pouze jako organizační jednotku sdružující více úloh. RTP jako takový není plánován, vždy jsou plánovány jednotlivé úlohy. nový RTP se spouští ve dvou fázích, druhá fáze (load) se již provádí s prioritou nově vytvářené úlohy, tj. neovlivňuje úlohu, která to iniciovala.

Správa úloh I. kontext úlohy Program counter Obsah registrů CPU Zásobník Přiřazení standardních I/O Časovač pro funkci delay Timeslice časovač Řídící struktury jádra Handlery pro obsluhu signálů Proměnné debuggeru a monitoringu

Správa úloh II. Všechny úlohy běží v jednom společném adresovém prostoru (jádra nebo příslušného RTP) + Rychlé přepnutí kontextu Nulová ochrana RTP implementuje mimo jiné i ochranné mechanizmy (pokud je CPU vybaven jednotkou MMU)

Stav úlohy ready pended delayed suspended taskinit()

Stav úlohy READY Úloha je připravena k běhu Nečeká na žádné prostředky s výjimkou CPU Nerozlišuje se, zda v daný okamžik skutečně běží, tj. má přidělen procesor, nebo ne

Stav úlohy PEND Úloha je blokována, čeká na přidělení nějakého prostředku Typicky čekání na semafor, čtení z prázdné fronty zpráv apod. Následek volání funkcí semtake, msgqreceive apod.

Stav úlohy DELAY Úloha čeká na uplynutí zadaného časového intervalu Způsobeno voláním funkcí taskdelay nebo nanosleep Pozor! Nejde o čekání na uplynutí zadaného timeoutu u některých volání.

Stav úlohy SUSPEND Signalizuje zákaz běhu úlohy Typické použití je při ladění debuggerem Nezakazuje změnu stavu úlohy, pouze její běh. Přechod do toho stavu je také možný pomocí volání tasksuspend

Stav úlohy STOP využíván debuggerem signalizuje, že úloha se zastavila na breakpointu

Stav úlohy kombinace I. DELAY+S současně delayed a suspendována např. volání funkce taskdelay během krokování PEND+S současně pended a suspendována např. čekání na semafor (semtake) během krokování

Stav úlohy kombinace I. PEND+T čekání na přidělení nějakého prostředku s timeoutem PEND+T+S jako PEND+T, ale suspendován z důvodu krokování Stav+I libovolný stav, je aktivní mechanizmus dědění priorit

Priority úloh Priorita úlohy v rozsahu 0 (nejvyšší) až 255 (nejnižší) Za běhu možno zjišťovat či měnit (taskpriorityget, taskpriorityset) Při manuálním vytvoření úlohy (debugger, shell) je nastavena výchozí priorita 100

Preemptivní prioritní plánování Výchozí plánovač Uvažuje pouze priority úloh

Round-robin plánování Limituje dobu (timeslice), po kterou je CPU přidělen jedné úloze, poté je vynuceno přeplánování na jinou úlohu Nastavení timeslice pomocí systémového volání kerneltimeslice Hlavní kritérium zůstává priorita úlohy.

Uzamčení plánování Každá úloha může zakázat/povolit přeplánování pomocí volání tasklock/taskunlock V zamčeném stavu může dojít k přeplánování pouze v případě, že se tato úloha zablokuje (stav PEND) nebo je suspendována Není nijak blokováno přerušení

Vytvoření úlohy taskinit vytvoření úlohy taskactivate spuštění úlohy taskspawn = taskinit + taskactivate Vytvoří a spustí úlohu podle parametrů Jméno úlohy Velikost zásobníku Kód (vstupní funkce) Parametry předané vstupní funkci Úloha nemusí být nutně součástí RTP!

Konec (rušení) úlohy Při ukončení vstupní funkce úlohy Nebo volání taskdelete(taskid) Zakázání/povolení zrušení úlohy volání tasksafe/taskunsafe Je-li úloha ve stavu Safe, tak se jiné úlohy při pokusu o její zrušení voláním taskdelete zablokují

Vytvoření RTP Voláním rtpspawn Jméno souboru na filesystému Vytvoří se výchozí úloha (vlákno) Začne vykonávat funkci main()

Ukončení RTP Ukončením funkce main() kódu procesu Ukončením všech úloh daného procesu Kterákoliv úloha v procesu zavolá exit() Voláním rtpdelete

Řízení běhu úlohy tasksuspend/taskresume zastavení/obnovení běhu úlohy taskrestart znovuvytvoření úlohy se stejnými parametry, s jakými byla úloha vytvořena prvotně taskdelay zastavení úlohy na zadaný čas. Čas udán v počtu tiků systémového časovače (default 60Hz, možno změnit/zjistit voláním sysclkrateset/sysclkrateget) nanosleep čas udán v nanosekundách

Plánovač POSIX API problémy POSIX čísluje priority obráceně Nejnižší a nejvyšší hodnota priority není pevně definována POSIX umožňuje nastavovat algoritmus plánovače samostatně pro každou úlohu VxWorks podporují pouze jeden algoritmus společný pro všechny úlohy

Plánovač POSIX API sched_setparams sched_getparam nastavení/zjištění priority a algoritmu plánovače pro danou úlohu sched_setscheduler sched_getscheduler nastavení/zjištění algoritmu plánovače pro danou úlohu sched_get_priority_max sched_get_priority_min zjištění minimální a maximální hodnoty priority sched_get_rr_interval zjištění velikosti timeslice pro danou úlohu

Struktura OS VxWorks

Sdílený kód, reentrantnost libovolná část kódu muže být volána z libovolných úloh v rámci jednoho adresového prostoru většina systémových funkcí je reentrantní (s výjimkou funkcí, kde existuje reentrantní verze se jménem jméno_r problém s globálními proměnnými možnost vytvoření tzv. task variables

Task variable globální proměnná, pro každou úlohu je uchovávána její samostatná kopie taskvaradd(int *ptr) globání proměnná o délce 4B na kterou ukazuje ptr bude součástí kontextu úlohy. Každá úloha, který provede toto volání bude mít svoji vlastní kopii této proměnné.

Meziprocesní komunikace sdílená paměť semafory fronty zpráv a roury sokety signály

Sdílená paměť snadná realizace (adresový prostor společný pro všechny procesy neplatí pro RTP!) pro zajištění konzistence dat nutno při zápisu zajistit exkluzivní přístup zákazem přerušení (intlock/intunlock) je to jisté, ale nejméně vhodné zákaz přeplánování (tasklock/taskunlock) lepší, ale pořád to není ono binární nebo lépe mutex semafor- nejlepší

Zajištění konzistence dat Pokud se přistupuje ke sdíleným datům: z více vláken mutexy i v přerušení zákaz přerušení (jen 1 procesor) v přerušení z více procesorů (v SMP): spinlock Další varianty (výhodné pro SMP): Detaily mimo rozsah této přednášky neblokující synchronizace Read-Copy-Update (RCU, SMP)

Semafory základní synchronizační mechanizmus vnitřní proměnná nabývá hodnot 0 nebo 1 (binární, mutex semafor) nebo 0 až N (počítací semafor) k dispozici dvě primitiva semtake vezme semafor (vnitřní proměnná je dekrementována), pokud semafor není k dispozici (tj. vnitřní proměnná je rovna 0), tak se volající proces zablokuje semgive vrací semafor (inkrementuje vnitřní proměnnou)

Semafory API I. vytvoření semaforu sembcreate(int options, SEM_B_STATE initialstate) semccreate(int options, int initialcount) semmcreate(int options) initialstate: SEM_FULL (1), SEM_EMPTY (0) initialcount: počáteční hodnota vnitřní proměnné options: podle čeho se řadí procesy čekající na semafor. Tj. kdo jako první dostane tento semafor až ho někdo jiný vrátí. SEM_Q_FIFO podle pořadí jak o něj bylo žádáno SEM_Q_PRIORITY podle priorit, potom podle pořadí

Semafory API II. požádání o semafor STATUS semtake(sem_id semid,/*semafore to take*/ int timeout /*timeout in ticks*/) timeout: WAIT_NOWAIT (0) nečekat WAIT_FOREVER (-1) do nekonečna timeout v počtu tiků sys. hodin vrácení semaforu STATUS semgive ( SEM_ID semid) zrušení semaforu STATUS semdelete ( SEM_ID semid)

Použití Semaforů Exkluzivní přístup ke sdíleným zdrojům Semafor je inicializován jako plný (odemčený) Úloha přistupující ke zdroji (datům) před tím zavola semtake() a po skončení semgive() Synchronizace úloh Semafor je inicializován jako prázdný (zamčený) Úloha čekající na událost se pokusí vzít semafor (semtake) a pokud tento není k dispozici je zablokována Při výskytu události (např. IRQ) je semafor odemknut pomocí semgive.

Options mutex semafor SEM_INVERSION_SAFE aktivuje mechanizmus dědění priorit (prevence vzniku inverze priorit) SEM_DELETE_SAFE pokud má daný proces tento semafor, tak ho nelze zrušit. Odpovídá volání tasksafe. SEM_INTERRUPTIBLE waiting for the semaphore can be interrupted by a signal.

Problém inverze priorit

Řešení dědění priorit pokud má proces nějaký prostředek, tak se jeho priorita dočasně zvyšuje na nejvyšší prioritu z procesů, které na tento prostředek čekají

Mars Pathfinder & priority inversion Mars Pathfinder began experiencing total system resets One task missed a deadline and safety software caused the reset. Inside select() system call a mutex without priority inversion was used. It was sufficient to enable priority inheritance by default. http://research.microsoft.com/~mbj/mars_pathfinder/

Rekurzivní použití mutex semaforu Jeden proces si může vzít mutex semafor opakovaně pokud ho už má. Tzn. ačkoliv semafor není volný, tento proces o něj může požádat a dostane ho znovu. Příslušný počet volání semtake musí potom následovat stejný počet volání semgive Mutex semafor může vrátit pouze ten proces, který si ho předtím vzal

Semafory POSIX API I. POSIX semafor je vždy počítací může být pojmenovaný neumožňuje čekání na semafor s timeoutem je-li vyžadováno čekání s timeoutem (což je žádoucí), musí být odměření času realizováno jiným nástrojem (časovač + signál)

Semafory POSIX API II. sem_init/sem_destroy vytvoření/zrušení nepojmenovaného semaforu sem_open/sem_close otevření/zavření pojmenovaného semaforu sem_unlink zrušení pojmenovaného sem. sem_wait/sem_post požádání o/vrácení semaforu sem_trywait jako sem_wait, okamžitě skončí s chybou když semafor není volný sem_getvalue zjištění hodnoty semaforu

Fronty zpráv přenos zpráv libovolné (ale shora omezené) délky FIFO jedna fronta = jeden směr, pro obousměrnou komunikaci nutné dvě fronty

Fronty zpráv - API msgqcreate vytvoření fronty zpráv msgqsend vložení zprávy do fronty msgqrecv odebrání zprávy z fronty msgqdelete zrušení fronty a uvolnění alokované paměti msgqnummsgs zjištění počtu zpráv ve frontě

Fronty zpráv API II. MSG_Q_ID msgqcreate( int maxmsgs, int maxlen, int options) maxmsgs max počet zpráv ve frontě maxlen max délka jedné zprávy (B) options MSG_Q_FIFO, MSG_Q_PRIORITY jak se řadí čekající procesy (viz. semafory)

Fronty zpráv API III. STATUS msgqsend ( MSG_Q_ID msgqid, char *buffer, UNIT nbytes, int timeout, int priority) buffer, nbytes data a jejich délka timeout jak dlouho čekat na uvolnění fronty priority priorita zprávy (MSG_PRI_NORMAL, MSG_PRI_URGENT)

Fronty zpráv API IV. int msgqreceive(msg_q_id msgqid, char *buffer, UINT maxnbytes, int timeout) buffer, maxnbytes kam uložit přijatá data a jejich maximální délka. Je-li zpráva delší, bude oříznuta. timeout jak dlouho čekat než něco vypadne z prázdné fronty vrací délku přijaté zprávy

Fronty zpráv POSIX API mq_open otevření pojmenované fronty mq_close zavření fronty mq_unlink zrušení fronty mq_send vložení zprávy do fronty mq_receive odebrání zprávy z fronty mq_notify požadavek na poslání signálu v okamžiku vložení zprávy do prázdné fronty mq_setattr/mq_getattr nastavení/čtení parametrů fronty

Fronty zpráv porovnání Wind/POSIX API počet úrovní priorit zprávy řazení čekajících procesů čekání s timeoutem upozornění procesu signálem Wind 2 FIFO nebo podle priorit ano ne POSIX 32 podle priorit ne ano (jeden proces)

Roury jsou implementovány pomocí front zpráv vytvořena voláním pipedevcreate poté možno používat standardní I/O operace (read, write apod) na rozdíl od front zpráv může být roura použita voláním select v případě čekání na jednu z množiny I/O operací

Signály asynchronní událost vzhledem k běhu procesu velmi podobné přerušení při doručení signálu je pozastaven běh procesu a je spuštěna příslušná obslužná rutina k dispozici dvě API: UNIX-BSD POSIX 1003.1 včetně queued signal extensions POSIX 1003.1b

Signály porovnání BSD/POSIX API POSIX signal kill raise sigaction sigsuspend sigpending sigemptyset, sigfillset, sigaddset, sigismember, sigdelset, sigprocmask BSD signal kill --- sigvec pause --- sigsetmask, sigblock funkce přiřazení handleru poslání signálu danému procesu poslání signálu sám sobě zjištění/nastavení handleru suspendování procesu do okamžiku doručení signálu zjištění signálů zablokovaných maskou manipulace s maskou signálů

Signály které použít počet signálů různý podle platformy řada signálů využívána OS dostupnost a význam signálů rozdílný na různých platformách viz manuál, knihovna siglib pro uživatelské aplikace k dispozici 7 signálů počínaje signálem SIGRTMIN

Signály vícenásobné doručení I. handler běží se stejnou prioritou jako příslušný proces problém co když je procesu doručen signál dříve, než byl spuštěn příslušný handler obsluhující doručení téhož signálu v minulosti v takovém případě bude handler spuštěn pouze jedenkrát řešení queued signal extensions (POSIX 1003.1b)

Signály vícenásobné doručení II. signál odeslán voláním sigqueue doručené signály se řadí do fronty pro každou instanci signálu bude spuštěn příslušný handler možno čekat na doručení signálu bez nutnosti instalace handleru volání sigwaitinfo resp. sigtimedwait k takovému signálu je možno přibalit uživatelskou proměnnou (typu ukazatel, lze tedy podle potřeby přetypovat)

Použití signálu na obsluhu chybového stavu struct jmp_buf jbuf; int f( int *x ) { /* Nastavení obsluhy signálu */ sigaction( SIGBUS, &sighnd, NULL ); /* Místo bezpečného návratu */ if ( 0!= setjmp( &jbuf ) ) return ERROR; void sighnd_fnc() { longjmp(jbuf, 1); } return value = 1 /* Přístup na VME sběrnici */ *x = *((int *) BUSERR_ADDR); } return OK;

Přerušení obslužná rutina se nastavuje voláním intconnect obsluha všech přerušení se provádí v samostatném kontextu používá se samostatný zásobník přerušení lze globálně povolit/zakázat voláním intunlock/intlock je možno nastavit masku (intlevelset)

Přerušení obslužná rutina musí být co nejkratší nesmí volat funkce, které se mohou zablokovat, např. semtake (ale lze semgive), ne mutex semafory msgqreceive (pozor na msgqsend! Je-li fronta plná, je zpráva zahozena.) taskdelay tasksuspend ale ani řadu jiných, seznam viz manuál stejné požadavky jsou kladeny i na rutiny obsluhující signály

Signály vs. přerušení V handlerech se nesmí spát Zajištění konzistence dat (nelze použít mutex) Maska signálů v OS vs. maska/povolení přerušení v CPU Příchod signálu přeruší některá systémová volání taskdelay atd. viz také příznak SEM_INTERRUPTIBLE Přerušení neovlivňují systémová volání, ale z ISR je možné poslat signál.

Časování taskdelay nanosleep POSIX časovače watchdog časovače

taskdelay běh procesu bude zastaven na zadaný počet tiků systémových hodin čekání může být předčasně ukončeno pokud je procesu doručen signál kmitočet systémových hodin může být měněn za běhu (sysclkrateset/get) při pokusu o nastavení se musí testovat návratová hodnota pokus o nastavení příliš vysokého kmitočtu skončí s chybou default kmitočet je 60Hz

nanosleep běh procesu bude zastaven na daný čas čas udán v sekundách a nanosekundách struct timespec ( time_t tv_sec; /* sekundy */ long tv_nsec; /* nanosekundy */ ) může být předčasně ukončeno signálem

POSIX časovač po uplynutí požadovaného intervalu je příslušnému procesu poslán signál SIGALRM (nebo jiný dle požadavku) zadává se doba do prvního tiknutí a poté perioda (mohou být rozdílné) rozlišení času v nanosekundách

POSIX časovač - API timer_create vytvoří časovač timer_settime spustí časovač timer_gettime zjistí zbývající čas (non POSIX) timer_connect inicializace obslužné rutiny (volá sigaction) (non POSIX) timer_cancel zastaví časovač (volá timer_settime s nulovým požadovaným intervalem)

Watchdog timer časovač, který po uplynutí zadaného časového intervalu zavolá zadanou funkci API: wdcreate vytvoří wdtimer wdstart spustí wdtimer wdcancel zruší operaci wddelete zruší wdtimer

Networking široká podpora protokolů standardní API BSD sokets pro výkonné aplikace zbuf sockets podpora bootování z Ethernetu (BOOTP+TFTP/FTP/RSH)

Podporované protokoly SLIP, CSLIP, PPP IP, UDP, TCP, ARP, DNS DHCP, BOOTP OSPF, RIP RPC, RSH FTP, TFTP NFS telnet

Network API - sokety standardní API pro BSD sokety jen drobné odlišnosti např. funkci gethostbyname odpovídá funkce hostgetbyname eventuálně resolvgetbyname bližší popis viz VxWorks Network Programmer s Guide

Alternativní API zbuf sockets I. BSD sockets používají v různých vrstvách samostatné buffery nutno kopírovat data zbuf sockets API umožňuje sdílet jeden buffer mezi všemi vrstvami není třeba kopírovat data funkcím z BSD sockets API odpovídají podobné funkce zbuf sockets API

Alternativní API zbuf sockets II. zbufsocksend odeslání zbufferu (TCP) zbufsocksendto dtto, UDP zbufsockbufsend odeslání dat z uživatelského bufferu (TCP) zbufsockbufsendto dtto, UDP zbufsockrecv čtení dat (TCP) zbufsockrecvfrom dtto, UDP

BSP board support package podpora pro konkrétní HW zajišťuje zejména inicializaci HW a případných speciálních ovladačů detekce velikosti a typu dostupné paměti příprava přerušovacího systému příprava onboard časovačů většinou dodává vyrobce HW BSP pro PC najdete na WindRiver/vxworks-6.1/target/config/pcPentium4 WindRiver/vxworks-6.1/target/src (další části VxW)

Tvorba vlastních BSP bootovací sekuence (podobné pro jako u jiných embedded systémů) Jádro je umístěno ve FLASH/ROM paměti nebo je nahráváno do RAM ze sítě či disku pomocí bootloaderu Inicializace procesoru pro spuštění kódu jazyka C (_rominit) v assembleru initializace paměti and zásobníků zakázání přerušení Volání romstart kopírování (a dekomprese) datových sekci z ROM do RAM Volání _sysinit() initializace cache, tabulky vektorů; inicializace specifická pro desku spuštění multi-taskingu and uživatelského bootovacího tasku

Příprava vlastního jádra VxWorks Image Project Zvolit které a jak nastavené komponenty chceme zahrnout Spustit build Většina komponent je pouze v binární podobě => Linkování

Víceprocesorové systémy SMP Symetric Multi-Processing Všechny CPU sdílejí celou paměť Task může běžet na libovolném CPU Potřeba jiných synchronizačních mechanismů Spinlocky, paměťové bariery,... AMP Asymetric Multi-Processing Podpora pouze vícejádrových systémů Na každém procesoru běží nezávislá kopie OS Možnost zasílání zpráv mezi procesory

Rozdíl mezi SMP a AMP