Prima un po 'di conoscenze di base, questo è dal libro: Linux System Programming: Talking Directly to the Kernel and C LibraryInt 80h interrompe un processo del kernel?
segnali sono un meccanismo per senso unico notifiche asincrone. Un segnale può essere inviato dal kernel a un processo, da un processo a un altro processo o da un processo a se stesso.
Il kernel di Linux implementa circa 30 segnali.
I segnali interrompono un processo in esecuzione, causando l'arresto di qualsiasi cosa sia e sta eseguendo immediatamente un'azione predefinita.
Ok avvicinarsi sempre più, da here citerò questa parte:
Sulla famiglia di microprocessori Intel, come il Pentium, int 80h è la lingua di codice op assembly per 80h di interrupt. Questo è l'interrupt di syscall su un tipico sistema Unix basato su Intel, come ad esempio FreeBSD. Consente ai programmatori di applicazioni di ottenere i servizi di sistema dal kernel Unix.
Non riesco proprio a realizzare la connessione nella mia testa. Così quando per esempio uso il metodo
write
definito Posix, e quando viene compilato in assemblaggio, e poi ulteriormente assemblato in un codice oggetto e collegato a un eseguibile in una certa architettura che esegue Linux ... . a la chiamata di sistema è stata effettuata correttamente?
Io parto dal presupposto il codice compilato sarebbe simile a questa:
mov eax,4 ;code for system_write
mov ebx,1 ;standard output
mov ecx, memlocation; memlocation is just some location where a number of ascii is present
mov edx, 20; 20 bytes will be written
int 80h;
Ok la mia domanda è esattamente a questo punto. Int 80h invierà un segnale al kernel/interromperà il kernel? Il kernel è solo un processo? (È il processo di inizializzazione?) Quando la cpu esegue int 80h, cosa succede esattamente? I registri sono già pieni di informazioni, (eax, ebx, ecx ed edx nel mio esempio ..), ma come vengono utilizzate queste informazioni?
Non riesco a stabilire la connessione tra la CPU, il kernel e cosa fa esattamente la CPU mentre esegue l'int 80h.
Posso immaginare che un codice risieda da qualche parte nella memoria che in realtà invia le informazioni richieste al driver di dispositivo ma a quale processo appartiene questo codice? (Sto assumendo il kernel ma il kernel è solo un processo?) E come fa l'istruzione int 80h a saltare a quel codice? È qualcosa che Linux deve implementare in qualche modo?
Si consiglia di riprendere Bovet and Cesati "Capire il Kernel Linux, 3 ° Ed", pubblicato da O'Reilly. Ha un capitolo dedicato alle chiamate di sistema e al loro funzionamento. In base al tuo post, il resto del libro sarà probabilmente di tuo interesse. –
In realtà non interrompe il kernel ... interrompe il * processore * dall'esecuzione del codice e dice al processore di passare al kernel. – immibis