Documente Academic
Documente Profesional
Documente Cultură
Aßa cum se ßtie, ín conducerea proceselor variabila timp are unul dintre cele mai importante
roluri. Funcþionarea ín timp real a sistemelor de conducere este legatá de posibilitatea de a másura
timpul astronomic, adicá timpul scurs íntre 2 evenimente precum ßi de existenþa unor semnale care
sá marcheze intervale de timp de duratá prestabilitá. Ín cadrul EXECUTIVULUI realizat, toate
aceste facilitáþi sunt ínglobate ín modulul de gestiune a timpului. Modulul posedá o zona proprie de
date care conþine:
• contoarele generale pentru fracþiunile de timp considerate ßi anume:
- tacturi de ceas - a cáror duratá este funcþie de perioada ceasului de timp real a
echipamentului stabilitá la programarea dispozitivului 8253, ín modulul de gestiune a íntreruperilor;
- secunde;
- minute;
- ore;
- zile;
- luni;
- ani;
• cinci liste pentru aßteptare care sunt compuse din mai multe casete organizate pe
principiul "listelor ínlánþuite", adicá primul octet al fiecárei casete dintr-o listá indicá partea LOW a
adresei de offset a urmátoarei casete din aceeaßi listá. Pentru a indica sfärßitul unei liste, ultima
casetá din fiecare listá va conþine codul 0FFh ín locul adresei (datele sunt plasate ín aceeaßi paginá
de memorie ßi este imposibil ca o casetá sá ínceapá la o adresá cu partea LOW avänd aceastá
valoare). Capetele celor 5 liste de aßteptare se pástreazá ín 5 locaþii speciale.
O casetá din aceste liste conþine 4 octeþi, iar numárul casetelor se defineßte la generarea
sistemului, o aceeaßi casetá putänd trece ín mod dinamic dintr-o listá ín alta ín timpul execuþiei
programului.
Cele 5 liste de aßteptare conþin:
- lista 1 - casete libere;
- lista 2 - casete aferente taskurilor ín aßteptare pe tacturi de ceas;
- lista 3 - casete aferente taskurilor ín aßteptare pe secunde;
- lista 4 - casete aferente taskurilor ín aßteptare pe minute;
- lista 5 - casete aferente taskurilor ín aßteptare pe ore.
Modul de organizare a zonei de date aferente modului de gestiune a timpului este prezentat
ín Fig. 6.19.
La iniþializarea modulului, toate casetele sunt incluse ín lista 1 (lista casetelor libere), listele
2 - 5 fiind goale. Introducerea unui task ín mecanismul de reprogramare implicá ínscrierea unor
informaþii ín prima caseta liberá ßi trecerea acestei casete din lista de casete libere ín lista de
aßteptare pe unitatea de másurá corespunzátoare. Structura ßi conþinutul unei casete este prezentatá
ín Fig. 6.20.
Íntreruperile sosite de la ceas produc actualizarea contoarelor. Atunci cänd un contor
general este incrementat, se face ßi o baleiere a listei de aßteptare anexate, decrementänd contoarele
locale incluse ín casetele acestei liste. Ín momentul cänd un contor local al unei casete ajunge la
zero, este reíncárcat cu valoarea iniþialá (valoarea de reprogramare) conþinutá ín octetul urmátor al
casetei, dupá care taskul al cárui numár este specificat ín octetul 4 al casetei (Fig. 6.20) este trecut
ín starea READY ín mod "condiþionat". Astfel, dacá un task nu se terminá ín intervalul de
reprogramare specificat, se aßteaptá sfärßitul sáu logic, prin apelarea din task a directivei ?EXIT
care íl va trece ín substarea OPRIT. Reprogramarea execuþiei lui se va face la iniþializarea primului
interval de timp de dupá terminarea lui logicá.
6 - 16
Contor tacturi
de ceas
Contor secunde
Contor minute
CONTOARE Adresa de ínlánþuire
Contor ore
(partea LOW a adresei de
Contor zile GENERALE Octet 1
offset a urmátoarei casete
Contor luni
Contor ani din aceeaßi listá)
Cap listá 1 Valoare contor local
Cap listá 2
(se decrementeazá funcþie Octet 2
Cap listá 3
de íntreruperile de la ceas)
Cap listá 4
Cap listá 5 Valoare iniþialá (fixá)
Octet 3
(Intervalul de reprogramare)
CASETA 2 CASETA a n - a
Timp
Durata de Interval
execuþie a de (a)
taskului aßteptare Interval de timp de
reprogramare a taskului
Timp
Durata de execuþie a taskului Interval de timp
de aßteptare
(b)
Figura 6.21
?EXC/?IEXC
• Sunt cele mai importante ßi utile directive explicite ale acestui modul, realizänd
reprogramarea execuþiei unui task la intervale de timp dorite;
• Parametri: la apelul acestor directive, urmátoarele registre vor conþine:
(AL) = nivelul de prioritate al taskului (numárul taskului);
(BL) = valoarea intervalului de timp de reprogramare;
(CL) = <mod><unitate de másurá>, cu urmátoarea asamblare:
0 = mod sincronizat
C7 = bitul de mod
1 = mod nesincronizat
C6 - C2 = 0
C1, C0 = unitate de másurá:
00 = tacturi de ceas
01 = secunde
10 = minute
11 = ore
Modul sincronizat presupune cá prima cerere de intrare ín execuþie a taskului are loc ca ßi
cänd reprogramarea sa ar fi fost fácutá ín momentul trecerii prin zero a contorului general aferent
unitáþii de másurá specificate, dupá care intervalele de timp vor fi másurate normal. Calculul primei
valori de reprogramare ín modul sincronizat se realizeazá astfel:
- se citeßte valoarea curentá a contorului general aferent unitáþii de másurá specificate;
- se compará aceastá valoare cu valoarea de reprogramare (plasatá ín registrul BL);
- dacá valoarea curentá a contorului general este mai micá decät valoarea de reprogramare,
se face diferenþa dintre valoarea de reprogramare ßi cea curentá, iar aceastá diferenþá se ínscrie ín
locaþia a doua a casetei;
6 - 18
- dacá valoarea curentá este mai mare decät valoarea de reprogramare, se aduná valoarea de
reprogramare cu ea ínsáßi de atätea ori päná devine strict mai mare decät valoarea curentá, se face
apoi diferenþa íntre valoarea astfel obþinutá ßi valoarea curentá ßi se ínscrie aceastá diferenþá ín
locaþia a doua a casetei.
Se observá cá, ín ambele situaþii, iniþial, ín casetá se ínscrie diferenþa dintre valoarea de
reprogramare ßi valoarea curentá, modulo valoarea de reprogramare. Ín modul acesta,
reprogramarea taskurilor ín mod sincronizat presupune alocarea aceleiaßi origini de timp tuturor
valorilor de reprogramare aferente unei unitáþi de másurá.
Modul nesincronizat presupune ínceperea másurárii intervalului de timp de reprogramare
din momentul apelárii directivei;
• Dacá toate casetele sunt ocupate, se poziþioneaza bitul de CF pe 1 (CF = 1), ceea ce
specificá faptul cá directiva nu s-a executat; altfel CF = 0;
• Directivele nu declará eveniment semnificativ;
• Structura acestor directive este asemánátoare celei din Fig. 6.5
Exemplu: Sá presupunem cá se doreßte reprogramare un task ín modul sincronizat, la un
interval de 5 sec. (Fig. 6.22.a)
2 5 10 15
0
3 τ Contor
general
Interval de secunde
timp de aßteptare
Interval de timp de execuþie a taskului
Prima valoare a contorului local
a) mod SINCRONIZAT
6 - 19
Dacá valoarea contorului general este, de exemplu, egalá cu 21, atunci se ínsumeazá
intervalul de reprogramare cu el ínsußi päná la prima valoarea mai mare decät 21, adicá 25. Apoi
din aceastá valoare se scade 21 ßi se ínscrie (25 - 21 = 4) ín locaþia a 2-a casetei. Taskul va intra
deci ín execuþie peste 4 secunde. Ín ambele exemple se observá cá taskul va fi lansat ín execuþie la
valori multiplu de 5 ale contorului general.
Dacá directiva se apeleazá ín mod NESINCRONIZAT cu valoarea de reprogramare 5, iar
contorul general secunde, ín momentul apelului directivei, era la 3 secunde, taskul va fi lansat ín
execuþie la urmátoarele valori ale contorului general 8, 13, 18, 23, ... (Fig. 6.22.b).
Ín concluzie, Fig. 6.22 prezintá momentele de intrare ín executie ale unui task reprogramat a
se executa la fiecare 5 secunde, apelul directivei ?EXC avänd loc cänd contorul general secunde are
valoarea 3, atät ín varianta sincronizatá cät ßi ín cea nesincronizatá.
Structura directivei ?IEXC este prezentatá ín Fig.6.23.
?IEXC
NU DA
Existá casetá liberá ?
DA
Mod SINCRONIZAT ?
NU
Calculeazá valoarea Pune ín contorul local al casetei
primului interval de valoarea intervalului de
reprogramare ßi o ínscrie reprogramare
ín contorul local al casetei
CF = 0
RET
Figura 6.23
6 - 20
?CAN / ?ICAN
- Directive explicite care anuleazá toate reprogramarile unui task (un task poate aparea ín
mai multe liste);
- Parametru: la apelul acestor directive, registrul AL trebuie sá conþiná nivelul de prioritate
al taskului ce trebuie scos din listele de reprogramare;
- Directivele cautá numárul taskului (menþionat ca parametru al directivelor) ín toate
casetele celor 4 liste de aßteptare ßi, ín caz cá íl gásesc, trec caseta respectivá ín lista cu casete
libere;
- Structura celor 2 directive este asemánátoare celei din Fig.6.5;
- Nu declará eveniment semnificativ;
- Organizarea directivei ?ICAN este prezentatá ín Fig. 6.24.
?ICAN
DA NU
Numárul taskului coincide
cu cel menþionat ín casetá?
NU
Sfärßit de listá ?
DA
S-au cercetat toate DA Se trece la caseta
listele ? urmátoare
NU
Se trece la lista RET
urmátoare
Figura 6.24
?TINTR
- Este adresa de intrare a subrutinei de tratare a íntreruperii de la ceas (dupá tratarea primará
care are loc ín modulul de gestiune a íntreruperilor);
- Salveazá starea programului íntrerupt (cu ?MONI);
- Produce incrementarea contoarelor generale ale ceasului de timp astronomic ßi, dupá
incrementarea fiecárui contor, parcurge, prin intermediul unei subrutine - CRUN - (inclusá ín
aceastá subrutiná de tratare a íntreruperii), lista de aßteptare anexatá, decrementänd contoarele
locale (ín afara contoarelor corespunzátoare zilelor, lunilor ßi anilor);
6 - 21
- Dacá un contor local devine zero, subrutina CRUN íl reiniþializeazá ßi lanseazá o directiva
?IRUN conditionat, avänd ca parametru numárul taskului specificat;
- Dá controlul planificatorului de taskuri (declará eveniment semnificativ);
- Modul de organizare al subrutinei ?TINTR este prezentat ín Fig. 6.25, iar ín Fig. 6.26 este
prezentatá structura subrutinei CRUN.
?TINTR
CRUN
NU
Contorul tacturi de ceas are valoarea maximá ?
DA
Contorul general tacturi de ceas este adus la zero
CRUN
NU
Contorul secunde are valoarea 60 ?
DA
Contorul secunde este adus la zero
CRUN
..
.
Incrementeazá contor general luni
NU
Contor general luni are valoarea maximá ?
DA
Contor general luni capátá valoarea 1
6 - 22
CRUN
DA
§färßit de listá ? RET
NU
Decrementeazá contorul local al casetei
?IRUN
Figura 6.26.
6 - 23