Programmazione di un dispositivo 1to4INTGEN Realizzazione di un sistema timesharing Materiale didattico a cura di: Prof. A. Mazzeo Ing. L. Romano Ing. L. Coppolino Ing. A. Cilardo Dipartimento di Informatica e Sistemistica Università Degli Studi di Napoli Federico II Name» 1to4INTGEN Type» Identificativo assoluto nella configurazione Address1» Valore iniziale dello spazio indirizzi gestito dall'oggetto Address2» Valore finale dello spazio indirizzi gestito Indirizzo 1 + 13 BUS» Identificatore del BUS esterno a cui è collegato il dispositivo 1
TIMER 1 COM1» Identificatore dei dispositivi in grado di gestire le interruzioni, se 0 la linea è n.c. COM2» Identificatore dei dispositivi in grado di gestire le interruzioni, se 0 la linea è n.c. COM3» Identificatore dei dispositivi in grado di gestire le interruzioni, se 0 la linea è n.c. COM4» Identificatore dei dispositivi in grado di gestire le interruzioni, se 0 la linea è n.c. Il dispositivo mette a disposizione dell'utente un generatore di interruzioni programmabile e quattro timer Ha dieci registri a sedici bit» Due sono dedicati al generatore di interruzioni» Otto, a due a due, ai 4 timer I C 2
1to4INTGEN può essere connesso fino a 4 dispositivi in grado di gestire interruzioni (processori o PIC) Inviare un'interruzione (da un processore ad un altro o ad esso stesso):» Tipo di interruzione nel registro I (indirizzo relativo 00): XXYZ (XX=#vettore, Y=livello priorità, Z=linea di interruzione)» Nel registro C (indirizzo relativo 02) sono utilizzati solo i quattro bit meno significativi. Per inviare un'interruzione allo n-esimo dispositivo (n da 0 a 3) il bit n-esimo di C deve essere 1 4 timer con la stessa funzione ma su linee differenti:» TR1 è connesso alla linea 1, TR2 alla linea 2 e così via Per ogni timer due word:» La meno significativa codifica l'interruzione (come nel registro I)» La più significativa inizializzata col valore iniziale del contatore Il contatore è decrementato ad ogni unità di tempo (default 1clock) Quando si azzera il contatore l'interruzione specificata viene inviata al gestore di interruzioni connesso ed il contatore cessa di decrementarsi 3
L esempio proposto simula un semplice meccanismo di multitasking in timesharing Il dispositivo 1to4INTGEN è utilizzato come contatore Allo scadere della slice di tempo associata ad una routine il contatore attiva (mediante interruzione) la routine di scheduling che procederà al cambio di contesto attivando il processo inattivo 01 01 -- Motorola 68000 02 02 -- MEM/BUS ROM: ROM: 8k 8k da da $0 $0 RAM: RAM: 10k 10k da da $8000 $8000 03 03-1to4INTGEN Canale Canale 1 collegato a 01 01 4
!" CHIP Name: M68000 Type: CPU. Identif: 01. BUS: 0002. Addres 1: 00009000. Address 2: 00009100. Com1: 0000. Com2: 0000. Com3: 0000. Com4: 0000. CHIP Name: MEMORY Type: MMU/BUS. Identif: 02. BUS: 0000. Addres 1: 00008000. Address 2: 00000000. Com1: 0000. Com2: 0010. Com3: 0008. Com4: 0000. CHIP Name: 1TO4INTGEN Type: Device. Identif: 03. BUS: 0002. Addres 1: 00002100. Address 2: 00002113. Com1: 0001. Com2: 0000. Com3: 0000. Com4: 0000.!" La memoria» Al contatore 1 è associata una interruzione di livello 1 inviata sul canale 1 (al processore): livello 1, autovettore 25, mappata a $64 della ROM, ISR a $8300 5
!" 1to4INTGEN» Il contatore del timer 1 è inizializzato col valore associato a SLICE» L interruzione generata è di livello 1 MOVE.W #$0100,COUNT1INT ; al termine del ; conteggio sarà ; generata un ; interruzione di ; livello 1 MOVE.W #SLICE,COUNT1N ; inizializzazione della ; slice # 2 Processi da eseguire» Il primo incrementa il valore in D0» Il secondo decrementa il valore in D0 *****************ROUTINE 1****************** ORG $8100 ROUT1 ADDQ #1,D0 BRA ROUT1 *****************ROUTINE 2****************** ORG $8200 ROUT2 SUBQ #1,D0 BRA ROUT2 6
# Lo scheduler:» È una ISR che scambia i contesti dei processi e ripristina il valore della slice di tempo * Scambio dei contesti MOVE.L D0,SYSD ; valore attuale del registro D0 MOVE.W (A7)+,SYSS ; status register MOVE.L (A7)+,SYSP ; program counter MOVE.L NEXTP,-(A7) MOVE.W NEXTS,-(A7) MOVE.L NEXTD,D0 MOVE.L SYSD,NEXTD MOVE.L SYSP,NEXTP MOVE.W SYSS,NEXTS * Reinizializzazione del timer al valore della slice MOVE.W #SLICE,COUNT1N Caricare il file di configurazione» scheduler.cfg Caricare l immagine di memoria» scheduler.mem Caricare il codice» scheduler.lis 7
8