Difference between revisions of "Specifiche phase 2 2016/17"

From Sistemi Operativi
Jump to navigation Jump to search
(→‎servizi della SSI: Modificata specifica sulla comunicazione con i manager, come discussione in aula del 3/05. Aggiunti dettagli e spostate specifiche in una tabella.)
Line 15: Line 15:
  
 
solo da kernel mode
 
solo da kernel mode
*  GET_ERRNO 0, int
 
0 okay
 
*  CREATE_PROCESS  1, state_t * -> struct tcb_t *
 
NULL per errore
 
*  CREATE_THREAD 2,  state_t * -> struct tcb_*
 
NULL per errore
 
*  TERMINATE_PROCESS 3
 
*  TERMINATE_THREAD 4
 
(se e' l'ultimo thread diventa come TERMINATE_PROCESS)
 
*  SETPGMMGR 5, struct tcb_t *
 
*  SETTLBMGR 6, struct tcb_t *
 
*  SETSYSMGR 7, struct tcb_t *
 
SET*MSG restituiscono lo stesso tcb_t, NULL per errore.
 
(una volta sola per processo, TERMINATE_PROCESS alla seconda chiamata).
 
sender tcb_t che ha causato la trap, msg codifica della trap.
 
*  GETCPUTIME 8 -> time
 
(tempo relativo al proc)
 
*  WAIT_FOR_CLOCK 9
 
restituisce il numero di tick dall'accensione del sistema.
 
*  DO_IO 10 DEVICE_REG_ADDR, COMMAND, ... -> status
 
  Per Dischi: DEVICE_REG_ADDR, COMMAND, DATA1 (DATA1 e' l'indirizzo per il DMA, settore/testina e cyl, sono in COMMAND)
 
  Per Nastri: DEVICE_REG_ADDR, COMMAND, DATA1 (DATA1 e' l'indirizzo per il DMA)
 
  Per Rete: DEVICE_REG_ADDR, COMMAND, DATA1, DATA2 (DATA1 e' l'indirizzo del pacchetto, DATA2 la lunghezza)
 
  Per Stampante:  DEVICE_REG_ADDR, COMMAND, DATA1 (DATA1 contiene il carattere da stampare)
 
  Per Terminale IN: DEVICE_REG_ADDR, COMMAND
 
  Per Terminale OUT: DEVICE_REG_ADDR, COMMAND
 
  
 
+
{| class="wikitable"
* GET_PROCESSID 11 struct tcb_t * -> struct pcb_t *
+
! Nome servizio !! Codice servizio !! Parametri !! Tipo di ritorno !! Note
* GET_THREAD 12 -> struct tcb_t *
+
|-
 +
| GET_ERRNO || 0 || || int || 0 okay
 +
|-
 +
| CREATE_PROCESS || 1 || state_t* || strcut tcb_t* || NULL per errore
 +
|-
 +
| CREATE_THREAD || 2 || state_t* || strcut tcb_t* || NULL per errore
 +
|-
 +
| TERMINATE_PROCESS || 3 || state_t* ||  ||
 +
|-
 +
| TERMINATE_THREAD || 4 || state_t* ||  || (se e' l'ultimo thread diventa come TERMINATE_PROCESS)
 +
|-
 +
| SETPGMMGR || 5 || struct tcb_t* ||
 +
| rowspan="3" |  SET*MGR restituiscono lo stesso tcb_t, NULL per errore. <br>
 +
(puà essere chiamato una volta sola per processo, TERMINATE_PROCESS alla seconda chiamata). <br>
 +
I manager ricevono messaggi che hanno come sender il tcb_t del thread che ha causato la trap, <br>
 +
un puntatore al suo state_t come payload.
 +
|-
 +
| SETTLBMGR || 6 || struct tcb_t* ||  ||
 +
|-
 +
| SETSYSMGR || 7 || struct tcb_t* ||  ||
 +
|-
 +
| GETCPUTIME || 8 || || unsigned int || in microsecondi, relativo al processo
 +
|-
 +
| WAIT_FOR_CLOCK || 9 || || Sospende il thread fino al prossimo tick di pseudo-clock ||
 +
|-
 +
| DO_IO || 10 || DEVICE_REG_ADDR, COMMAND, ...  || status
 +
|
 +
*Per Dischi: DEVICE_REG_ADDR, COMMAND, DATA1 (DATA1 e' l'indirizzo per il DMA, settore/testina e cyl, sono in COMMAND)
 +
*Per Nastri: DEVICE_REG_ADDR, COMMAND, DATA1 (DATA1 e' l'indirizzo per il DMA)
 +
*Per Rete: DEVICE_REG_ADDR, COMMAND, DATA1, DATA2 (DATA1 e' l'indirizzo del pacchetto, DATA2 la lunghezza)
 +
*Per Stampante:  DEVICE_REG_ADDR, COMMAND, DATA1 (DATA1 contiene il carattere da stampare)
 +
*Per Terminale IN: DEVICE_REG_ADDR, COMMAND
 +
*Per Terminale OUT: DEVICE_REG_ADDR, COMMAND
 +
|-
 +
| GET_PROCESSID || 11 || struct tcb_t* || struct pcb_t * ||
 +
|-
 +
| GET_MYTHREADID || 12 || || struct tcb_t * ||
 +
|-
 +
| GET_PARENTPROCID || 13 || pcb_t* || pcb_t* ||
 +
|}

