Sunteți pe pagina 1din 19

1. Ce este un sistem de operare n timp real? Definii att sistemul de operare generic, ct i noiunea de timp real.

SO reprezint o component de baz a clasei programelor de sistem. SO controleaz toate resursele calculatorului i ofer acces la acestea, programelor utilizator ntr-un mod convenient i sigur. Timp real: rspunsul sistemului pentru evenimentele aprute, ajunge n timp oportun pentru evenimentul respective. 2. Care sunt elementele de baz a unui sistem de operare? Detaliai: planificatorul, managmentul memoriei, sistemul de fiiere. Planificatorul: Un proces este un program n execuie. Procesul cuprinde: programul executabil datele i stiva programului registrele de uz general registrele speciale: program counter, stack pointer Toate informaiile despre un proces sunt stocate ntr-o tabel administrat de SO. Crearea i terminarea proceselor se realizeaz prin apeluri sistem: apelul sistem trebuie s aib o durat bine definit Schimbarea ntre procese (planificarea): preemptiv non-preemptiv Tratarea ntreruperilor trebuie s aib prioritate ridicat. Durata dezactivrii ntreruperilor (seciuni critice) trebuie s fie minim i bine determinabil. Programele utilizator comunic cu SO pentru a cere anumite servicii SO prin intermediul apelurilor sistem. Un apel de sistem este o funcie dintr-o bibliotec (furnizat de SO). Apelurile sistem pot fi mprite n: apeluri non-deterministe ce pot fi apelate din procesele utilizator i pot fi ntrerupte apeluri real-time - seciuni critice cu dezactivarea ntreruperilor - durate deterministe Managementul memorie SO poate conine un Memory Manager (integrat n kernel sau n bibliotecile standard asociate). Fiecare proces trebuie s aib propria zon de memorie: date stiv program Nu toate arhitecturile ofer sistem de management al memoriei. Sistemul de fiiere SO ascunde dispozitivele hardware de utilizator prin sistemul de fiiere. Sunt puse la dispoziie apeluri sistem unitare pentru accesul diferitelor dispozitive: de stocare periferice integrate de comunicaie
1

3. Ce este un proces respectiv un thread i cum se raporteaz la constrngerile real-time? Descriei sumar procesul/threadul i detaliai avantajele i dezavantajele folosirii lor n sisteme real-time. Taskul (procesul) const din: copie a programului n memorie (instruciuni + constante) - memoria de program poate fi diferit de memoria de date, caz n care se folosete numai o mapare a memoriei date + stiv - n unele cazuri heapul lipsete: o singur zon de memorie este alocat stivei i datelor registre - registre de uz general, registrul de stare, program counter, stack pointer Threaduri = fir de execuie aparinnd aceluiai task. Codul, datele sunt commune. Thread conine: stiva registrele mapare a memoriei de program i de date 4. Ce sunt condiiile de concuren i cum se poate realiza o cooperare corect n astfel de condiii? Definii condiia de concuren, criteriile de cooperare i enumerai metodele de excludere mutual. Condiii de concuren Condiii de concuren la accesul unor resurse: n cazul accesului simultan la date, aceste se pot corupe Coruperea datelor n cazul condiiei de concuren trebuie evitat: excludere mutual a accesului la datele partajate Seciuni critice: partea dintr-un program unde se realizeaz accesul la o resurs comun Condiii de cooperare corect - nu pot exista 2 procese simultan n seciunea critic - nu se poate face nici o presupunere asupra vitezei i numrului de CPU - nici un proces care ruleaz cod n afara seciunii critice nu poate bloca alte procese - nici un proces nu va atepta pentru totdeauna s intre n seciunea critic Metode de excludere mutual - busy-waiting: procesul ateapt ntr-o bucl pn la eliberarea resurselor pentru a intra n seciunea critic nu rezolv complet seciunea critc - dezactivarea ntreruperilor la intrarea n seciune critic se dezactiveaz ntreruperile, iar la ieirea din seciune se reactiveaz planificatorul nu mai poate intervine n interiorul seciunii critice - lock variables - alternare strict
2

