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 0 2 32 - 1 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 4000 4100 4101 4500 4600 4601 4650 4651 15000 CALL Fun1 main program Fun1 … CALL Fun2 … Fun2 RETURN

5 5 Possibile allocazione dello stack RAM 4000 4100 4101 4500 4600 4601 4650 4651 15000 CALL Fun1 main Fun1 … CALL Fun2 … Fun2 RETURN indirizzi 24980 25000 Contenuto iniziale SP

6 6 Situazione iniziale processore RAM 4000 4100 4101 4500 4600 4601 4650 4651 15000 CALL Fun1 main F1 … CALL Fun2 … F2 RETURN indirizzi 24980 25000 Contenuto iniziale SP 4000 PC SP 24980 RAM indirizzi Proc

7 7 Sto per eseguire: CALL Fun1@4100 RAM 4000 4100 4101 4500 4600 4601 4650 4651 15000 CALL Fun1 … CALL Fun2 … RETURN indirizzi 24980 25000 Contenuto iniziale SP 4101 PC SP 24980 RAM indirizzi Proc

8 8 Ho eseguito: CALL Fun1@4100 RAM 4000 4100 4101 4500 4600 4601 4650 4651 15000 CALL Fun1 … CALL Fun2 … RETURN indirizzi 24979 25000 Contenuto iniziale SP 4500 PC SP 24979 RAM indirizzi Proc 4101

9 9 Sto per eseguire:CALL Fun2@4600 RAM 4000 4100 4101 4500 4600 4601 4650 4651 15000 CALL Fun1 Fun1 … CALL Fun2 … Fun2 RETURN indirizzi 24979 25000 Contenuto iniziale SP 4601 PC SP 24979 RAM indirizzi Proc 4101

10 10 RAM 4000 4100 4101 4500 4600 4601 4650 4651 15000 15034 CALL Fun1 Fun1 … CALL Fun2 … Fun2 RETURN indirizzi 24978 25000 Contenuto iniziale SP 15000 PC SP 24978 RAM indirizzi Proc 4101 4601 Ho eseguito: Fun2@4600

11 11 Fun2 termina: sto per eseguire (RETURN) @15034 RAM 4000 4100 4101 4500 4600 4601 4650 4651 15000 15034 CALL Fun1 Fun1 … CALL Fun2 … Fun2 RETURN indirizzi 24978 25000 Contenuto iniziale SP 15035 PC SP 24978 RAM indirizzi Proc 4101 4601

12 12 Ho eseguito: (RETURN) @15034 RAM 4000 4100 4101 4500 4600 4601 4650 4651 15000 15034 CALL Fun1 Fun1 … CALL Fun2 … Fun2 RETURN indirizzi 24979 25000 Contenuto iniziale SP 4601 PC SP 24979 RAM indirizzi Proc 4101

13 13 Sto per eseguire: CALL Fun2@4650 RAM 4000 4100 4101 4500 4600 4601 4650 4651 15000 CALL Fun1 Fun1 … CALL Fun2 … Fun2 RETURN indirizzi 24979 25000 Contenuto iniziale SP 4651 PC SP 24979 RAM indirizzi Proc 4101

14 14 RAM 4000 4100 4101 4500 4600 4601 4650 4651 15000 15034 CALL Fun1 Fun1 … CALL Fun2 … Fun2 RETURN indirizzi 24978 25000 Contenuto iniziale SP 15000 PC SP 24978 RAM indirizzi Proc 4101 4651 Ho eseguito: CALL Fun2@4650

15 15 Fun2 termina: sto per eseguire (RETURN) @15034 RAM 4000 4100 4101 4500 4600 4601 4650 4651 15000 15034 CALL Fun1 Fun1 … CALL Fun2 … Fun2 RETURN indirizzi 24978 25000 Contenuto iniziale SP 15035 PC SP 24978 RAM indirizzi Proc 4101 4651

16 16 Ho eseguito:(RETURN) @15034 RAM 4000 4100 4101 4500 4600 4601 4650 4651 15000 15034 CALL Fun1 Fun1 … CALL Fun2 … Fun2 RETURN indirizzi 24979 25000 Contenuto iniziale SP 4651 PC SP 24979 RAM indirizzi Proc 4101

17 17 Fun1 termina: sto per eseguire (RETURN) @4700 RAM 4000 4100 4101 4500 4600 4601 4650 4651 4700 15000 15034 CALL Fun1 Fun1 … CALL Fun2 … Fun2 RETURN indirizzi 24979 25000 Contenuto iniziale SP 4701 PC SP 24979 RAM indirizzi Proc 4101

