Sophie

Sophie

distrib > Mandriva > 9.1 > i586 > by-pkgid > f1098342ec4a2b28475e34123ce17201 > files > 513

howto-html-it-9.1-0.5mdk.noarch.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
 <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
 <TITLE>KernelAnalysis-HOWTO: Linux Startup</TITLE>
 <LINK HREF="KernelAnalysis-HOWTO-5.html" REL=next>
 <LINK HREF="KernelAnalysis-HOWTO-3.html" REL=previous>
 <LINK HREF="KernelAnalysis-HOWTO.html#toc4" REL=contents>
</HEAD>
<BODY>
<A HREF="KernelAnalysis-HOWTO-5.html">Next</A>
<A HREF="KernelAnalysis-HOWTO-3.html">Previous</A>
<A HREF="KernelAnalysis-HOWTO.html#toc4">Contents</A>
<HR>
<H2><A NAME="s4">4. Linux Startup</A></H2>

<P>Il Kernel di Linux inizia dal codice C eseguito a partire dall'etichetta
assember ''startup_32:'':
<P>
<PRE>
|startup_32:
   |start_kernel
      |lock_kernel
      |trap_init
      |init_IRQ
      |sched_init
      |softirq_init
      |time_init
      |console_init 
      |#ifdef CONFIG_MODULES 
         |init_modules 
      |#endif 
      |kmem_cache_init 
      |sti 
      |calibrate_delay 
      |mem_init
      |kmem_cache_sizes_init
      |pgtable_cache_init
      |fork_init
      |proc_caches_init 
      |vfs_caches_init
      |buffer_init
      |page_cache_init
      |signals_init 
      |#ifdef CONFIG_PROC_FS 
        |proc_root_init 
      |#endif 
      |#if defined(CONFIG_SYSVIPC) 
         |ipc_init
      |#endif 
      |check_bugs      
      |smp_init
      |rest_init
         |kernel_thread
         |unlock_kernel
         |cpu_idle
</PRE>
<P>
<UL>
<LI>startup_32 [arch/i386/kernel/head.S]</LI>
<LI>start_kernel [init/main.c]</LI>
<LI>lock_kernel [include/asm/smplock.h]</LI>
<LI>trap_init [arch/i386/kernel/traps.c]</LI>
<LI>init_IRQ [arch/i386/kernel/i8259.c]</LI>
<LI>sched_init [kernel/sched.c]</LI>
<LI>softirq_init [kernel/softirq.c]</LI>
<LI>time_init [arch/i386/kernel/time.c]</LI>
<LI>console_init [drivers/char/tty_io.c]</LI>
<LI>init_modules [kernel/module.c]</LI>
<LI>kmem_cache_init [mm/slab.c]</LI>
<LI>sti [include/asm/system.h]</LI>
<LI>calibrate_delay [init/main.c]</LI>
<LI>mem_init [arch/i386/mm/init.c]</LI>
<LI>kmem_cache_sizes_init [mm/slab.c]</LI>
<LI>pgtable_cache_init [arch/i386/mm/init.c]</LI>
<LI>fork_init [kernel/fork.c]</LI>
<LI>proc_caches_init </LI>
<LI>vfs_caches_init [fs/dcache.c]</LI>
<LI>buffer_init [fs/buffer.c]</LI>
<LI>page_cache_init [mm/filemap.c]</LI>
<LI>signals_init [kernel/signal.c]</LI>
<LI>proc_root_init [fs/proc/root.c]</LI>
<LI>ipc_init [ipc/util.c]</LI>
<LI>check_bugs [include/asm/bugs.h]</LI>
<LI>smp_init [init/main.c]</LI>
<LI>rest_init</LI>
<LI>kernel_thread [arch/i386/kernel/process.c]</LI>
<LI>unlock_kernel [include/asm/smplock.h]</LI>
<LI>cpu_idle [arch/i386/kernel/process.c]</LI>
</UL>
<P>L'ultima funzione ''rest_init'':
<P>
<OL>
<LI>lancia il Kernel Thread ''init''</LI>
<LI>chiama ''unlock_kernel''</LI>
<LI>Esegue il loop infinito ''cpu_idle'', in attesa che altri processi
con maggiore priorita' vengano schedulati.</LI>
</OL>
<P>In effetti la funzione ''start_kernel'' non finisce mai.
<P>Segue la descrizione di init che e' il primo kernel_thread in
esecuzione (che lanciera' poi tutti gli altri)
<P>
<PRE>
|init
   |lock_kernel
   |do_basic_setup
      |mtrr_init
      |sysctl_init
      |pci_init
      |sock_init
      |start_context_thread
      |do_init_calls
         |(*call())-&gt; kswapd_init
   |prepare_namespace
   |free_initmem
   |unlock_kernel
   |execve
</PRE>
<HR>
<A HREF="KernelAnalysis-HOWTO-5.html">Next</A>
<A HREF="KernelAnalysis-HOWTO-3.html">Previous</A>
<A HREF="KernelAnalysis-HOWTO.html#toc4">Contents</A>
</BODY>
</HTML>