- soluia lui Peterson - instruciunea TSL - sleep & wakeup - wakeup ntrziat 5. Cum funcioneaz semafoarele de numrare i binare (mutex)? Exemplificai pe FreeRTOS. Definii semafoarele i detaliai funcionarea primitivelor/funciilor corespunztoare din FreeRTOS. Semafoare In 1965 Dijkstra a propus folosirea unei variabile pentru controrizarea wakeup-urilor salvate pentru viitoarea utilizare: semafor semafor = 0: nici un wakeup nu a fost salvat semafor = n > 0: n wakeup-uri au fost salvate se folosesc dou proceduri: down i up down verific valoarea semaforului dac semafor > 0, decrementeaz semaforul i continu execuia procesului dac semafor == 0, execut sleep verificarea valorii, modificarea i executarea sleep (dac e cazul) formeaz o operaie atomic (o operaie indivizibil) => pe durata executrii acestei operaii nici un alt proces nu are acces la semafor atomicitate este esenial pentru evitarea condiiilor de concuren up incrementeaz valoarea semaforului dac unul sau mai multe procese executau sleep determinat de semafor (incapabil s execute down), unul din ele va fi ales de system i va executa down dup up semaforul poate s rmn 0, dar vor fi mai puine procese blocate de acel semafor up este de asemenea o operaie atomic up nu poate bloca procesul respective 6. Care sunt strategiile de planificare ntlnite la sisteme de operare n timp real? Descriei strategiile de baz (preemptive/non-preemptive/cooperative) cu avantajele/dezavantajele n sistemele timp real i descriei detaliat strategiile Round-Robin i Priority Scheduling. Strategii de planificare La fiecare ntrerupere de ceas sau la apariia unui eveniment se ruleaz schedulerul Strategiile: preemtive care permit suspendarea temporar a proceselor care ruleaz non-preemptive procesele ruleaz pn i termin execuia sau se vor bloca n ateptarea unei operaii IO cooperativ procesele i asigur (prin programare atent) de a preda controlul din cnd n cnd

Round Robin Scheduling Este unul din cele mai vechi i simpli algoritmi de planificare. Fiecrei proces i se atribuie un interval de timp numit cuant, n care procesul se poate executa. Dac procesul nu-si termin execuia pn la expirarea cuantei de timp alocate, el va fi ntrerupt iar CPU este alocat altui process. Dac procesul termin nainte de expirarea cuantei, se va planifica alt proces fr a se astepta expirarea cuantei. Priority scheduling In cazul Round Robin, procesele aveau aceeai prioritate. Uneori ns va trebui s inem cont de prioritile n rezolvarea unor problem. Fiecrei proces i se aloc o prioritate. La un moment dat va fi rulat procesul cel mai prioritar. Pentru a previne rularea indefinit a proceselor prioritare schedulerul poate descrete prioritatea procesului activ la fiecare ntrerupere. 7. Care sunt principalele arhitecturi de sisteme de operare n timp real? Detaliai executivul timp real, nucleul monolitic i nucleul avantajele/dezavantajele n sisteme de timp real. mikrokernel cu

Real-time executive sisteme RTOS tradiionale sisteme fr MMU resurse (CPU, memorie) limitate kernelul ruleaz n aceai spaiu de adrese ca i aplicaiile tot sistemul (kernel + aplicaii) este compilat ntr-o singur imagine este greu de adugat aplicaii n mod dinamic nu se preteaz pentru software complex Kernel monolitic distincie ntre user-space i kernel-space aplicaiile ruleaz n user-space nucleul i driverele ruleaz n kernel-space ntre ele exist un strat de apeluri sistem suport sistem complexe cu multe aplicaii ofer protecie ntre aplicaii dac o aplicaie se blocheaz sau funcioneaz incorect atunci nu afecteaz pe celelate poate rula i pe arhitecturi fr MMU, dar cu protecie limitat Microkernel teoretic cea mai performant arhitectur de SO practic implementaiile existente prezint prea multe limitri din cauza complexitii toate funciile SO ruleaz n user-space n afara unui strat foarte subire de message passing sistemul are un overhead mare datorit mulimii de mesaje ce trebuie s treac din user-space n kernel-space i invers poate fi folosit numai pe sisteme cu MMU, altfel pierde avantajul proteciei maxime

8. Care sunt principalele componente a sistemului de operare Embedded Linux? Descriei sumar planificatorul, managerul de memorie, sistemul de fiiere, subsistemul reea, subsistemul IO i metodele IPC. Planificatorul (scheduler) planificatorul permite funcionarea multitasking a sistemului aplicaiile ruleaz pseudoparalel firele executate de scheduler pot fi: kernel threads (fire de execuie n interiorul kernelului fr context) user process (fire de execuie, mpreun cu context, date, stiv, heap, text, bss + stiv kernel) user threads (fire de execuie, cu instan de execuie separat, dar heap, code, bss i data partajat cu alte fire din cadrul aceluiai proces) Managerul de memorie realizeaz alocarea dinamic a memoriei pentru componentele SO (scheduler, FS, networking, drivere) implementeaz memoria virtual pentru aplicaii (paginare) memoria este mprit n pagini de 4kB (de obicei) i pot fi alocate independent kernelului sau aplicaiilor separ zonele de memorie alocate diferitelor procese pentru protecie ntre ele (segmentare) Sistemul de fiiere Linux combin diferitele sisteme de fiiere ntr-un strat comun Virtual File System VFS ofer o interfa comun pentru toate dispozitivele din sistem Linux are nevoie ntotdeauna de un FS (ct de ct minimal): programele sunt stocate ntr-o memorie nevolatil (HDD, Flash) n forma unor fiiere accesibile prin intermediul FS toate dispozitivele de intrare/ieire existente n sistem sunt tratate ca fiiere sistemul Linux ofer un root file system, care trebuie montat la pornire (dac nu exist kernelul nu va porni) pe acest root vor fi montate celelalte sisteme de fiiere: ext2, ext3, reiserfs (pentru harddiskuri) romfs (memorie ROM) ramfs (memorie RAM) jffs2 (flash) procfs (informaii despre sistem /proc) devfs, udev (dispozitive IO /dev) Subsistemul IO ofer o interfa uniform pentru dispozitivele din sistem character devices (dispozitive secveniale) block devices (dispozitive accesibile aleator) network devices (dispozitive pe reea) accesul dispozitivelor se realizeaz prin intermediul FS controlul dispozitivelor se realizeaz prin interfaa IO (ioctl) Subsistemul de reea una din principalele atuuri al sistemului Linux este orientarea spre operare n reea nucleul Linux include implementri complete de stive de reea, cea mai important fiind stiva TCP/IP
5

