Domande sul TerzoProgetto2002



Esempio di domanda

  • Date un titolo alla domanda
  • firmate
  • separate le domande con una riga (----)

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

-- LucaFoschini - 14 Apr 2002

Clicca qui e scorri verso il basso la finestra che si apre fino ad arrivare al paragrafo Eccezioni ed Interruzioni nel MIPS.

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

-- StefanoPalma - 15 May 2002

Le due istruzioni che seguono (prese dal trap.handler) saltano all'uscita ret se si tratta di una interruzione.

        sgt $v0 $k0 0x44 # ignore interrupt exceptions
        bgtz $v0 ret
... 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 smile )

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

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

-- 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?

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

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

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

-- 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?

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

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

-- SabrinaDellUomo - 22 May 2002

Grazie!

-- AndreaSterbini - 23 May 2002


Salvataggio e ripristino del contesto

Il trap handler contiene le seguenti istruzioni:


   .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

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?

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

-- AndreaSterbini - 23 May 2002


EPC

Ho notato che eseguire l'istruzione:

    sw $t3, 0xffff0008   
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.

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

-- 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?

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

la $registro, etichetta
jr $registro
e jal etichetta con
la $registro, etichetta
jalr $ra, $registro (mi pare)

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

-- MassimilianoMiglio

Non saprei ... vediamo in laboratorio mercoledì.

-- AndreaSterbini - 27 May 2002

Forse se per passo passo usi l'F10 potrebbe essere ché generi anche degli interrupt di tastiera... chissà.

-- LucaFoschini - 27 May 2002

Ho lo stesso problema: con F10 il programma gira correttamente mentre con F5 stampa solo qualche carattere della stringa.

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

-- AndreaSterbini - 27 May 2002


Avviso

Nella pagina internet degli avvisi del DSI ho notato il seguente comunicato:
27/5/2002. Architettura degli Elaboratori II
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
Cosa si intende?

-- 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 smile

-- AndreaSterbini - 04 Jun 2002

Edit | Attach | Watch | Print version | History: r25 < r24 < r23 < r22 < r21 | Backlinks | Raw View | Raw edit | More topic actions
Topic revision: r25 - 2002-06-04 - AndreaSterbini






 
Questo sito usa cookies, usandolo ne accettate la presenza. (CookiePolicy)
Torna al Dipartimento di Informatica
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2024 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback