Professional Documents
Culture Documents
Daniele Maggiore
sisinflab.poliba.it
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
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
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
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.
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
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
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
SMP
Preemption
High memory support
SMT HyperThreading
Supporto per CPU differenti
Supporto ACPI
OProfile
ParaVirtualization
SMP
Preemption
High memory support
SMT HyperThreading
Supporto per CPU differenti
Supporto ACPI
OProfile
ParaVirtualization
SMP
Preemption
High memory support
SMT HyperThreading
Supporto per CPU differenti
Supporto ACPI
OProfile
ParaVirtualization
SMP
Preemption
High memory support
SMT HyperThreading
Supporto per CPU differenti
Supporto ACPI
OProfile
ParaVirtualization
SMP
Preemption
High memory support
SMT HyperThreading
Supporto per CPU differenti
Supporto ACPI
OProfile
ParaVirtualization
SMP
Preemption
High memory support
SMT HyperThreading
Supporto per CPU differenti
Supporto ACPI
OProfile
ParaVirtualization
SMP
Preemption
High memory support
SMT HyperThreading
Supporto per CPU differenti
Supporto ACPI
OProfile
ParaVirtualization
SMP
Preemption
High memory support
SMT HyperThreading
Supporto per CPU differenti
Supporto ACPI
OProfile
ParaVirtualization
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
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.
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.
Network Interface
Inter-Process Communication
1. Signals
2. Pipes
3. System V IPC Mechanisms
4. Message Queues
5. Semaphores
6. Shared Memory
arch contiene il codice specifico per tutte le architetture supportate dal kernel.
arch contiene il codice specifico per tutte le architetture supportate dal kernel.
arch contiene il codice specifico per tutte le architetture supportate dal kernel.
arch contiene il codice specifico per tutte le architetture supportate dal kernel.
arch contiene il codice specifico per tutte le architetture supportate dal kernel.
arch contiene il codice specifico per tutte le architetture supportate dal kernel.
arch contiene il codice specifico per tutte le architetture supportate dal kernel.
arch contiene il codice specifico per tutte le architetture supportate dal kernel.
arch contiene il codice specifico per tutte le architetture supportate dal kernel.
arch contiene il codice specifico per tutte le architetture supportate dal kernel.
arch contiene il codice specifico per tutte le architetture supportate dal kernel.
arch contiene il codice specifico per tutte le architetture supportate dal 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
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
Caricare un Modulo
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
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
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
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
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.
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.
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.
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.
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.
Scaricare un Modulo
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.
Scaricare un Modulo
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.
Scaricare un Modulo
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.
Scaricare un Modulo
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
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
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!)
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:
GmailFS permette di montare la cartella in-box di gmail come una cartella locale
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:
GmailFS permette di montare la cartella in-box di gmail come una cartella locale
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:
GmailFS permette di montare la cartella in-box di gmail come una cartella locale
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)
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)
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)
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)