foarte multe subsisteme Linux se folosesc de modularitate oferit de stivele de reea pentru realizarea separrii i comunicrii ntre ele IPC pentru comunicaii ntre procese Linux include: semnale (comunicaie asincron = ntreruperi soft) pipe (prin intermediul FS) socket (prin intermediul networking) System V IPC (metodele IPC definite de POSIX): semafoare shared memory message passing 9. Ce este BSP? Descriei pe scurt BSP, implementarea lui n kernelul Linux (subdirectoarele, opiuni de configurare), enumerai principalele periferice pentru care exist suport implicit n Linux. Board Support Package software folosit pentru iniializarea dispozitivelor hardware ntlnite n sistemul ncorporat implementeaz rutinele specifice hardware-ului ce vor fi folosite de kernel i drivere BSP ascunde toate detaliile legate de processor i placa n care este ncorporat, permitnd astfel o portare uoar a sistemului de operare i a driverelor aferente BSP (C) = HAL (PC) Componentele BSP suport pentru procesor - trateaz caracteristicile specifice procesoarelor embedded (MIPS, ARM, PowerPC, etc... ) suport pentru periferice -bootloader -harta memoriei -timere -PIC (Programmable Interrupt Controller) -RTC (Real Time Clock) -serial (UART) pentru consol i debug -magistrale (ISA, PCI) -DMA -Power management Configurare BSP pentru placa de dezvoltare se poate realiza o setare prealabil a elementelor din configurarea kernelului pentru a plac de dezvoltare aparte n arch/XXX/ se insereaz un fiier Kconfig (sau config.in n cazul kernelului 2.4) cu opiunile specifice procesorului XXX n fisierul Kconfig se poate aduga opiuni specifice unei plci de dezvoltare, de ex: ifdef CONFIG_EUREKA LIBS += arch/mips/eureka/eureka.o SUBDIRS += arch/mips/eureka LOADADDR := 0x80000000 Endif
6

Opiuni de configurare se pot crea i opiuni de configurare specific plcii dep_bool 'Support for EUREKA board' CONFIG_EUREKA if ["$CONFIG_EUREKA"="y" ]; then choice 'Eureka Clock Speed' \ "75 CONFIG_SYSCLK_75 \ 100 CONFIG_SYSCLK_100" 100 fi ... if ["$CONFIG_EUREKA"="y" ]; then define_bool CONFIG_PCI y define_bool CONFIG_ISA y define_bool CONFIG_NONCOHERENT_IO y define_bool CONFIG_NEW_TIME_C y fi 10. Cum funcioneaz bootloaderul? Descriei rolul bootloaderului i detaliai fazele principale de la pornirea procesorului pn la pornirea sistemului de operare. Funciile bootloaderului funcii obligatorii iniializarea procesorului, a controlerului de memorie i a dispozitivelor hardware eseniale pentru ncrcarea kernelului (de ex. flash) ncrcarea kernelului: copiere din dispozitivul de stocare n memorie funcii opionale depind de sistemul ncorporat n care este folosit poate iniializa alte dispozitive poate pasa argumente kernelului pentru o configurare dinamic Secvena de bootare (la un sistem ncorporat) bootarea bootloaderul pornete din flash se iniializeaz registrele de baz i cache-ul (dac e cazul) se verific memoria i dispozitivel hardware de pe plac (POST) relocatarea bootloaderul se autocopiaz din flash n RAM (pentru rulare mai rapid) la copiere se poate efectua i o dezarhivare dac bootloaderul era comprimat n flash iniializarea dispozitivelor se iniializeaz dispozitivele de baz necesare pentru interaciunea cu utilizatorul (consola) se poate iniializa i alte dispozitive necesare pentru preluarea kernelului (flash, USB, Ethernet) UI se prezint o interfa utilizatorului prin intermediul creia se poate selecta imaginea de kernel ce trebuie ncrcat ncrcarea kernelului se copiaz kernelul n memorie (+ initrd) prepararea kernelului
7

