KURZUS: Számítógépes folyamatirányítás

MODUL: A dinamika

6.1. lecke: A real-time monitor és a taskok

Cél: A lecke célja, hogy a tananyag felhasználója

  • megismerje a virtuálisan párhuzamos programfuttatás elvét, a valós időhöz szinkronizáltság és az eseményvezételtség fogalmát;
  • megismerje a task fogalmát és jellemzőit;
  • megismerje a real-time monitor fogalmát, funkcióit és elemeit;
  • megismerje a taskok állapotait és lehetséges állapot-átmenetit;

Követelmények: Ön akkor sajátította el megfelelően a tananyagot, ha

  • el tudja mondani a processzoridő felosztásának statikus és dinamikus formáját;
  • el tudja mondani a virtuálisan párhuzamos programfuttatás elvét;
  • el tudja mondani a task fogalmát és pontosan érti eme összetett fogalom elemeinek jelentését;
  • el tudja mondani a real-time monitor fogalmát, alapfunkcióit, fel tudja sorolni a monitor egyes elemeit és ismertetni tudja azok szerepét;
  • fel tudja vázolni egy real-time programrendszer struktúráját és azon be tudja mutatni az elemek kapcsolatát;
  • fel tudja sorolni a taskok állapotait, pontosan el tudja mondani az egyes állapotok jelentéstartalmát, fel tudja rajzolni a taskok állapot-diagramját és elemezni tudja az állapot-átmenetek lefolyását.

Időszükséglet: 2 óra

Kulcsfogalmak:

  • (real-time) monitor,
  • task,
  • prioritás,
  • ütemező program,
  • óra-interrupt,
  • monitortáblázat,
  • monitorhívás,
  • aktív állapot,
  • várakozó állapot,
  • alvó állapot.
Tananyag

Jegyezze meg a real-time monitor fogalmát, alapfunkcióit, sorolja fel a monitor egyes elemeit és ismertetni tudja azok szerepét;

Jegyezze meg a task fogalmát és eme összetett fogalom elemeinek jelentését;

A monitor a real-time operációs rendszer része. A monitor szempontjából a folyamatirányító rendszer egyes programjai névvel (számmal) azonosított, adott prioritással rendelkező logikai elemek (un. taskok). (Az operációs rendszerekkel foglalkozó irodalomban a taskot folyamatnak [process] nevezik.) Az egyes programok konkrét funkciói a monitor számára ismeretlenek és érdektelenek, a programok csak dobozok, melyeket rakosgatni lehet, vagyis lehet engedélyezni a futásukat, vagy meg lehet tőlük vonni a futás jogát.

Pontosabban fogalmazva: a task egy viszonylag önálló felhasználói funkciót ellátó, önmagában soros működtetést (futtatást) igénylő program, amely működése nagy részében autonóm módon fut, időnként azonban szinkronizáltinformációcserét bonyolít le más taskokkal és a többi taskkal együtt verseng a processzorért. E bonyolult definíció leglényegesebb elemei: a szinkronizált kapcsolat és a konkurens jelleg. (Úgy vélem, a 'felhasználói funkció' jelentése az 5. modul feldolgozása után nyilvánvaló.) Minden taskhoz prioritást kell rendelni; a prioritás lehet statikus (állandó), vagy dinamikus (változó). A real-time programrendszer felépítését az 1. ábra mutatja be.

A real-time szoftver sterkezete
1. ábra

A monitor szűkebb értelemben egy program, tágabb értelemben három elem:

  • az ún. ütemező program,
  • a monitortáblázatok és
  • a monitorhívások szubrutinjainak

összessége.

Az ütemező program kezeli az óra-megszakítást, valamint az idő és a rendszerállapot ismeretében engedélyezi egy task futását. Az óra-interrupt egy periodikus megszakítás, amely pl. 100msec-onként érkezik be és a rendszer számára a valós idő múlását jelzi. Beérkezésekor az ütemező program aktualizálja a szoftver-órát és az időzített taskok időzítés-számlálóit.