18 18 Ho eseguito: (RETURN) @4700 RAM 4000 4100 4101 4500 4600 4601 4650 4651 4700 15000 15034 CALL Fun1 Fun1 … CALL Fun2 … Fun2 RETURN indirizzi 24980 25000 Contenuto iniziale SP 4101 PC SP 24980 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 Fun2@4600: sto per eseguire PUSH @4597 RAM 4597 4598 4599 4600 4601 15000 15001 15002... Fun1 Fun2 RETURN … PUSH par1 PUSH par2 PUSH par3 CALL Fun2 indirizzi 24980 25000 Contenuto iniziale SP 4598 PC SP 24980 RAM indirizzi Proc

21 21 Chiamata Fun2@4600: sto per eseguire PUSH @4598 RAM 4597 4598 4599 4600 4601 15000 15001 15002... Fun1 Fun2 RETURN … PUSH par1 PUSH par2 PUSH par3 CALL Fun2 indirizzi 24979 25000 Contenuto iniziale SP 4599 PC SP 24979 RAM indirizzi Proc par1

22 22 Chiamata Fun2@4600: sto per eseguire PUSH @4599 RAM 4597 4598 4599 4600 4601 15000 15001 15002... Fun1 Fun2 RETURN … PUSH par1 PUSH par2 PUSH par3 CALL Fun2 indirizzi 24978 25000 Contenuto iniziale SP 4600 PC SP 24978 RAM indirizzi Proc par1 par2

23 23 Chiamata Fun2@4600: sto per eseguire CALL @4600 RAM 4597 4598 4599 4600 4601 15000 15001 15002... Fun1 Fun2 RETURN … PUSH par1 PUSH par2 PUSH par3 CALL Fun2 indirizzi 24977 25000 Contenuto iniziale SP 4601 PC SP 24977 RAM indirizzi Proc par1 par2 par3

24 24 Chiamata Fun2@4600: ho eseguito CALL @4600 RAM 4597 4598 4599 4600 4601 15000 15001 15002... Fun1 Fun2 RETURN … PUSH par1 PUSH par2 PUSH par3 CALL Fun2 indirizzi 24976 25000 Contenuto iniziale SP 15000 PC SP 24976 RAM indirizzi Proc par1 par2 par3 4601

25 25 Chiamata Fun2@4600: sto per eseguire RETURN @15034 RAM 4597 4598 4599 4600 4601 15000 15001 15002 … 15034 Fun1 Fun2 RETURN … PUSH par1 PUSH par2 PUSH par3 CALL Fun2 indirizzi 24976 25000 Contenuto iniziale SP 15035 PC SP 24976 RAM indirizzi Proc par1 par2 par3 4601

26 26 Chiamata Fun2@4600: ho eseguito RETURN @15034 RAM 4597 4598 4599 4600 4601 15000 15001 15002 … 15034 Fun1 Fun2 RETURN … PUSH par1 PUSH par2 PUSH par3 CALL Fun2 indirizzi 24977 25000 Contenuto iniziale SP 4601 PC SP 24977 RAM indirizzi Proc par1 par2 par3

27 27 Chiamata Fun2@4600: elimino il frame @4601 RAM 4597 4598 4599 4600 4601 15000 15001 15002 … 15034 Fun1 Fun2 RETURN … PUSH par1 PUSH par2 PUSH par3 CALL Fun2 ADD #3 SP indirizzi 24980 25000 Contenuto iniziale SP 4602 PC SP 24980 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 Fun2@4600: sto per eseguire PUSH @4597 RAM 4597 4598 4599 4600 4601 15000 15001 15002 … 15033 15034 Fun1 Fun2 … PUSH par1 PUSH par2 PUSH par3 CALL Fun2 indirizzi 24980 25000 Contenuto iniziale SP 4598 PC SP 24980 RAM indirizzi Proc PUSH i PUSH j ADD #2 SP RETURN

30 30 Chiamata Fun2@4600: ho eseguito CALL @4600 RAM 4597 4598 4599 4600 4601 15000 15001 15002... Fun1 Fun2 … PUSH par1 PUSH par2 PUSH par3 CALL Fun2 indirizzi 24976 25000 Contenuto iniziale SP 15000 PC SP 24976 RAM indirizzi Proc par1 par2 par3 4601 PUSH i PUSH j ADD #2 SP RETURN

31 31 Esecuzione Fun2@4600: ho eseguito PUSH@15000 RAM 4597 4598 4599 4600 4601 15000 15001 15002... Fun1 Fun2 … PUSH par1 PUSH par2 PUSH par3 CALL Fun2 indirizzi 24975 25000 Contenuto iniziale SP 15001 PC SP 24975 RAM indirizzi Proc par1 par2 par3 4601 PUSH i PUSH j ADD #2 SP RETURN i

