Dall'architettura del kernel Linux di Mauerer,
I thread del kernel sono processi avviati direttamente dal kernel stesso. Delegano una funzione del kernel a un processo separato e la eseguono lì in '' parallelo '' agli altri processi nel sistema (e, di fatto, parallelamente all'esecuzione del kernel stesso). I thread del kernel sono spesso indicati come demoni (kernel) . Sono utilizzati per eseguire, ad esempio, le seguenti attività:
- Sincronizzare periodicamente le pagine di memoria modificate con il dispositivo a blocchi da cui provengono le pagine (ad es. File mappati usando mmap).
- Scrivere pagine di memoria nell'area di scambio se vengono utilizzate di rado.
- Per gestire le azioni differite.
- Implementare i journal delle transazioni per i filesystem.
Fondamentalmente, ci sono due tipi di thread del kernel:
- Tipo 1: il thread viene avviato e attende fino a quando non viene richiesto dal kernel per eseguire un'azione specifica.
- Tipo 2: una volta avviato, il thread viene eseguito a intervalli periodici, verifica l'utilizzo di una risorsa specifica e interviene quando l'utilizzo supera o scende al di sotto di un valore limite impostato. Il kernel utilizza questo tipo di thread per attività di monitoraggio continuo.
Poiché il libro di Mauerer afferma che i thread del kernel sono processi, penso che debbano essere eseguiti in modalità utente, anziché in modalità kernel. (o sbaglio? Un processo può essere eseguito in modalità utente o kernel in momenti diversi o solo una modalità?)
Ma il kernel Linux di comprensione di Bovet afferma che i thread del kernel sono in esecuzione solo in modalità kernel (vedere la citazione seguente). I concetti di "thread del kernel" nei due libri sono lo stesso concetto?
I sistemi Unix tradizionali delegano alcune attività critiche a processi in esecuzione intermittente, tra cui lo svuotamento delle cache del disco, lo scambio di pagine inutilizzate, la manutenzione delle connessioni di rete e così via. In effetti, non è efficiente eseguire questi compiti in modo rigorosamente lineare; sia le loro funzioni che i processi dell'utente finale ottengono una risposta migliore se sono programmati in background. Poiché alcuni dei processi di sistema vengono eseguiti solo in modalità kernel, i moderni sistemi operativi delegano le loro funzioni ai thread del kernel , che non sono gravati dal contesto della modalità utente non necessario. In Linux, i thread del kernel differiscono dai normali processi nei seguenti modi:
- I thread del kernel vengono eseguiti solo in modalità kernel, mentre i processi regolari vengono eseguiti alternativamente in modalità kernel e in modalità utente.
- Poiché i thread del kernel vengono eseguiti solo in modalità kernel, utilizzano solo indirizzi lineari maggiori di PAGE_OFFSET. I processi regolari, d'altra parte, usano tutti e quattro i gigabyte di indirizzi lineari, sia in modalità utente che in modalità kernel.
Il libro di Mauerer dice che i thread del kernel sono avviati direttamente dal kernel e sembra anche che i demoni siano sinonimi dei thread del kernel. Quindi penso che i demoni debbano essere avviati direttamente dal kernel.
Ma https://unix.stackexchange.com/a/193918/674 afferma che
screen
il demone è avviato dall'interfacciascreen
utente (vedere la citazione seguente). Penso chescreen
l'interfaccia utente sia un processo, anziché il kernel. I concetti didaemon
nel libro di Mauerer e nella risposta collegata sono lo stesso concetto?Al primo avvio
screen
, in realtà stai avviando un'interfaccia utente (ui), che per impostazione predefinita creerà un demone (il gestore della sessione).In generale, come comprendi i concetti di "thread del kernel", "processo" e "demone", le loro relazioni e le loro differenze?