Dom > Razstava > Vsebine

Operacijski sistem v realnem času Komunikacija z nalogo in delitev virov

Mar 08, 2019

Večopravilni operacijski sistem, kot je Unix, je v nalogah v realnem času slab. Razporejevalnik daje prednost nalogam z najnižjim povpraševanjem na računalniku, zato ni mogoče zagotoviti, da bo časovno kritično opravilo imelo dostop do dovolj virov. Sistemi za večopravilnost morajo upravljati souporabo podatkov in strojne opreme med več nalogami. Običajno je nevarno za dve nalogi, da hkrati dostopata do istih podatkovnih ali strojnih virov. [6] Za rešitev te težave so trije najpogostejši pristopi:


Začasno zakrivanje / onemogočanje prekinitev

Operacijski sistemi za splošne namene običajno ne dovoljujejo uporabniškim programom, da prikrijejo (onemogočijo) prekinitve, ker lahko uporabniški program nadzoruje CPE tako dolgo, kot želi. Nekatere sodobne procesorje ne dovoljujejo kode za uporabniški način, da bi onemogočile prekinitve, ker se tak nadzor šteje za ključni vir operacijskega sistema. Številni vgrajeni sistemi in RTOS pa omogočajo samemu programu, da deluje v načinu jedra za večjo učinkovitost sistemskih klicev in tudi, da dovoli aplikaciji večji nadzor nad operacijskim okoljem, ne da bi zahteval intervencijo OS.


Pri sistemih z enim procesorjem je aplikacija, ki se izvaja v načinu jedra in prekrivanjem prekrivanja, najnižja metoda, ki preprečuje hkraten dostop do vira v skupni rabi. Medtem ko so prekinitve prikrite in trenutna naloga ne povzroči blokiranja operacijskega sistema, trenutna naloga uporablja izključno CPU, saj nobena druga naloga ali prekinitev ne more prevzeti nadzora, zato je kritični del zaščiten. Ko naloga zapusti kritični del, mora razkriti prekinitve; Prekinitve v teku, če obstajajo, se nato izvedejo. Začasno prekrivanje prekinitev naj se izvede le, če je najdaljša pot prek kritičnega odseka krajša od želene največje prekinitvene zakasnitve. Običajno se ta način zaščite uporablja le, če je kritični del le nekaj navodil in ne vsebuje zank. Ta metoda je idealna za zaščito strojno bitno preslikanih registrov, ko so bitovi pod nadzorom različnih nalog.


Muteksi

Kadar je treba deljeno sredstvo rezervirati, ne da bi blokirali vse druge naloge (kot je čakanje na zapisovanje pomnilnika Flash), je bolje uporabiti mehanizme, ki so na voljo tudi v operacijskih sistemih za splošne namene, kot so mutex in sporočila, ki jih nadzira OS. Takšni mehanizmi vključujejo sistemske klice in navadno zahtevajo dispečersko kodo OS na izhodu, tako da običajno izvedejo več sto napotkov za CPE, medtem ko lahko prekrivanje prekrije samo nekaj navodil na nekaterih procesorjih.


(Ne rekurzivni) mutex je zaklenjen ali odklenjen. Ko je naloga zaklenila mutex, morajo vse druge naloge počakati, da lastnik odklopi mutex - prvotno nit. Naloga lahko nastavi časovno omejitev pri čakanju na mutex. Obstaja več znanih težav z načrti, ki temeljijo na mutexu, kot so prednostna inverzija in zastoji.


V prednostni inverziji naloga visoke prioritete čaka, ker ima naloga z nizko prioriteto mutex, vendar naloga z nižjo prioriteto ne dobi časa CPU, da dokonča svoje delo. Tipična rešitev je, da je naloga, ki ima v lasti mutex na ali "deduje", prednost najvišje čakajoče naloge. Vendar ta preprost pristop postane bolj zapleten, ko obstaja več ravni čakanja: naloga A čaka na mutex, zaklenjen z nalogo B, ki čaka na mutex, zaklenjen z nalogo C. Ravnanje z več ravnmi dedovanja povzroči, da se druga koda izvaja v kontekstu visoke prioritete. in s tem lahko povzroči stradanje navojev srednje prioritete.


V zastoju dve ali več nalog zaklepanje mutexa brez časovnih omejitev in potem večno čakanje na mutex druge naloge, kar ustvari ciklično odvisnost. Najenostavnejši scenarij zastoja se pojavi, ko dve nalogi izmenično zaklepata dva mutexa, vendar v nasprotnem vrstnem redu. Zamrznitev preprečuje skrbna zasnova.


Sporočilo prehaja

Drugi pristop k souporabi virov je, da naloge pošiljajo sporočila v organizirani shemi posredovanja sporočil. V tej paradigmi se vir neposredno upravlja samo z eno nalogo. Ko druga naloga želi preiskati ali manipulirati z virom, pošlje sporočilo nalogi za upravljanje. Čeprav je njihovo vedenje v realnem času manj jasno od semaforskih sistemov, preprosti sistemi, ki temeljijo na sporočilih, preprečujejo večino nevarnosti protokola protokola in so na splošno boljši od semaforskih sistemov. Vendar pa so možne težave, kot so težave semaforjev. Prednostna inverzija se lahko pojavi, ko opravilo dela na sporočilu z nizko prednostjo, in prezre sporočilo z višjo prioriteto (ali sporočilo, ki izvira posredno iz naloge z visoko prioriteto) v svoji čakalni vrsti sporočil. Do zastojev protokola lahko pride, ko dve ali več nalog čakata drug na drugega za pošiljanje odgovarjajočih sporočil.