La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

1 System Call ancora Vediamo passo passo come funziona una SC.

Presentazioni simili


Presentazione sul tema: "1 System Call ancora Vediamo passo passo come funziona una SC."— Transcript della presentazione:

1 1 System Call ancora Vediamo passo passo come funziona una SC

2 2 Text Data Stack Area vuota Traduzione in assembler delle funzioni che compongono il programma Variabili globali Pila di FRAME, uno per ogni chiamata di funzione da cui non abbiamo ancora fatto ritorno Spazio di indirizzamento Come è organizzata la memoria accessibile ad un programma in esecuzione ?

3 3 Come funziona lo stack

4 4 Possibile allocazione del codice (parte testo) in RAM RAM CALL Fun1 main program Fun1 … CALL Fun2 … Fun2 RETURN

5 5 Possibile allocazione dello stack RAM CALL Fun1 main Fun1 … CALL Fun2 … Fun2 RETURN indirizzi Contenuto iniziale SP

6 6 Situazione iniziale processore RAM CALL Fun1 main F1 … CALL Fun2 … F2 RETURN indirizzi Contenuto iniziale SP 4000 PC SP RAM indirizzi Proc

7 7 Sto per eseguire: CALL RAM CALL Fun1 … CALL Fun2 … RETURN indirizzi Contenuto iniziale SP 4101 PC SP RAM indirizzi Proc

8 8 Ho eseguito: CALL RAM CALL Fun1 … CALL Fun2 … RETURN indirizzi Contenuto iniziale SP 4500 PC SP RAM indirizzi Proc 4101

9 9 Sto per eseguire:CALL RAM CALL Fun1 Fun1 … CALL Fun2 … Fun2 RETURN indirizzi Contenuto iniziale SP 4601 PC SP RAM indirizzi Proc 4101

10 10 RAM CALL Fun1 Fun1 … CALL Fun2 … Fun2 RETURN indirizzi Contenuto iniziale SP PC SP RAM indirizzi Proc Ho eseguito:

11 11 Fun2 termina: sto per eseguire RAM CALL Fun1 Fun1 … CALL Fun2 … Fun2 RETURN indirizzi Contenuto iniziale SP PC SP RAM indirizzi Proc

12 12 Ho eseguito: RAM CALL Fun1 Fun1 … CALL Fun2 … Fun2 RETURN indirizzi Contenuto iniziale SP 4601 PC SP RAM indirizzi Proc 4101

13 13 Sto per eseguire: CALL RAM CALL Fun1 Fun1 … CALL Fun2 … Fun2 RETURN indirizzi Contenuto iniziale SP 4651 PC SP RAM indirizzi Proc 4101

14 14 RAM CALL Fun1 Fun1 … CALL Fun2 … Fun2 RETURN indirizzi Contenuto iniziale SP PC SP RAM indirizzi Proc Ho eseguito: CALL

15 15 Fun2 termina: sto per eseguire RAM CALL Fun1 Fun1 … CALL Fun2 … Fun2 RETURN indirizzi Contenuto iniziale SP PC SP RAM indirizzi Proc

16 16 Ho RAM CALL Fun1 Fun1 … CALL Fun2 … Fun2 RETURN indirizzi Contenuto iniziale SP 4651 PC SP RAM indirizzi Proc 4101

17 17 Fun1 termina: sto per eseguire RAM CALL Fun1 Fun1 … CALL Fun2 … Fun2 RETURN indirizzi Contenuto iniziale SP 4701 PC SP RAM indirizzi Proc 4101

18 18 Ho eseguito: RAM CALL Fun1 Fun1 … CALL Fun2 … Fun2 RETURN indirizzi Contenuto iniziale SP 4101 PC SP RAM indirizzi Proc

19 19 …e i parametri? I parametri possono essere passati in vario modo –registri generali (convenzione fra chiamante e chiamato) –memoria centrale –stack (più comune)

20 20 Chiamata sto per eseguire RAM Fun1 Fun2 RETURN … PUSH par1 PUSH par2 PUSH par3 CALL Fun2 indirizzi Contenuto iniziale SP 4598 PC SP RAM indirizzi Proc

