---++ Domande sul TerzoProgetto2002 ---- %TOC% ---- ---+++ Esempio di domanda * Date un titolo alla domanda * firmate * separate le domande con una riga (----) -- Users.AndreaSterbini - 29 Mar 2002 ---- ---+++ Appunti Scusate l'utilizzo di questo spazio come Bacheca ma visto l'argomento credo si tratti dello spazio più adatto. Purtroppo non mi è stato possibile partecipare alla lezione del 10 maggio su interruzioni e trap.handler. e non trovo molta documentazione in proposito. Se qualcuno fosse possesso di buoni appunti sarebbe davvero gentile se volesse anche condividerli tramite twiki o per e-mail. Grazie. -- Users.LucaFoschini - 14 Apr 2002 <A href="http://twiki.dsi.uniroma1.it/pub/Users/AlbertoRocca/5.htm" target="_blank">Clicca qui</a> e scorri verso il basso la finestra che si apre fino ad arrivare al paragrafo Eccezioni ed Interruzioni nel MIPS. -- Users.AlbertoRocca - 20 May 2002 ---- ---+++ Chiarimenti Nella documentazione di SPIM leggo che le interruzioni sono ignorate mentre le eccezioni producono la stampa di un messaggio di warning. Analizzando il trap_handler sembra però che l'unico caso in cui l'eccezione è ignorata è il caso dell'eccezione 6; mi sbaglio? Inoltre vorrei sapere se il contenuto di EPC va incrementato di 4 solo nel caso delle eccezioni o anche nel caso delle interruzioni esterne come sembra dal trap_handler. -- Users.StefanoPalma - 15 May 2002 Le due istruzioni che seguono (prese dal trap.handler) saltano all'uscita *ret* se si tratta di una interruzione. <pre> sgt $v0 $k0 0x44 # ignore interrupt exceptions bgtz $v0 ret </pre> ... sembra quindi che anche le interruzioni vengano ignorate dal trap handler di default. Se si tratta di una interruzione *il valore preso da EPC non va incrementato di 4*. (ebbene sì, il trap.handler di default e' bacato :-) ) -- Users.AndreaSterbini - 16 May 200 --- ---+++ Status Register Ho fatto una piccola ricerca su internet e ho trovato che i bit della Interrupt Mask delllo Status Register vanno dal bit 8 al bit 15 ed in particolare i bit dall'8 al 12 sono quelli che si riferiscono alle interruzioni hardware, sulla documentazione che ci e' stata messa a disposizione, invece, ho trovato che questa l'Interrupt Mask comprende i bit dal 10 al 15. Quale delle due versioni e' corretta? Inoltre, sempre nell'ambito della ricerca che ho fatto, ho trovato che il bit che abilita le interruzioni del Transmitter e' il bit 9 ( che non rientra nell'intervallo 10-15), e' corretto? Se non e' corretto, qual'e' il bit giusto? Nella documentazione fornita sul sito non mi sembra che venga specificato. -- Users.SabrinaDellUomo - 18 May 2002 Credo che la versione che hai trovato tu sia quella corretta (bit 9), ora guardo il codice di spim. Immagino che ti riferisca alle pagine del corso di Architetture 1 http://www.disco.unimib.it/architettura1/arch01/arch01.html -- Users.AndreaSterbini - 18 May 2002 --- ---+++ Cause Register Se nello Status Register la Interrupt Mask comprende i bit dall'8 compreso al 15 compreso allora anche nel Cause Register i Pending Interrupt sono i bit dall'8 compreso al 15 compreso, con conseguente significato del bit 9? Non riesco a capire se c'e' un legame tra il bit 9 del Pending Interrupt e i bit 0-5 dello Status Register: dopo aver contollato se c'e' una interruzione da servire mi devo preoccupare di gestire anche la coda delle interruzioni attraverso i bit 0-5 dello Status Register? -- Users.SabrinaDellUomo - 20 May 2002 Dato che devi abilitare un solo interrupt sarà difficile che te ne possa capitare un'altro mentre gestisci il primo. Per questo esercizio non importa. -- Users.AndreaSterbini - 21 May 2002 --- ---+++ Forse un bug Durante la ricerca su internet di cui le ho detto, ho trovato il seguente appunto e vorrei sapere se e' corretto e va gestito oppure e' solo un falso allarme: ...A quanto pare lo SPIM ogni tanto spegne "per errore" il bit Interrupt Enable del Transmitter e il nostro output (gestito con le interruzioni) si ferma. Per forzare l'avanzamento occorre riabilitarlo a mano, in questo caso si provvedera' a farlo nel momento in cui una scrittura a video e' in attesa del completamento di una precedente visualizzazione... -- Users.SabrinaDellUomo - 20 May 2002 Non so se la versione corrente di Spim (6.4) ha corretto il bug riferito nella pagina a cui ti riferisci (pagina che risale ad una versione un poco precedente). Nel dubbio non fa male se gestisci il bug anche tu. -- Users.AndreaSterbini - 21 May 2002 --- ---+++ Formato stringa Se voglio mandare a video una stringa del tipo "progetto \n" la devo gestire come se fosse "progetto \n0" dove lo zero e' l'indicatore che mi permette di capire che la stringa e' finita? -- Users.SabrinaDellUomo - 20 May 2002 Nel buffer devi aggiungere lo zero di terminazione. Se le stringhe sono definite in *.asciiz* sono già terminate da zero ed hanno i caratteri di controllo già convertiti dal formato '\n' al codice ascii corrispondente. -- Users.AndreaSterbini - 21 May 2002 --- ---+++ Link utile Codice di esempio per la gestione di un I/O con SPIM http://www.disco.unimib.it/architettura1/arch01/esercitazioni/GestioneIngressoUscita2.html -- Users.SabrinaDellUomo - 22 May 2002 Grazie! -- Users.AndreaSterbini - 23 May 2002 ---- ---+++ Salvataggio e ripristino del contesto Il trap handler contiene le seguenti istruzioni: <pre> .set noat # Because we are running in the kernel, we can use $k0/$k1 without # saving their old values. move $k1, $at # Save $at .set at ... .set noat move $at, $k1 # Restore $at .set at </pre> il loro scopo e' quello di salvare il contesto, ossia i valori dei registri, prima di gestire l'interruzione e il ripristino dello stesso contesto quando l'interruzione e' stata gestita? Le faccio questa domanda perche' durante il codice Kernel salto ad una procedura sporcando il contenuto del registro $ra, la soluzione per evitare il problema che ne segue e' salvarlo insieme a tutti gli altri? -- Users.SabrinaDellUomo - 23 May 2002 Il registro $at viene usato come registro di appoggio dalle pseudoistruzioni che SPIM traduce in 2 o più istruzioni. Le istruzioni elencate servono a salvare e ripristinare il registro $at, dato che l'interruzione potrebbe capitare in mezzo e si vuol essere liberi di utilizzare pseudoistruzioni nel codice del trap.handler. -- Users.AndreaSterbini - 23 May 2002 ---- ---+++ EPC Ho notato che eseguire l'istruzione: <pre> sw $t3, 0xffff0008 </pre> per lo SPIM equivale ad eseguire due istruzioni, la seconda di indirizzo immediatamente successivo alla prima. Il segnale di interruzione viene inviato quando viene eseguita la seconda. Se gestisco l'interruzione in modo da non incremetare l'EPC di 4 il flusso del programma torna alla seconda istruzione di cui le ho detto prima e si genera un loop perche' viene generato un nuovo segnale di interruzione. Se incremento di 4 procede con l'esecuzione del successivo codice utente. -- Users.SabrinaDellUomo - 23 May 2002 Questo è un caso abbastanza particolare ... è chiaro che se le cose funzionano correttamente solo aggiungendo 4, allora aggiungete 4. Inserite un commento nel codice per evidenziare cio' che fate. -- Users.AndreaSterbini - 23 May 2002 ---- ---+++ ktext Il codice di abilitazione delle interruzioni va dichiarato ktext? se si come faccio ad evitare che mi venga generato l'errore di salto ad un indirizzo troppo lontano? -- Users.MassimilianoMiglio Puoi definirlo sia in .text che .ktext . Nel secondo caso non puoi usare direttamente le istruzioni *j* o *jal* perche' hanno indirizzamento di 24 bit (vedi il formato dell'istruzione). Puoi però usare *jr* se metti l'indirizzo di destinazione in un registro (32 bit). Ad esempio, puoi sostituire *j etichetta* con <pre> la $registro, etichetta jr $registro </pre> e *jal etichetta* con <pre> la $registro, etichetta jalr $ra, $registro (mi pare) </pre> -- Users.AndreaSterbini - 23 May 2002 ---- ---+++ Una cosa strana Come mai facendo girare i programma con il comando GO del menu simuletor il programma stama solo il prim carattere,mentre se lo eseguo passo passo stampa l'intera stringa? C'è una bella differenza tra le due cose ma non riesco a capire il motivo. -- Users.MassimilianoMiglio Non saprei ... vediamo in laboratorio mercoledì. -- Users.AndreaSterbini - 27 May 2002 Forse se per passo passo usi l'F10 potrebbe essere ché generi anche degli interrupt di tastiera... chissà. -- Users.LucaFoschini - 27 May 2002 Ho lo stesso problema: con F10 il programma gira correttamente mentre con F5 stampa solo qualche carattere della stringa. -- Users.SabrinaDellUomo - 27 May 2002 Massimiliano e' passato in ufficio, faceva l'errore di usare un loop in polling sul bit di ready del transmitter. * non vi e' stato chiesto di fare un polling sul bit ready (altrimenti che razza di esercizio sulle interruzioni sarebbe?) * il ciclo era nel bel mezzo del trap handler, e quindi tutte le interruzioni successive alla prima rimangono pending ... Insomma: * ricordatevi che il trap handler deve inserire nel transmitter data *un solo byte* e poi uscire! * il ciclo di polling va fatto nel programma principale * il polling dev'essere sul valore del primo carattere del buffer * quando diventa zero si esce dal ciclo e si continua l'esecuzione del programma principale -- Users.AndreaSterbini - 27 May 2002 ---- ---+++ Avviso Nella <a href="http://www.dsi.uniroma1.it/ita/avvisi.html" target="_blanck">pagina internet degli avvisi del DSI</A> ho notato il seguente comunicato: <blockquote> 27/5/2002. Architettura degli Elaboratori II <br> LA PROVA SCRITTA PER L'ESAME DI: ARCHITETTURA DEGLI ELABORATORI II E' NECESSARIA SOLO PER GLI ISCRITTI AI CORSI DI LAUREA TRIENNALI DI: INFORMATICA E TECNOLOGIE INFORMATICHE </blockquote> Cosa si intende? -- Users.AlbertoRocca - 04 Jun 2002 Si intende che: * chi fa Architettura 2 per la laurea breve deve fare lo scritto di assembler. * mentre chi e' iscritto al vecchio ordinamento e fa Laboratorio di Informatica: Architettura .... deve fare anche lui lo scritto di assembler :-) -- Users.AndreaSterbini - 04 Jun 2002
This topic: Architetture2/MZ
>
DomandeTerzoProgetto2002
Topic revision: r25 - 2002-06-04 - AndreaSterbini
Copyright © 2008-2025 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki?
Send feedback