Newsgroup: it.comp.lang.c
Titolo: Quale System Call?

Secondo voi,qual e' la System Call(Unix o Windows non fa differenza) che mi
permette di cambiare il contesto del processo in
esecuzione(stack,registri,dati ecc...) e allo stesso tempo il modo di
esecuzione(modalita' utente-->modalita' kernel o viceversa).
A me viene da pensare alla chiamata d'esecuzione di un modulo di sistema
tramite la famiglia degli exec*() per Unix e CreateProcess() per Windows,ma
non ne sono sicuro : voi che mi dite?

 ha scritto nel messaggio
news:7YiEa.54572$pR3.1...@news1.tin.it...


 Ciao
Ah quindi basta la chiamata di system call per passare al kernel mode?
Di conseguenza basta chiamare un qualsiasi programma,non c'e' bisogno che
sia un modulo di sistema?
Grazie mille per la risposta cmq :)


No! Ci mancherebbe...
Per esempio, sotto Win2k non puoi usare le funzioni _inp() e _outp() in
anello 3 (utente); non hai limitazioni perň se sei in anello 0, magari
all'interno di un driver .sys
E chiaramente non basta una CreateProcess().
Ciao,
Paolo
P.S. E' un esempio che si adatta a Win, invece per usare i/o su Linux basta
permetterne l'accesso con ioperm(). Vedi su questo ng qualche post piů
indietro.

 esecuzione(modalita' utente-->modalita' kernel o viceversa).
Incredibile ma vero Sleep(0) (sotto Windows e penso sleep(0) sotto
Unix). Ovviamente e' il S.O. a decidere chi andra' in esecuzione.
C:\>iao Angelo
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 wrote in message
news:7YiEa.54572$pR3.1...@news1.tin.it...


 cosa, dal punto di vista della sicurezza, non credi?
E' possibilissimo,altrimenti si avrebbero tutti i processi che girano o in
modo utente o modo kernel...
Non e' poi una domanda che mi sono posto io,ma e' dell'esame di Sistemi
Operativi dell'anno scorso,quindi sono piu' che certo della possibilita' del
cambio di modo.

 cosa, dal punto di vista della sicurezza, non credi?
Ti riporto la domanda dell'esame,magari si capisce meglio cosa intendevo col
primo post :
"Indicare almeno una SystemCall Unix/Windows che,qualora invocata puo'
provocare come effetto finale sia un cambio di modo che un cambio di
contesto."
Il fatto che ci sia scritto ALMENO,mi fa supporre che ce ne siano diverse
che rientrino nella domanda.
Io quello che mi chiedevo,era se era possibile effettuare,tramite la
chiamata di un modulo kernel dal livello utente,il cambio sia del modo di
esecuzione(utente-->kernel o livello 3-->livello 0)sia del contesto del
processo con sostituzione del codice(per l'appunto exec*() e
CreateProcess()).
In pratica non voglio cambiare il modo del processo in esecuzione,ma crearne
un nuovo con CreateProcess() o sostuirgli il codice con exec*().

Penso che "dark archon" volesse dire che non e' possibile passare
arbitrariamente in kernel mode, ma solo richiamare una syscall che:
1- passi in kernel mode
2- svolga il compito x cui e' stata chiamata
3- ritorni in user mode
4- ti faccia "perdere" il tempo che hai guadagnato dal passaggio in
modalita' kernel
In linea di massima sotto Windows non esiste una corrispondenza 1:1 fra API
e syscall... Puo' darsi che una API chiami piu' system calls o puo' anche
darsi che non ne chiami nessuna...
Ciao

 modalita' kernel
Ah allora non avevo capito io.
Certo che non voglio passare da un modo all'altro senza SystemCall.
Il mio problema e' quello di trovarne una che mi faccia sia cambio di
modo,sia di contesto,il resto per il momento non m interessa(vedi tempo
perso ecc...).