LET 624 0109(6 hp) Sd nr 1 TENTAMEN KURSNAMN PROGRAM: namn REALTIDSSYSTEM, GK åk / läsperod DAI2 samt EI3 KURSBETECKNING LET 624 0109 ( 6p ) EXAMINATOR TID FÖR TENTAMEN Tsdagen den 23/10 2012 kl. 08.30 12.30 HJÄLPMEDEL Godkänd räknedosa ANSV LÄRARE: namn telnr 772 5726 besöker tentamen kl Ca 9.30 samt 11.00 DATUM FÖR ANSLAG av resultat samt av td och plats för gransknng ÖVRIG INFORM. Gransknng: Måndagen den 5/11 12.15 12:45 Sal J 121. Därefter fnns tentorna vd D&IT:s studeexpedton plan 4 hus Jupter. Betygsgränser : Max 25 poäng 3:11 15,5 4: 16 20,5, 5: 21 -
LET 624 0109(6 hp) Sd nr 2 FORMELSAMLING RMSA enkel analys FÖRUTSÄTTNINGAR: Vare process uppsättnngen är perodsk Deadlne (d) och perodtd (p) är lka stora. Konstant exekverngstd för processer Ingen processkommunkaton förekommer Alla processer är avbrytbara n n(2 1/n 1 ) 1 1,000 2 0,828 3 0,780 4 0,757 5 0,743 En uppsättnng processer (P 1,P 2,...P n ) är schemaläggnngsbar om: n c 1 p n 2 1 n ( 1 ) där c är är exekverngstden för P och p är perodtden för P. RMSA exakt analys ( krav som ovan men här räcker det med att d <= p) Beräknng av svarstden för process under nterferens från högre prorterade processer ges av sambandet R n1 c b hp( ) R p n c Där b är blockerngsfaktorn, nterferens från lägre prorterade processer. Svarstdsanalys vd processuppsättnngar med fx prortet och godtycklg deadlne. För en uppsättnng processer gäller att maxmal svarstd R, nom ett fönster w, kan beräknas. För blockerngsfaktorn b gäller att prortetstaksprotokoll (max en blockerng) är mplementerat. w w n n1 ( ) ( q) ( q 1) c b hp( ) p q J c Iteratonen utförs tlls : w,q <=( q+1) p Svarstden R ges av: R max w ( q) qp J q0,1,2,... och där: w är det fönster nom vlket v betraktar svarstder q är den start, numrerad 0,1,2..., nom fönstret v betraktar c är processens exekverngstd b är blockerngsfaktor för processen p är processens perodtd J är maxmalt tter för processen
LET 624 0109(6 hp) Sd nr 3 Uppgft 1. (2p) I CAN-protokollet används CSMA/CR för bussaccess. a) Beskrv vad metoden nnebär generellt för de olka delarna av förkortnngen dvs CS, MA respektve CR b I samband med bussaccess talar man om begreppet bussarbtrerng. Beskrv vad begreppet står för. Uppgft 2 ( 4p) I ett tdsdelat system bestående av flera processer som exekveras pseudoparallellt va tdsdelnngen har man oftast ett realtdsoperatvsystem som sköter tdsdelnng genom processbyten som normalt genereras av klockavbrott. För att ge stöd för ömsesdg uteslutnng av krtska regoner samt för synkronserng av processerna har vanlgen ett realtdssystem stöd för s.k. semaforer. a) b) c) En process ett sådant system kan befnna sg ett av tre olka tllstånd, vlka är dessa. Beskrv även vlken händelse som nterar samtlga mölga byten mellan de olka tllstånden. Beskrv vad en Semafor är samt vlka operatoner man kan utföra på Semaforen. Vsa med korta programexempel hur man kan använda sg av Semaforer för att garantera ömsesdg uteslutnng samt synkronserng av händelser/processer. d) Beskrv vad man menar med krtsk regon samt ömsesdg uteslutnng av krtska regoner. Uppgft 3 ( 3 p) Man har mplementerat en synkron meddelandekanal genom vlken man kan skcka data av typen nteger mellan processer. För att använda kanalen har man skrvt två funktoner enlgt nedan. Tanken är att man från en godtycklg process skall kunna anropa önskad funkton av dessa två för att lämna ett tecken ( ChannelWrte ) alternatvt att hämta ett tal ( ChannelRead). Programmet har stöd av realtdskärnan RTK12, dvs samma som v har använt denna kurs. För att synkronsera och garantera ömsesdg uteslutnng har man använt sg av fyra semaforer enlgt nedan. //----- Global dataarea -------- nt data; man(){ ntsem ( WRITE, 1); ntsem(read,1); ntsem(write_ok,0); ntsem(read_ok,0); vod channelwrte( nt tempdata){ watsem(write); data=tempdata; sgnalsem(write_ok); watsem(read_ok); sgnalsem(write);
LET 624 0109(6 hp) Sd nr 4 vod channelread( nt *t_data){ watsem(read); watsem(write_ok); *t_data=data; sgnalsem(read_ok); sgnalsem(read); Antag att v hart tre processer som exekveras pseudoparallellt och som anropar funktonerna enlgt nedan tdsschema där t 1 < t 2 osv. Mellan tderna fnns det relatvt stora tdsluckor. Före nedan händelsekeda har ngen process anropat någon av funktonerna. t 1 : Process 1 anropar funkton enlgt : channelread( &tal); t 2 : Process 2 anropar funkton enlgt : channelread(&nr); t 3 : Process 3 anropar funktonen enlgt : channelwrte( 3);. Beskrv den händelsekeda som uppstår med avseende på semaforhanterng och vlken process som exekverar med hänsyn tll anropen enlgt ovan.. Beskrv även hanterng av varablerna. Uppgft 4 (4p) Antag att v har en uppsättnng av processer med data enlgt tabellen nedan. Processerna skall schemaläggas med ett statskt schema. Processerna får avbrytas. a) Bestäm LCM för perodtderna utan att göra någon perodtdsusterng. b) Föreslå en lämplg perodusterng för att mnska den sk LCM-tden för perodtderna. c) Rta ett statskt schema för processerna efter perodusterngen. d) Antag att samma processer schemalägges dynamskt. Beräkna så fall svarstderna enlgt metoden för RMSA exakt analys om man låter processerna ha prortet enlgt tabellens ordnng (P1 högsta prortet) och perodtder enlgt de som gäller efter usterngen. Jämför resultaten med det rtade statska schemat enlgt c. Kan man förklara de uträknade svarstderna med stöd av detta. e) Är systemet schemaläggnngsbart enlgt en eller båda schemaläggnngsmetoderna. Motvera dtt svar. Process p c d P1 6 2 4 P2 10 2 6 P3 16 5 12
LET 624 0109(6 hp) Sd nr 5 Uppgft 5 (3p) I ett system med tre processer har man uppskattat processdata enlgt nedan tabell. Avgör om systemet är schemaläggnngsbart enlgt RMSA. Proc Pr p (ms) d(ms) c(ms) Semafor S P1 0 6 6 2 2 ms P2 1 13 8 3 P3 2 25 15 5 3 ms Uppgft 6 (2p) I ett styrsystem läser en process n data form av 8 btars bnära tal 1 255. Talen sparas en globlal mnnesbuffert ndata[ ]. Den bnära koden 0 används som sluttecken för den senaste nlästa földen av tal. Maxmalt kan de ngå MAX antal tal bufferten utöver sluttecknet 0. Om bufferten är tom är första tecknet lka med sluttecknet. En funkton nt soekantaltal ( unsgned char soektal ) utvecklas för att söka efter antalet förekomster av ett vsst tal bufferten enlgt fölande : #defne MAX 10 unsgned char ndata[max+1]; nt soekantaltal ( unsgned char soektal ){ nt antal, n; unsgned char temp; 1 antal=0; 2 n=0; 3 temp=ndata[n]; 4 whle(temp!=0x00){ 5 f(temp==soektal) 6 antal++; 7 n++; 8 temp=ndata[n]; 9 10 return(antal); a) Rta en programflödesgraf för raderna 1 10 b) Beräkna exekverngstden [mn,max] för programdelen 1 10 om fölande uppskattnngar av exekverngstderna gäller: BB1= [5,5 ] BB2=[5,5] BB3= [ 10,10 ] BB4= [ 20,25 ] BB5= [10,10 ] BB6= [ 5,5 ] BB7= [ 5,5 ] BB8= [ 10,10 ] BB10= [15,15]
LET 624 0109(6 hp) Sd nr 6 Uppgft 7 ( 3p ) Antag att v har ett system med tre processer med struktur enlgt nedan. Process två och tre delar en semafor för att garantera omsesdg uteslutnng för exekverngen av funktonerna comput2() respektve compute3(). Process 1 har prortet 6, Process 2 har prortet 10 och Process 3 har prortet 2. Högsta prortet ges för lägsta prortetsnummer. Exekverngstder är : compute1() : 5 sek, compute2() : 4 sek samt compute3() 2 sek. Funktonerna : parkforevent_x() nnebär att processen avvakter en vss händelse nr x och ges e körtd under denna väntan. När händelse nträffar ändrar processen tllstånd tll Ready och ges körtd utfrån den fxa prorterngen den har vlket kan nnebära att den får vänta tlls högre prorterade processer körts klart.. Antag att händelserna nr 1 3 nträffar fölande ordnng, händelse nr 2, 3 och sst 1, med en sekund mellan händelserna. V får anta att nga andra processer påverkar körnngen av de ter processerna. Process 1() { whle(1) { parkforevent_1(); compute1(); //------------------------------------------ process2(){ whle(1) { parkforevent_2(); watsem(s1); comput2(); sgnalsem(s1) //------------------------------------------- Process3(){ whle(1) { parkforevent_3(); watsem(s1); compute3(); sgnalsem(s1) //------------------------------------------------ a) Rta ett tdsdagram over exekverngen av processerna från det att första händelsen nträffar tll att samtlga tre processer genomfört en teraton av sn exekverng, dvs att funktonen computex() genomförts. Rta tdsdagrammet så att processernas tllstånd ( watng samt runnng ) framgår. b) På grund av semaforhanterngen kommer man att få en oönskad effekt vd exekverngen av processerna. Beskrv denna effekt och ange vad den kallas. c) Det fnns en metod att mnmera denna effekts nverkan. Beskrv kort om denna metod och vad de man nför kallas.
LET 624 0109(6 hp) Sd nr 7 Uppgft 8 ( 2p ) Två datornoder NOD 1 och NOD 2 byggda krng mcrocontrollern Motorola HCS12. Controllern har två nbyggda CAN moduler CAN0 respektve CAN4. Nodernas båda CAN-moduler är anslutna tll en gemensam datorbuss. Tll systemen fnns en antal drvrutner enlgt nedan. I drvrutner och det exempel på ett huvudprogram som ges används varabler av typen struct samt pekare varav några defneras nedan. Den drekta hanterngen av kretsen regster är dold drvrutnerna. struct CAN { unsgned short CANx; //CAN nterface unsgned char CAN_IDAM; //Identfer Acceptence Mode unsgned long CAN_AR_MR_ID[5]; //Acceptance Code 1st Bank //Acceptance Code 2nd Bank //Acceptance Mask 1st Bank //Acceptance Mask 2nd Bank //Message Identfer unsgned char CAN_IDE; //ID Extended ( 12/29 ARB) unsgned char CAN_RTR; //Remote Transmsson Request unsgned char CAN_DLR; //Data Length unsgned char CAN_PRIO; //Transmt Buffer Prorty ; struct CAN_message { unsgned char length; //number of bytes (0-8) char byte[8]; //eght data bytes ; Pekare : ptrcan0_nt : en pekare tll en struct av typen CAN_nt för CAN0. prtcan0 : en pekare tll en struct av typen CAN för CAN0. ptrcan_trans_message: en pekare tll en struct av typen message. ptrcan_rec_message : en pekare tll en struct av typen message. vod nt_can_ponters(vod) : Interar ett antal pekare som används av programmet vod default_can(struct CAN_nt *,struct CAN *); : Interar en CAN struct tll defaultvärden. vod nt_can(struct CAN_nt *,struct CAN *,unsgned char recve); :Interar CAN modulen för sand/mottag. vod transmt_can(struct CAN *,struct CAN_message *,unsgned char); : Sänder ett meddelande. nt receve_can(struct CAN *,struct CAN_message *); :Läser ett mottaget meddelande. Returnerar 1 om meddelande fnns mottaget. //------------------------------------------------------- Nedan vsas ett exempel på ett program för systemets NOD 1 som sänder ett meddelande avsett för NOD 2 samt läser n ett eventuellt meddelande från NOD 2 med arbtrerngskoden 0x0AAAAAAC eller =0x0AAAAAAA.
LET 624 0109(6 hp) Sd nr 8 // ------- Huvudprogram NOD 1 ------------ vod man(vod) { nt length=0,, n; char sendtxt[]={"text_1\0"; char ntxt[8]; unsgned long dentfer;.. ptrcan0->can_ar_mr_id[4]=0x0aaaaaba; //default ntalze CAN4 default_can(ptrcan4_nt,ptrcan4); //Acceptence Flter 1 & 2 ptrcan4->can_ar_mr_id[0]=0x0aaaaaac; // ID acc reg ptrcan4->can_ar_mr_id[1]=0x0aaaaaaa; // ID acc reg ptrcan4->can_ar_mr_id[2]=0xf0000000; // ID mask reg ptrcan4->can_ar_mr_id[3]=0xf0000000; // ID mask reg //ntalze CAN0 for transmsson nt_can(ptrcan0_nt,ptrcan0,cantransmt); //ntalze CAN4 for recepton// nt_can(ptrcan4_nt,ptrcan4,canreceve); whle(1){ //message to send =0; for(=0; <7;++) ptrcan_trans_message->byte[]=sendtxt[]; ptrcan_trans_message->length=7; transmt_can(ptrcan0,ptrcan_trans_message,txe0); f(receve_can(ptrcan4,ptrcan_rec_message)==1){ length=ptrcan_rec_message->length; dentfer = read_id_can(ptrcan4); f (dentfer==0x0aaaaaac) puts("id ok \n\r"); / /send message //f receved message // antal databytes // mottaget ID // Kolla ID för mottagen data else for ( =0;<length;++){ ntxt[]=(ptrcan_rec_message->byte[]); ntxt[]='\0'; puts(ntxt); puts("no message\n\r"); // fxa strängslut Uppgften: Beskrv vlka ändrngar man behöver göra det redovsade programmet för att programmet skall ge NOD 2 önskad funkton dvs sända ett meddelande tll NOD 1 samt läsa meddelandet från NOD 1. Ingen av noderna skall läsa stt eget utsänt meddelande.
LET 624 0109(6 hp) Sd nr 9 Uppgft 9 ( 2p ) Nedan fnns en nledande del tll en programlsta av ett C-program. Programmet hanterar bland annat en länkad lsta bestående av poster av typen REGTYP. I man-funktonen fnns en pekare head av typen REGTYP som pekar på lstans första element. Ssta elementets next-pekare är NULL. V kan utgå från att det alltd fnns mnst ett element lstan. Skrv en funkton som söker om det fnns en post med ett vsst angvet enamn. Funktonen skall returnera en pekare tll den första posten med angvet enamn alternatvt NULL om det e fnns en post med angvet enamn. Funktone har deklaratonen: REGTYP* fnd_person( char *name, REGTYP *top); Not : Bbloteksfunktonen nt strcmp( const char *s1, const char s2 ) får användas. Funktonen returnerar talet 0 om strängarna är dentskt lka. #nclude <stdo.h> #nclude <stlb.h> #nclude <strng.h> // ##### Typdeklaretoner #### typedef struct q{ char enamn[20]; char fnamn[20]; struct q *next; REGTYP; // ##### Funktonsdeklaratoner ##### REGTYP* fnd_person( char *name, REGTYP *top);. //###### Huvudprogram ####### nt man(nt argc, char *argv[]) { nt antal_poster; REGTYP *head; REGTYP *aktuellpost; char s_enamn[20]; // sökt pesons enamn.. // Anrop av funktonen: aktuellpost= fnd_person( s_enamn, head);...... system("pause"); return 0; Lycka tll önskar