argumente pot fi pasate kernelului se completeaz argumentele din linia de comand i se plaseaz n adrese fixe cunoscute de kernel se booteaz kernelul se va face un salt la punctul de intrarea n kernel n mod normal bootloaderul nu mai este folosit, aa c zona de memorie ocupat de aceasta este eliberat de kernel n timpul maprii memoriei 11. Cum se trateaz ntreruperile n Linux i cum ajung acestea la procesele utilizator? Descriei implementarea n BSP pentru ntreruperi, tratarea ntreruperi hardware i emiterea semnalelor (ntreruperilor software) ctre procese. Managementul ntreruperilor Fiecare sistem trateaz ntreruperile n mod diferite. De obicei exist un controler de ntreruperi specific (PIC Programmable Interrupt Controller). Intreruperile hardware sunt tratate mai nti de PIC, care poate devia ntreruperile acordnd prioritate hardware i metode diferite de tratare. Pentru programarea PIC trebuie s exist driver special, care ns trebuie mascat prin BSP pentru portare uoar. Tratarea ntreruperilor n Linux Linux trateaz toate ntreruperile ca ntreruperi logice (un numr de obicei 128 sau 256 ntreruperi). Driverul pentru PIC va redireciona ntreruperile hardware ctre una din aceste ntreruperi logice (prin intermediul funciei request_irq() ). BSP va realiza interfaarea ntre ntreruperi hard i soft prin structurile: hw_interrupt_type (pointeri la funciile de tratare hardware) irq_desc_t (pointeri la handlere logice) Funciile BSP pentru tratarea ntreruperilor initialization: iniializarea ntreruperii startup function: funcia apelat la cerina de ntrerupere, activeaz ntreruperile shutdown: dezactiveaz ntreruperile enable: activeaz o ntrerupere particular disable: dezactiveaz o ntrerupere particular acknowledgement: apelat la nceputul rutinei de tratare (dezactiveaz ntreruperea) end of interrupt: marcheaz sfritul unei ntreruperi (reactiveaza ntreruperea) Alte dispozitive importante tratate de BSP timere Programmable Interval Timer: un timer este tot timpul configurat n faza de pornire pentru a fi folosit ca tick-ul sistem pentru acest timer BSP trebuie s ofere o interfa UART folosit cel mai des pe post de consol kernelul ateapt ntotdeauna prezena unei console prin care s interfaeze cu utilizatorul (serial, ethernet, etc...)

12. Cum funcioneaz memoria Flash i care sunt principalele caracteristici ce trebuie luate n seam de ctre sistemul de operare? Descriei principiul de funcionare, cele dou tipuri de baz, i influena asupra implementrii n sistemul de operare a metodei de adresare i a duratei de via. Memorii Flash dezvoltat n anii '80 de Toshiba i Intel folosete tranzistori MOS cu o poart de control i o poart flotant

Operaii asupra celulelor Flash poarta flotant poate fi ncrcat sau nu ncrcarea normal nu este suficient pentru deschiderea canalului DS fiind complet izolat sarcinile acumulate pe poarta flotant se pstreaz pentru timp ndelungat citire: se aplic o tensiune (jumtate din cea necesar deschiderii canalului) pe poarta de control tensiunea aplicat mpreun cu sarcinile stocate pe poarta flotant este suficient pentru a deschide canalul DS scrierea (injecie de electroni fierbini) se aplic o tensiune mare pe poarta de control (mult mai mare dect tensiunea de deschidere) datorit curentului mare pe canalul DS deschis, electronii fierbini sar pe poarta flotant ncrcnd aceasta tergerea (efectul tunel) se aplic o tensiune negativ mare pe poarta de control sarcinile stocate pe poarta flotant se vor extrage prin efectul tunel Exist dou tehnologii (denumite dup modul de legare a tranzistorilor): NOR (sau negat cablat) NAND (i negat cablat) Organizarea n amndou cazuri este una matricial cu linii de adres care vor selecta celulele paralele. Flash NOR tranzistorii sunt legai pe o parte la mas pe cealalt parte pe coloana corespunztoare dac unul din tranzistori este deschis se va trage toat coloana la GND

Celule sunt organizate n blocuri: dimensiunea blocului este de ordinul 64k. Citirea i scrierea se poate face prin adresare direct: liniile de adrese si date sunt organizate similar cu memoriile statice. Stergerea trebuie fcut pe bloc. Tensiunile de scriere i tergere sunt realizate intern prin convertoare boost integrate. Flash NAND tranzistorii de pe o coloan sunt legai n serie se activeaz toate liniile de adres cu tensiunea normal, mai puin adresa selectat (pe care se aplic jumtatea de tensiune)