A monitortáblázatok a felhasználói programrendszer állapotára jellemző információkat tartalmazzák. Van az un. task-tábla és vannak a szinkronizációs elemek táblázatai. A task-tábla egy taskhoz tartozó bejegyzése (például) az alábbi elemeket tartalmazza:

  • task szám (név),
  • prioritás,
  • állapot,
  • kezdőcím (belépési pont),
  • kezdeti stack-szint (kezdeti SP),
  • mentett PC,
  • mentett SP,
  • időzítés,
  • time-out.

A felsorolás nem teljes, az általánosság szintjén nem is lehet teljes felsorolást adni.

Itt jegyezzük meg, hogy mindaz, amit a monitorról, funkcióiról, működéséről itt és a későbbiekben mondunk, egy konkrét, megvalósított monitorra vonatkozik, de ugyanakkor szinte teljesen általánosan jellemző. Másrészt a mondottak kizárólag a lényeget kívánják bemutatni és megértetni, és nagyon távol állnak attól, hogy az említett monitor felhasználói kézikönyv-szintű leírását adják. Ennek nem is lenne értelme.

A monitor a taskok számára bizonyos szolgáltatásokat nyújt: eszközöket biztosít az egymás közti információcsere szervezéséhez, működésük egymáshoz-igazításához (szinkronizáció), egymás állapotának befolyásolásához, a rendszer erőforrásainak használatához, az I/O csatornák kezeléséhez, stb. E szolgáltatásokat un. monitorhívásokkal (executive-hívások, rendszerhívások) lehet igénybe venni. A monitorhívások formailag szubrutinok, tehát a szolgáltatások a taskokból megfelelően paraméterezett szubrutinhívásokkal érhetők el. Ezekre később bőven látunk példákat.

Sorolja fel a taskok állapotait, fogalmazza meg az egyes állapotok jelentéstartalmát, rajzolja fel a taskok állapot-diagramját és elemezze az állapot-átmenetek lefolyását.

A 6-1. ábrán néhány taskot is feltüntettünk. A taskokat megszámoztuk. Sok rendszerben a sorszám (azonosító) egyben a prioritást is megszabja oly módon, hogy a kisebb sorszámú task a magasabb prioritású. A legmagasabb (0.), valamint a legalacsonyabb (n.) prioritású task nem része a felhasználói rendszernek, vagyis nem lát el folyamatirányítási funkciót. Ezeket szokás a monitor kiegészítő részeinek is tekinteni. A 0. un. system-task futásakor a teljes felhasználói rendszer blokkolt állapotba kerül, hiszen minden más task prioritása kisebb. Így a 0. task felhasználható diagnosztikai célokra (konzol-rutinként), a megmerevedett rendszer állapotának vizsgálatára, illetve az állapotváltozások nyomon követésére. Ez a funkció főként a rendszer telepítésének, üzembeállításának szakaszában, az elkerülhetetlen kezdeti hibák felderítésében és elhárításában rendkívül hasznos. A legalacsonyabb prioritású, un background task akkor futhat, ha egyetlen másik task sem fut. Mondhatjuk, hogy ő használja fel a processzoridő maradékát. Valami olyan tevékenységet lehet rábízni, ami ha elmarad, sem történik semmi baj (pl. memóriateszt).

Egy task három különböző állapot valamelyikében lehet (2. ábra).

A taskok állapotgráfja
2. ábra

Aktív (ACT) állapotban van egy task, ha futásának minden feltétele adott. A monitor mindig a legmagasabb prioritású aktív taskhoz rendeli a processzort. Egyidejűleg több task lehet aktív de csak egy futhat.

