˝ PROGRAMOZÁS VALÓSIDEJU
˝ muködtetjük Programozás: Kívülrol ˝ a számítógépet, az elvégzendo˝ tevékenység leírása a program, tehát feladatmegoldást adunk meg. ˝ Valósideju˝ feladat: Valós idotartományban megoldandó feladat (számítógéppel). Általában a konkrét feladatnak csak egy kisebb része.
1. ipari irányítási feladatok (a) gyártósorok (b) robotok (c) repülés irányítás ... 1
2. kereskedelmi irányítási feladatok (a) bank ˝ (b) tozsde (c) biztonsági rendszerek ...
3. számítástechnika (a) multiprocesszoros rendszerek (b) multitaszkingos rendszerek (c) multiuseres rendszerek ˝ (d) idofügg o˝ feladatok ...
˝ A valósideju˝ rendszer a fizikai folyamat lezajlásával egyidoben végzi el az
• információ szerzés (mérés)
• információ feldolgozás
• beavatkozás
˝ tevékenységét úgy, hogy a folyamat ellenorizhet o˝ és irányítható.
˝ ˝ Valósideju˝ programozás: idokorlátos feladatok. Az idokorlát nem mindig konkrét, pl. szinkronizálások. Folyamat irányító szoftverek moduljai
• Központi többszint, alkalmazások indítása, beléptetés
• Operátori interface folyamatok megjelenítése, vezérlése
• Grafikus tervezo˝ eszközök operátori interface elkészítésére szolgál
• Parancsvégrehajtó a szoftver nyelvén program írható
• Könyvtárkezelo˝ rutinok háttértára
˝ adatgyujt ˝ gateway, grafikonkezelo, ˝ stb... • Alarmkezelo, ˝ o,
A feladat teljes megoldása a project.
• Probléma elemzése
• Tervezés
• Rendszerspecifikáció
• Implemetálás
• Tesztelés
• Próbaüzem
• Karbantartás
• Dokumentáció készítés
Problémák • Mit kell megvalósítani? • Reális feladatmeghatározás • Gazdaságos megoldás • Programozó kiválasztása (zseni/droid) ˝ • A tesztelés során a vevonek a jóság bizonyítása • Dokumentálás, jogvédelem
A Valósideju˝ Rendszer (RealTime System–RTS)
• Szigorúan (hard) RTS ˝ Az idokorlát átlépése végzetes hiba
• Lazán (soft) RTS ˝ Az idokorlát átlépése kezelendo˝
• Nem RTS ˝ Az idokorlát átlépése nem érdekes
˝ Az eseményre való reagálás ideje. Válaszido: Esemény: A rendszerre hatással bíró input. ˝ ˝ sup(válaszidok) Rendszerido:
Multiprocesszoros rendszer: Ugyanazon az algoritmuson több mikroprocesszor dolgozik egymással párhuzamosan
• Lazán csatolt rendszer Csatornákon folyik a kommunikáció, más-más operációsrendszer alattiak a mikroprocesszorok
• Szorosan csatolt rendszer ˝ Közös eroforrások (közvetlen kommunikáció pl. memórián keresztül), azonos operációsrendszer
• Dinamikus: több azonos típusú µp Bonyolult terhelést elosztó szoftver, könnyu˝ és olcsó javítás, közel egyforma terhelés
• Statikus: különbözo˝ µp-k Egyszeru˝ terhelést elosztó szoftver, nehéz és drága javítás, különbözo˝ terhelés
Valósideju˝ program tervezése: ˝ az implemetációs modell kialakíA tervezési feladat a fogalmi modellbol tása
• Absztrakció lényeg-lényegtelen
• Dekompozíció részfeladatokká bontás
• Formalizálás leírás valamilyen módszerrel
• Modellezés ˝ a modell helyességének ellenorzése, általában Top-Down • Implementálás megvalósítás, manapság általában Bottom-Up • Validálás ˝ a specifikációnak való megfelelés ellenorzése Validation: "Are we building the right product?", i.e., does the product do what the user really requires? Verification: "Are we building the product right?", i.e., does the product conform to the specifications?
˝ Idokövetelmények:
• periodikus
˝ • határidos
˝ • idozített
˝ • idokorlátos
˝ Idozített feladatok (C):
˝ 1. Idokiírása analóg/digitális formában
˝ és a valós idot ˝ 2. Számkitalálós játék, közben mutatja az eltelt idot
3. 5 mp alatt scrollozz végig egy karaktert a képernyo˝ elso˝ sorában
4. Kiír 4 mp-ként egy prímszámot
˝ s közben mutatja a valós idot ˝ 5. Kiírja két enter között az eltelt idot,
6. Szimuláljunk leeso˝ tárgyat, a magasságot kérje be, közegellenállás nincs
7. Ferdehajítás szimulálása
8. 2 mp-ként mozgat egy karaktert véletlen irányban
9. Fraktál tenisz sebességének változtatása
10. Megméri a dupla egérkattintás sebességét
11. Egér kurzor mozgatása, pozíciójának és a sebességének kiírása
Ötletek: #include<stdio.h> #include
#include<dos.h> void main(){ struct time ido; clrscr(); while(!kbhit()) { gettime(& ido); gotoxy(28,13); printf("Az ido:%d:%d:%d:%d",ido.ti_hour, ido.ti_min,ido.ti_sec,ido.ti_hund); } }
#include #include <stdio.h> #include <dos.h> #include void idokiir() { struct time ido; clrscr(); gettime(& ido); gotoxy(1,1); printf("Az ido:%d:%d:%d:%d",ido.ti_hour, ido.ti_min,ido.ti_sec,ido.ti_hund); } void main(void)
{ int kezd,ido; clock_t rido,uido; clrscr(); kezd=0; gotoxy(5,10); printf("Enterre kezd˝ odik a szamolás!"); while (!kbhit()||kezd) { idokiir(); if (!kezd) { if (kbhit()) { rido=clock();
idokiir; kezd=1; getch(); } } else { ido=uido-rido; gotoxy(50,10); printf("%d",ido); } uido=clock(); }//while vége getch(); gotoxy(10,12);
printf("A két enter között %d századmásodperc telt el",ido); getch(); }
Egérkezelés http://www.ctyme.com/intr/int-33.htm
Driver inicializáció Input: AX = 0000h Output: AX = Státusz 0000h nincs egér FFFFh van egér BX = gombok száma 0000h nem kett˝ o és nem három 0002h kett˝ o 0003h három
Egérkurzor megjelenítése Input: AX = 0001h Output: nincs
Gombok állapota, egér pozíciója Input: AX = 0003h Output: BX = gombok állapota, CX = oszlop, DX = sor Gombok állapota: 0.bit 1, ha a balgomb le van nyomva 1.bit 1, ha a jobbgomb le van nyomva 2.bit 1, ha a középs˝ ogomb le van nyomva
Ötlet: #include <stdio.h> #include #include <dos.h> void main() { struct time t; int CX, DX; _setcursortype(_NOCURSOR); // REGS regs; _AX=0; geninterrupt(0x33);
_AX=1; geninterrupt(0x33); while (!kbhit()) { // regs.x.ax=3; // int86(0x33,®s,®s); _AX=3; geninterrupt(0x33); DX=_DX; CX=_CX; gotoxy(1,1); printf("BX: %2d, CX: %6d, DX: %6d",_BX,CX /*regs.x.cx*/, DX); gettime(&t); printf(" %2d:%02d:%02d.%02d", t.ti_hour, t.ti_min, t.ti_sec, t.ti_hund);}}
Konkurens folyamatok kezelése
˝ • m az eroforrások száma
• n a folyamatok száma ˝ az i. folyamat által lekötött j. eroforrás száma • am×n i,j ˝ az i. folyamat által lekötni kívánt j. eroforrás száma • bm×n i,j ˝ • cn j a j. típusú szabad eroforrás
A Modula-2 programozási nyelv
˝ Elozmények
• 1975: Ötlet
• 1977–1979: Lilith számítógép alapszoftverek (oprendszer, fordító, szövegszerkeszto˝ és egyéb programok
• Modula-2=Pascal+Modula
˝ • Eloször jelenik meg az elrejtés elve:
– Definíciós rész: Látható DEFINITION MODULE RealInOut ; (* Core library interface *) VAR Done : BOOLEAN ; PROCEDURE ReadReal ( VAR v : REAL ) ; PROCEDURE WriteReal ( v : REAL ; w : CARDINAL ) ; END RealInOut.
– Implementációs rész: Nem látható (*$V-*) IMPLEMENTATION MODULE RealInOut ; (* Core library interface *) IMPORT IO,Str,InOut ; PROCEDURE ReadReal ( VAR v : REAL ) ; VAR s : ARRAY[0..80] OF CHAR; r,a : LONGREAL; BEGIN InOut.ReadString( s ); r := Str.StrToReal( s,Done ); a := ABS( r ); Done := Done AND (a >= 1.2E-38 ) AND (a <= 3.4E38 ); v := REAL(r) ; END ReadReal;
PROCEDURE WriteReal ( v : REAL ; w : CARDINAL ) ; BEGIN IO.WrReal(v,MAX(CARDINAL),INTEGER(w)) ; Done := IO.OK ; END WriteReal ; BEGIN Done := TRUE ; END RealInOut.
• Gépfüggetlen módon lehet párhuzamosan programozni benne
• Napjainkban is fejlesztik, OOP, grafikus felület stb.
A TopSpeed M2, a Modula-2 egy fordítója
• Nem kell installálni
• Nem igényel nagy tárhelyet (tömörítve kb. 700kB, kibontva kevesebb, mint 2MB)
• Fapados (karakteres, nem triviális szövegszerkesztés, no tips)
˝ • Mivel RTS, a többi programot lassíthatja erosen
Nyelvi elemek
• Azonosítók ˝ o, ˝ 8 karakter szignifikáns, kis-nagybetu˝ különbözo˝ Betuvel ˝ kezdod A1, a1, a12345678, 1123456789
• Számok 1. Egészek -12, +12B, 1ABH, 0AH ˝ nélküli (a) Elojel SHORTCARD 8 CHAR 8 CARDINAL 16 LONGCARD 32
˝ (b) Elojeles SHORTINT 8 INTEGER 16 LONGINT 32 MODULE Elso; FROM IO IMPORT WrInt,WrCard; VAR x:CARDINAL; y:INTEGER; BEGIN x:=-1H; (*65535*) WrCard(x,15); y:=32768; (*-32768*) WrInt(y,10); END Elso.
2. Valósok -12.56, +23.12E-11 REAL 32 (+/-1.2E-38..3.4E+38) LONGREAL 64 (+/-2.3E-308..1.7E+308) MODULE Elso; FROM IO IMPORT WrInt; VAR x:REAL; y:LONGREAL; BEGIN WrInt(SIZE(x),10); (*4*) WrInt(SIZE(y),10); (*8*) END Elso.
• Logikai típus BOOLEAN=(FALSE, TRUE)
• Karakter és sztring (A sztring karaktertömbként van jelen.) "ALMA",’ALMA’, "A", ’A’, 100C MODULE Elso; FROM IO IMPORT WrChar,WrStr,WrLn; BEGIN WrChar("A"); WrChar(’B’); WrChar(103C); WrChar(12C); WrChar(15C); WrStr("Alma"); WrLn; WrStr(’Korte’); END Elso.
• Operátorok + = & ~ | IN .
#
* / DIV MOD <> < > <= >= AND NOT OR (*halmaz eleme-e*) (*rekordmez˝ o min˝ osít˝ o*)
• Egyebek Megjegyzés: (*megjegyzés*) Az utasításokat ; választja el egymástól • Konstans definiálása CONST konstans=15; x=2.12; szovegkonstans=’Konstans szoveg’; • Változók deklarálása VAR x:INTEGER; a,b,c:CARDINAL;
• Típus definíció TYPE tombtipus=ARRAY[1..10] OF INTEGER; felsorolttipus=(szerda, kedd, szombat); rekordtipus=RECORD mezo1:CARDINAL; mezo2:ARRAY[1..5] OF CHAR; mezo3:napok; END; (*rekord definíció vége, nem a típusé!!*) reszintervallumtipus=[2..45]; halmaztipus=SET OF CHAR; pointertipus=POINTER TO CHAR; eljarastipus=PROCEDURE(INTEGER;VAR CHAR):INTEGER; eloredefinialt_eljarastipus=PROC;
• Elemi utasítások 1. Értékadás := 2. Eljáráshívás eljarasnev(aktuális paraméterlista) 3. RETURN utasítás RETURN [kifejezés] befejezi az alprogramot, s esetleg értéket ad vissza, függvényben kötelezo˝ 4. EXIT utasítás EXIT kilép a ciklusból
• Összetett utasítások 1. Utasítássorozat (szekvencia) utasitas; utasitas; utasitas; 2. Egyszeru˝ szelekció IF kif THEN utasítássorozat {ELSEIF kif THEN utasítássorozat} [ELSE utasítássorozat] END Az elso˝ igaz kifejezésig vizsgál csak, ELSE akkor hajtódik végre, ha az összes kifejezés hamis.
3. Összetett szelekció CASE kifejezés OF alternatívák:utasítássorozat {| alternatívák:utasítássorozat} [ELSE utasítássorozat] END Ahol az alternatívák: konstkif [.. konstkif]{,konstkif [.. konstkif]}
4. Elöltesztelo˝ ciklus WHILE kifejezés DO utasítássorozat END 5. Hátultesztelo˝ ciklus REPEAT utasítássorozat UNTIL kifejezés 6. Kötöttlépésszámú ciklus FOR cv:=kif TO kif [BY konstkif] DO utasítássorozat END 7. Rekord hatáskörét nyitó utasítás WITH rekordazonosító DO utasítássorozat END 8. Feltétel nélküli ciklus LOOP utasítássorozat END
• Típuskonverzió és egyéb eljárások CARDINAL() I-->C INTEGER() C-->I FLOAT() C-->R TRUNC() R-->C ORD() I,C,CHAR-->C CHR() C-->CHAR ABS(x) CAP(c) ODD(x) DEC(x) INC(x) SIZE(t|x) MAX(t|x) MIN(t|x) NEW(p) DISPOSE(p) HALT
• Eljárások Lehet rekurzió PROCEDURE eljárásnév[([VAR]p:tipus{,[VAR] p:tipus})]; lokálisdeklarációk; BEGIN utasítássorozat; END eljárásnév;
• Függvények Lehet rekurzió, összetett típust nem adhat vissza PROCEDURE fgvnév[([VAR]p:tipus{,[VAR] p:tipus})]:tipus; lokálisdeklarációk; BEGIN utasítássorozat; RETURN kif; END fgvnév;
• Program szerkezete MODULE prgnév; {FROM modulnév IMPORT x,{x}}; [TYPE...] [VAR....] {alprogramok} BEGIN utasítássorozat; END prgnév.
• Feladatok ˝ 10-ig 1. Számok 1-tol 2. n-ig prímek ˝ 3. Háromszög szerkeszthetosége ˝ 4. 10 szám csökkenobe rendezése 5. Lnko, lkkt
6. Folyamatokból folyamatok hívása 7. Folyamatok vezérlése 8. Szignállal kommunikáló folyamatok 9. Három független folyamat indítása, lock használata