Newsgroup: it.comp.os.linux.iniziare
Titolo: kernel pre-emptible

.. cosa significa?
:)

 
come avrai visto all'avvio di una qualsiasi ditribuzione un po' pesante 
(es Fedora, Mandrake ecc...) in poco tempo ti trovi con tutta la ram 
occupata (es..io ne ho un GB e la occupo con firefox, thunderbird, 
azureus, 3ddesktop e poco altro...) solo azureus ora ne sta occupando 440...
ovviamente non sono in uso, ma occupate...ovvero l'applicazione se ne 
riserva un po' da usare quando ne avrà bisogno!
questo però fa sì che se tu sei al limite della memoria e vuoi aprire 
qualcos'altro, qualcuno la debba rilasciare (infatti posso aprire altri 
10 programmi e ho sempre un GB allocato, non swappa mai) e così i 
programmi ridimensionano le loro richieste di ram...
il kernel preemptible fa in modo (quando ha poco carico di lavoro) di 
interrogare ogni tanto i programmi che occupano memoria per "chiedere" 
se possono rilasciarla...e se sì, lo fa! in tal modo hai sempre memoria 
disponibile per avviare altro, senza doverlo fare quando chiami il 
programma! son ostrategie adottate da distribuzioni veloci, come 
FoxLinux...
spero di essere stato chiaro (ho spulciato gli appunti di sistemi 
operativi del poli)
ciao
-- 
Computers are like air conditioners:
they stop working properly when you open Windows.

 :)
Sulle architetture x86 le istruzioni sono eseguibili in una delle due
modalita': kernel o user. La prima permette di eseguire qualunque
operazione, la seconda invece pone delle limitazioni. Chiaramente kernel e
driver lavorano in modalita' kernel, mentre i programmi normali e le
librerie in user mode per ovvie ragioni di sicurezza.
Sappiamo che in un sistema monoprocessore le istruzioni vengono eseguite in
serie (astrazione), quindi quando c'e' in esecuzione il codice di
un'applicazione, ma sorge la necessita' di eseguire delle operazioni piu'
importanti o semplicemente continuare l'esecuzione di altri programmi,
l'applicazione corrente viene sospesa.
Si puo' decidere di assegnare a priori un intervallo di tempo messo a
disposizione di un processo per la sua esecuzione. Quindi il codice del
processo viene eseguito finche' non scade questo intervallo.
Presupponiamo che sospendere un processo per continuarne un altro e' costoso
in termini di clock cpu.
E' chiaro allora che si preferirebbe impostare un intervallo di tempo lungo.
Ma il sistema deve anche rispondere ad altri eventi, per la legge di Murphy
improvvisi. Quindi se un sensore mi vuole dire che la temperatura del forno
di una centrale ha superato la soglia d'allerta, mica il sistema puo'
attendere la fine dell'intervallo del processo che visualizza la donnina
preferita dell'operatore davanti al monitor.
Ecco che nasce il bisogno di dare la cpu ad un altro processo (quello che
avverte del pericolo all'operatore) in un qualunque momento dell'esecuzione
di un processo. In gergo si dice che il processo viene prelazionato
(pre-empt).
Solitamente i processi (modalita' user) sono prelazionabili, il kernel
invece no. E' critico sottrarre la cpu al kernel in momenti qualunque,
poiche' nascono problematiche da tenere conto. E' intuitivo il fatto che il
kernel deve sempre svolgere operazioni di una certa importanza e brevi,
quindi "poco" interrompibili.
Un kernel preemtable e' un kernel che puo' subire una prelazione.
Comprensibilimente di solito anche i kernel preemptable hanno delle sezioni
di non prelazionabilita'.
-- 
Linux Registered User #181013
"La scienza e' un'equazione differenziale.
La religione e' una condizione al contorno."
(ALAN M. TURING)

 .. cosa significa?
Significa che un processo nel momento in cui si trova nel
kernel (perchè ha fatto una chiamata di sistema, per esempio)
può essere sospeso dallo scheduler in favore di un altro
processo con priorità più alta.
Da non confondere con la normale "preemption" che è sempre
esistita dalla versione 0.01 e che consiste nel sopendere
un processo, da parte dello scheduler, mentre si trova in
userspace (quindi non nel kernel) per far girare un processo
a priorità più alta.