You are on page 1of 77

Understanding the LINUX Kernel

Daniele Maggiore

sisinflab.poliba.it

Dicembre 13, 2007

Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 1 / 35


Outline

1. Cenni Storici
La Nascita di Linux

2. Kernel Overview
La struttura teorica del Kernel
Kernel Linux in generale
Kernel Linux, caratteristiche pi importanti
Tour del Kernel Linux

3. Dalla Teoria alla Pratica


Moduli
File System

Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 2 / 35


Cenni Storici La Nascita di Linux

Outline

1. Cenni Storici
La Nascita di Linux

2. Kernel Overview
La struttura teorica del Kernel
Kernel Linux in generale
Kernel Linux, caratteristiche pi importanti
Tour del Kernel Linux

3. Dalla Teoria alla Pratica


Moduli
File System

Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 3 / 35


Cenni Storici La Nascita di Linux

La nascita di LINUX
La eMail di Torvalds al minix group.
From: torvalds@klaava.Helsinki.FI (Linus Benedict Torvalds)
Newsgroups: comp.os.minix
Subject: What would you like to see most in minix?
Summary: small poll for my new operating system
Message-ID: <1991Aug25.205708.9541@klaava.Helsinki.FI>
Date: 25 Aug 91 20:57:08 GMT
Organization: University of Helsinki

Hello everybody out there using minix -


Im doing a (free) operating system (just a hobby, wont be big and
professional like gnu) for 386(486) AT clones. This has been brewing
since april, and is starting to get ready. Id like any feedback on
things people like/dislike in minix, as my OS resembles it somewhat
(same physical layout of the file-system (due to practical reasons)
among other things).
Ive currently ported bash(1.08) and gcc(1.40), and things seem to work.
This implies that Ill get something practical within a few months, and
Id like to know what features most people would want. Any suggestions
are welcome, but I wont promise Ill implement them :-)

Linus (torvalds@kruuna.helsinki.fi)

