Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

Datalogi 1F Forår 2003 G1 Jørgen Sværke Hansen

Lignende præsentationer


Præsentationer af emnet: "Datalogi 1F Forår 2003 G1 Jørgen Sværke Hansen"— Præsentationens transcript:

1 Datalogi 1F Forår 2003 G1 Jørgen Sværke Hansen cyller@diku.dk

2 Datalogi 1F: G1 20032 Planen for idag Et gensyn med KFirst G1

3 Datalogi 1F: G1 20033 Sidst så vi hvordan man starter den første proces KCurProc = KWaitQ.Get(); KFirst(KCurProc->sp); hvor KFirst er defineret ved: KFirst:ldgp gp, (pv) ldq pv, 0xD8(a0) // Pop pv addq a0, 0xF0,a0 // Skip registre bis a0, 0, sp // Sæt sp jmp (pv) // Hop til processtart

4 Datalogi 1F: G1 20034 Indhold af G1 3 små opgaver: 1.Oversæt en kerne og afvikl den på en kernealpha 2.Håndoversæt en C/C++ funktion til alpha assembler 3.Implementer procedurer til dynamisk lagerallokering og anvend dem (inkl. aflusning) i en eksisterende kerne

5 Datalogi 1F: G1 20035 Kernealphaerne DIKU’s net udviklings Alpha udviklings Alpha udviklings Alpha Ethernet HUB kerne Alpha kerne Alpha kerne Alpha Konsolboks Alpha nettet Linux PC sniffer

6 Datalogi 1F: G1 20036 Alpha’erne Udviklingsalpha’erne: toke vile ve bure borr Prøv: ng2h del1-alpha Kernealpha’erne archimedes diophant eudoxos euklid hypatia ptolemaios pythagoras thales zenon

7 Datalogi 1F: G1 20037

8 8

9 9

10 10

11 Datalogi 1F: G1 200311

12 Datalogi 1F: G1 200312 Opgave 1 Hent d-kernen, oversæt den og kør den på en kerne-alpha: d-kernen findes i ~dat1f/KB4/kerner Kursusbog bind 5: –Afsnit 3.5 beskriver hvordan man generelt oversætter, overfører og udfører et program på en kerne-alpha –Afsnit 3.6 beskriver hvordan man oversætter, overfører og udfører en af kursusbog-kernerne på en kerne-alpha

13 Datalogi 1F: G1 200313 Opgave 2 Håndoversættelse af en C/C++ funktion til alpha- assembler Funktionen beregner udtryk der er specificeret via binære træer x x+ 115123

