Verifying Correctness of Shared Channels in a Cooperatively Scheduled Process-Oriented Language
Pedersen, Chalmers
Correct concurrent behaviour is important in understanding how components will act within certain conditions. In this work. we analyse the behaviour of shared communicating channels within a coorporatively scheduled runtime. We use the refinement checking and modelling tool FDR to develop both specifications of how such shared channels should behave and models of the implementations of these channels in the cooperatively scheduled language ProcessJ. Our results demonstrate that although we can certainly implement the correct behaviour of such channels, the outcome is dependant on having adequate resources available to execute all processes involved. We conclude that modelling the runtime environment of concurrent components is necessary to ensure components behave as specified in the real world.
academic
Verifica della Correttezza dei Canali Condivisi in un Linguaggio Orientato ai Processi con Pianificazione Cooperativa
Questo articolo analizza il comportamento dei canali di comunicazione condivisi in ambienti di esecuzione con pianificazione cooperativa. La ricerca utilizza lo strumento di verifica formale FDR per sviluppare specifiche del comportamento dei canali condivisi e modelli dell'implementazione dei canali nel linguaggio ProcessJ. I risultati dimostrano che, sebbene sia possibile implementare il comportamento corretto dei canali, i risultati dipendono dalla disponibilità di risorse sufficienti per eseguire tutti i processi correlati. La ricerca conclude che la modellazione dell'ambiente di esecuzione per componenti concorrenti è necessaria per garantire che i componenti si comportino secondo le specifiche nel mondo reale.
Importanza della Correttezza del Software Concorrente: Il comportamento corretto dei sistemi concorrenti è cruciale per comprendere come i componenti funzionano in condizioni specifiche. Sebbene i metodi di test tradizionali siano ampiamente utilizzati, potrebbero non riuscire a scoprire tutti i potenziali errori di concorrenza.
Necessità della Verifica Formale: Gli autori utilizzano l'esempio del software del rover marziano per illustrare come un semplice errore di deadlock potrebbe richiedere l'attesa di 8 milioni di secondi (oltre 90 giorni) per avere il 50% di probabilità di essere scoperto tramite test, mentre la verifica formale utilizzando CSP e FDR potrebbe identificare immediatamente tali errori.
Sfide nella Verifica del Sistema di Esecuzione: Poiché numerosi programmi sono costruiti su sistemi di esecuzione di linguaggi di programmazione, garantire che il sistema di esecuzione sia privo di errori e si comporti secondo le specifiche diventa cruciale.
Ignoranza dell'Ambiente di Esecuzione: I metodi tradizionali di verifica basati su sistemi di canali non modellano il sistema di esecuzione, il sistema di esecuzione, l'hardware e altri fattori, assumendo che gli eventi pronti rimangono disponibili fino a quando non vengono pianificati.
Assunzione di Scarsità di Risorse: I metodi di modellazione standard assumono che gli eventi possono verificarsi immediatamente, il che significa che le risorse sono disponibili quando viene eseguito un evento, ma questa assunzione estrema non corrisponde alla realtà.
Impatto dell'Ambiente di Pianificazione: I processi devono attendere di essere pianificati alla fine della coda di esecuzione, i loro eventi non saranno immediatamente disponibili, ma i metodi tradizionali non considerano questa situazione.
ProcessJ è un linguaggio di programmazione orientato ai processi basato sulla semantica CSP, che utilizza pianificazione cooperativa ed esecuzione sulla JVM. Questo articolo mira a verificare la correttezza dell'implementazione dei canali condivisi nel runtime di ProcessJ, con particolare attenzione all'impatto dell'ambiente di pianificazione sul comportamento dei canali.
Verifica della Correttezza dell'Implementazione dei Canali Condivisi di ProcessJ: Dimostra che l'implementazione dei canali condivisi di ProcessJ utilizzando il pianificatore cooperativo esistente è corretta, verificando che si comporta come previsto attraverso il controllo di raffinamento della traduzione CSP e del modello generico di canale condiviso.
Sviluppo di Prove Algebriche Estese della Specifica del Canale Condiviso: Fornisce una prova formale che la specifica del canale condiviso si comporta effettivamente come un canale condiviso CSP.
Ulteriore Dimostrazione della Relazione tra Risorse e Processi Attivi: Dimostra nuovamente la relazione tra risorse disponibili e numero di processi attivi nel soddisfare le specifiche, provando che il numero di pianificatori disponibili deve essere uguale o maggiore del numero di processi nel sistema per ottenere il raffinamento in entrambe le direzioni tra specifica e modello.
Il compito principale di questo articolo è verificare la correttezza dell'implementazione dei canali condivisi nel linguaggio ProcessJ. Nello specifico include:
Input: Codice di implementazione Java dei canali condivisi di ProcessJ e specifica CSP
Output: Risultati di verifica che provano se l'implementazione è conforme alla specifica
Vincoli: Considerazione dei limiti di risorse nell'ambiente di pianificazione cooperativa
SCHEDULER =
rqdequeue?p → -- estrae un processo dalla coda
run.p → -- lo esegue
yield.p → -- attende il cedimento
SCHEDULER -- ricorsione
SCHEDULE_MANAGER =
schedule?pid → -- attende evento di pianificazione
rqenqueue!pid → -- inserisce il processo nella coda di esecuzione
SCHEDULE_MANAGER -- ricorsione
A differenza dei metodi tradizionali, questo articolo modella esplicitamente il pianificatore cooperativo durante il processo di verifica, consentendo di scoprire problemi che si verificano solo in condizioni di pianificazione specifiche.
Variando il numero di pianificatori, lo studio ha esaminato come il comportamento del sistema cambia con diverse configurazioni di risorse, scoprendo la relazione tra adeguatezza delle risorse e correttezza.
Teorema di Adeguatezza delle Risorse: Quando il numero di pianificatori è uguale o maggiore del numero totale di processi, è possibile ottenere il raffinamento in entrambe le direzioni nel modello failures.
Impatto dell'Insufficienza di Risorse:
Con pianificatori insufficienti, è possibile ottenere solo il raffinamento traces e non il raffinamento failures
Questo non significa che il sistema andrà in deadlock, ma che alcuni traces non saranno più realizzabili
Impatto della Coda di Pianificazione: La coda di esecuzione impone un ordine naturale sui processi; quando i pianificatori sono insufficienti, l'insieme di accettazione di alcuni processi non sarà incluso nell'insieme di accettazione complessivo del sistema.
Correttezza dell'Implementazione: L'implementazione dei canali condivisi di ProcessJ è corretta quando sono disponibili pianificatori sufficienti.
Dipendenza dalle Risorse: Il comportamento corretto dipende dalla disponibilità di risorse di pianificazione sufficienti per eseguire tutti i processi correlati.
Necessità della Modellazione: La modellazione dell'ambiente di esecuzione è necessaria per garantire che i componenti si comportino secondo le specifiche nel mondo reale.
Uso di Lock: L'implementazione attuale fa un uso estensivo di lock/monitor, che potrebbe influire sulla concorrenza e sulle prestazioni.
Requisiti di Pianificatori: La necessità di un numero di pianificatori uguale al numero di processi potrebbe non essere pratica nelle applicazioni reali.
Complessità della Verifica: Lo spazio degli stati della verifica cresce rapidamente con l'aumento del numero di processi.
Questo articolo cita 51 articoli correlati, principalmente includenti:
Teoria Fondamentale di CSP: Opere classiche di Hoare su CSP e teoria correlata
Strumenti di Verifica Formale: Strumento FDR e metodi di verifica correlati
Linguaggi di Programmazione Concorrente: Ricerca correlata su JCSP, occam-π, Go, Erlang e altri linguaggi
Algoritmi di Pianificazione: Lavori correlati su algoritmi di mutua esclusione e algoritmi concorrenti
Lavori Precedenti degli Autori: Serie di ricerche sulla verifica del runtime di ProcessJ
Sintesi: Questo articolo fornisce importanti contributi nel campo della verifica formale, in particolare nella verifica dei sistemi concorrenti che considerano l'ambiente di esecuzione. Sebbene presenti alcune limitazioni, i suoi metodi e scoperte hanno un valore significativo per migliorare l'affidabilità dei sistemi concorrenti.