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

From Sistemi Operativi
Jump to navigation Jump to search
m
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 *
 
*  CREATE_PROCESS  1, state_t -> struct tcb_t *
 +
NULL per errore
 
*  CREATE_THREAD 2,  state_t -> struct tcb_*
 
*  CREATE_THREAD 2,  state_t -> struct tcb_*
 +
NULL per errore
 
*  TERMINATE_PROCESS 3
 
*  TERMINATE_PROCESS 3
 
*  TERMINATE_THREAD 4
 
*  TERMINATE_THREAD 4
Line 23: Line 27:
 
*  SETTLBMGR 6, struct tcb_t *
 
*  SETTLBMGR 6, struct tcb_t *
 
*  SETSYSMGR 7, 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).
 
(una volta sola per processo, TERMINATE_PROCESS alla seconda chiamata).
 
sender tcb_t che ha causato la trap, msg codifica della trap.
 
sender tcb_t che ha causato la trap, msg codifica della trap.
Line 28: Line 33:
 
(tempo relativo al proc)
 
(tempo relativo al proc)
 
*  WAIT_FOR_CLOCK 9
 
*  WAIT_FOR_CLOCK 9
*  WAIT_FOR_IO 10 DEVICE_REG_ADDR, COMMAND -> status
+
restituisce 3 di tick dall'accensione del sistema.
 +
*  WAIT_FOR_IO 10 Struttura: {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, struct tcb_t * -> struct pcb_t *
 
* GET_PROCESSID, struct tcb_t * -> struct pcb_t *
 
* GET_THREAD 12 -> struct tcb_t *
 
* GET_THREAD 12 -> struct tcb_t *

Revision as of 10:00, 4 April 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

  • 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 3 di tick dall'accensione del sistema.

  • WAIT_FOR_IO 10 Struttura: {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, struct tcb_t * -> struct pcb_t *
  • GET_THREAD 12 -> struct tcb_t *