<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <HTML> <HEAD> <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9"> <TITLE>KernelAnalysis-HOWTO: Sintassi utilizzata</TITLE> <LINK HREF="KernelAnalysis-HOWTO-3.html" REL=next> <LINK HREF="KernelAnalysis-HOWTO-1.html" REL=previous> <LINK HREF="KernelAnalysis-HOWTO.html#toc2" REL=contents> </HEAD> <BODY> <A HREF="KernelAnalysis-HOWTO-3.html">Next</A> <A HREF="KernelAnalysis-HOWTO-1.html">Previous</A> <A HREF="KernelAnalysis-HOWTO.html#toc2">Contents</A> <HR> <H2><A NAME="s2">2. Sintassi utilizzata</A></H2> <H2><A NAME="ss2.1">2.1 Sintassi funzioni</A> </H2> <P>Quando descriviamo una funzione, scriviamo: <P> <P> <PRE> "nome_funzione [ percorso . estensione ]" </PRE> <P>Ad esempio: <P> <P> <PRE> "schedule [kernel/sched.c]" </PRE> <P>ci dice che stiamo parlando della funzione <P> <P>"schedule" definita nel file <P> <P>[ kernel/sched.c ] <P> <P>Nota: Il percorso di riferimento e' la directory dei sorgenti del Kernel ''/usr/src/linux''. <P> <H2><A NAME="ss2.2">2.2 Indentazione</A> </H2> <P>L'indendazione nel codice sorgente del documento e' di 3 caratteri. <P> <H2><A NAME="ss2.3">2.3 InterCallings Analysis</A> </H2> <H3>Introduzione</H3> <P>Nel documento verranno utilizzate le "InterCallings Analysis "(ICA) (analisi delle reciproche chiamate) per vedere (utilizzando anche l'indentazione) come le funzioni del Kernel si chiamano l'un l'altra. <P> <P>Ad esempio, la funzione ''sleep_on'' e' descritto di seguito: <P> <P> <PRE> |sleep_on |init_waitqueue_entry -- |__add_wait_queue | Accodamento della richiesta |list_add | |__list_add -- |schedule --- In attesa di esecuzione |__remove_wait_queue -- |list_del | Disaccodamento richiesta |__list_del -- sleep_on ICA </PRE> <P>L'ICA indentata e' seguita dal percorso delle funzioni descritte: <P> <P> <UL> <LI>sleep_on [kernel/sched.c]</LI> <LI>init_waitqueue_entry [include/linux/wait.h]</LI> <LI>__add_wait_queue</LI> <LI>list_add [include/linux/list.h]</LI> <LI>__list_add</LI> <LI>schedule [kernel/sched.c]</LI> <LI>__remove_wait_queue [include/linux/wait.h]</LI> <LI>list_del [include/linux/list.h]</LI> <LI>__list_del </LI> </UL> <P>Nota: Se il percorso non cambia non verra' piu' specificato nelle righe seguenti. <P> <H3>Dettagli</H3> <P>In una ICA una linea come la seguente <P> <P> <PRE> funzione1 -> funzione2 </PRE> <P>significa che la < funzione1 > e' un generico puntatore a funzione che, in questo caso, punta a < function2 >. <P> <P>Quando scriviamo: <P> <P> <PRE> funzione: </PRE> <P>significa che < funzione > non e' una vera funzione, bensi' un'etichetta assembler. <P> <P>A volte verra' riportato del codice ''C'' o pseudo codice al posto di linee ''assembler'' o di codice '' non strutturato'' per poter chiarire l'esposizione. <P> <H3>PRO delle ICA</H3> <P>I vantaggi nell'utilizzo delle ICA (InterCallings Analysis) sono molti: <P> <P> <UL> <LI>Si ottiene una visione d'insieme del funzionamento di una chiamata e dell'avvicendarsi delle routine del Kernel.</LI> <LI>Il percorso delle funzioni viene riportato di seguito cosicche' le ICA possano rappresentare una sorta di ''riferimento'' per scovare subito le funzioni cercate.</LI> <LI>Possono essere molto utili in meccanismi di sleep/awake, dove si descrive quello che viene fatto prima della sleep, durante la stessa e dopo il risveglio (dopo la schedulazione). </LI> </UL> <H3>CONTRO delle ICA</H3> <P> <UL> <LI>Alcuni svantaggi nell'utilizzare le ICA sono riportati di seguito: </LI> </UL> <P>Come tutti i modelli teorici, viene semplificata la realta' sorvolando alcuni dettagli, come il vero codice sorgente e i casi eccezionali. <P> <P> <UL> <LI>Diagrammi addizionali sarebbero importanti per rappresentare le condizioni dello stack, i dati, etc. </LI> </UL> <HR> <A HREF="KernelAnalysis-HOWTO-3.html">Next</A> <A HREF="KernelAnalysis-HOWTO-1.html">Previous</A> <A HREF="KernelAnalysis-HOWTO.html#toc2">Contents</A> </BODY> </HTML>