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.)

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:

  1. Cele două memorii cache nu pot avea niciodată valori inconsistente pentru aceeași adresă.
  2. Valoarea curentă a unui cuvânt de memorie nu se "pierde" niciodată.
  3. 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