Voglio solo chiedere, so che le chiamate di sistema standard in Linux vengono eseguite da istruzioni int che puntano nella tabella vettoriale di interrupt. Presumo che questo è simile su Windows. Ma come chiamate alcune routine di sistema specifiche di livello superiore? Ad esempio, come si dice a Windows di creare una finestra? So che questo è gestito dal codice della DLL, ma cosa è realmente accaduto a livello di assemblatore? La routine in dll chiama il software interrotto dall'istruzione int, oppure esiste un approccio diverso per gestirlo? Grazie.Chiamate di sistema su Windows
risposta
Effettuare una chiamata Win32 per creare una finestra non è realmente correlata a un interrupt. L'applicazione client è già collegata al file .dll che fornisce la chiamata che espone l'indirizzo per il linker da utilizzare. Poiché stai chiedendo la differenza nel meccanismo di chiamata, sto limitando la discussione qui a quelle chiamate Win32 che sono disponibili per qualsiasi applicazione al contrario delle chiamate a livello di kernel o dei driver di dispositivo. A livello di linguaggio assembly, sarebbe uguale a qualsiasi altra chiamata di funzione poiché la maggior parte delle chiamate Win32 sono chiamate a livello utente che effettuano internamente le chiamate necessarie al kernel. Il linker fornisce l'indirizzo della funzione Win32 come destinazione per una sorta di istruzione di ramificazione, le specifiche dipendono dal compilatore.
[Modifica] Sembra che tu abbia ragione sugli interrupt e sull'int. tabella vettoriale. CodeGuru ha un buon articolo con i dettagli del sistema operativo su come funzionano le chiamate del kernel NT. Collegamento:
http://www.codeguru.com/cpp/w-p/system/devicedriverdevelopment/article.php/c8035
L'API Win32 è un livello che viene eseguito in modalità utente (squillo 3). Windows utilizzato anche per supportare un livello API OS/2 e POSIX ma sono caduti in disuso e sono stati rimossi. Il window manager è puro codice in modalità utente, non sono coinvolte chiamate del kernel. Solo le chiamate API che utilizzano le risorse del kernel (CreateThread, VirtualAlloc, ecc.) Chiameranno nel sistema operativo "reale" (ntdll.dll) e trap nel ring 0 con un interrupt software (int 0x2e).
Questa non è tutta la storia. Dal momento che NT4 il window manager è stato nel modello del kernel (win32k.sys) e ha un sacco di syscalls per chiamarlo. Ancor prima, viveva in CSRSS e dovevi richiamare il kernel per raggiungerlo (usando LPC), quindi c'era ancora una chiamata al kernel. Inoltre, Windows non ha usato int 0x2e per entrare in modalità kernel per un po '. Dipende dall'architettura in cui ti trovi, ma in genere ora usa sysenter per entrare in modalità kernel su x86. – Stewart
- 1. Quali sono le chiamate di sistema/sistema operativo nativo di Windows e Linux eseguite da malloc()?
- 2. Chiamate di sistema del sistema operativo da script bash
- 3. (Windows) Chiamate API di monitoraggio in C
- 4. Chiamate di sistema Linux e modalità kernel
- 5. debian pagine man per chiamate di sistema
- 6. Monitoraggio di determinate chiamate di sistema eseguite da un processo in Windows
- 7. Chiamate API di monitoraggio
- 8. Può OpenSSL su Windows utilizzare l'archivio certificati di sistema?
- 9. Le chiamate di sistema 'sync' e 'syncfs' sono associate alle chiamate 'fsync' di FUSE?
- 10. Come effettuare chiamate di comando di sistema in Java/Groovy?
- 11. Cosa potrebbe causare il fallimento delle chiamate del sistema Perl?
- 12. fork() - più chiamate di sistema e di processo
- 13. Ottenere chiamate di sistema Python come risultati di stringa
- 14. Sono chiamate di funzione come read(), write() chiamate di sistema effettive in linux?
- 15. "Trapping" delle chiamate sysenter di un processo nello spazio utente su Windows
- 16. Come proibire le chiamate di sistema, GNU/Linux
- 17. Qual è il tipo di argomenti per le chiamate di sistema su Linux?
- 18. Utilizzo% PROGRAMFILES (x86)% su sistema operativo Windows 32 bit
- 19. Determinare se compilare su Windows o altro sistema
- 20. Chiamate multi-threading nell'applicazione Windows Forms?
- 21. È un buon modo per intercettare le chiamate di sistema?
- 22. Prevenire i processi per eseguire alcune chiamate di sistema
- 23. Quando e come vengono interrotte le chiamate di sistema?
- 24. Come verificare se un programma è installato su sistema Windows
- 25. Variabile di sistema PATH predefinita per Windows?
- 26. Ordine di chiamate di metodi in un servizio di Windows
- 27. Quali sono i modi possibili per intercettare le chiamate di sistema su ambienti unix?
- 28. Come allocare dinamicamente la memoria tramite assembly e chiamate di sistema su Linux
- 29. Differenze di arrotondamento su sistema basato su Windows vs Unix in sprintf
- 30. AppDomain.GetCurrentThreadID vs Thread.ManagedThreadID per le chiamate API di Windows?
Sì, so che dll ha le chiamate necessarie all'interno, l'ho scritto. Ma in sostanza tutto ciò che chiedo è: la routine dll per disegnare un windows syscalls sotto forma di interrupt software, o, in caso contrario, come fa a dire a windows windows di creare una finestra? Per quanto ne so, non puoi passare dallo spazio in cui il tuo programma è in esecuzione in un altro modo rispetto all'istruzione int per il limitaion ringl. –
b-gen-jack-o-neill: AFAIK il kernel non è responsabile della gestione delle finestre. –
Sui processori più recenti, vengono utilizzate le istruzioni sysenter/sysexit invece di emettere un interrupt software con l'istruzione INT. Il concetto è lo stesso, è un modo per passare alla modalità kernel. Tuttavia, una finestra non è gestita nel kernel, non troverete una chiamata di sistema CreateWindow, ma è costruita su numerose altre chiamate di sistema, compresa la comunicazione con altri processi, come ad esempio un gestore di finestre – nos