Analiză statică Analiza fluxului de date 23 octombrie 2014

Documente similare
Analiză de flux de date 29 octombrie 2012

Logică și structuri discrete Relații. Funcții parțiale Marius Minea marius/curs/lsd/ 20 octombrie 2014

Logică și structuri discrete Limbaje regulate și automate Marius Minea marius/curs/lsd/ 24 noiembrie 2014

E_d_Informatica_sp_MI_2015_bar_02_LRO

Microsoft PowerPoint - Curs_SDA_9_RO_2019_v2.pptx

Paradigme de programare

ALGORITHMICS

Limbaje de Programare Curs 6 – Functii de intrare-iesire

PowerPoint-Präsentation

Paradigme de Programare

Microsoft PowerPoint - Curs_SDA_10_RO_2019_v1.pptx

Microsoft Word - cap1p4.doc

Curs 3 Permutari cu repetitie. Combinari. Algoritmi de ordonare si generare

LOGICA MATEMATICA SI COMPUTATIONALA Sem. I,

ALGORITMII ŞI REPREZENTAREA LOR Noţiunea de algoritm Noţiunea de algoritm este foarte veche. Ea a fost introdusă în secolele VIII-IX de către Abu Ja f

Microsoft Word - CarteC.doc

Limbaje de ordinul I LOGICA DE ORDINUL I Un limbaj L de ordinul I este format din: o mulţime numărabilă V = {v n n N} de variabile; conectorii şi ; pa

Logică și structuri discrete Logică propozițională Marius Minea marius/curs/lsd/ 3 noiembrie 2014

Logică și structuri discrete Mulțimi Casandra Holotescu

Limbaje Formale, Automate si Compilatoare

Programarea şi utilizarea calculatoarelor

Microsoft Word - Curs_09.doc

Limbaje de Programare Curs 8 – Fisiere

Microsoft PowerPoint - Curs_SDA_4_RO_2019_v2.pptx

Capitole Speciale de Informatică Curs 4: Calculul scorurilor în un sistem complet de extragere a informaţiilor 18 octombrie 2018 Reamintim că în cursu

