Verificare formală - Proiect 2
(Enunt alternativ)
Să se modeleze și verifice în SMV un protocol care asigură coerența
memoriilor cache, pentru un sistem compus din următoarele module:
două procesoare, două memorii cache (una pentru fiecare procesor),
o memorie principală și o magistrală la care sunt conectate cele trei memorii.
Pentru a realiza un model abstractizat și simplificat al sistemului
se va ține seama de următoarele indicații. (Corectitudinea simplificărilor
descrise se poate argumenta formal; pentru moment, le vom accepta ca atare.)
- Procesorul execută un șir infinit de instrucțiuni de următoarele
trei tipuri: citire din memorie, scriere în memorie, alte instrucțiuni
fără acces la memorie.
- Memoria cache are capacitatea de un singur cuvânt.
(Întrucât toate liniile memoriei cache funcționează la fel, pe baza
simetriei este suficientă modelarea uneia din ele.)
- Memoria principală are capacitatea de două cuvinte (adrese),
ambele corespunzând aceleiași (unicei) linii din memoria cache.
(E suficientă modelarea unei adrese arbitrare de memorie și a unei alte
adrese care reprezintă ``orice altceva'').
- Se face abstracție completă de valoarea înscrisă într-un cuvânt de
memorie, și implicit de numărul de biți.
(Protocolul modelat este independent de valoarea datelor din memorie.
Trebuie modelată și verificată doar folosirea în permanență a ultimei
valori actuale, nu și valoarea numerică propriu-zisă).
Sistemul funcționează în felul următor: fiecare din procesoare trimite
memoriei cache proprii comenzi de citire/scriere în funție de
instrucțiunile executate. Memoria cache răspunde imediat dacă poate
satisface cererea. Altfel, execuția procesorului este blocată temporar
(stall), și memoria cache emite pe magistrală o cerere pentru
satisfacerea comenzii procesorului. Magistrala este partajată și răspunde
nedeterminist, dar echitabil (fair) cererilor emise de cele două
memorii cache. Comenzile emise pe magistrală sunt monitorizate de către
memoria principală (care nu emite niciodată cereri), precum și de memoria
cache care nu este activă în ciclul respectiv; ambele își actualizează
datele și/sau starea proprie în mode corespunzător.
Protocolul este de tip snoopy: memoria cache pasivă poate prelua
o dată emisă pe magistrală (anticipând o posibilă utilizare de către
procesorul propriu), cu condiția ca această acțiune să nu compromită
integritatea datelor proprii.
Cererile emise de o memorie cache pe magistrală pot fi de citire, scriere
sau invalidare (aceasta informează ceilalți parteneri din sistem că se
dorește actualizarea adresei respective). Se consideră că toate componentele
sistemului reacționează la o cerere transmisă pe magistrală în același
ciclu în care a fost făcută.
Starea unei linii (unui cuvânt) din memoria cache poate fi: a) consistentă
cu valoarea din memoria principală; b) modificată (conține singura copie
curentă, valoarea din memoria principală nemaifiind actuală); c) invalidă
(nu conține valoarea curentă a vreunei adrese de memorie).
Se vor specifica și verifica următoarele proprietăți:
- Cele două memorii cache nu pot avea niciodată valori inconsistente
pentru aceeași adresă.
- Valoarea curentă a unui cuvânt de memorie nu se "pierde" niciodată.
- Executia niciunui procesor nu este blocată la infinit.
Se vor preda prin e-mail fișierul SMV (comentat inteligibil) și rezultatele
rulării. Se va preda de asemenea, fie pe hârtie, fie prin e-mail (format
ASCII, PDF sau PostScript) o notă explicând principalele decizii de
modelare și de formulare a specificațiilor.
Marius Minea