Celule sunt organizate n pagini, iar paginile n blocuri. Paginile trebuie citite i scrise deodat, tergerea se face pe blocuri. Conine buffer SRAM integrat pentru pagina citit care poate fi citit ca un flux de date pe interfaa extern. Comunicarea extern se bazeaz pe comenzi ctre registrele interne. Caracteristici specifice flashurilor - durata de via (calculat n numrul de tergeri) este limitat - pentru a crete durata de via tergerile de blocuri ar trebuie echilibrate n tot spaiul de flash (wear leveling) - operaie de rescriere este complicat modificarea unui bit de 1 n 0 se poate face la nivel de cuvnt (sau pagin) modificarea unui bit de 0 n 1 necesit tergerea complet a unui bloc ntreg dup care vor trebui rescrise i toate datele nemodificate. 13. Cum se implementeaz memoriile Flash n Linux? Detaliai insuficienele sistemului de fiiere pentru folosirea Flashului i arhitectura MTD dedicat pentru soluionarea acestor probleme. Folosire flashului n Linux modul tradiional de realizare a driverelor i a sistemelor de fiiere n Linux nu poate fi adaptat uor la memoriile flash acestea pot fi citite pe caractere, dar trebuie scrise pe blocuri sistemele de fiiere din Linux nu ofer support specific flashurilor -nu exist wear leveling -blocurile din flash sunt de obicei mult mai mari dect sectoarele folosite pe harddiskuri -folosirea cacheului pentru file system trebuie evitat pentru a nu avea probleme la oprirea brusc a sistemului. Iniial flashurile se integrau n Linux printr-un FTL (Flash Translation Layer) care emula un hard-disk: nu soluiona toate problemele legate de caracteristicile flashurilor
10

nu ofera suport pentru alte moduri de operare devenea din ce n ce mai complex cu apariia noilor tipuri de flashuri i noilor interfee Soluia era introducerea subsistemului MTD (Memory Technology Devices). MTD a fost conceput special pentru modul de operaie cu flashuri. Se integreaz n Linux att pe nivelul de driver ct i pe nivelul de aplicaii. La nivelul de drivere MTD mapeaz pentru fiecare dispozitiv cte un driver de character i de block device character device poate fi folosit n mod obinuit cu funciile open/read/write/ioctl block device poate fi folosit pentru montarea unui sistem de fiiere classic Arhitectura MTD MTD core implementeaz driverele character i block drivere flash low-level implementeaz interfeele pentru flashuri NOR si NAND BSP pentru flash ofer suport pentru modurile de conectare a flashului pe plac aplicaii MTD aplicaii pe nivel kernel care folosesc flash (JFFS2) i aplicaii pe nivel de utilizator (upgrade) 14. Descriei principalele sisteme de fiiere folosite n sisteme embedded. Descriei pe scurt Ramdisk, RAMFS, CRAMFS, NFS i JFFS2 Ramdisk Este o metod de emulare a unui hard-disk n memorie. Nu este un sistem de fiiere, ci mai degrab o tehnologie ce permite crearea sistemului / n memorie, dup care n aceste sistem se pot monta alte sisteme de fiiere. De obicei initrd se creaz ntr-o form de imagine ramdisk, ce poate fi ncrcat n memorie de ctre boot-loadeer. RAMFS Este un sistem de fiiere localizat n ntregime n memorie RAM. De multe ori este nevoie de folosirea unor informaii (interne ale kernelului sau a utilizatorilor) organizate n form de fiiere pentru un acces comod i care nu trebuie pstrate dup repornirea sistemului, de aceea nu merit a fi ncrcate n flash. RAMFS ofer suport pentru stocare a astfel de informaii ntr-o zon de memorie care i poate modifica dimensiunea n funcie de necesiti. CRAMFS Este un sistem de fiiere read-only cu compresia datelor. Este foarte util pentru stocarea programelor n flash comprimate pentru a minimiza spaiul folosit. CRAMFS este un sistem de fiiere normal, care comunic prin drivere block folosind un cache n memorie i algoritmi de compresie din zlib pentru pagini de 4kB. JFFS2 Sistem de fiiere cu jurnal special destinat pentru flashuri. Realizeaz wear leveling. Nu folosete cache de scriere pentru a evita coruperile de date la oprirea brusc a sistemului. Folosete direct API-ul din MTD fr a trece printr-un nivel de translatare (FTL). Modificarea fiierelor se realizeaz prin intermediul logurilor: logurilor conin datele ce au fost modificate numai aceste loguri se salveaz pentru citirea fiierelor se va citi toate logurile aferente pentru a recrea fiierul

11

Periodic se ruleaz un garbage collector pentru a terge logurile inutile: acest garbage collector realizeaz i wear leveling prin rearanjarea datelor n zonele mai puin folosite. NFS Sistemele de fiiere desktop (ext2,3,4...) pot fi exportate i ctre reea. Kernelul Linux ofer un mecanism de montare a astfel de sisteme de fiiere prin reea. Un sistem NFS poate fi montat chiar i ca /, permind astfel o depanare rapid a sistemului (prin faptul c aplicaiile pot fi dezvoltate pe un desktop, iar pentru teste acestea nu trebuie nscrise n flash). Bootloader trebuie s ofere suport pentru conectare la reea (BOOTP, DHCP). 15. Cum se implementeaz driverul de serial n Linux? Detaliai importana interfeei seriale ca interfa de consol i descriei sumar componentele din subsistemul TTY. Nivelul TTY este o clas speciala de dispozitve de tip caracter care se intercaleaz deasupra driverului de nivel jos. TTY trateaz toate dispozitivele seriale indiferent de modul cum este folosit interfaa. Aplicaiile nu acceseaz direct driverul de serial, ci driverele TTY.

