Difference between revisions of "Specifiche phase 2 2016/17"
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 | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | {| class="wikitable" | |
− | * GET_PROCESSID 11 struct tcb_t * | + | ! 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* || | ||
+ | | 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). | |
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 |
|
GET_PROCESSID | 11 | struct tcb_t* | struct pcb_t * | |
GET_MYTHREADID | 12 | struct tcb_t * | ||
GET_PARENTPROCID | 13 | pcb_t* | pcb_t* |