Академический Документы
Профессиональный Документы
Культура Документы
Les frameworks Les fonctions inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes
Les frameworks
Mecanismes
Les fonctions
de synchronisation
inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes
Les frameworks
Mecanismes
Les fonctions
de synchronisation
inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes Mecanis
21 Les frameworks
22 Les fonctions inspirs de la libc Les frameworks
23 Accder au E/S
24 Allouer de la memoire
Le noyau est divis en frameworks.
25 La MMU
Pour bien utiliser un framework, il est ncessaire de comprendre
Quatrime partie IV 26 Les interruptions
Allouer des interruptions
le fonctionnement du noyau et de la technologie dcrite par le
framework.
Les Softirq Un framework est gnralement dcrit dans son fichier .h
27 Les Wait Queues (exemple : linux/usb.h).
LAPI 28 Les DMA Un framework contient gnralement une paire de fonctions
29 Les structures de donnes register/unregister permettant au driver de se dclarer
Les listes auprs du framework (Exemple : usb_register_driver)
30 Mecanismes de synchronisation La fonction register prend souvent en paramtre une
Les fifos structure contenant des pointeurs sur des callbacks appeles
lors des divers vnements pouvant se produire (exemple : la
Les mutex
structure usb_driver)
Dsactivation des interruptions
Parmi les callbacks, il y a souvent une fonction probe
Spin Lock
Les RCU
Sysmic - J. Pouiller Formation au Noyau Linux 103 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 104 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 105 / 182
Les barrires mmoires
Les frameworks Les fonctions inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes
Les frameworks
Mecanismes
Les fonctions
de synchronisation
inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes
Les frameworks
Mecanismes
Les fonctions
de synchronisation
inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes Mecanis
Les extensions de gcc sont utilises pour initialiser ces Convertions de nombres et de boolens : strtobool,
structures avec les attributs nomms Taille de chainesstrlen, strnlen kstrto{int,uint,l,ul}
Un framework fourni aussi dautres fonctions permettant de kstrto{s64,u64,s32,u32,s16,u16,s8,u8}
Comparaisons : strcmp, strncmp, strcasecmp,
lancer des actions (exemple : usb_submit_urb) kstrto{s64,u64,s32,u32,s16,u16,s8,u8}_from_user
strncasecmp, strnicmp, memcmp, strstarts
(existe aussi prfix avec simple_, mais destin mourrir)
Un framework peut raffiner un framwork plus gnrique (en le Recherches : strchr, strnchr, memchr, memscan, strrchr,
proxifiant) (exemple : les framework usb_serial et le framework Duplication avec allocation : kmemdup, kstrdup, kstrndup,
memchr_inv, strspn, strcpsn, strstr, strnstr, strpbrk
usb) memdup_user, strndup_user (nous verrons largument gfp
Copies : strcpy, strncpy, memcpy, strcat, strncat, un peu plus loin)
Une driver peu appartenir plusieurs frameworks. Par exemple, strsep
un driver de carte rseau peut utiliser le framework pci, le Formatage : sprintf, snprintf, sscanf
strlcpy et strlcat (De meilleures implmentations de
framework, network_device, sysfs, debugfs, etc... Utilitaire sur les nombres : max, max3, min, min3, clamp, swap
strncat et strncpy). Toujours utiliser ces fonctions.
Il existe un framework pour les modules (linux/modules.h) Notez que beaucoup de ces fonctions possdent des
skip_spaces, strim, strstrip : Supprime les blanc en
accessible avec THIS_MODULE implmentations gnriques mais peuvent tre surcharges par
dbut et fin de chane
Un exemple de framework simple enrobant les char devices : architecture
include/linux/cdev.h Rfrence : linux/string.h linux/kernel.h
Sysmic - J. Pouiller Formation au Noyau Linux 106 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 107 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 108 / 182
Les frameworks Les fonctions inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes
Les frameworks
Mecanismes
Les fonctions
de synchronisation
inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes
Les frameworks
Mecanismes
Les fonctions
de synchronisation
inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes Mecanis
Rfrence : asm/io.h
Les frameworks Les fonctions inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes
Les frameworks
Mecanismes
Les fonctions
de synchronisation
inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes
Les frameworks
Mecanismes
Les fonctions
de synchronisation
inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes Mecanis
Sysmic - J. Pouiller Formation au Noyau Linux 112 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 113 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 114 / 182
Les frameworks Les fonctions inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes
Les frameworks
Mecanismes
Les fonctions
de synchronisation
inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes
Les frameworks
Mecanismes
Les fonctions
de synchronisation
inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes Mecanis
Il est possible dallouer de la mmoire non-contigu avec Copier des donnes depuis/vers lespace dadressage du
vmalloc : processus courant :
void *vmalloc(unsigned long size); Il est possible de faire des conversions en utilisant : int copy_from_user(kern_buf, user_buf, size);
void *vzalloc(unsigned long size); phys_to_virt et virt_to_phys (qui appellent __pa et __va int copy_to_user(user_buf, kern_buf, size);
void vfree(void *addr); si possible)
Retourne le nombre doctets non copis
page_to_virt, virt_to_page, phys_to_page et
Alloue dans la mmoire haute Lire/affecter une variable simple (jusqu 8 octets) de lespace
page_to_phys (qui appellent page_address)
... ainsi la mmoire alloue peut tre non contigu dans la dadressage du processus courant :
pfn_to_page et page_to_pfn
mmoire physique
get_user(var, user_ptr);
Il est ainsi possible dallouer dimportante quantit de mmoire. put_user(var, user_ptr);
Rfrence : linux/vmalloc.h, mm/vmalloc.c,
/proc/vmallocinfo La taille de var est automatiquement calcule
Sysmic - J. Pouiller Formation au Noyau Linux 121 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 122 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 123 / 182
Les frameworks Les fonctions inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes
Les frameworks
Mecanismes
Les fonctions
de synchronisation
inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes
Les frameworks
Mecanismes
Les fonctions
de synchronisation
inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes Mecanis
Les frameworks Les fonctions inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes
Les frameworks
Mecanismes
Les fonctions
de synchronisation
inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes
Les frameworks
Mecanismes
Les fonctions
de synchronisation
inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes Mecanis
Les frameworks Les fonctions inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes
Les frameworks
Mecanismes
Les fonctions
de synchronisation
inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes
Les frameworks
Mecanismes
Les fonctions
de synchronisation
inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes Mecanis
Sysmic - J. Pouiller Formation au Noyau Linux 133 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 134 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 135 / 182
Les frameworks Les fonctions inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes
Les frameworks
Mecanismes
Les fonctions
de synchronisation
inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes
Les frameworks
Mecanismes
Les fonctions
de synchronisation
inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes Mecanis
Les frameworks Les fonctions inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes
Les frameworks
Mecanismes
Les fonctions
de synchronisation
inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes
Les frameworks
Mecanismes
Les fonctions
de synchronisation
inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes Mecanis
Les frameworks Les fonctions inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes
Les frameworks
Mecanismes
Les fonctions
de synchronisation
inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes
Les frameworks
Mecanismes
Les fonctions
de synchronisation
inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes Mecanis
Les frameworks Les fonctions inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes
Les frameworks
Mecanismes
Les fonctions
de synchronisation
inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes
Les frameworks
Mecanismes
Les fonctions
de synchronisation
inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes Mecanis
Sysmic - J. Pouiller Formation au Noyau Linux 148 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 149 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 150 / 182
Les frameworks Les fonctions inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes
Les frameworks
Mecanismes
Les fonctions
de synchronisation
inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes
Les frameworks
Mecanismes
Les fonctions
de synchronisation
inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes Mecanis
Idem, mais retourne immdiatement si le mutex est dj lock Dans la mme branche, le noyau propose aussi :
mutex_trylock(struct mutex *lock); Des smaphores (rfrence : linux/semaphore.h) Lors de certains accs, les mcanismes de protections de
Des Read-Write Lock (rfrence : linux/rw_semaphore.h) ressources inter-tches ne sont plus suffisants.
Retourne 1 si le mutex est lock Cela peut concerner des accs concurrent avec des
Mutex avec protocole dhritage de priorits et dtection de dead
mutex_is_locked(struct mutex *lock); lock (aka rt_mutex) (rfrence : interruptions.
Documentation/rt-mutex-design.txt, Il est alors ncessaire de dsactiver temporairement les
Unlock le mutex linux/rtmutex.h) interruptions afin de garantir que lon ne sera pas interrompu.
Les rt_mutex peuvent tre utilis par la libpthread Ces fonctions sont utiliser avec parcimonie
mutex_unlock(struct mutex *lock);
rfrence : Documentation/pi-futex.txt
Documentation/rt-mutex.txt
Rfrence : linux/mutex.h
Sysmic - J. Pouiller Formation au Noyau Linux 151 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 152 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 153 / 182
Les frameworks Les fonctions inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes
Les frameworks
Mecanismes
Les fonctions
de synchronisation
inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes
Les frameworks
Mecanismes
Les fonctions
de synchronisation
inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes Mecanis
Dsactivation des interruption et de la premption Dsactivation des interruption et de la premption Spin Lock
Dans certains cas, une tche peut avoir besoin dun accs exclusif
Sauve/restaure ltat des interruptions dans/de flags et dsactive une ressource potentiellement utilise dans une interruption. Dans ce
les interruptions : cas, il est ncessaire de dsactiver les interruptions lors de laccs
local_irq_save(unsigned long flags); Dsactive/Ractive les SoftIrq (bottom halves) : la ressource. Nanmoins, linterruption peut se produire sur un autre
local_irq_restore(unsigned long flags); local_bh_disable(); CPU. Il est alors ncessaire de se protger contre cette ventualit
local_bh_enable(); Il sagit dune attente active sur une section critique
Dsactive/Active les interruptions ( priori, toujours utiliser les
versions _save et _restore) Ne traite pas les problmes de concurrence mais de paralllisme
Dsactive/Ractive la premption uniquement. Par consquent, uniquement en environnement
local_irq_disable(); preempt_disable(); SMP
local_irq_enable(); preempt_enable(); Principalement utilis lors de en complment de la dsactivation
des interruption
Retourne vrai si les interruption du CPU local sont dsactives :
La premption est aussi dsactiv durant un spin lock
local_irq_disabled(); Le noyau propose aussi des read/write spin locks : rwlock_t
Rfrence linux/rwlock.h
Sysmic - J. Pouiller Formation au Noyau Linux 154 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 155 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 156 / 182
Les frameworks Les fonctions inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes
Les frameworks
Mecanismes
Les fonctions
de synchronisation
inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes
Les frameworks
Mecanismes
Les fonctions
de synchronisation
inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes Mecanis
Lock et dsactive/ractive les interruptions sur le processeur Type dalgorithme non bloquant :
API :
courant. Les flags contiennent ltat du masque dinterruption :
La lecture nest pas bloquante
Dclarer et initialiser un spin lock :
spin_lock_irqsave(spinlock_t *lock, unsigned On note le nombre de lecteurs
DEFINE_SPINLOCK(lock); long flags);
Les modification seffectuent sur une copie de lobjet
spin_lock_init(spinlock_t *lock); spin_unlock_irqrestore(spinlock_t *lock,
unsigned long flags); Les lecture suivante se font sur la nouvelle version de lobjet
Idem que les fonctions mutex_* : Lorsque le dernier lecteur a termin, lobjet dorigine est dtruit.
Spinlock et dsactive/ractive les SoftIrq : Seul subsiste la nouvelle version.
spin_lock(spinlock_t *lock);
spin_lock_bh(spinlock_t *lock); Les RCU sont un design darchitecture. Les RCU ne possdent
spin_trylock(spinlock_t *lock);
spin_unlock_bh(spinlock_t *lock); que peu dAPI pouvant tre rutilis.
spin_unlock(spinlock_t *lock);
Rfrence Documentation/RCU/whatisRCU.txt
Documentation/RCU/*
Rfrence : linux/spinlock.h
Sysmic - J. Pouiller Formation au Noyau Linux 157 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 158 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 159 / 182
Les frameworks Les fonctions inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes
Les frameworks
Mecanismes
Les fonctions
de synchronisation
inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes
Les frameworks
Mecanismes
Les fonctions
de synchronisation
inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes Mecanis
printk
31 Afficher des informations
Dynamic printk printk affiche les information sur la console et les copie dans
un buffer. Il est possible dafficher ce buffer avec dmesg
Il est possible dutiliser directemenr printk en specifiant le
Cinquime partie V 32 kgdb
degr dimportance de linformation :
Afficher des informations kgdb Tracker la mmoire Outils base de Kprobe et apparents Afficher des informations kgdb Tracker la mmoire Outils base de Kprobe et apparents Afficher des informations kgdb Tracker la mmoire Outils base de Kprobe et apparents
Afficher des informations kgdb Tracker la mmoire Outils base de Kprobe et apparents Afficher des informations kgdb Tracker la mmoire Outils base de Kprobe et apparents Afficher des informations kgdb Tracker la mmoire Outils base de Kprobe et apparents
Sysmic - J. Pouiller Formation au Noyau Linux 169 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 170 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 171 / 182
Afficher des informations kgdb Tracker la mmoire Outils base de Kprobe et apparents Afficher des informations kgdb Tracker la mmoire Outils base de Kprobe et apparents Afficher des informations kgdb Tracker la mmoire Outils base de Kprobe et apparents
Afficher des informations kgdb Tracker la mmoire Outils base de Kprobe et apparents Afficher des informations kgdb Tracker la mmoire Outils base de Kprobe et apparents Afficher des informations kgdb Tracker la mmoire Outils base de Kprobe et apparents
Sysmic - J. Pouiller Formation au Noyau Linux 175 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 176 / 182
Rfrence : Documentation/trace/kprobetrace.txt
Sysmic - J. Pouiller Formation au Noyau Linux 177 / 182
Afficher des informations kgdb Tracker la mmoire Outils base de Kprobe et apparents Afficher des informations kgdb Tracker la mmoire Outils base de Kprobe et apparents Afficher des informations kgdb Tracker la mmoire Outils base de Kprobe et apparents
Rfrence : Documentation/trace/events.txt
Sysmic - J. Pouiller Formation au Noyau Linux 178 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 179 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 180 / 182
Afficher des informations kgdb Tracker la mmoire Outils base de Kprobe et apparents Afficher des informations kgdb Tracker la mmoire Outils base de Kprobe et apparents
perf SystemTap
Sysmic - J. Pouiller Formation au Noyau Linux 181 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 182 / 182