Discipline de linie Fiecare dispozitiv de tip TTY este asociat cu o disciplin de linie, care trateaz modul cum sunt transmise datele pe linia serial. Implicit disciplina de linie (integrate in fiecare kernel) este N_TTY, care ofer un terminal simplu pe serial. Pot fi implementate i alte discipline de linie pentru protocoalele mai complicate folosite pe interfee seriale (X.25, PPP/SLIP). Terminale Fiecare proces in Linux are asociat un terminal de control procesul asociaz intrarea standard (stdin) i ieirea standard (stdout) respectiv ieirea pentru erori (stderr) cu acest terminal de control. Subsistemul TTY impreun cu subsistemul de management a proceselor aloc automat terminalul de control a proceselor. CTTY asociat unui proces poate fi o interfa serial, tastatura, monitorul in mod text. Pseudo-terminale Datorit faptului c nu exist suficiente interfee seriale pentru terminalele de control a tuturor proceselor, subsistemul TTY implementeaz i o serie de pseudo-terminale (PTY).
12

Aceste pseudoterminale pot fi folosite i pentru IPC: terminalele PTY pot fi redirecionate intre procese procesele pot fi pornite cu terminale de control ascunse (la care utilizatorul nu are acces direct) de ex.: telnet, ssh. Driverul de serial in Linux Interfaa UART are un driver in kernelul Linux. Driverul acceseaz dispozitivul prin intermediul structurilor: uart_driver :interfaa comun pentru apeluri sistem uart_state: fiecare port serial are asociat aceast structur care conine starea actual uart_port: configuraia hardware uart_ops: funcii low level de acces 16. Ce sunt module kernel i cum sunt implementate? Descriei sumar funcionarea modulelor, avantajele folosirii lor i enumerai componentele din API-ul standard pentru module. Module kernel Modulele de kernel sunt subsisteme ale kernelului care sunt adugate dinamic la un kernel aflat in rulare. Folosirea modulelor reduce dimensiunea kernelului, pentru c numai subsistemele ce sunt folosite vor fi incrcate. Modulele ofer un API standard, care permite incrcarea/descrcare lor de ctre kernel i extind apelurile sistem standard pentru comunicarea cu aplicaiile. Module API Funcii de intrare i ieire modulul trebuie s ofere funciile module_init() i module_exit(), care sunt apelate de kernel la incrcarea respectiv descrcarea modulului Pasarea parametrilor la incrcarea modulelor, acestora pot fi pasate paramteri intr-o manier similar cu linia de comand parametrii trebuie declarai de ctre modul prin nite tabele de asociere (nume paramtru variabil) Reference count fiecare modul trebuie s stocheze intr-o variabil numrul de incrcri ai modului respectiv cand acest numr cade la 0, modulul poate fi descrcat pentru a evita referirle la module inexistente toate apelurile ctre module trebuie s treac prin referine tratate de kernel Declararea licenei modulele Linux au obligaia de a declara licena la pornire 17. Ce este un OSPL? Descriei pe scurt scopul folosire OSPL n portarea aplicaiilor real-time ctre Linux. Operating System Porting Layer Pentru portarea aplicaiilor RTOS pe Linux trebuie implementat un OSPL. Minimizeaz numrul de modificri asupra codului aplicaiei prin maparea funciilor oferite de API-ul RTOS la API-ul Linux:
13

mapare unu-la-unu: unele funcii oferite de RTOS pot fi mapate la un apel sistem oferit de Linux #define xTaskHandle int void vTaskSuspend(xTaskHandle pid) { kill(pid, SIGSTOP); } mapare unu-la-multe: cnd o funcie RTOS nu poate fi realizat de un singur apel sistem 18. Care sunt avantajele/dezavantajele folosirii taskurilor i a threadurilor n sisteme realtime? Detaliai diferenele principale ntre taskuri i threaduri pornind de la implementrile pe sisteme real-time executive i portarea lor ctre Linux. Portarea taskurilor pe Linux Fiecare task poate fi transformat ntr-un thread din cadrul aceluiai process

Taskurile pot fi grupate n procese diferite

Strategii de portare a taskurilor Taskurile strns cuplate (prin variabile globale partajate) pot fi puse n threaduri separate din cadrul unui singur process. este metoda de portare cea mai direct i mai uoar Taskurile independente sau cuplate prin intermediul IPC oferit de SO se pun n procese diferite. Taskurile importante (la funcionalitatea sistemului) ar trebui puse n procese diferite pentru protecie maxim. Linux implementeaz threaduri POSIX (pthreads). Pentru portarea taskurilor n pthreaduri, aplicaiile trebuie adaptate la standardul pthread API.
14