32 32 Esecuzione Fun2@4600: ho eseguito PUSH@15001 RAM 4597 4598 4599 4600 4601 15000 15001 15002... 15033 15034 Fun1 Fun2 … PUSH par1 PUSH par2 PUSH par3 CALL Fun2 indirizzi 24974 25000 Contenuto iniziale SP 15002 PC SP 24974 RAM indirizzi Proc par1 par2 par3 4601 PUSH i PUSH j ADD #2 SP RETURN i j

33 33 Esecuzione Fun2@4600: sto per eseguire ADD@15033 RAM 4597 4598 4599 4600 4601 15000 15001 15002... 15033 15034 Fun1 Fun2 … PUSH par1 PUSH par2 PUSH par3 CALL Fun2 indirizzi 24974 25000 Contenuto iniziale SP 15033 PC SP 24974 RAM indirizzi Proc par1 par2 par3 4601 PUSH i PUSH j ADD #2 SP RETURN i j

34 34 Esecuzione Fun2@4600: ho eseguito ADD@15033 RAM 4597 4598 4599 4600 4601 15000 15001 15002... 15033 15034 Fun1 Fun2 … PUSH par1 PUSH par2 PUSH par3 CALL Fun2 indirizzi 24976 25000 Contenuto iniziale SP 15034 PC SP 24976 RAM indirizzi Proc par1 par2 par3 4601 PUSH i PUSH j ADD #2 SP RETURN

35 35 Esecuzione Fun2@4600: ho eseguito RETURN@15034 RAM 4597 4598 4599 4600 4601 15000 15001 15002... 15033 15034 Fun1 Fun2 … PUSH par1 PUSH par2 PUSH par3 CALL Fun2 ADD #3 SP indirizzi 24977 25000 Contenuto iniziale SP 4601 PC SP 24977 RAM indirizzi Proc par1 par2 par3 PUSH i PUSH j ADD #2 SP RETURN

36 36 Chiamata Fun2@4600: elimino il frame @4601 RAM 4597 4598 4599 4600 4601 15000 15001 15002 … 15034 Fun1 Fun2 RETURN … PUSH par1 PUSH par2 PUSH par3 CALL Fun2 ADD #3 SP indirizzi 24980 25000 Contenuto iniziale SP 4602 PC SP 24980 RAM indirizzi Proc

37 37 Come avviene una system call

38 38 8400 PC SP RGen PSW DisabIntKernel-User Mode RAM 0 100 5000 7000 8000 12000 15000 Dispatcher Processo A Processo B Processo C 8000 4000 11800 Base Limite 100 SOentry Tabella dei processi

39 39 8400 PC SP RGen PSW DisabIntKernel-User Mode RAM 0 100 5000 7000 8000 12000 15000 Dispatcher Processo A Processo B Processo C 8000 4000 11800 Base Limite 100 SOentry Tabella dei processi Spazio indirizzamento di B testo dati stack 8000 8400 11800 12000

40 40 8400 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 0 100 5000 7000 8000 12000 15000 Dispatcher Processo A Processo B Processo C 8000 4000 11800 Base Limite 100 SOentry Tabella dei processi

41 41 8400 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 0 100 5000 7000 8000 12000 15000 Dispatcher Processo A Processo B Processo C 8000 4000 11800 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 8400 8401 8402 8403 8404 9000 9001 9002 100 200

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 8400 8401 8402 8403 8404 9000 9001 9002 100 200

44 44 8403 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 0 100 5000 7000 8000 12000 15000 Dispatcher Processo A Processo B Processo C 8000 4000 11797 Base Limite 100 SOentry Tabella dei processi Kernel Stack ProcB

45 45 8403 PC SP RGen PSW DisabIntKernel-User Mode RAM 0 100 5000 7000 8000 12000 15000 Dispatcher Processo A Processo B Processo C 8000 4000 11797 Base Limite 100 SOentry Tabella dei processi Stack Utente di B stack 11797 12000 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 8400 8401 8402 8403 8404 9000 9001 9002 100 200

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

48 48 9000 PC SP RGen PSW DisabIntKernel-User Mode RAM 0 100 5000 7000 8000 12000 15000 Dispatcher Processo A Processo B Processo C 8000 4000 11796 Base Limite 100 SOentry Tabella dei processi Stack Utente di B stack 11796 12000 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 8400 8401 8402 8403 8404 9000 9001 9002 100 200