CURBE BÉZIER În CAGD se utilizează adesea curbele polinomiale, adică acele curbe definite de o parametrizare polinomială: C : [a, b] R 3 C(t) = (x(t),

Cursul 8 Funcţii analitice Vom studia acum comportarea şirurilor şi seriilor de funcţii olomorfe, cu scopul de a dezvălui o proprietate esenţială a ac

PPSD

Slide 1

1

Microsoft Word - Algoritmi genetici.docx

Metode de programare Proiectarea algoritmilor

Microsoft Word - O problema cu bits.doc

Prelegerea 3 În această prelegere vom învăţa despre: Clase speciale de latici: complementate. modulare, metrice, distributive şi 3.1 Semi-distributivi

Consultatii ELa123, 06 ianuarie 2014

Preprocesorul C Funcţii cu numǎr variabil de argumente 6 decembrie 2005 Programarea calculatoarelor 2. Curs 10 Marius Minea

Facultatea de Matematică Anul II Master, Geometrie Algebrică Mulţimi algebrice ireductibile. Dimensiune 1 Mulţimi ireductibile Propoziţia 1.1. Fie X u

E_d_Informatica_sp_SN_2014_bar_10_LRO

Prelegerea 4 În această prelegere vom învăţa despre: Algebre booleene; Funcţii booleene; Mintermi şi cuburi n - dimensionale. 4.1 Definirea algebrelor

Top

Microsoft PowerPoint - ImplementareLimbaj [Read-Only] [Compatibility Mode]

ALGORITMICĂ. Seminar 3: Analiza eficienţei algoritmilor - estimarea timpului de execuţie şi notaţii asimptotice. Problema 1 (L) Să se determine număru

Ingineria Sistemelor de Programare

Subiectul 1

Curs7

PowerPoint Presentation

Probleme date la examenul de logică matematică şi computaţională. Partea a II-a Claudia MUREŞAN Universitatea din Bucureşti Facultatea de Matematică ş

Dorel LUCHIAN Gabriel POPA Adrian ZANOSCHI Gheorghe IUREA algebră geometrie clasa a VIII-a ediţia a V-a, revizuită mate 2000 standard EDITURA PARALELA

Limbaje de programare Pointeri. Alocare dinamică (continuare) 26 noiembrie 2012

B

Ecuatii si sisteme de ecuatii neliniare 1 Metoda lui Newton Algorithm 1 Metoda lui Newton pentru ecuaţia f(x) = 0. Date de intrare: - Funcţia f - Apro

Tipuri de date abstracte 30 noiembrie 2005 Programarea calculatoarelor 2. Curs 9 Marius Minea

Slide 1

Cursul 12 (plan de curs) Integrale prime 1 Sisteme diferenţiale autonome. Spaţiul fazelor. Fie Ω R n o mulţime deschisă şi f : Ω R n R n o funcţie de

PowerPoint Presentation

Platformăde e-learning și curriculăe-content pentru învățământul superior tehnic Sisteme de operare 13. Planificarea proceselor

Curs 8: Tehnica divizării (I) Algoritmi si structuri de date - Curs 8 1

Laborator 2 Incompatibilităţi/Diferenţe între C şi C++ Completări C++ Supraîncărcarea (redefinirea) numelui de funcţii În C nu este permisă existenţa

PAS cap. 2: Reprezentări rare p. 1/35 Prelucrarea avansată a semnalelor Capitolul 2: Reprezentări rare Bogdan Dumitrescu Facultatea de Automatică şi C

Operatorii in C Expresii Operatori aritmetici Operatori de asignare Operatori de incrementare si decrementare Operatori relationali Operatori logici O

Declararea variabilelor

Microsoft Word - 2 ES RO.doc

PROGRAMARE ORIENTATA PE OBIECTE

Microsoft Word - CarteC.doc

Microsoft Word - CarteC.doc

1. Găsiți k numerele cele mai apropiate într-un şir nesortat Dându-se un şir nesortat și două numere x și k, găsiți k cele mai apropiate valori de x.

LUCRAREA 8 PROGRAMAREA NELINIARĂ ÎN REZOLVAREA PROBLEMELOR DIN ENERGETICĂ. METODE DE ORDINUL Aspecte generale Programarea neliniară are o foart

SUBPROGRAME

Diapositive 1

Ministerul Educatiei, Cercetarii si Tineretului Grup Scolar Gh. Asachi Galati Proiect pentru obtinerea certificatului de competente profesionale Speci

Microsoft Word - _arbori.docx

FIŞA DISCIPLINEI

Modelarea si Simularea Sistemelor de Calcul

Capitole Speciale de Informatică Curs 2: Determinarea vocabularului de termeni şi a listelor de postări 4 octombrie 2018 Reamintim că listele de indec

METODE NUMERICE ÎN INGINERIE

tehnologii web

Grafuri neorinetate Aplicatii 1 Care este numărul maxim de componente conexe pe care le poate avea un graf neorientat cu 20 noduri şi 12 muchii? a. 6

Grafuri - Concepte de baza. Tipuri de grafuri. Modalitati de reprezentare

Slide 1

Elemente de aritmetica

Şcoala ………

MergedFile

Retele Petri si Aplicatii

Laborator 9: Fire de execuţie Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 20 noiembrie 2011

Microsoft Word - Tema 06 - Convertoare analog-numerice.doc

Slide 1

Microsoft Word - Pocatilu_IE3_2006.doc

PROIECT DIDACTIC DATE DE IDENTIFICARE Data: Școala : Școala Gimnazială Grigore Moisil Ploiești Clasa: a VI-a Profesor: Ilie Oana Magdalena Disciplina:

Curs 6: Clasificarea surselor de informatii - Clasificarea Bayes Naiva. Modelul Bernoulli

Matematica VI

Notiuni de algebra booleana

Cursul 13 Mulţimi Julia Fie f : C C o funcţie complexă şi fie f n = f f f iterata de ordin n a lui f. Peste tot în continuare vom presupune că f este

Slide 1

Curs8

Declaraţii. Instrucţiuni 19 octombrie 2005 Programarea calculatoarelor 2. Curs 3b Marius Minea

Introducere

Microsoft Word - a5+s1-5.doc

Retele Petri si Aplicatii

Algebra si Geometri pentru Computer Science

Transcriere:

Analiză statică Analiza fluxului de date 23 octombrie 2014

Analiză statică: definiție O analiză a codului sursă (fără a executa programul), cu scopul de a determina proprietăți ale programului sursă. (in principal corectitudinea, dar și performanță, etc.) Complementare analizelor dinamice (prin rularea codului) Exemple de proprietăți: variabile neinițializate (particular: pointeri nuli) atribuiri nefolosite vulnerabilități de cod (excepții, depășiri de indici), etc. De obicei, analizele statice sunt legate de semantica programului uneori: și analize limitate la structura (sintactică) a codului Istoric: (sub)domeniu legat de compilatoare: în special pentru optimizare mai recent: în proiectarea limbajelor; pentru detectarea de erori

Analiza fluxului de date Tehnici cu originea în domeniul compilatoarelor folosite pentru generarea de cod (alocarea de regiștri) și optimizarea de cod (propagarea constantelor, factorizarea expresiilor comune, detectarea variabilelor nefolosite, etc.) Aceleași tehnici pot fi aplicate și la probleme de analiză de cod (într-un cadru foarte general) Ideea de bază: construirea grafului de flux de control al programului urmărirea modului în care proprietățile de interes se modifică pe parcursul programului (la traversarea nodurilor / muchiilor grafului)

Graful de flux de control al programului engl. control flow graph, CFG Reprezentare în care: nodurile sunt instrucțiuni muchiile indică secvențierea instrucțiunilor (inclusiv salturi) putem avea: noduri cu: un singur succesor (ex. atribuiri), mai mulți succesori (instrucțiuni de ramificație) mai mulți predecesori (reunirea după ramificație) Obs.: Alternativ, dar mai puțin folosit: nodurile sunt puncte din program (valori pentru PC) muchiile sunt instrucțiuni cu efectele lor

Exemplu: program și CFG a = 0 int a = 0, b, c = 0; do { b = a + 1; c = c + b; a = 2 * b; } while (a < 100); return c; b = a + 1 c = c + b a = 2 * b a 100 return c

Notații G = (N, E) : graful de flux de control (N : noduri; E : muchii) s : o instrucțiune de program (nod în graful de flux de control) entry, exit : punctele de intrare și de ieșire din program in(s) : mulțimea muchiilor care au s ca destinație out(s) : mulțimea muchiilor care au s ca sursă src(e), dest(e) : instrucțiunea sursă și destinație a muchiei e pred(s) : mulțimea predecesorilor instrucțiunii s succ(s) : mulțimea predecesorilor instrucțiunii s Scriem ecuații de flux de date: descriu cum se modifică valorile analizate (dataflow facts) de la o instrucțiune la alta. Avem nevoie de valoarea analizată la intrarea instrucțiunii s (indice in ) și la ieșirea instrucțiunii (indice out )

Exemplu: Reaching definitions Care sunt toate atribuirile (definițiile) care pot atinge punctul curent (înainte ca valorile atribuite să fie suprascrise)? Elementele de interes sunt perechi: (variabilă, linie de definiție). Pentru fiecare instrucțiune (identificată cu eticheta ei l) ne interesează valoarea dinainte RD in (s) și de după RD out (s) Nodul inițial din graf nu e atins de nici o definiție: RD out (entry) = {(v,?) v V } O atribuire l : v e șterge toate definițiile anterioare (pt. variabila v, nu alte variabile) și introduce ca definiție instrucțiunea curentă RD out (l : v e) = (RD in (s) \ {(v, s )}) {(v, l)} Definițiile de la intrarea unei instrucțiuni sunt reuniunea definițiilor de la ieșirea instrucțiunilor precedente: RD in (s) = s pred(s) RD out(s )

Exemplu: Live variables analysis În fiecare punct de program, ce variabile vor avea valoarea folosită pe cel puțin una din căile posibile din acel punct? (analiză utilă în compilatoare pentru alocarea regiștrilor) Funcția de transfer: LV in (s) = (LV out (s) \ write(s)) read(s) O variabilă e live înainte de s dacă e citită de s sau elive după s fără a fi scrisă de s sensul analizei e înapoi Operația de combinare (meet): { LV out (s) = s succ(s) LV in(s ) dacă succ(s) = altfel combinarea făcută prin uniune (may, pe cel puțin o cale) Calculul: algoritm de tip worklist care face modificări pornind de la valorile inițiale până nu mai apar schimbări se atinge un punct fix

Exemplu: Available expressions În fiecare punct de program, care sunt expresiile a căror valoare a fost calculată anterior, fără să se modificat, pe toate căile spre acel punct? (dacă valoarea se ține minte într-un registru, nu trebuie recalculată) Funcția de transfer: AE out (s) = (AE in (s) \ {e V (e) write(s) }) {e Subexp(s) V (e) write(s) = } (expresiile de la intrarea în s care nu au variabile modificate de s, și orice expresii calculate în s fără a li se modifica variabilele) Operația de combinare (meet): { AE in (s) = s pred(s) AE out(s ) dacă pred(s) = altfel combinarea e făcută prin intersecție (must, pe toate căile); analiza e înainte

Exemplu: Very busy expressions Care sunt expresiile care trebuie evaluate pe orice cale din punctul curent înainte ca valoarea vreunei variabile din ele să se modifice? evaluarea se poate muta în punctul curent, înainte de ramificații o analiză înapoi, și de tip universal (must) VBE in (s) = (VBE out (s) \ {e V (e) write(s) }) Subexp(s) { VBE out (s) = s succ(s) VBE in(s ) dacă succ(s) = altfel

Proprietăți analizate (dataflow facts) Concret: analizăm diverse proprietăți, de ex. valoarea unei variabile într-un punct de program sau intervalul de valori pentru o variabilă sau mulțimi de variabile (live), expresii (available, very busy), definiții posibile pentru o valoare (reaching definitions), etc. Abstract: o mulțime D de valori pentru o proprietate (dataflow facts) Restricție: D e o mulțime finită

Latice O latice e o mulțime parțial ordonată, în care orice două elemente au un minorant și un majorant. (elemente mai mici, respectiv mai mari în ordine decăt cele două). Ex: mulțimea părților unei mulțimi (intersecție, reuniune) Ex: mulțimea divizorilor unui număr (c.m.m.d.c, c.m.m.m.c) Imagine: http://en.wikipedia.org/wiki/file:hasse_diagram_of_powerset_of_3.svg http://en.wikipedia.org/wiki/file:lattice_of_the_divisibility_of_60.svg

Funcții de transfer Concret: instrucțiunile determină modificări ale stării programului. Valoarea unei variabile după o instrucțiune e o funcție a valorii de la începutul instrucțiunii. Abstract: Fiecare instrucțiune s are asociată o funcție de transfer F (s) : L L care determină modul în care valoarea proprietății la începutul instrucțiunii e modificată de instrucțiune: Prop out (s) = F (s)(prop in (s)) (pentru analize înainte), sau invers (pentru analize înapoi) Restricție: punem condiția ca funcțiile de transfer să fie monotone: x y f (x) f (y) (dacă știm mai multe despre argument, atunci și despre rezultat) Caz particular: bitvector frameworks: laticea e o mulțime de părți P(D), funcții de transfer monotone și de forma: F (s)(v) = (v \ kill(s)) gen(s) (v = dataflow fact, gen/kill(s) = informația generată/eliminată în s)

Ecuații de flux de date Exemplu: pentru analize înainte: Prop out (s) = F (s)(prop in (s)) Prop in (s) = s pred(s) Prop out (s ) unde prin am reprezentat efectul combinării informațiilor (meet) pe mai multe căi (ar putea fi sau ) Inițial, e cunoscută valoarea Prop out (entry). Pentru analize înapoi, se schimbă rolul între in și out, și e cunoscută valoarea lui Prop in (exit).

Soluția: Algoritm de tip worklist Pentru calculul soluției la sistemul de ecuații de mai sus: algoritmi iterativ care propagă modificările în sensul analizei foreach s N do Prop in (s) = /* no info */ Prop in (entry) = init /* in functie de analiza */ W = {entry} while W choose s W W = W \ {s} Prop in (s) = s pred(s) Prop out (s ) Prop out (s) = F (s)(prop in (s)) if change then forall s succ(s) do W = W {s }

Terminare: condiția de punct fix Terminarea analizei e garantată dacă funcția de transfer e monotonă: x y f (x) f (y), ceea ce implică faptul că proprietățile calculate se modifică în mod monoton. Def: Punct fix pentru o funcție f : o valoare x pt. care f (x) = x Teorema lui Tarski garantează că o funcție monotonă pe o latice completă are un punct fix minimal și un punct fix maximal. Algoritmul worklist calculează punctul fix minimal dat fiind sistemul de funcții de transfer.

Meet over all paths Dorim să calculăm efectul combinat al instrucțiunilor programului: pentru p = s 1 s 2... s n șir de instrucțiuni definim F (p) = F (s n )... F (s 2 ) F (s 1 ) și dorim să calculăm: p Path(Prog) F p (entry) Dar algoritmul iterativ combină efectele la fiecare punct de întălnire înainte de a calcula mai departe. Funcțiile f fiind monotone, avem: f (x y) f (x) f (y) deci analiza pierde din precizie Pentru funcțiile de transfer distributive avem chiar: f (x) f (y) = f (x y) Se demonstrează că în acest caz algoritmul iterativ (care generează o soluție de punct fix) e echivalent cu calculul soluției prin combinarea valorilor pe toate căile posibile (meet over all paths). combinarea diverselor căi de execuție nu pierde informație Cele 4 exemple date (live variables, etc.) sunt distributive.

Clasificare a analizelor înainte sau înapoi must sau may dependente sau independente de fluxul de control (flow (in)sensitive): Trebuie luată în considerare ordinea instrucțiunilor în program nu: ce variabile sunt folosite/modificate, funcții apelate, etc. da: proprietăți legate de valorile calculate efective de program dependente sau independente de context în cazul programelor cu proceduri: e specializată analiza procedurii în funcție de locul de apel, sau se poate face un sumar (o analiză comună)? dependente sau nu de cale (path-(in)sensitive) (ține cont de corelările pe căile individuale de execuție?)