Crearea threadurilor: int pthread_create(pthread_t* thread_id, pthread_attr_t* thread_attributes, void* (*start_routine)(void*), void* arg); se creaz un nou fir de execuie pornind de la funcia start_routine. Terminarea threadurilor Pentru a transmite starea de terminare threadul poate apela funcia void pthread_exit(void* return_val); similar cu funcia exit, dar va termina numai threadul care a apelat dac funcia asociat thread-ului se termin atunci nu se va transmite stare de terminare Pentru ca un thread sa citeasc starea de terminare se folosete funcia int pthread_join(pthread_t tid, void** thread_return_val); similar cu funcia wait Dac starea de terminare a unui thread nu a fost citit, atunci resursele asociate threadurilor nu vor fi eliberate. In cazul n care un thread nu furnizeaz starea de terminare atunci aceasta nu poate fi citit, pentru a permite totui eliberarea resurselor, threadul trebuie detaat de threadul care l-a creat. int pthread_detach(pthread_t tid); Portarea unei aplicaii n care taskurile i ncheie rularea la un moment date, necesit i modificarea codurilor aplicaiei. Sincronizarea threadurilor pthreads ofer metode robuste pentru sincronizare prin intermediul unui API userspace mutex void pthread_mutex_init(pthread_mutex_t* mutex, const pthread_mutexattr_t* mutexattr); int pthread_mutex_lock(pthread_mutex_t* mutex); int pthread_mutex_unlock(pthread_mutex_t* mutex); semafoare void sem_init(sem_t* sem, int pshared, unsigned int value); int sem_wait(sem_t* sem); int sem_post(sem_t* sem); 19. Care sunt principalele caracteristici a sistemelor de operare care influeneaz capabilitile real-time? Descriei sumar: latena ntreruperilor, durata rutinei de tratare a ntreruperilor, latena planificatorului i durata planificrii, respectiv influena acestora asupra timpului de rspuns a sistemului. Latena ntreruperilor Principale cauze de laten mare: dezactivarea ntreruperilor pentru un timp ndelungat porii din kernel i din drivere trebuie s se protejeze fa de rutine de ntreruperi astfel de seciuni critice sunt nconjurate de apeluri de tip local_irq_disable sau spin_lock_irq
15

nregistrarea ntreruperilor greit driverele scrise greit pot s nregistreze ISR-ul n mod greit exist dou moduri de nregistrare: fast irq i slow irq, dac un dispozitiv mai puin important nregistreaz fast irq atunci poate bloca ntreruperile mai importante. Durata ISR-urilor Durata ISR-ului este n totalitate lsat pe seama programatorului de driver. Durata ISR-ului poate fi non-determinist dac se folosete soft-irq. ISR poate fi nprit n dou seciuni: o parte critic care se execut n interiorul ISR i nu mai poate fi ntrerupt i o parte care va fi tratat ulterior de kernel i care poate fi ntrerupt de alte irq hardware soft-irq este de obice tratat de daemonul ksoft-irqd care este non-real-time, astfel folosirea soft-irq pentru evenimente real-time trebuie evitat. Latena planificatorului Latena planificatorului (mai ales la versiuni mai vechi) este principalul contributor la timpul de rspuns mare. Kernelul pn la 2.4 avea o natur nonpreemptiv: procesele din user-space puteau fi nlturate, dar funciile kernel apelate din user-space nu puteau fi ntrerupte, astfel se crea i n interiorul proceselor zone n care procesul nu putea fi interrupt. dezactivarea ntreruperilor (ce include i ntrerupera timerului asociat cu planificatorul) putea avea impact asupra latena planificatorului. Durata planificrii Durata planificrii este timpul necesar pentru planificator ca s aleag procesul care va fi activat, s modifice listele (run, ready) corespunztoare i s-l schimbe contextul la noul process. Iniial planificatorul din Linux (pornind cu conceptul de SO de uz general) s-a concentrate pentru a realiza planificare ct mai corect, de aceea a fost sacrificat durata determinist a planificrii. de obicei planificatorul rula n timp O(n) pentru numrul proceselor. 20. Care sunt prevederile standardului POSIX pentru sisteme real-time? Descriei sumar: preempia, latena ntreruperilor, latena planificatorului, metodele IPC i de sincronizare, alocare dinamic de memorie. preemption: cnd un task de prioritate mai mare devine ready, taskul de prioritate mai mic n rulare trebuie interrupt. latena ntreruperilor: RTOS trebuie s aib o laten a ntreruperilor (timpul ntre apariia ntreruperii i deservirea acesteia) predictibil (i ct mai mic). latena planificatorului: timpul ntre momentul cnd un task devine rulabil i pn cnd ncepe s ruleze trebuie s fie determinist. IPC i sincronizare: cea mai popular metod de IPC n sisteme embedded este message passing, RTOS trebuie s ofere support pentru transmisia mesajelor n timp constant. RTOS trebuie s ofere suport pentru semafoare i mutex. alocare dinamic de memorie: RTOS trebuie s ofere un mecanism de alocare dinamic a memoriei ntr-un timp constant.