50 50 9001 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 0 100 5000 7000 8000 12000 15000 Dispatcher Processo A Processo B Processo C 8000 4000 11796 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 8400 8401 8402 8403 8404 9000 9001 9002 100 200

52 52 9002 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 0 100 5000 7000 8000 12000 15000 Dispatcher Processo A Processo B Processo C 8000 4000 11796 Base Limite 100 SOentry Tabella dei processi Kernel Stack ProcB 25 Rx

53 53 9002 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 0 100 5000 7000 8000 12000 15000 Dispatcher Processo A Processo B Processo C 8000 4000 11794 Base Limite 100 SOentry Tabella dei processi Kernel Stack ProcB 25 Rx

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

55 55 100 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 0 100 5000 7000 8000 12000 15000 Dispatcher Processo A Processo B Processo C 8000 4000 11794 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 8400 8401 8402 8403 8404 9000 9001 9002 100 200

57 57 101 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 0 100 5000 7000 8000 12000 15000 Dispatcher Processo A Processo B Processo C 8000 4000 11796 Base Limite 100 SOentry Tabella dei processi Kernel Stack ProcB 25 Rx

58 58 101 PC SP RGen PSW DisabIntKernel-User Mode RAM 0 100 5000 7000 8000 12000 15000 Dispatcher Processo A Processo B Processo C 8000 4000 11796 Base Limite 100 SOentry Tabella dei processi Stack Utente di B stack 11796 12000 nbytes &buffer fd Kernel Stack ProcB 8404

59 59 102 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 = 11796 PSW = userPSW Informazioni memoria (Base, Limite) = 8000,4000 Kernel stack = 15000,1000 Stato SC = ?? RAM 0 100 5000 7000 8000 12000 15000 Dispatcher Processo A Processo B Processo C 8000 4000 11796 Base Limite 100 SOentry Tabella dei processi Kernel Stack ProcB 25 Rx

60 60 104 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 = 11796 PSW = userPSW Informazioni memoria (Base, Limite) = 8000,4000 Kernel stack = 15000,1000 Stato SC = ?? RAM 0 100 5000 7000 8000 12000 15000 Dispatcher Processo A Processo B Processo C 8000 4000 15000 Base Limite 100 SOentry Tabella dei processi Kernel Stack ProcB 25 Rx

61 61 2100 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 = 11796 PSW = userPSW Informazioni memoria (Base, Limite) = 8000,4000 Kernel stack = 15000,1000 Stato SC = ?? RAM 0 100 2100 5000 7000 8000 12000 15000 Dispatcher Processo A Processo B Processo C 8000 4000 15000 Base Limite 100 SOentry Tabella dei processi Kernel Stack ProcB 25 Rx TabellaSC Codice gestore

62 62 2100 PC SP RGen PSW DisabIntKernel-User Mode Gestore: esegue azioni richieste dalla SC Stato = RUNNING Program Counter = 9002 Registri Generali = 25,RGen SP = 11796 PSW = userPSW Informazioni memoria (Base, Limite) = 8000,4000 Kernel stack = 15000,1000 Stato SC = ?? RAM 0 100 2100 5000 7000 8000 12000 15000 Dispatcher Processo A Processo B Processo C 8000 4000 15000 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 8400 8401 8402 8403 8404 9000 9001 9002 100 200

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

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

66 66 9002 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 = 11796 PSW = userPSW Informazioni memoria (Base, Limite) = 8000,4000 Kernel stack = 15000,1000 Stato SC = ?? RAM 0 100 2100 5000 7000 8000 12000 15000 Dispatcher Processo A Processo B Processo C 8000 4000 11796 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 10-11 : Ritorno al codice utente (nel modo usuale) –PC = X, SP viene incrementato per eliminare il frame della read() 0 AddrMax 11 X 8400 8401 8402 8403 8404 9000 9001 9002 100 200

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

69 69 8404 PC SP RGen PSW DisabIntKernel-User Mode RAM 0 100 5000 7000 8000 12000 15000 Dispatcher Processo A Processo B Processo C 8000 4000 11797 Base Limite 100 SOentry Tabella dei processi Stack Utente di B stack 11797 12000 nbytes &buffer fd Kernel Stack ProcB

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

71 71 8405 PC SP RGen PSW DisabIntKernel-User Mode RAM 0 100 5000 7000 8000 12000 15000 Dispatcher Processo A Processo B Processo C 8000 4000 11800 Base Limite 100 SOentry Tabella dei processi Stack Utente di B stack 11800 12000 Kernel Stack ProcB

72 72 Fine!


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

Presentazioni simili


Annunci Google