PS. Yes - its free of any minix code, and it has a multi-threaded fs.
It is NOT protable (uses 386 task switching etc), and it probably never
will support anything other than AT-harddisks, as thats all I have :-(.
Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 4 / 35
Cenni Storici La Nascita di Linux

La nascita di LINUX
Levoluzione del Kernel.

Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 5 / 35


Kernel Overview La struttura teorica del Kernel

Outline

1. Cenni Storici
La Nascita di Linux

2. Kernel Overview
La struttura teorica del Kernel
Kernel Linux in generale
Kernel Linux, caratteristiche pi importanti
Tour del Kernel Linux

3. Dalla Teoria alla Pratica


Moduli
File System

Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 6 / 35


Kernel Overview La struttura teorica del Kernel

La struttura teorica del Kernel

Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 7 / 35


Kernel Overview Kernel Linux in generale

Outline

1. Cenni Storici
La Nascita di Linux

2. Kernel Overview
La struttura teorica del Kernel
Kernel Linux in generale
Kernel Linux, caratteristiche pi importanti
Tour del Kernel Linux

3. Dalla Teoria alla Pratica


Moduli
File System

Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 8 / 35


Kernel Overview Kernel Linux in generale

Kernel Linux in generale

Linux un kernel monolitico (un singolo unico programma ove tutte le


componenti hanno accesso a tutte le strutture dati interne).
Linux permette di caricare e scaricare dinamicamente alcune
componenti in base allesigenza dellutente. Queste componenti
prendono il nome di Moduli.
I moduli sono porzioni di codice che possono essere linkate
dinamicamente nel kernel dopo che questultimo stato caricato. Essi
possono essere delinkati e disallocati quando non sono pi necessari.
Una volta caricato, un modulo parte integrante del kernel e ha gli
stessi diritti e responsabilit di ogni altra porzione di codice. Questo
implica che pu causare un crash del kernel come ogni altra routine in
kernel space.

Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 9 / 35


Kernel Overview Kernel Linux in generale

Kernel Linux in generale

Linux un kernel monolitico (un singolo unico programma ove tutte le


componenti hanno accesso a tutte le strutture dati interne).
Linux permette di caricare e scaricare dinamicamente alcune
componenti in base allesigenza dellutente. Queste componenti
prendono il nome di Moduli.
I moduli sono porzioni di codice che possono essere linkate
dinamicamente nel kernel dopo che questultimo stato caricato. Essi
possono essere delinkati e disallocati quando non sono pi necessari.
Una volta caricato, un modulo parte integrante del kernel e ha gli
stessi diritti e responsabilit di ogni altra porzione di codice. Questo
implica che pu causare un crash del kernel come ogni altra routine in
kernel space.

Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 9 / 35


Kernel Overview Kernel Linux in generale

Kernel Linux in generale

Linux un kernel monolitico (un singolo unico programma ove tutte le


componenti hanno accesso a tutte le strutture dati interne).
Linux permette di caricare e scaricare dinamicamente alcune
componenti in base allesigenza dellutente. Queste componenti
prendono il nome di Moduli.
I moduli sono porzioni di codice che possono essere linkate
dinamicamente nel kernel dopo che questultimo stato caricato. Essi
possono essere delinkati e disallocati quando non sono pi necessari.
Una volta caricato, un modulo parte integrante del kernel e ha gli
stessi diritti e responsabilit di ogni altra porzione di codice. Questo
implica che pu causare un crash del kernel come ogni altra routine in
kernel space.

Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 9 / 35


Kernel Overview Kernel Linux in generale

Kernel Linux in generale

Linux un kernel monolitico (un singolo unico programma ove tutte le


componenti hanno accesso a tutte le strutture dati interne).
Linux permette di caricare e scaricare dinamicamente alcune
componenti in base allesigenza dellutente. Queste componenti
prendono il nome di Moduli.
I moduli sono porzioni di codice che possono essere linkate
dinamicamente nel kernel dopo che questultimo stato caricato. Essi
possono essere delinkati e disallocati quando non sono pi necessari.
Una volta caricato, un modulo parte integrante del kernel e ha gli
stessi diritti e responsabilit di ogni altra porzione di codice. Questo
implica che pu causare un crash del kernel come ogni altra routine in
kernel space.

Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 9 / 35


Kernel Overview Kernel Linux, caratteristiche pi importanti

Outline

1. Cenni Storici
La Nascita di Linux

2. Kernel Overview
La struttura teorica del Kernel
Kernel Linux in generale
Kernel Linux, caratteristiche pi importanti
Tour del Kernel Linux

3. Dalla Teoria alla Pratica


Moduli
File System

Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 10 / 35


Kernel Overview Kernel Linux, caratteristiche pi importanti

Kernel Linux, caratteristiche pi importanti

SMP
Preemption
High memory support
SMT HyperThreading
Supporto per CPU differenti
Supporto ACPI
OProfile
ParaVirtualization

Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 11 / 35


Kernel Overview Kernel Linux, caratteristiche pi importanti

Kernel Linux, caratteristiche pi importanti

SMP
Preemption
High memory support
SMT HyperThreading
Supporto per CPU differenti
Supporto ACPI
OProfile
ParaVirtualization

Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 11 / 35


Kernel Overview Kernel Linux, caratteristiche pi importanti

Kernel Linux, caratteristiche pi importanti

SMP
Preemption
High memory support
SMT HyperThreading
Supporto per CPU differenti
Supporto ACPI
OProfile
ParaVirtualization

Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 11 / 35


Kernel Overview Kernel Linux, caratteristiche pi importanti

Kernel Linux, caratteristiche pi importanti

SMP
Preemption
High memory support
SMT HyperThreading
Supporto per CPU differenti
Supporto ACPI
OProfile
ParaVirtualization

Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 11 / 35


Kernel Overview Kernel Linux, caratteristiche pi importanti

Kernel Linux, caratteristiche pi importanti

SMP
Preemption
High memory support
SMT HyperThreading
Supporto per CPU differenti
Supporto ACPI
OProfile
ParaVirtualization

Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 11 / 35


Kernel Overview Kernel Linux, caratteristiche pi importanti

Kernel Linux, caratteristiche pi importanti

SMP
Preemption
High memory support
SMT HyperThreading
Supporto per CPU differenti
Supporto ACPI
OProfile
ParaVirtualization

Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 11 / 35


Kernel Overview Kernel Linux, caratteristiche pi importanti

Kernel Linux, caratteristiche pi importanti

SMP
Preemption
High memory support
SMT HyperThreading
Supporto per CPU differenti
Supporto ACPI
OProfile
ParaVirtualization

Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 11 / 35


Kernel Overview Kernel Linux, caratteristiche pi importanti

Kernel Linux, caratteristiche pi importanti

SMP
Preemption
High memory support
SMT HyperThreading
Supporto per CPU differenti
Supporto ACPI
OProfile
ParaVirtualization

Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 11 / 35


Kernel Overview Tour del Kernel Linux

Outline

1. Cenni Storici
La Nascita di Linux

2. Kernel Overview
La struttura teorica del Kernel
Kernel Linux in generale
Kernel Linux, caratteristiche pi importanti
Tour del Kernel Linux

3. Dalla Teoria alla Pratica


Moduli
File System

Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 12 / 35


Kernel Overview Tour del Kernel Linux

Tour del Kernel Linux

1. Process Scheduler (SCHED)


2. Memory Manager (MM)
3. Virtual File System (VFS)
4. Network Interface (NET)
5. Inter-Process Communication (IPC)

Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 13 / 35


Kernel Overview Tour del Kernel Linux

Process Scheduler
E responsabile di controllare laccesso dei processi alla CPU. Lo
scheduler assicura una policy che permette ai vari processi di
accedere alla CPU in modo paritario assicurando nel frattempo che
vengano svolte le necessarie procedure per gestire lhardware.

Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 14 / 35


Kernel Overview Tour del Kernel Linux

Memory Manager
Permette che pi processi condividano la memoria centrale. Inoltre
offre il supporto alla memoria virtuale (permette di supportare processi
che hanno bisogno di pi memoria di quella disponibile). Quanto non
al momento utilizzato viene salvato su disco e recuperato quando
richiesto.

Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 15 / 35


Kernel Overview Tour del Kernel Linux

Virtual File System


Presenta una file-interface comune a tutti i dispositivi: questo permette
di astrarre i dettagli dei dispositivi hardware concreti. Il VFS supporta
una notevole quantit di file system che sono compatibili con altri
sistemi operativi.

Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 16 / 35


Kernel Overview Tour del Kernel Linux

Network Interface

Fornisce accesso a una serie di standard di rete e a una variet di


dispositivi di networking.

Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 17 / 35


Kernel Overview Tour del Kernel Linux

Inter-Process Communication

Supporta una serie di meccanismi di process-to-process


communication, il tutto su un solo sistema Linux.

1. Signals
2. Pipes
3. System V IPC Mechanisms
4. Message Queues
5. Semaphores
6. Shared Memory

Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 18 / 35


Kernel Overview Tour del Kernel Linux

Lalbero delle directories

arch contiene il codice specifico per tutte le architetture supportate dal kernel.

include contiene i file che servono per compilare il kernel.

init contiene il codice per linizializzazione del kernel.

mm contiene il codice per la gestione della memoria.

drivers contiene tutti i drivers dei dispositivi.

ipc contiene il codice che implementa i vari sistemi di Inter-Process Communication.

modules directory in cui verrano salvati i moduli compilati.

fs contiene tutti i moduli che implementano i vari file system.

kernel parte centrale del kernel.

net contiene la parte di codice kernel relativa al networking.

lib contiene le librerie del kernel.

scripts contiene gli script usati durante la configurazione del kernel.

Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 19 / 35


Kernel Overview Tour del Kernel Linux

Lalbero delle directories

arch contiene il codice specifico per tutte le architetture supportate dal kernel.

include contiene i file che servono per compilare il kernel.

init contiene il codice per linizializzazione del kernel.

mm contiene il codice per la gestione della memoria.

drivers contiene tutti i drivers dei dispositivi.

ipc contiene il codice che implementa i vari sistemi di Inter-Process Communication.

modules directory in cui verrano salvati i moduli compilati.

fs contiene tutti i moduli che implementano i vari file system.

kernel parte centrale del kernel.

net contiene la parte di codice kernel relativa al networking.

lib contiene le librerie del kernel.

scripts contiene gli script usati durante la configurazione del kernel.

Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 19 / 35


Kernel Overview Tour del Kernel Linux

Lalbero delle directories

arch contiene il codice specifico per tutte le architetture supportate dal kernel.

include contiene i file che servono per compilare il kernel.

init contiene il codice per linizializzazione del kernel.

mm contiene il codice per la gestione della memoria.

drivers contiene tutti i drivers dei dispositivi.

ipc contiene il codice che implementa i vari sistemi di Inter-Process Communication.

modules directory in cui verrano salvati i moduli compilati.

fs contiene tutti i moduli che implementano i vari file system.

kernel parte centrale del kernel.

net contiene la parte di codice kernel relativa al networking.

lib contiene le librerie del kernel.

scripts contiene gli script usati durante la configurazione del kernel.

Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 19 / 35


Kernel Overview Tour del Kernel Linux

Lalbero delle directories

arch contiene il codice specifico per tutte le architetture supportate dal kernel.

include contiene i file che servono per compilare il kernel.

init contiene il codice per linizializzazione del kernel.

mm contiene il codice per la gestione della memoria.

drivers contiene tutti i drivers dei dispositivi.

ipc contiene il codice che implementa i vari sistemi di Inter-Process Communication.

modules directory in cui verrano salvati i moduli compilati.

fs contiene tutti i moduli che implementano i vari file system.

kernel parte centrale del kernel.

net contiene la parte di codice kernel relativa al networking.

lib contiene le librerie del kernel.

scripts contiene gli script usati durante la configurazione del kernel.

Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 19 / 35


Kernel Overview Tour del Kernel Linux

Lalbero delle directories

arch contiene il codice specifico per tutte le architetture supportate dal kernel.

include contiene i file che servono per compilare il kernel.

init contiene il codice per linizializzazione del kernel.

mm contiene il codice per la gestione della memoria.

drivers contiene tutti i drivers dei dispositivi.

ipc contiene il codice che implementa i vari sistemi di Inter-Process Communication.

modules directory in cui verrano salvati i moduli compilati.

fs contiene tutti i moduli che implementano i vari file system.

kernel parte centrale del kernel.

net contiene la parte di codice kernel relativa al networking.

lib contiene le librerie del kernel.

scripts contiene gli script usati durante la configurazione del kernel.

Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 19 / 35


Kernel Overview Tour del Kernel Linux

Lalbero delle directories

arch contiene il codice specifico per tutte le architetture supportate dal kernel.

include contiene i file che servono per compilare il kernel.

init contiene il codice per linizializzazione del kernel.

mm contiene il codice per la gestione della memoria.

drivers contiene tutti i drivers dei dispositivi.

ipc contiene il codice che implementa i vari sistemi di Inter-Process Communication.

modules directory in cui verrano salvati i moduli compilati.

fs contiene tutti i moduli che implementano i vari file system.

kernel parte centrale del kernel.

net contiene la parte di codice kernel relativa al networking.

lib contiene le librerie del kernel.

scripts contiene gli script usati durante la configurazione del kernel.

Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 19 / 35


Kernel Overview Tour del Kernel Linux

Lalbero delle directories

arch contiene il codice specifico per tutte le architetture supportate dal kernel.

include contiene i file che servono per compilare il kernel.

init contiene il codice per linizializzazione del kernel.

mm contiene il codice per la gestione della memoria.

drivers contiene tutti i drivers dei dispositivi.

ipc contiene il codice che implementa i vari sistemi di Inter-Process Communication.

modules directory in cui verrano salvati i moduli compilati.

fs contiene tutti i moduli che implementano i vari file system.

kernel parte centrale del kernel.

net contiene la parte di codice kernel relativa al networking.

lib contiene le librerie del kernel.

scripts contiene gli script usati durante la configurazione del kernel.

Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 19 / 35


Kernel Overview Tour del Kernel Linux

Lalbero delle directories

arch contiene il codice specifico per tutte le architetture supportate dal kernel.

include contiene i file che servono per compilare il kernel.

init contiene il codice per linizializzazione del kernel.

mm contiene il codice per la gestione della memoria.

drivers contiene tutti i drivers dei dispositivi.

ipc contiene il codice che implementa i vari sistemi di Inter-Process Communication.

modules directory in cui verrano salvati i moduli compilati.

fs contiene tutti i moduli che implementano i vari file system.

kernel parte centrale del kernel.

net contiene la parte di codice kernel relativa al networking.

lib contiene le librerie del kernel.

scripts contiene gli script usati durante la configurazione del kernel.

Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 19 / 35


Kernel Overview Tour del Kernel Linux

Lalbero delle directories

arch contiene il codice specifico per tutte le architetture supportate dal kernel.

include contiene i file che servono per compilare il kernel.

init contiene il codice per linizializzazione del kernel.

mm contiene il codice per la gestione della memoria.

drivers contiene tutti i drivers dei dispositivi.

ipc contiene il codice che implementa i vari sistemi di Inter-Process Communication.

modules directory in cui verrano salvati i moduli compilati.

fs contiene tutti i moduli che implementano i vari file system.

kernel parte centrale del kernel.

net contiene la parte di codice kernel relativa al networking.

lib contiene le librerie del kernel.

scripts contiene gli script usati durante la configurazione del kernel.

Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 19 / 35


Kernel Overview Tour del Kernel Linux

Lalbero delle directories

arch contiene il codice specifico per tutte le architetture supportate dal kernel.

include contiene i file che servono per compilare il kernel.

init contiene il codice per linizializzazione del kernel.

mm contiene il codice per la gestione della memoria.

drivers contiene tutti i drivers dei dispositivi.

ipc contiene il codice che implementa i vari sistemi di Inter-Process Communication.

modules directory in cui verrano salvati i moduli compilati.

fs contiene tutti i moduli che implementano i vari file system.

kernel parte centrale del kernel.

net contiene la parte di codice kernel relativa al networking.

lib contiene le librerie del kernel.

scripts contiene gli script usati durante la configurazione del kernel.

Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 19 / 35


Kernel Overview Tour del Kernel Linux

Lalbero delle directories

arch contiene il codice specifico per tutte le architetture supportate dal kernel.

include contiene i file che servono per compilare il kernel.

init contiene il codice per linizializzazione del kernel.

mm contiene il codice per la gestione della memoria.

drivers contiene tutti i drivers dei dispositivi.

ipc contiene il codice che implementa i vari sistemi di Inter-Process Communication.

modules directory in cui verrano salvati i moduli compilati.

fs contiene tutti i moduli che implementano i vari file system.

kernel parte centrale del kernel.

net contiene la parte di codice kernel relativa al networking.

lib contiene le librerie del kernel.

scripts contiene gli script usati durante la configurazione del kernel.

Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 19 / 35


Kernel Overview Tour del Kernel Linux

Lalbero delle directories

arch contiene il codice specifico per tutte le architetture supportate dal kernel.

include contiene i file che servono per compilare il kernel.

init contiene il codice per linizializzazione del kernel.

mm contiene il codice per la gestione della memoria.

drivers contiene tutti i drivers dei dispositivi.

ipc contiene il codice che implementa i vari sistemi di Inter-Process Communication.

modules directory in cui verrano salvati i moduli compilati.

fs contiene tutti i moduli che implementano i vari file system.

kernel parte centrale del kernel.

net contiene la parte di codice kernel relativa al networking.

lib contiene le librerie del kernel.

scripts contiene gli script usati durante la configurazione del kernel.

Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 19 / 35


Dalla Teoria alla Pratica Moduli

Outline

1. Cenni Storici
La Nascita di Linux

2. Kernel Overview
La struttura teorica del Kernel
Kernel Linux in generale
Kernel Linux, caratteristiche pi importanti
Tour del Kernel Linux

3. Dalla Teoria alla Pratica


Moduli
File System

Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 20 / 35


Dalla Teoria alla Pratica Moduli

Caricare un Modulo

I Moduli:
oggetti linkati come gli altri programmi nel S.O.
sono linkati come immagini rilocabili
il formato del file oggetto di tipo a.out o elf
deve contenere una routine di initialization e di cleanup

Come caricare un modulo:


manualmente
quando serve (on-demand loading)

In entrambi i casi viene eseguita una serie di operazioni portate a


termine dallutility insmod

Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 21 / 35


Dalla Teoria alla Pratica Moduli

Caricare un Modulo

Quando si inserisce un modulo manualmente con il comando "modprobe


NomeModulo" si ha che:


insmod fa una system call privilegiata per trovare i simboli esportati del kernel1

X insmod legge il modulo nella sua memoria vituale aggiorna le referenze irrisolte inserendo
gli indirizzi delle routine e le risorse del kernel usando la tabella dei simboli.

X insmod chiede al kernel, usando una system call privilegiata, uno spazio sufficiente per
allocare il nuovo modulo.

X Il kernel alloca una nuova struttura dati e uno spazio di memoria kernel. Infine il modulo
viene aggiunto in coda alla lista dei moduli e marcato come come UNINITIALIZED.

X insmod copia il modulo nello spazio allocato e lo riloca in modo tale che possa essere
avviato usando indirizzi del kernel.

1
Coppie (nome simbolo, valore).
Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 22 / 35
Dalla Teoria alla Pratica Moduli

Caricare un Modulo

Quando si inserisce un modulo manualmente con il comando "modprobe


NomeModulo" si ha che:


insmod fa una system call privilegiata per trovare i simboli esportati del kernel1

insmod legge il modulo nella sua memoria vituale aggiorna le referenze irrisolte inserendo
gli indirizzi delle routine e le risorse del kernel usando la tabella dei simboli.

X insmod chiede al kernel, usando una system call privilegiata, uno spazio sufficiente per
allocare il nuovo modulo.

X Il kernel alloca una nuova struttura dati e uno spazio di memoria kernel. Infine il modulo
viene aggiunto in coda alla lista dei moduli e marcato come come UNINITIALIZED.

X insmod copia il modulo nello spazio allocato e lo riloca in modo tale che possa essere
avviato usando indirizzi del kernel.

1
Coppie (nome simbolo, valore).
Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 22 / 35
Dalla Teoria alla Pratica Moduli

Caricare un Modulo

Quando si inserisce un modulo manualmente con il comando "modprobe


NomeModulo" si ha che:


insmod fa una system call privilegiata per trovare i simboli esportati del kernel1

insmod legge il modulo nella sua memoria vituale aggiorna le referenze irrisolte inserendo
gli indirizzi delle routine e le risorse del kernel usando la tabella dei simboli.

insmod chiede al kernel, usando una system call privilegiata, uno spazio sufficiente per
allocare il nuovo modulo.

X Il kernel alloca una nuova struttura dati e uno spazio di memoria kernel. Infine il modulo
viene aggiunto in coda alla lista dei moduli e marcato come come UNINITIALIZED.

X insmod copia il modulo nello spazio allocato e lo riloca in modo tale che possa essere
avviato usando indirizzi del kernel.

1
Coppie (nome simbolo, valore).
Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 22 / 35
Dalla Teoria alla Pratica Moduli

Caricare un Modulo

Quando si inserisce un modulo manualmente con il comando "modprobe


NomeModulo" si ha che:


insmod fa una system call privilegiata per trovare i simboli esportati del kernel1

insmod legge il modulo nella sua memoria vituale aggiorna le referenze irrisolte inserendo
gli indirizzi delle routine e le risorse del kernel usando la tabella dei simboli.

insmod chiede al kernel, usando una system call privilegiata, uno spazio sufficiente per
allocare il nuovo modulo.

Il kernel alloca una nuova struttura dati e uno spazio di memoria kernel. Infine il modulo
viene aggiunto in coda alla lista dei moduli e marcato come come UNINITIALIZED.

X insmod copia il modulo nello spazio allocato e lo riloca in modo tale che possa essere
avviato usando indirizzi del kernel.

1
Coppie (nome simbolo, valore).
Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 22 / 35
Dalla Teoria alla Pratica Moduli

Caricare un Modulo

Quando si inserisce un modulo manualmente con il comando "modprobe


NomeModulo" si ha che:


insmod fa una system call privilegiata per trovare i simboli esportati del kernel1

insmod legge il modulo nella sua memoria vituale aggiorna le referenze irrisolte inserendo
gli indirizzi delle routine e le risorse del kernel usando la tabella dei simboli.

insmod chiede al kernel, usando una system call privilegiata, uno spazio sufficiente per
allocare il nuovo modulo.

Il kernel alloca una nuova struttura dati e uno spazio di memoria kernel. Infine il modulo
viene aggiunto in coda alla lista dei moduli e marcato come come UNINITIALIZED.

insmod copia il modulo nello spazio allocato e lo riloca in modo tale che possa essere
avviato usando indirizzi del kernel.

1
Coppie (nome simbolo, valore).
Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 22 / 35
Dalla Teoria alla Pratica Moduli

Caricare un Modulo

Il nuovo modulo esporta una tabella dei simboli e la passa al kernel.
X insmod con una system call privilegiata passa al kernel gli indirizzi delle funzioni di
initialization e cleanup.
X Il kernel invoca la funzione initialization del modulo.
X Lindirizzo della funzione cleanup viene inserito nella struttura dati del modulo.
X Lo stato del modulo viene settato a RUNNING.

Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 23 / 35


Dalla Teoria alla Pratica Moduli

Caricare un Modulo

Il nuovo modulo esporta una tabella dei simboli e la passa al kernel.

insmod con una system call privilegiata passa al kernel gli indirizzi delle funzioni di
initialization e cleanup.
X Il kernel invoca la funzione initialization del modulo.
X Lindirizzo della funzione cleanup viene inserito nella struttura dati del modulo.
X Lo stato del modulo viene settato a RUNNING.

Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 23 / 35


Dalla Teoria alla Pratica Moduli

Caricare un Modulo

Il nuovo modulo esporta una tabella dei simboli e la passa al kernel.

insmod con una system call privilegiata passa al kernel gli indirizzi delle funzioni di
initialization e cleanup.

Il kernel invoca la funzione initialization del modulo.
X Lindirizzo della funzione cleanup viene inserito nella struttura dati del modulo.
X Lo stato del modulo viene settato a RUNNING.

Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 23 / 35


Dalla Teoria alla Pratica Moduli

Caricare un Modulo

Il nuovo modulo esporta una tabella dei simboli e la passa al kernel.

insmod con una system call privilegiata passa al kernel gli indirizzi delle funzioni di
initialization e cleanup.

Il kernel invoca la funzione initialization del modulo.

Lindirizzo della funzione cleanup viene inserito nella struttura dati del modulo.
X Lo stato del modulo viene settato a RUNNING.

Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 23 / 35


Dalla Teoria alla Pratica Moduli

Caricare un Modulo

Il nuovo modulo esporta una tabella dei simboli e la passa al kernel.

insmod con una system call privilegiata passa al kernel gli indirizzi delle funzioni di
initialization e cleanup.

Il kernel invoca la funzione initialization del modulo.

Lindirizzo della funzione cleanup viene inserito nella struttura dati del modulo.

Lo stato del modulo viene settato a RUNNING.

Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 23 / 35


Dalla Teoria alla Pratica Moduli

Scaricare un Modulo

I moduli possono essere scaricati usando il comando modprobe -r

Esempio
Non possibile scaricare il modulo VFAT se si montato uno o pi file system VFAT.
Se si guarda alloutput di lsmod, possibile vedere che per ogni modulo c un
contatore associato.

Module pages Used by


msdos 5 1
vfat 4 1 ( autoclean)
fat 6 [vfat msdos] 2 ( autoclean )

Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 24 / 35


Dalla Teoria alla Pratica Moduli

Scaricare un Modulo

I moduli non pi utili vengono automaticamente rimossi dal demone


kerneld allo scadere di un timer di idle. A questo punto kerneld effettua
una chiamata di sistema che disalloca tutti i moduli non usati.

Esempio
Non possibile scaricare il modulo VFAT se si montato uno o pi file system VFAT.
Se si guarda alloutput di lsmod, possibile vedere che per ogni modulo c un
contatore associato.

Module pages Used by


msdos 5 1
vfat 4 1 ( autoclean)
fat 6 [vfat msdos] 2 ( autoclean )

Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 24 / 35


Dalla Teoria alla Pratica Moduli

Scaricare un Modulo

Un modulo non pu essere scaricato se ci sono altre componenti nel


kernel che dipendono da questultimo.

Esempio
Non possibile scaricare il modulo VFAT se si montato uno o pi file system VFAT.
Se si guarda alloutput di lsmod, possibile vedere che per ogni modulo c un
contatore associato.

Module pages Used by


msdos 5 1
vfat 4 1 ( autoclean)
fat 6 [vfat msdos] 2 ( autoclean )

Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 24 / 35


Dalla Teoria alla Pratica Moduli

Scaricare un Modulo

Altre informazioni contenute nei moduli:


la prima longword dellimmagine del modulo contiene il contatore
ai flag AUTOCLEAN e VISITED2
Precondizioni per scaricare un modulo:
il flag AUTOCLEAN settato e lo stato RUNNING (solo
on-demand loading)
il modulo non marcato come VISITED
il contatore pari a 0

2
i due flag sono usati per scaricare i moduli caricati con lon-demand loading
Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 25 / 35
Dalla Teoria alla Pratica Moduli

Scaricare un Modulo

Se un modulo rispetta le condizioni precedenti:


viene eseguita la sua funzione di cleanup (esegue la free-up delle
risorse associate al modulo).
la struttura dati del modulo viene marcata come DELETED e
delinkata dalla lista dei moduli.
viene modificata la lista delle reference di ogni modulo che usa
quel modulo. Nessuno avr pi il modulo scaricato come
dipendente.
tutta la memoria del kernel allocata per il modulo viene deallocata.

Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 26 / 35


Dalla Teoria alla Pratica File System

Outline

1. Cenni Storici
La Nascita di Linux

2. Kernel Overview
La struttura teorica del Kernel
Kernel Linux in generale
Kernel Linux, caratteristiche pi importanti
Tour del Kernel Linux

3. Dalla Teoria alla Pratica


Moduli
File System

Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 27 / 35


Dalla Teoria alla Pratica File System

VFS Virtual File System


Il virtual file system deve gestire
tutti i file system che vengono mon-
tati. Per fare ci, mantiene una
struttura dati che descrive lintero
VFS e i file system montati.

Il VFS descrive i file in termini di su-


perblock e i-nodes.

I nodi del VFS di tipo i-node descrivono:


i file e le directory allinterno del sistema
i contenuti
la topologia del Virtual File System

Quando un file system inizializzato, esso si registra allinterno del


VFS.
Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 28 / 35
Dalla Teoria alla Pratica File System

VFS Virtual File System

Quando un file system basato su blocchi viene montato, il VFS


legge il suo superblock.
Ogni superblock read routine deve risolvere la tipologia del file
system e mappare le informazioni nel VFS superblock.
Il VFS mantiene una lista dei file system montati con i relativi
superblock.
Ogni superblock del VFS contiene informazioni e puntatori alle
funzioni che svolgono particolari operazioni.
Quando il sistema accede ai file e alle directory, vengono
richiamate funzioni che attraversano i nodi del VFS.
Questi vengono memorizzati in una cache per velocizzare le
ricerca.
Tutti i file system usano una buffer cache comune per velocizzare
le operazioni di lettura dei blocchi dai dischi.
Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 29 / 35
Dalla Teoria alla Pratica File System

VFS Virtual File System

Quando un file system basato su blocchi viene montato, il VFS


legge il suo superblock.
Ogni superblock read routine deve risolvere la tipologia del file
system e mappare le informazioni nel VFS superblock.
Il VFS mantiene una lista dei file system montati con i relativi
superblock.
Ogni superblock del VFS contiene informazioni e puntatori alle
funzioni che svolgono particolari operazioni.
Quando il sistema accede ai file e alle directory, vengono
richiamate funzioni che attraversano i nodi del VFS.
Questi vengono memorizzati in una cache per velocizzare le
ricerca.
Tutti i file system usano una buffer cache comune per velocizzare
le operazioni di lettura dei blocchi dai dischi.
Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 29 / 35
Dalla Teoria alla Pratica File System

VFS Virtual File System

Quando un file system basato su blocchi viene montato, il VFS


legge il suo superblock.
Ogni superblock read routine deve risolvere la tipologia del file
system e mappare le informazioni nel VFS superblock.
Il VFS mantiene una lista dei file system montati con i relativi
superblock.
Ogni superblock del VFS contiene informazioni e puntatori alle
funzioni che svolgono particolari operazioni.
Quando il sistema accede ai file e alle directory, vengono
richiamate funzioni che attraversano i nodi del VFS.
Questi vengono memorizzati in una cache per velocizzare le
ricerca.
Tutti i file system usano una buffer cache comune per velocizzare
le operazioni di lettura dei blocchi dai dischi.
Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 29 / 35
Dalla Teoria alla Pratica File System

VFS Virtual File System

Quando un file system basato su blocchi viene montato, il VFS


legge il suo superblock.
Ogni superblock read routine deve risolvere la tipologia del file
system e mappare le informazioni nel VFS superblock.
Il VFS mantiene una lista dei file system montati con i relativi
superblock.
Ogni superblock del VFS contiene informazioni e puntatori alle
funzioni che svolgono particolari operazioni.
Quando il sistema accede ai file e alle directory, vengono
richiamate funzioni che attraversano i nodi del VFS.
Questi vengono memorizzati in una cache per velocizzare le
ricerca.
Tutti i file system usano una buffer cache comune per velocizzare
le operazioni di lettura dei blocchi dai dischi.
Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 29 / 35
Dalla Teoria alla Pratica File System

VFS Virtual File System

Quando un file system basato su blocchi viene montato, il VFS


legge il suo superblock.
Ogni superblock read routine deve risolvere la tipologia del file
system e mappare le informazioni nel VFS superblock.
Il VFS mantiene una lista dei file system montati con i relativi
superblock.
Ogni superblock del VFS contiene informazioni e puntatori alle
funzioni che svolgono particolari operazioni.
Quando il sistema accede ai file e alle directory, vengono
richiamate funzioni che attraversano i nodi del VFS.
Questi vengono memorizzati in una cache per velocizzare le
ricerca.
Tutti i file system usano una buffer cache comune per velocizzare
le operazioni di lettura dei blocchi dai dischi.
Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 29 / 35
Dalla Teoria alla Pratica File System

VFS Virtual File System

Quando un file system basato su blocchi viene montato, il VFS


legge il suo superblock.
Ogni superblock read routine deve risolvere la tipologia del file
system e mappare le informazioni nel VFS superblock.
Il VFS mantiene una lista dei file system montati con i relativi
superblock.
Ogni superblock del VFS contiene informazioni e puntatori alle
funzioni che svolgono particolari operazioni.
Quando il sistema accede ai file e alle directory, vengono
richiamate funzioni che attraversano i nodi del VFS.
Questi vengono memorizzati in una cache per velocizzare le
ricerca.
Tutti i file system usano una buffer cache comune per velocizzare
le operazioni di lettura dei blocchi dai dischi.
Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 29 / 35
Dalla Teoria alla Pratica File System

VFS Virtual File System

Quando un file system basato su blocchi viene montato, il VFS


legge il suo superblock.
Ogni superblock read routine deve risolvere la tipologia del file
system e mappare le informazioni nel VFS superblock.
Il VFS mantiene una lista dei file system montati con i relativi
superblock.
Ogni superblock del VFS contiene informazioni e puntatori alle
funzioni che svolgono particolari operazioni.
Quando il sistema accede ai file e alle directory, vengono
richiamate funzioni che attraversano i nodi del VFS.
Questi vengono memorizzati in una cache per velocizzare le
ricerca.
Tutti i file system usano una buffer cache comune per velocizzare
le operazioni di lettura dei blocchi dai dischi.
Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 29 / 35
Dalla Teoria alla Pratica File System

VFS Virtual File System

Vantaggi:
ogni block structured device si registra nel kernel: possibile
usare qualsiasi linguaggio di programmazione per implementare
un file system
si ha uninterfaccia asincrona uniforme e block-based
il file system Linux indipendente dal device e dal driver che lo
gestisce

Il VFS mantiene anche una cache delle directory in modo che i nodi
delle directory pi usate siano facilmente reperibili (come possiamo
immaginare, fare ls di una directory che non stata listata di recente
pu implicare un tempo maggiore!)

Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 30 / 35


Dalla Teoria alla Pratica File System

Fuse: un file system User-Space

Fuse un framework che permette di implementare un file system in


user-space. Elimina la necessit di scrivere moduli del kernel per
implementare file system.

Fuse diviso in due parti. Un mod-


ulo kernel e una libreria user space
che fornisce un framework e unAPI
tramite la quale possibile imple-
mentare un file system residente in
user space.

Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 31 / 35


Dalla Teoria alla Pratica File System

Fuse: un file system User-Space

Vantaggi:
possibile usare qualsiasi linguaggio di programmazione per
implementare un file system.
possibile usare tutte le librerie POSIX e quelle lato utente:
questo elimina le constraint dettate dalle kernel API che sono
limitate.
gli implementatori di file system non devono programmare il kernel
o conoscere la struttura del S.O.
Alcuni esempi di file system basati su FUSE sono:

NTFS-3g Un file system che permette di scrivere su partizioni NTFS

GmailFS permette di montare la cartella in-box di gmail come una cartella locale

Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 32 / 35


Dalla Teoria alla Pratica File System

Fuse: un file system User-Space

Vantaggi:
possibile usare qualsiasi linguaggio di programmazione per
implementare un file system.
possibile usare tutte le librerie POSIX e quelle lato utente:
questo elimina le constraint dettate dalle kernel API che sono
limitate.
gli implementatori di file system non devono programmare il kernel
o conoscere la struttura del S.O.
Alcuni esempi di file system basati su FUSE sono:

NTFS-3g Un file system che permette di scrivere su partizioni NTFS

GmailFS permette di montare la cartella in-box di gmail come una cartella locale

Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 32 / 35


Dalla Teoria alla Pratica File System

Fuse: un file system User-Space

Vantaggi:
possibile usare qualsiasi linguaggio di programmazione per
implementare un file system.
possibile usare tutte le librerie POSIX e quelle lato utente:
questo elimina le constraint dettate dalle kernel API che sono
limitate.
gli implementatori di file system non devono programmare il kernel
o conoscere la struttura del S.O.
Alcuni esempi di file system basati su FUSE sono:

NTFS-3g Un file system che permette di scrivere su partizioni NTFS

GmailFS permette di montare la cartella in-box di gmail come una cartella locale

Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 32 / 35


Dalla Teoria alla Pratica File System

/proc File System

/proc una finestra leggibile sul kernel in esecuzione.


/proc file system non ha una esistenza fisica.
/proc file system si comporta come un file system reale (infatti si
registra su VFS).
quando il VFS fa una chiamata per richiedere un nodo, il /proc file
system crea il file e le directory a partire dalle informazioni
contenute nel kernel.

Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 33 / 35


Dalla Teoria alla Pratica File System

/dev Device Special Files

Linux, come tutte le versioni di Unix, rappresenta i suoi device come


file speciali.
Esempio
il file /dev/null rappresenta il null device.

I file dei device non occupano nessuno spazio sul file system: essi
sono solo un punto daccesso al device.
Ci sono due tipi di file:
character file (le operazioni di I/O sono in character mode)
block files (le operazioni di I/O avvengono solo tramite buffer
cache)

Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 34 / 35


Dalla Teoria alla Pratica File System

/dev Device Special Files

Linux, come tutte le versioni di Unix, rappresenta i suoi device come


file speciali.
Esempio
il file /dev/null rappresenta il null device.

I file dei device non occupano nessuno spazio sul file system: essi
sono solo un punto daccesso al device.
Ci sono due tipi di file:
character file (le operazioni di I/O sono in character mode)
block files (le operazioni di I/O avvengono solo tramite buffer
cache)

Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 34 / 35


Dalla Teoria alla Pratica File System

/dev Device Special Files

Linux, come tutte le versioni di Unix, rappresenta i suoi device come


file speciali.
Esempio
il file /dev/null rappresenta il null device.

I file dei device non occupano nessuno spazio sul file system: essi
sono solo un punto daccesso al device.
Ci sono due tipi di file:
character file (le operazioni di I/O sono in character mode)
block files (le operazioni di I/O avvengono solo tramite buffer
cache)

Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 34 / 35


Dalla Teoria alla Pratica File System

/dev Device Special Files

Linux, come tutte le versioni di Unix, rappresenta i suoi device come


file speciali.
Esempio
il file /dev/null rappresenta il null device.

I file dei device non occupano nessuno spazio sul file system: essi
sono solo un punto daccesso al device.
Ci sono due tipi di file:
character file (le operazioni di I/O sono in character mode)
block files (le operazioni di I/O avvengono solo tramite buffer
cache)

Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 34 / 35


Dalla Teoria alla Pratica File System

/dev Device Special Files

E possibile eseguire tutte le classiche operazioni di I/O.


Quando unoperazione di I/O fatta su un device file, essa viene
inviata al driver che gestisce quel dispositivo.
Molto spesso esso non un vero e proprio device driver ma uno
pseudo-device driver (come accade per alcuni dispositivi come gli
SCSI che vengono ridirezionati allo SCSI device driver layer).

Daniele Maggiore (sisinflab.poliba.it) The Linux Kernel Dicembre 13, 2007 35 / 35

You might also like