21 21 Chiamata sto per eseguire RAM Fun1 Fun2 RETURN … PUSH par1 PUSH par2 PUSH par3 CALL Fun2 indirizzi Contenuto iniziale SP 4599 PC SP RAM indirizzi Proc par1

22 22 Chiamata sto per eseguire RAM Fun1 Fun2 RETURN … PUSH par1 PUSH par2 PUSH par3 CALL Fun2 indirizzi Contenuto iniziale SP 4600 PC SP RAM indirizzi Proc par1 par2

23 23 Chiamata sto per eseguire RAM Fun1 Fun2 RETURN … PUSH par1 PUSH par2 PUSH par3 CALL Fun2 indirizzi Contenuto iniziale SP 4601 PC SP RAM indirizzi Proc par1 par2 par3

24 24 Chiamata ho eseguito RAM Fun1 Fun2 RETURN … PUSH par1 PUSH par2 PUSH par3 CALL Fun2 indirizzi Contenuto iniziale SP PC SP RAM indirizzi Proc par1 par2 par3 4601

25 25 Chiamata sto per eseguire RAM … Fun1 Fun2 RETURN … PUSH par1 PUSH par2 PUSH par3 CALL Fun2 indirizzi Contenuto iniziale SP PC SP RAM indirizzi Proc par1 par2 par3 4601

26 26 Chiamata ho eseguito RAM … Fun1 Fun2 RETURN … PUSH par1 PUSH par2 PUSH par3 CALL Fun2 indirizzi Contenuto iniziale SP 4601 PC SP RAM indirizzi Proc par1 par2 par3

27 27 Chiamata elimino il RAM … Fun1 Fun2 RETURN … PUSH par1 PUSH par2 PUSH par3 CALL Fun2 ADD #3 SP indirizzi Contenuto iniziale SP 4602 PC SP RAM indirizzi Proc

