Istruzioni
- Inserite il vostro numero di
matricola e la password scelta al momento della consegna.
- Nella vostra home page, controllate
lo stato di ognuno degli esercizi (voce Alla
consegna):
- Dopo aver corretto (sul vostro
computer) gli eventuali esercizi scorretti, potete inviare le correzioni.
- Opzionalmente, potete visualizzare le differenze
tra il file originale e il file modificato dalle correzioni inviate al
passo precedente.
- Se vi accorgete di aver commesso degli errori, potete
a questo punto tornare alla pagina di invio correzioni. La pagina
mostrerà ancora il file originale
(non modificato) e l'insieme delle correzioni precedentemente inviato.
Potete ora modificare, eliminare o aggiungere ulteriori correzioni. Il
nuovo insieme di correzioni verrà riapplicato alla versione originale del file.
Ripetete i passi 3 e 4 fino a quando il file non verrà modificato
esattamente come volete. Non premete i tasti "back" e "forward"
del browser per passare da una pagina all'altra. Con quelli,
il browser vi fa vedere le immagini delle pagine che lui
ha in memoria, non quelle che si trovano sul server.
- Cercate di correggere solo lo
stretto necessario per ottenere un programma corretto.
Ogni correzione che fate può, al limite, farvi avere dei punti
in meno, ma mai dei punti in più.
- Tornate ora alla vostra home page.
Il file modificato verrà automaticamente assemblato, collegato ed
eseguito. Apparirà la voce ultima
modifica, con la data e l'ora in cui avete inviato le ultime
correzioni. Accanto a questa voce, sarà visualizzato lo stato
corrente dell'esercizio (corretto/scorretto), in modo simile a quanto
avviene per la voce alla consegna.
- Si possono visualizzare
i dettagli degli eventuali nuovi errori, e si può scaricare la
versione corrente del file (con le vostre correzioni applicate).
- Ripetete i passi 3-5 fino a quando
tutti gli esercizi non si troveranno nello stato "corretto".
- Se siete arrivati a questo punto, i
vostri esercizi sono finalmente corretti. In fondo alla pagina
principale apparirà il collegamento "richiedi voto".
Premendolo, verrà inviata un'email di notifica all'esaminatore, che a
questo punto potrà analizzare il vostro elaborato. N.B.: Dopo aver eseguito questa
azione, non sarà più possibile inviare ulteriori
correzioni.
- Sulla stessa pagina potrete trovare
la valutazione del vostro compito, non appena sarà disponibile.
Non è necessario svolgere
tutte le operazioni in una sola sessione.
Se avete dubbi o suggerimenti, inviate un email a
g.lettieri@iet.unipi.it,
inserendo la stringa "[CALCOLATORI]" da qualche parte nell'oggetto.
Visualizzazione
dei dettagli degli errori
Un esercizio può essere
scorretto per vari motivi. Questi sono gli stati possibili in cui
può trovarsi il vostro esercizio:
- assente. Non avete svolto
l'esercizio. Resta poco da fare.
- non_assembla.
L'assemblatore ha riportato un errore, che è quello visualizzato
nella pagina. Avete probabilmente scritto male il nome di una
istruzione, oppure avete usato dei tipi di operando non compatibili con
il tipo di una istruzione (ad esempio, un indirizzamento di tipo
registro in una istruzione per la FPU).
- non_collega. L'errore
riportato nella pagina è stato rilevato dal collegatore.
Tipicamente, avete tradotto male il nome C++ di una qualche funzione,
oppure avete riferito, in qualche istruzione di salto, una etichetta che
poi non avete definito.
- non_esegue. Il sistema
operativo ha interrotto il vostro programma a tempo di esecuzione.
Questo è il caso più complicato, ulteriori dettagli più avanti
- scorretto. L'uscita del
vostro programma non coincide con quella attesa. Viene visualizzata
l'uscita prodotta dal vostro programma, con i numeri scorretti
evidenziati in rosso.
Errori
a tempo di esecuzione
Se lo stato del vostro esercizio
è "non_esegue", si è verificato un errore a tempo di
esecuzione. Ci sono principalmente due motivi per cui ciò
può avvenire:
- Il processo entra in un ciclo infinito. Il sistema operativo
interromperà forzatamente il processo che esegue il vostro
programma dopo 3 secondi di esecuzione. In questo caso, vedrete il
messaggio "CPU time exceeded" nella pagina di visualizzazione degli
errori.
NOTA: il tempo di esecuzione di
questi esercizi si misura in pochi millisecondi, quindi non fatevi
venire il dubbio che il vostro programma possa essere corretto anche se
non termina in 3 secondi.
- Il processo accede in modo scorretto alla memoria. In questo caso
vedrete, nella prima riga della pagina di visualizzazione degli errori,
il messaggio "Segmentation fault", oppure il messaggio "Bus error".
Nel primo caso (ciclo infinito) non
è possibile ottenere maggiori informazioni in modo automatico.
Qualche informazione in più, invece, può essere
disponibile nel secondo caso. Se al momento dell'errore il program
counter non si trovava all'interno di una funzione di libreria, il
debugger simbolico sarà generalmente in grado di
visualizzare la riga del file sorgente contenente l'istruzione
colpevole. In questo caso, la pagina di visualizzazione degli errori,
dopo i messaggi "Segmentation fault" o "Bus error", mostrerà il
messaggio
<nome del file>:
<numero di riga>. Per
comodità, verrà anche mostrato un estratto del file
sorgente contente la riga in questione. Di seguito, verrà
mostrato il contenuto che i registri della ALU e della FPU avevano al
momento in cui il processo è stato interrotto. (
Esempi).
Invio delle correzioni
La pagina di invio delle correzioni
è divisa in tre parti. La parte superiore contiene alcune
informazioni (nome dello studente, data della consegna, etc.) sulla
sinistra e una serie di bottoni sulla destra. La parte inferiore
sinistra della pagina contiene il listato del file da voi consegnato
alla fine della prova pratica. Le righe del listato sono state numerate
in modo da poter essere facilmente riferite nelle correzioni. La parte
inferiore destra è inizialmente vuota ed è destinata a
contenere l'insieme delle correzioni che volete applicare al file.
Premendo uno dei bottoni sulla barra superiore, verrà aggiunta
alla lista una nuova regola di correzione. Ogni regola di correzione
consiste in una maschera con dei campi da riempire e da un bottone
contrassegnato con una 'X'. Il bottone 'X' consente di eliminare la
regola associata, nel caso l'abbiate aggiunta per errore.
Le possibili regole di correzione sono le seguenti:
- Elimina righe: consente
di eliminare una o più righe del file originale. La maschera
contiene un solo campo, in cui vanno inseriti i numeri di riga da
eliminare. Possono essere inseriti più numeri di riga, separati
da virgole, o anche intervalli
di righe, con gli estremi dell'intervallo separati da '-'. (Es., se il campo contiene 20-25,100-110,136, verranno
eliminate le righe dalla 20 alla 25 incluse, dalla 100 alla 110 incluse,
e la riga 136).
- Inserisci righe: consente
di inserire una o più righe nuove subito prima di un insieme dato di
righe (come caso particolare, subito prima di una data riga). L'insieme
di righe su cui eseguire l'inserimento può essere specificato
come per la regola Elimina righe.
Notate che, se specificate un intervallo di righe, le nuove righe
verranno inserite prima di ciascuna
delle righe appartenenti all'intervallo.
- Sostituisci righe:
consente di sostituire un intervallo
di righe con un nuovo insieme di righe. Non è necessario che il
vecchio e il nuovo intervallo abbiano lo stesso numero di righe. Se
volete sostituire una sola riga, specificate lo stesso numero di riga
sia per l'inizio che per la fine dell'intervallo.
- Sostituisci parole:
consente di sostituire tutte le occorrenze di una stringa con un'altra
stringa. La sostituzione viene applicata solo alle righe specificate.
Tali righe possono essere specificate come per la regola Elimina righe.
Le correzioni non vengono applicate
subito, ma solo quando premete il tasto 'Invia correzioni'. Inoltre,
anche se è possibile inviare le correzioni più di una
volta, il sistema applica sempre e solo le ultime correzioni e sempre al file originale (quello che avete
consegnato il giorno della prova pratica). Quindi, dovete specificare
l'insieme completo delle
correzioni da applicare. Se non si facesse così, sarebbe molto
più complicato tenere traccia delle correzioni applicate, e la
visualizzazione delle differenze tra il file originale e quello finale
sarebbe molto meno precisa. Questo vuole anche dire che non dovete
usare il sistema come un ambiente di sviluppo. Dovete invece solo
comunicare le correzioni che avete prima provato a parte sul vostro
computer. Così facevano gli studenti prima di voi, ma sopportando
estenuanti file davanti al dipartimento per venire a comunicare le
correzioni di persona.
Una volta premuto il tasto 'Invia
correzioni', il riquadro contenente il file originale verrà
sostituito da una serie di messaggi relativi alle regole che avete
inviato. In particolare, potrebbero esserci degli errori nelle regole (Es., un intervallo 30-20) che verranno segnalati.
L'insieme delle regole rimarrà visualizzato nella parte destra,
in modo che possiate correggerle e inviarle nuovamente. Se le regole
verranno accettate, si potrà procedere con la visualizzazione
delle differenze e l'esecuzione del programma modificato.
Tenete presente che le regole vengono applicate al file originale
nell'ordine in cui le inserite, ma i numeri di riga rimangono sempre gli
stessi del file originale. Quindi, ad esempio, se con una regola
eliminate la riga 10, nella regola successiva potete continuare a fare
riferimento alle righe dalla 11 in poi, così come le vedete nel
file originale sulla sinistra (in altre parole, la riga 11 resta sempre
la 11 anche se prima avete eliminato la 10). Allo stesso modo, le righe
inserite o sostituite non cambiano la numerazione delle righe
successive. Questa è una grande facilitazione, ed è il
modo in cui operano gli editor non interattivi come
sed(1)[3],
a cui questo sistema si ispira, anche se è stato scritto in
perl[4].
NOTA: se non volete perdere un sacco di tempo a cercare di
capire perchè il file non viene modificato come vorreste, cercate
di non inviare più correzioni che modificano in sequenza le stesse righe
del file originale. Se
proprio non potete farne a meno (vi sfido però a trovare un
esempio), tenete presente che, ovviamente, su una riga eliminata da una
regola precedente non potete fare ulteriori correzioni. Meno ovviamente,
se la prima riga dell'intervallo di una regola
Sostituisci righe era stata
precedentemente eliminata, l'intera regola viene saltata, come in
sed(1). Inoltre, le righe
inserite o sostituite non sono soggette ad ulteriori modifiche da parte
di regole successive. Le sostituzioni di parole, invece, operano anche
sulle righe che erano state precedentemente oggetto di altre
sostituzioni di parole, partendo dallo stato in cui le precedenti regole
le avevano lasciate.
Visualizzazione
delle differenze
La pagina di visualizzazione delle
differenze consente di avere una visione completa e immediata delle
ultime modifiche che avete apportato al vostro file originale. La pagina
mostra il file originale sulla sinistra e quello modificato sulla
destra, separati da una barra verticale. La visualizzazione normale
è a colori, con il testo che non è stato modificato in
verde, le parti sostituite o eliminate nel file originale in giallo, e
le parti nuove nel file modificato in rosso. Le righe dei due file
vengono spaziate verticalmente, dove necessario, in modo che le righe
corrispondenti nei due file si trovino sempre allo stesso livello. Se ci
sono delle righe troppo lunghe (trattandosi di listati assembler non
dovrebbero essere frequenti), verranno troncate inserendo dei puntini
'...'. Se questo è il caso, si può comunque aumentare il
numero di caratteri visualizzati per riga (di ciascun file) e premere il
tasto 'aggiorna'. Si può anche passare ad una visualizzazione in
bianco e nero, meno evidente, ma necessaria ad es. per Mozilla con i
font antialiased, in cui i caratteri verdi praticamente scompaiono. Si
accettano suggerimenti per migliori combinazioni di colori. In alcune
versioni di Opera e Konqueror, il browser va a capo in modo
imprevedibile e la formattazione risulta distorta. Non sembrano esserci
problemi, invece, con Internet Explorer e con Mozilla.