Revision as of 11:07, 3 May 2017

System call

send

 int send(struct tcb_t *dest, uintptr_t msg)
 a0 = 1, a1 = dest. a2 = msg 

recv

 struct tcb_t *recv(struct tcb_t *src, uintptr_t *pmsg)
 a0 = 2, a1 = src, a2 = *pmsg

NB: system call 1 e 2 possono essere chiamate solo in kernel mode system call 0 e' errore system call non 1 o 2 vengono trasformate in messaggi al thread definito tramite SETSYSMGR se esiste altrimenti msg SETPGMMGR se esiste altrimenti TERMINATE_THREAD

servizi della SSI

solo da kernel mode

Nome servizio Codice servizio Parametri Tipo di ritorno Note
GET_ERRNO 0 int 0 okay
CREATE_PROCESS 1 state_t* strcut tcb_t* NULL per errore
CREATE_THREAD 2 state_t* strcut tcb_t* NULL per errore
TERMINATE_PROCESS 3 state_t*
TERMINATE_THREAD 4 state_t* (se e' l'ultimo thread diventa come TERMINATE_PROCESS)
SETPGMMGR 5 struct tcb_t* SET*MGR restituiscono lo stesso tcb_t, NULL per errore.

(puà essere chiamato una volta sola per processo, TERMINATE_PROCESS alla seconda chiamata).
I manager ricevono messaggi che hanno come sender il tcb_t del thread che ha causato la trap,
un puntatore al suo state_t come payload.

SETTLBMGR 6 struct tcb_t*
SETSYSMGR 7 struct tcb_t*
GETCPUTIME 8 unsigned int in microsecondi, relativo al processo
WAIT_FOR_CLOCK 9 Sospende il thread fino al prossimo tick di pseudo-clock
DO_IO 10 DEVICE_REG_ADDR, COMMAND, ... status
  • Per Dischi: DEVICE_REG_ADDR, COMMAND, DATA1 (DATA1 e' l'indirizzo per il DMA, settore/testina e cyl, sono in COMMAND)
  • Per Nastri: DEVICE_REG_ADDR, COMMAND, DATA1 (DATA1 e' l'indirizzo per il DMA)
  • Per Rete: DEVICE_REG_ADDR, COMMAND, DATA1, DATA2 (DATA1 e' l'indirizzo del pacchetto, DATA2 la lunghezza)
  • Per Stampante: DEVICE_REG_ADDR, COMMAND, DATA1 (DATA1 contiene il carattere da stampare)
  • Per Terminale IN: DEVICE_REG_ADDR, COMMAND
  • Per Terminale OUT: DEVICE_REG_ADDR, COMMAND
GET_PROCESSID 11 struct tcb_t* struct pcb_t *
GET_MYTHREADID 12 struct tcb_t *
GET_PARENTPROCID 13 pcb_t* pcb_t*