A futó task futása közben akadályba ütközhet, vagyis elveszítheti továbbfutása valamely feltételét. Ilyenkor várakozó (WAIT) állapotba kerül. Akadályt jelenthet egy tilosra álló szemafor, egy meg nem kapott erőforrás, egy meg nem érkezett üzenet, vagy egy pillanatnyilag végrehajthatatlan I/O-művelet. A task addig marad várakozó állapotban, míg az akadály el nem hárul. Ennek időtartama bizonytalan és a várakozó nem befolyásolhatja, ugyanis az akadályt csak futó task, vagy az I/O-rendszer állapotváltozása háríthatja el. Ha az akadály megszűnt, a várakozó task újra aktív állapotba kerül, és ha történetesen a legmagasabb prioritású az aktívak között, akkor a processzort is megkaphatja.

A harmadik állapot az alvó, vagy nyugvó (IDLE) állapot. Ebbe a futó task saját kérésére kerülhet (pl. akkor, ha befejezte a működését), de rendszer-indításkor ez a taskok alapállapota is. Az alvó állapot tarthat határozatlan, vagy határozott ideig. A határozatlan idejű alvó állapotból egy taskot az éppen futó task által kiadott, az alvóra vonatkozó RQACT (aktiválás), vagy RQCYC (ciklikus aktiválás) monitorhívással lehet aktív állapotba vinni. A határozott idejű alvó állapotban lévő taskot az idő lejártakor a monitor aktiválja. A futó task RQSLP, vagy RQDLE monitorhívással kérheti alvó állapotba helyezését. Az RQSLP határozatlan, Az RQDLE határozott idejű elaltatást eredményez. Az utóbbi hívásnál az alvás kért időtartamát is meg kell adni.

A taskok állapotának megváltoztatása (az állapotátmenetek lebonyolítása) a monitor kizárólagos joga. A monitor két esetben fut: óra-interruptkor, illetve monitorhíváskor. Ez azt jelenti, hogy bármilyen állapotváltozás csak ilyenkor következhet be. Ha eltekintünk a nem túl gyakori monitorhívásoktól (hiszen említettük: a taskok az idő nagy részében autonóm módon működnek), akkor mondhatjuk, hogy a rendszer állapotváltozásainak gyakorisága megegyezik az óra-interrupt frekvenciájával. Így a rendszer természetes időegysége az óraperiódus és az összes időzítést ennek egész-számú többszöröseként lehet (és kell) megadni.

Lépjen ki a tananyagból!  Gondolja át a lecke tartalmát, rekonstruálja a szerkezetét! Vegyen elő egy lapot és írja le a lecke vázlatát! Ne sajnálja az erre fordított időt! Ha gondosan megcsinálja, már majdnem tudja is az anyagot.

Önellenőrző kérdések

1. Mondja el a processzoridő felosztásának lehetséges módjait!

2. Mondja el a virtuálisan párhuzamos programfuttatás elvét!

3. Válassza ki a helyes állítást!
Minél ritkább az óra-megszakítás, annál jobban érvényesül a virtuális párhuzamosság.
Minél sűrűbb az óra-megszakítás, annál hatékonyabb a felhasználói programrendszer működése.
Az óra-megszakítás sűrűségének van egy optimális értéke.

4. Mondja el a task és a task prioritásának fogalmát!

5. Mondja el areal-time monitor fogalmát, alapfunkcióit, és sorolja fel három alapvető összetevőjét!

6. Sorolja fel a taskok állapotait, mondja el az egyes állapotok jellemzőit, rajzolja fel a taskok állapot-diagramját és ismertesse az egyes lehetséges állapot-átmeneteket!

7. Jelölje meg a helyes állításokat!
A taskok egymás állapotát közvetlenül befolyásolhatják.
Egy task bármely állapotában futhat.
Egyidejűleg több task is futhat.
Egyidejűleg több task is lehet aktív állapotban.
Az aktív taskok közül mindig a legmagasabb prioritású fut.
Várakozó állapotban mindig legfeljebb egy task lehet.
Egy várakozó task önmagát újraaktiválhatja.
Várakozó taskot csak futó task, vagy I/O-esemény aktiválhat.
Az alvó állapot indításkor a taskok alapállapota, később pedig a dologtalanság, vagy az időzített várakozás állapota.
Egy taskot egy másik, futó task helyezhet alvó állapotba.