• Non ci sono risultati.

Sistemi Operativi 1. Mattia Monga. 22 aprile Dip. di Informatica e Comunicazione Università degli Studi di Milano, Italia

N/A
N/A
Protected

Academic year: 2022

Condividi "Sistemi Operativi 1. Mattia Monga. 22 aprile Dip. di Informatica e Comunicazione Università degli Studi di Milano, Italia"

Copied!
10
0
0

Testo completo

(1)

Sistemi Operativi

Danilo Bruschi Mattia Monga

System call in MINIX

1

Sistemi Operativi 1

Mattia Monga

Dip. di Informatica e Comunicazione Universit` a degli Studi di Milano, Italia

mattia.monga@unimi.it

22 aprile 2008

1 2008 M. Monga. Creative Commons Attribuzione-Condividi allo stesso modo 2.5 Italia License.c http://creativecommons.org/licenses/by- sa/2.5/it/. Immagini tratte da [?] e da Wikipedia.

(2)

Sistemi Operativi

Danilo Bruschi Mattia Monga

System call in MINIX

Lezione XIX: System call in MINIX

(3)

Sistemi Operativi

Danilo Bruschi Mattia Monga

System call in MINIX

343

Servizi di sistema

I servizi di sistema sono l’interfaccia tra le applicazioni ed il sistema operativo. Permettono lo svolgimento di operazioni che coinvolgono dispositivi o strutture di memoria gestite dal sistema operativo in maniera controllata. In MINIX:

API POSIX (Portable Operating System Interface), tramite librerie C

messaggi di processi User ai Server Kernel call

messaggi di processi Server o Driver al System Task

(4)

Sistemi Operativi

Danilo Bruschi Mattia Monga

System call in MINIX

Kernel call

(5)

Sistemi Operativi

Danilo Bruschi Mattia Monga

System call in MINIX

345

Il flusso di una system call POSIX (user)

1

u.c:user if (fork() == 0) /∗... ∗/

2

lib/syscall/fork.s:user fork: jmp fork

3

lib/posix/ fork.c:user syscall(PM PROC NR, FORK, &m)

4

lib/other/syscall.c:user

msgptr−>m type = syscallnr; status = sendrec(who, msgptr);

5

lib/lib/i386/rts/ ipc.s:user

1

mov eax, SRC DST(ebp)

2

mov ebx, MESSAGE(ebp)

3

mov ecx, SENDREC

4

int 33

(6)

Sistemi Operativi

Danilo Bruschi Mattia Monga

System call in MINIX

Il flusso di una system call POSIX (kernel)

1

kernel/protect.c:kernel

{s call, SYS386 VECTOR, USER PRIVILEGE }, /∗33: 386 system call ∗/

2

kernel/mpx386.s:kernel

1 s call:

2 ; ...

3 push edx ; event set or flags bit map 4 push ebx ; pointer to user message 5 push eax ; PM PROC NR 6 push ecx ; SENDREC

7 call sys call ; sys call(call nr, src dst, m ptr, bit map)

3

kernel/proc.c:kernel

1 switch(function) { 2 case SENDREC:

3 /∗ fall through ∗/

4 case SEND:

5 /∗ caller USER, src dst PM PROC NR ∗/

6 result = mini send(caller ptr, src dst e, m ptr, flags);

(7)

Sistemi Operativi

Danilo Bruschi Mattia Monga

System call in MINIX

347

Il flusso di una system call POSIX (PM)

1

server/pm/main.c:PM server result = (∗call vec[call nr])();

2

server/pm/table.c:PM server

1

int (∗call vec[NCALLS]), (void) ) = {

2

/∗ ... ∗/

3

do fork /∗ 2 = fork ∗/

4

/∗ ... ∗/

5

}

3

server/pm/forkexit.c:PM server sys fork(who, child nr);

4

lib/syslib/sys fork.c:PM server

r = taskcall(SYSTASK, SYS FORK, &m);

5

lib/sysutil/taskcall.c:PM server

msgptr−>m type = syscallnr; status = sendrec(who, msgptr);

(8)

Sistemi Operativi

Danilo Bruschi Mattia Monga

System call in MINIX

Il flusso di una system call POSIX (kernel)

1

kernel/mpx386.s:kernel

1 s call:

2 ; ...

3 push edx ; event set or flags bit map 4 push ebx ; pointer to user message 5 push eax ; PM PROC NR 6 push ecx ; SENDREC

7 call sys call ; sys call(call nr, src dst, m ptr, bit map)

2

kernel/proc.c:kernel

1 switch(function) { 2 case SENDREC:

3 /∗ fall through ∗/

4 case SEND:

5 /∗ caller PM PROC NR, src dst SYSTASK ∗/

6 result = mini send(caller ptr, src dst e, m ptr, flags);

7 case RECEIVE:

8 /∗ caller PM PROC NR, src dst SYSTASK ∗/

(9)

Sistemi Operativi

Danilo Bruschi Mattia Monga

System call in MINIX

349

Il flusso di una system call POSIX (System)

1

kernel/system.c:System Task result = (∗call vec[call nr])();

2

server/system.c:System Task map(SYS FORK, do fork);

3

server/system/do fork.c:System Task

DO (the kernel part of) FORK!

4

Completa i con i reply

(10)

Sistemi Operativi

Danilo Bruschi Mattia Monga

System call in MINIX

do fork (in PM)

Verifica se esiste spazio nella tabella dei processi mproc che contiene la mappa di memoria per ogni processo Verifica la quantit` a di memoria necessaria per allocare il nuovo processo (` e uguale a quella del padre) e la sua disponibilit` a

Crea una copia delle porzioni di memoria occupate dal processo padre

Individua uno slot libero in mproc e copia il contenuto dello slot del processo padre

Assegna un PID all’interno di mproc ,che sar` a poi lo stesso

usato per la tabella dei processi

Riferimenti

Documenti correlati

La soddisfazione generale dell’utente è la risultante delle tre La soddisfazione generale dell’utente è la risultante delle tre soddisfazioni relative alle tre dimensioni

 poiché ogni lettura coinvolge tutti i dischi, RAID 2-3 non sono adatti per sistemi con un grande numero di richieste di I/O indipendenti..

❖ La transizione dallo stato ready a running avviene − ad opera del dispatcher − quando, in seguito al blocco del processo in esecuzione, il processo viene scelto, fra tutti i

all’esclusione di ricostruzioni alternative nel rispetto della regola dell’al di là di ogni ragionevole dubbio; alla visione sostanzialistica delle previsioni nor- mative rispetto

Con PAE è stata inoltre aumentata la dimensione degli elementi della directory delle pagine e della tabella delle pagine, che passa da 32 a 64 bit, permettendo di estendere

| Un algoritmo viene valutato facendolo operare su una particolare stringa di riferimenti alla memoria e calcolando il numero di page fault.. | In tutti i nostri esempi la stringa

Questa via è più flessibile, (rispetto all'ereditare dalla classe Thread) in quanto consente di definire classi di thread che non siano per forza sottoclassi di Thread ma che

1) il descrittore della pagina 5 è caricato nella memoria associativa, quindi si traduce l’indirizzo. Siccome l’accesso è in scrittura ma l’accesso alla pagina è consentito