14 Datalogi 1F: G1 200314 Knuderne i træet Hver knude har formen: typedef struct node { int value; struct node *left; struct node *right; } exprnode; Hvis knuden er en intern knude (dvs. hvis (left != NULL) && (right != NULL) angiver value en operation: –1 angiver addition –2 angiver multiplikation Hvis knuden er en bladknude, angive value en heltallig værdi

15 Datalogi 1F: G1 200315 Beregningsfunktionen int calc(exprnode *root) { int rval, lval; if(root == NULL) return 0; if((root->left == NULL)&&(root->right == NULL)) return root->value; else { lval = calc(root->left); rval = calc(root->right); switch(root->value) { case ADDOP: return lval+rval; case MULOP: return lval*rval; default: return 0; }

16 Datalogi 1F: G1 200316 Testeksempler I ~dat1f/G1/trees.h er der angivet en række testtræer: // Tree 0: result 42 exprnode t0_n1_1 = {42, NULL, NULL}; exprnode *t0_root = &t0_n1_1; samt definitionen af exprnode

17 Datalogi 1F: G1 200317 Alpha-assembler Beskrives i kursusbog bind 5: –Kapitel 4: Programmering i Alpha- assembler

18 Datalogi 1F: G1 200318 Funktionsdefinition i Alpha- assembler.ent calc.globl calc calc: ldgp gp, (pv) ret (ra).end calc

19 Datalogi 1F: G1 200319 Funktionskald i alpha-assembler lda pv, calc jsr ra, (pv) ldgp gp, (ra)

20 Datalogi 1F: G1 200320 Registrene på en Alpha RegisterNavnFunktionHvem gemmer $0v0Returværdikaldende $1-$8t0-t7Temp. registrekaldende $9-$15s0-s6Mellemregn. overlever funktionsk. kaldte $16-$21a0-a5Funktionsargumenterkaldende $22-$25t8-t11Mellemregningerkaldende $26raReturadressekaldte $27pvAddr. på kaldte procedurekaldende $28atReserveret assemblerkaldende $29gpGlobal pegerkaldende $30spStak pegerKaldte $31zeroEr altid nul

21 Datalogi 1F: G1 200321 Opgave 3 Bibliotek til dynamisk lagerallokering To funktioner: void *malloc(size_t size): allokerer en klods lager af størrelsen size på hoben void free(void *p): frigiver den klods lager, som p peger på

22 Datalogi 1F: G1 200322 Diverse G1 skal afleveres onsdag 26. februar klokken 14:00 i DIKUs førstedelsadministration Sammen med G1 har I fået fra Kernighan & Ritchie: The C Programming Language (2nd edition) fået udleveret: – Kapitel 5: Pointers and Arrays – Kapitel 6: Structures –Appendiks B: Standard Library

23 Datalogi 1F: G1 200323 Lagerallokering: malloc/free eksempel int main (void) { exprnode *enode; enode = (exprnode *) malloc(sizeof(exprnode)); enode->value = 54; enode->left = NULL; enode->right = NULL; printf(”%d\n”, calc(enode)); free(enode); }

24 Datalogi 1F: G1 200324 Lagerallokering: new/delete eksempel int main (void) { exprnode *enode; enode = new exprnode; // ingen typecast/size_of enode->value = 54; enode->left = NULL; enode->right = NULL; printf(”%d\n”, calc(enode)); delete enode; }

25 Datalogi 1F: G1 200325 Allokering af hukommelse Funktioners lokale variable allokeres typisk på stakken Dynamisk allokerede variable allokeres på hoben HOB KODE STAK

26 Datalogi 1F: G1 200326 Allokering af objekter på hoben: simpel algoritme Hoben består af en samling klodser af data, der enten: –er allokerede (dvs. optaget) –er frie (ikke optaget) Ved et kald til malloc skal der findes en fri blok, der har mindst samme størrelse som den forespurgte (og helst samme størrelse). Ved et kald til free markeres blokken som værende fri.

27 Datalogi 1F: G1 200327 Ledig: NejLedig: Ja Ledig: Nej Eksempel på administration af hob 0x038.0000 Ledig: Ja 0x038.0000 0x040.0000 0x036.0000 0x000.0000 Ledig: Ja 0x000.0000 0x036.0000 p = malloc(0x007.FFF0); p2 = malloc(0x007.FFF0); free(p); free(p2);

28 Datalogi 1F: G1 200328 Kommentarer til implementation I kan antage at argumentet til free altid har en korrekt værdi (men ellers kan de klares med f.eks. et magisk tal) Algoritmen lider af intern fragmentering: I er velkomne til f.eks. at sammenlægge blokke, men det er ikke et krav I kan IKKE flytte rundt på allokerede blokke!

29 Datalogi 1F: G1 200329 Udførsel på kernealphaerne Programmer på kernealphaerne har kun de funktioner til rådighed, der er implementeret i den benyttede kerne: –intet standardbibliotek eller køretidsbibliotek er tilgængeligt for jeres kode –der er f.eks. ikke indbyggede standard funktioner for new og delete destruktøren for en klasse kalder en funktion __builtin_delete, der ikke er defineret –konstruktører og destruktører kaldes ikke automatisk for statisk allokerede klasser

30 Datalogi 1F: G1 200330 Aflusning Til aflusning af kode på udviklingsalphaerne: –gdb Til aflusning af kode på kernealpha’erne: –ladebug (fjerndebugger med kildetekstsupport der styres fra en udviklingsalpha) –debug monitor på alphaerne Lav først en version, der virker på udviklingsalpha’erne (se evt. testprogram.cc for at se hvordan det kan gøres)

31 Datalogi 1F: G1 200331 Referencer i C++ void g() { int s = 0; int& sr = s; sr += 5; // sr = 5 efter dette int *ps = &s; *ps += 5; // s == sr == *ps == 10 ps += 5; // addr ps forhøjes med // 5*4 bytes }

32 Datalogi 1F: G1 200332 Mere reference void inc(int& val) { val++; } main() { val = 1; inc(val); //val == 2 } void inc(int* val) { (*val)++; } main() { val = 1; inc(&val); //val == 2 }

33 Datalogi 1F: G1 200333 Brug nyhedsgruppen diku.dat1f hvis I har problemer eller spørgsmål Vi ses næste gang den 28. februar!!


Download ppt "Datalogi 1F Forår 2003 G1 Jørgen Sværke Hansen"

Lignende præsentationer


Annoncer fra Google