Difference between revisions of "Specifiche phase 2 2016/17"
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 *