Newsgroup: it.comp.os.linux.iniziare
Titolo: una frase sul kernel linux

Premesso che ho letto parecchie pagine degli Appunti Linux e che
l'apprezzo come grande manuale introduttivo, sono rimasto stupito
leggendo questa frase: "I programmi utilizzano le funzioni fornite dal
kernel, e in questa maniera sono sollevati dall'agire direttamente con
la CPU". Avendo qualche conoscenza di altri vecchi sistemi operativi e
anche di assembler e di linguaggio macchina, ma non di Unix, come
ormai alcuni sanno in questo gruppo, sono rimasto un po' perplesso.
Infatti i sistemi operativi a cui alludo (quelli dei mainframe IBM
nonché il DOS) dispongono di una serie di routines attivabili con
"Supervisor Call" o con "Interrupt", ma le normali operazioni di
trasferimento in memoria centrale, di comparazioni, di operazioni
logiche e aritmetiche le fanno direttamente le applicazioni. Se la
frase di Appunti Linux è vera, vuol dire che le applicazioni di Linux
non usano istruzioni elementari, ma solo richiami alle funzioni del
Kernel. Oppure la frase va interpretata così: "Quando i programmi
utilizzano le funzioni del kernel, sono sollevati dall'agire
direttamente con la CPU".
Dove posso trovare approfondimenti per la programmazione e, magari,
anche l'assembler?
Comunque, se qualcuno può illuminarmi direttamente, non credo che
questo possa nuocere alla vitalità del gruppo. Grazie.
M. D.

Da quel che so io, la faccenda e' relativamente semplice:
Sotto a tutto sta l'hardware, sopra a questo il kernel e i suoi moduli.
Sopra al kernel gira il software utente: in questo modo si crea
un'astrazione dall'hardware che implica una migliore portabilitą. Infatti,
il motivo per cui Linux e' cosi' ricco di applicativi software risiede
proprio
in questo: erano programmi scritti per UNIX e sono stati ricompilati senza
problemi (o quasi..) su Linux.
E' da tenere conto che UNIX (nei suoi vari dialetti) gira su un parco
macchine
con una varieta' impressionamte HP, Sun, SGI, x86 ...
E' comunque possibile scrivere codice assembler, si deve pero' tenere conto
che, ad esempio, se il tuo codice per errore (o intenzione) cerca di
scrivere/leggere in una zona di memoria che e' stata assegnata ad un'altro
processo, il programma viene terminato e  solitamente viene generato un file
(core) che contiene l'area di memoria assegnata al codice nell'istante prima
che questo venga terminato in modo da facilitare il debug.
Pero' se i programmi fossero scritti in tutto o in parte in assembler,
sarebbero ad
esempio incompatibili con CPU diverse :-(
E' la filosofia stessa dello scrivere sw per UNIX che e' diversa: creare
codice il
piu' possibile compatibile con i suoi vari cuginetti :-)
(cuginetti = FreeBSD NetBSD Linux HP-UX AIX IRIX Solaris ;
tutte varianti di UNIX)
Esiste comunque (con Linux) la possibilitą di scrivere dei moduli che girano
a livello kernel o addirittura modificare il kernel e lavorare quindi a
basso livello:
in questo caso e' possibile fare praticamente tutto (anche se non so' se
viene
bypassato lo scheduler o se quest'ultimo riesce a prevalere sempre...)
Spero di essere stato chiaro...
ciao                        Stef
togliere _NoSpam_ per rispondere...

direttamente con la CPU".
La seconda che hai detto. In generale: tutte le funzioni di allocazione
memoria, I/O e molte altre sono fatte dal kernel e non dagli
applicativi. 
-- 
The Hitman - 
http://members.xoom.it/hitman/
e-posta: 
sonic...@tiscalinet.it
 <-- *NUOVO* 
Powered by Slackware 7.0 & installwatch
- Le risposte stanno spesso in /usr/doc -