Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoEvelina Grande Modificato 9 anni fa
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!
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.