16

21. Care sunt extensiile POSIX pentru sistemele real-time? Descriei sumar: planificarea cu prioriti fixe, blocarea memoriei, semnale de timp real, ceasul sistem, timere i operaiile asincronre. Extensii POSIX real-time: fixed-priority scheduling memory locking cozi de mesaje POSIX memorie partajat POSIX semnale real-time semafoare POSIX timere POSIX operaii IO asincrone Planificare cu prioriti fixe Parametrii asociai proceselor (referitor la RT): clasa de planificare prioritate cuanta de timp Clasa de planificare precizeaz algoritmul de planificare folosit pentru proces: SCHED_FIFO: procesele ruleaz unul dup cellalt n ordinea crerii pn la terminare sau blocare SCHED_RR: (Round Robin) procesele ruleaz pn la cuanta precizat dup care vor fi puse la captul listei SCHED_OTHER: planificatorul standard (non-RT) Blocarea memoriei Aplicaiile real-time au nevoie de un timp de rspuns determinist ce nu poate fi satisfcut dac se folosete paginare. Pentru a realiza timpul de rspuns determinist un proces poate s blocheze o parte (sau chiar toat) memoria alocat procesului, ca aceast zon s rmn definitiv n memorie. Soluii de blocare: n timpul rulrii cu funciile mlock i mlockall n timpul legrii prin intermediul ldscript-ului cu atributul gcc: __section__ Semnale timp real Sunt folosite pentru notificarea proceselor despre apariia unui eveniment asincron. Semnalele real-time sunt o extensie a semnalelor native Linux: numr mai mare de semnale utilizator semnale prioritizate informaii ataate semnalelor semnalele sunt salvate ntr-o coad Funcii: sigaction (definirea unui handler), sigqueue (transmiterea unui semnal) Ceasuri i timere POSIX Ofer acces mai avansat la ceasul system: CLOCK_REALTIME: ceasul universal CLOCK_MONOTONIC: timpul trecut de la pornirea sistemului
17

CLOCK_PROCESS_CPUTIME_ID: timpul total a unui proces petrecut n rulare CLOCK_THREAD_CPUTIME_ID: similar pentru threaduri Accesul la ceas: clock_settime, clock_gettime, clock_getres, Blocarea procesul pentru o perioad: clock_nanosleep Timere Folosite pentru temporizare: timer_create, timer_delete Pot fi setate pentru o anumit perioad dup care vor genera un semnal ce poate fi tratat: timer_settime Rezoluia standard n Linux este de 1ms. MontaVista a introdus un timer de nalt rezoluie (1s). CLOCK_REALTIME_HR CLOCK_MONOTONIC_HR Operaii IO asincrone Operaiile IO standard sunt blocante (read, write). Pentru un timp de rspuns mai bun poate fi nevoie ca procesul s realizeze alte calcule n timp ce ateapt pentru terminarea operaiei IO. aio_read (citire), aio_write (scriere), aio_error (starea operaiei), aio_return (numrul de octei transferai), aio_cancel (oprirea operaiei), aio_suspend (blocarea procesului) Operaiile nu in la curent offsetul n fiier. Dup terminarea operaie IO procesul este notificat printr-un semnal. 22. Care sunt paii necesari pentru compilare kernelului Linux? Descriei sumar: mediul de cross-compilare, configurarea kernelului, compilarea surselor, legarea codului, post-procesarea imaginii kernelului i compilarea modulelor. Paii necesari pentru compilarea kernelului: instalarea unui mediu de cross-compilare implicit sistemul vine cu un mediu de compilare pentru host (binutils, gcc) compilarea pentru sistemul embedded are nevoie de un cross-compiler: compilatorul este executat pe un host, dar creeaz cod pentru sistemul int (ex: gcc-arm, gcc-mips, etc.) configurarea kernelului procesul de selectare a componentelor din kernel ce vor fi compilate mai multe metode: make [config | menuconfig | xconfig] compilarea surselor i legarea fiierelor obiect make se compileaz sursele selectate la faza de compilarea si se leag toate mpreun ntr-o imagine vmlinux pe 2.4 este nevoie de crearea dependinelor de fiiere header (make dep) nainte de comanda make, pe 2.6 nu este necesar pe 2.4 dac comanda make se emite nainte de terminarea comenzii, se intr ntr-o interfa interactiv make config, pe 2.6 se genereaz un mesaje de eroare poate exista o faz de postprocesare a imaginii kernelului dependent de arhitectur i de sistemul de compilare de obicei inclus n faza make, dar nu e standardizat
18

poate include comprimarea imaginii (vmlinuz), crearea unei imagini de root, cod de bootstrap, etc.. compilarea modulelor dac kernelul a fost configurat s foloseasc anumite componente ca module ncrcate dinamic, acestea trebuie compilate separat make modules

19

S-ar putea să vă placă și