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
screenil demone è avviato dall'interfacciascreenutente (vedere la citazione seguente). Penso chescreenl'interfaccia utente sia un processo, anziché il kernel. I concetti didaemonnel 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?