28 28 …e le variabili locali ? I compilatori di molti linguaggi (es C) allocano le variabili locali (cioè quelle "definite ed usabili solo dentro” la funzione) sulla pila –vengono allocate con delle PUSH all’inizio –vengono rimosse prima di uscire vediamo un semplice esempio...

29 29 Chiamata sto per eseguire RAM … Fun1 Fun2 … PUSH par1 PUSH par2 PUSH par3 CALL Fun2 indirizzi Contenuto iniziale SP 4598 PC SP RAM indirizzi Proc PUSH i PUSH j ADD #2 SP RETURN

30 30 Chiamata ho eseguito RAM Fun1 Fun2 … PUSH par1 PUSH par2 PUSH par3 CALL Fun2 indirizzi Contenuto iniziale SP PC SP RAM indirizzi Proc par1 par2 par PUSH i PUSH j ADD #2 SP RETURN

31 31 Esecuzione ho eseguito RAM Fun1 Fun2 … PUSH par1 PUSH par2 PUSH par3 CALL Fun2 indirizzi Contenuto iniziale SP PC SP RAM indirizzi Proc par1 par2 par PUSH i PUSH j ADD #2 SP RETURN i

32 32 Esecuzione ho eseguito RAM Fun1 Fun2 … PUSH par1 PUSH par2 PUSH par3 CALL Fun2 indirizzi Contenuto iniziale SP PC SP RAM indirizzi Proc par1 par2 par PUSH i PUSH j ADD #2 SP RETURN i j

33 33 Esecuzione sto per eseguire RAM Fun1 Fun2 … PUSH par1 PUSH par2 PUSH par3 CALL Fun2 indirizzi Contenuto iniziale SP PC SP RAM indirizzi Proc par1 par2 par PUSH i PUSH j ADD #2 SP RETURN i j

34 34 Esecuzione ho eseguito RAM Fun1 Fun2 … PUSH par1 PUSH par2 PUSH par3 CALL Fun2 indirizzi Contenuto iniziale SP PC SP RAM indirizzi Proc par1 par2 par PUSH i PUSH j ADD #2 SP RETURN

35 35 Esecuzione ho eseguito RAM Fun1 Fun2 … PUSH par1 PUSH par2 PUSH par3 CALL Fun2 ADD #3 SP indirizzi Contenuto iniziale SP 4601 PC SP RAM indirizzi Proc par1 par2 par3 PUSH i PUSH j ADD #2 SP RETURN

36 36 Chiamata elimino il RAM … Fun1 Fun2 RETURN … PUSH par1 PUSH par2 PUSH par3 CALL Fun2 ADD #3 SP indirizzi Contenuto iniziale SP 4602 PC SP RAM indirizzi Proc

37 37 Come avviene una system call

38 PC SP RGen PSW DisabIntKernel-User Mode RAM Dispatcher Processo A Processo B Processo C Base Limite 100 SOentry Tabella dei processi

39 PC SP RGen PSW DisabIntKernel-User Mode RAM Dispatcher Processo A Processo B Processo C Base Limite 100 SOentry Tabella dei processi Spazio indirizzamento di B testo dati stack

40 PC SP RGen PSW DisabIntKernel-User Mode ProcessControlBlock di B ProcessIdentifier (pid) Stato Priorita Program Counter Registri Generali SP PSW Informazioni memoria (es. Base, Limite) Kernel stack Informazioni sui file in uso Stato system call in esecuzione RAM Dispatcher Processo A Processo B Processo C Base Limite 100 SOentry Tabella dei processi

41 PC SP RGen PSW DisabIntKernel-User Mode ProcessControlBlock di B Stato = RUNNING Program Counter = ?? Registri Generali = ?? SP = ?? PSW = ?? Informazioni memoria (Base, Limite) = 8000,4000 Kernel stack = 15000,1000 Stato SC = ?? RAM Dispatcher Processo A Processo B Processo C Base Limite 100 SOentry Tabella dei processi Kernel Stack ProcB

42 42 Chiamata a read(fd, buffer, nbytes) Spazio kernel (sistema op.) Spazio utente DISPATCH System Call Handler Smistatore (dispatch) Gestore della chiamata di sistema Tabella di corrispondenza Codice della funzione di libreria read() Codice della chiamata a read() da parte del programma utente Incrementa SP (Stack Pointer) CALL read Push di fd Push di &buffer Push di nbyte RETURN (ritorno al programma chiamante) TRAP al kernel Metti il codice della read() nel registro 0 AddrMax

43 43 Spazio kernel (sistema op.) Spazio utente DISPATCH System Call Handler Codice della funzione di libreria read() Codice della chiamata a read() da parte del programma utente Incrementa SP (Stack Pointer) CALL read Push di fd Push di &buffer Push di nbyte RETURN (ritorno al programma chiamante) TRAP al kernel Metti il codice della read() nel registro 1,2,3 read(fd, buffer, nbytes) (2) Passi 1,2,3 : si ricopia il valore dei parametri sullo stack 0 AddrMax

44 PC SP RGen PSW DisabIntKernel-User Mode ProcessControlBlock di B Stato = RUNNING Program Counter = ?? Registri Generali = ?? SP = ?? PSW = ?? Informazioni memoria (Base, Limite) = 8000,4000 Kernel stack = 15000,1000 Stato SC = ?? RAM Dispatcher Processo A Processo B Processo C Base Limite 100 SOentry Tabella dei processi Kernel Stack ProcB

45 PC SP RGen PSW DisabIntKernel-User Mode RAM Dispatcher Processo A Processo B Processo C Base Limite 100 SOentry Tabella dei processi Stack Utente di B stack nbytes &buffer fd Kernel Stack ProcB

46 46 Spazio kernel (sistema op.) Spazio utente DISPATCH System Call Handler Codice della funzione di libreria read() Codice della chiamata a read() da parte del programma utente Incrementa SP (Stack Pointer) CALL read Push di fd Push di &buffer Push di nbyte RETURN (ritorno al programma chiamante) TRAP al kernel Metti il codice della read() nel registro 4 read(fd, buffer, nbytes) (3) Passo 4 : chiamata di read() –salto alla prima istruzione di read() + push indirizzo di ritorno (X) sullo stack 0 AddrMax X

47 PC SP RGen PSW DisabIntKernel-User Mode Dopo esecuzione Stato = RUNNING Program Counter = ?? Registri Generali = ?? SP = ?? PSW = ?? Informazioni memoria (Base, Limite) = 8000,4000 Kernel stack = 15000,1000 Stato SC = ?? RAM Dispatcher Processo A Processo B Processo C Base Limite 100 SOentry Tabella dei processi Kernel Stack ProcB

48 PC SP RGen PSW DisabIntKernel-User Mode RAM Dispatcher Processo A Processo B Processo C Base Limite 100 SOentry Tabella dei processi Stack Utente di B stack nbytes &buffer fd Kernel Stack ProcB 8404

49 49 Spazio kernel (sistema op.) Spazio utente DISPATCH System Call Handler Codice della funzione di libreria read() Codice della chiamata a read() da parte del programma utente Incrementa SP (Stack Pointer) CALL read Push di fd Push di &buffer Push di nbyte RETURN (ritorno al programma chiamante) TRAP al kernel Metti il codice della read() nel registro Rx 5 read(fd, buffer, nbytes) (4) Passo 5 : Inizia l’esecuzione della read() : –caricamento del codice della system call in un registro fissato Rx 0 AddrMax X

50 PC SP RGen PSW DisabIntKernel-User Mode Inserisco il codice della read (25) in un registro generale fissato Stato = RUNNING Program Counter = ?? Registri Generali = ?? SP = ?? PSW = ?? Informazioni memoria (Base, Limite) = 8000,4000 Kernel stack = 15000,1000 Stato SC = ?? RAM Dispatcher Processo A Processo B Processo C Base Limite 100 SOentry Tabella dei processi Kernel Stack ProcB 25 Rx

51 51 Spazio kernel (sistema op.) Spazio utente DISPATCH System Call Handler Codice della funzione di libreria read() Codice della chiamata a read() da parte del programma utente Incrementa SP (Stack Pointer) CALL read Push di fd Push di &buffer Push di nbyte RETURN (ritorno al programma chiamante) TRAP al kernel Metti il codice della read() nel registro 6 read(fd, buffer, nbytes) (5) Passo 6 : Esecuzione TRAP –passaggio in kernel mode, disabilita le interruzioni, salva PC sullostack, salto al codice dello smistatore 0 AddrMax X Y

52 PC SP RGen PSW DisabIntKernel-User Mode TRAP: (hw) Disabilita le interruzioni Stato = RUNNING Program Counter = ?? Registri Generali = ?? SP = ?? PSW = ?? Informazioni memoria (Base, Limite) = 8000,4000 Kernel stack = 15000,1000 Stato SC = ?? RAM Dispatcher Processo A Processo B Processo C Base Limite 100 SOentry Tabella dei processi Kernel Stack ProcB 25 Rx

53 PC SP RGen PSW DisabIntKernel-User Mode TRAP: (hw) Salva PC / PSW sullo stack Stato = RUNNING Program Counter = ?? Registri Generali = ?? SP = ?? PSW = ?? Informazioni memoria (Base, Limite) = 8000,4000 Kernel stack = 15000,1000 Stato SC = ?? RAM Dispatcher Processo A Processo B Processo C Base Limite 100 SOentry Tabella dei processi Kernel Stack ProcB 25 Rx

54 PC SP RGen PSW DisabIntKernel-User Mode RAM Dispatcher Processo A Processo B Processo C Base Limite 100 SOentry Tabella dei processi Stack Utente di B stack nbytes &buffer fd Kernel Stack ProcB 8404 UsrPSW 9002

55 PC SP RGen PSW DisabIntKernel-User Mode TRAP: (hw) Salta al dispatcher in kernel mode Stato = RUNNING Program Counter = ?? Registri Generali = ?? SP = ?? PSW = ?? Informazioni memoria (Base, Limite) = 8000,4000 Kernel stack = 15000,1000 Stato SC = ?? RAM Dispatcher Processo A Processo B Processo C Base Limite 100 SOentry Tabella dei processi Kernel Stack ProcB 25 Rx

56 56 Spazio kernel (sistema op.) Spazio utente DISPATCH System Call Handler Codice della funzione di libreria read() Codice della chiamata a read() da parte del programma utente Incrementa SP (Stack Pointer) CALL read Push di fd Push di &buffer Push di nbyte RETURN (ritorno al programma chiamante) TRAP al kernel Metti il codice della read() nel registro 7-8 read(fd, buffer, nbytes) (6) Passo7-8: Seleziona la SC secondo il codice in Rx, salva stato processore nella tabella dei processi, assegna a SP indirizzo della kernel stack, riabilita interruzioni, esegui codice handler 0 AddrMax X Y

57 PC SP RGen PSW DisabIntKernel-User Mode Dispatcher: (ASS) Salva PC/PSW nel PCB, POP sulla pila utente (incrementa SP) Stato = RUNNING Program Counter = 9002 Registri Generali = ?? SP = ?? PSW = userPSW Informazioni memoria (Base, Limite) = 8000,4000 Kernel stack = 15000,1000 Stato SC = ?? RAM Dispatcher Processo A Processo B Processo C Base Limite 100 SOentry Tabella dei processi Kernel Stack ProcB 25 Rx

58 PC SP RGen PSW DisabIntKernel-User Mode RAM Dispatcher Processo A Processo B Processo C Base Limite 100 SOentry Tabella dei processi Stack Utente di B stack nbytes &buffer fd Kernel Stack ProcB 8404

59 PC SP RGen PSW DisabIntKernel-User Mode Dispatcher: (ASS) Salva SP e Registri Gen nel PCB Stato = RUNNING Program Counter = 9002 Registri Generali = 25,RGen SP = PSW = userPSW Informazioni memoria (Base, Limite) = 8000,4000 Kernel stack = 15000,1000 Stato SC = ?? RAM Dispatcher Processo A Processo B Processo C Base Limite 100 SOentry Tabella dei processi Kernel Stack ProcB 25 Rx

60 PC SP RGen PSW DisabIntKernel-User Mode Dispatcher: (ASS) Prepara kernel stack e riabilita interruzioni Stato = RUNNING Program Counter = 9002 Registri Generali = 25,RGen SP = PSW = userPSW Informazioni memoria (Base, Limite) = 8000,4000 Kernel stack = 15000,1000 Stato SC = ?? RAM Dispatcher Processo A Processo B Processo C Base Limite 100 SOentry Tabella dei processi Kernel Stack ProcB 25 Rx

61 PC SP RGen PSW DisabIntKernel-User Mode Dispatcher: (ASS) Seleziona la SC (25) e salta al codice del gestore (indirizzo TabSC[25]=2100) Stato = RUNNING Program Counter = 9002 Registri Generali = 25,RGen SP = PSW = userPSW Informazioni memoria (Base, Limite) = 8000,4000 Kernel stack = 15000,1000 Stato SC = ?? RAM Dispatcher Processo A Processo B Processo C Base Limite 100 SOentry Tabella dei processi Kernel Stack ProcB 25 Rx TabellaSC Codice gestore

62 PC SP RGen PSW DisabIntKernel-User Mode Gestore: esegue azioni richieste dalla SC Stato = RUNNING Program Counter = 9002 Registri Generali = 25,RGen SP = PSW = userPSW Informazioni memoria (Base, Limite) = 8000,4000 Kernel stack = 15000,1000 Stato SC = ?? RAM Dispatcher Processo A Processo B Processo C Base Limite 100 SOentry Tabella dei processi Kernel Stack ProcB XX Rx TabellaSC Codice gestore

63 63 Spazio kernel (sistema op.) Spazio utente DISPATCH System Call Handler Codice della funzione di libreria read() Codice della chiamata a read() da parte del programma utente Incrementa SP (Stack Pointer) CALL read Push di fd Push di &buffer Push di nbyte RETURN (ritorno al programma chiamante) TRAP al kernel Metti il codice della read() nel registro 9 read(fd, buffer, nbytes) (7) Passo 9 : Ritorno alla funzione di libreria –disabilita interruzioni, ripristina user mode, ripristina stato processore, carica PC con l’indirizzo dell’istruzione successiva alla TRAP (Y), riabilita interruzioni 0 AddrMax X Y

64 PC SP RGen PSW DisabIntKernel-User Mode Gestore: (ASS) Disabilita interruzioni, Ripristina stack utente, Stato = RUNNING Program Counter = 9002 Registri Generali = 25,RGen SP = PSW = userPSW Informazioni memoria (Base, Limite) = 8000,4000 Kernel stack = 15000,1000 Stato SC = ?? RAM Dispatcher Processo A Processo B Processo C Base Limite 100 SOentry Tabella dei processi Kernel Stack ProcB XX Rx TabellaSC Codice gestore

65 PC SP RGen PSW DisabIntKernel-User Mode Gestore: (ASS) Ricarica registri processore Stato = RUNNING Program Counter = 9002 Registri Generali = 25,RGen SP = PSW = userPSW Informazioni memoria (Base, Limite) = 8000,4000 Kernel stack = 15000,1000 Stato SC = ?? RAM Dispatcher Processo A Processo B Processo C Base Limite 100 SOentry Tabella dei processi Kernel Stack ProcB 25 Rx TabellaSC Codice gestore

66 PC SP RGen PSW DisabIntKernel-User Mode Gestore: (hw) Ricarica PC-PSW, modalità utente riabilita interruzioni Stato = RUNNING Program Counter = 9002 Registri Generali = 25,RGen SP = PSW = userPSW Informazioni memoria (Base, Limite) = 8000,4000 Kernel stack = 15000,1000 Stato SC = ?? RAM Dispatcher Processo A Processo B Processo C Base Limite 100 SOentry Tabella dei processi Kernel Stack ProcB 25 Rx TabellaSC Codice gestore

67 67 Spazio kernel (sistema op.) Spazio utente DISPATCH System Call Handler Codice della funzione di libreria read() Codice della chiamata a read() da parte del programma utente Incrementa SP (Stack Pointer) CALL read Push di fd Push di &buffer Push di nbyte RETURN (ritorno al programma chiamante) TRAP al kernel Metti il codice della read() nel registro 10 read(fd, buffer, nbytes) (8) Passi : Ritorno al codice utente (nel modo usuale) –PC = X, SP viene incrementato per eliminare il frame della read() 0 AddrMax 11 X

68 PC SP RGen PSW DisabIntKernel-User Mode ProcessoB: esegue Stato = RUNNING Program Counter = 9002 Registri Generali = 25,RGen SP = PSW = userPSW Informazioni memoria (Base, Limite) = 8000,4000 Kernel stack = 15000,1000 Stato SC = ?? RAM Dispatcher Processo A Processo B Processo C Base Limite 100 SOentry Tabella dei processi Kernel Stack ProcB 25 Rx TabellaSC Codice gestore

69 PC SP RGen PSW DisabIntKernel-User Mode RAM Dispatcher Processo A Processo B Processo C Base Limite 100 SOentry Tabella dei processi Stack Utente di B stack nbytes &buffer fd Kernel Stack ProcB

70 PC SP RGen PSW DisabIntKernel-User Mode ProcessoB: libera la pila Stato = RUNNING Program Counter = 9002 Registri Generali = 25,RGen SP = PSW = userPSW Informazioni memoria (Base, Limite) = 8000,4000 Kernel stack = 15000,1000 Stato SC = ?? RAM Dispatcher Processo A Processo B Processo C Base Limite 100 SOentry Tabella dei processi Kernel Stack ProcB 25 Rx TabellaSC Codice gestore

71 PC SP RGen PSW DisabIntKernel-User Mode RAM Dispatcher Processo A Processo B Processo C Base Limite 100 SOentry Tabella dei processi Stack Utente di B stack Kernel Stack ProcB

72 72 Fine!


Scaricare ppt "1 System Call ancora Vediamo passo passo come funziona una SC."

Presentazioni simili


Annunci Google