Témata návrh
Transkript
SWI 075 – Linux Kernel
Úvod
Outline
●
●
●
●
●
Organizace semináře
“Vývojový model kernelu”
Developer essentials – jak si kernel stáhnout, zkompilovat, ...
Dokumentace
Témata referátů, zápočťáky, ...
Organizace semináře
●
●
●
●
Zápočet za (přiměřeně kvalitní) referát nebo (přiměřeně kvalitní) patch do kernelu
Témata poměrně libovolná (týkající se kernelu); návrhy na závěr prezentace
Neobsazené semináře/témata odpřednáším já, na libovolné téma na kterém se domluvíme
http://www.jikos.cz/lk/ návrhy na témata, přidělená témata a “rozvrh”, odpřednášené referáty, ...
“Vývojový model kernelu”
●
●
●
Žádná oficiální roadmap, žádné UML diagramy, žádne formální specifikace, žádné release plány, design dokumenty, ...
“Linux is evolution, not intelligent design” Linus
15 let od svého vzniku se kernel stále vyvíjí značnou rychlostí (bug fixy, nové featury, cleanupy, ...)
“Vývojový model kernelu”
“Vývojový model kernelu”
●
●
●
●
Cca 9200 řádek kódu denně změněno
Distribuovaný vývoj – pro správu verzí používán GIT
Většina subsystémů má vlastní vývojovou větev – seznam “hlavních” větví na kernel.org viz http://www.kernel.org/git/
Patche do konkrétních subsystémů vždy skrz příslušné větve, ze kterých Linus periodicky “pulluje” do mainline
“Vývojový model kernelu”
●
●
●
●
Andrew Morton udržuje (mimo GIT) speciální sadu patchů – mm větev
Experimentální nové featury (reiser4, ext4, rozsáhlé změny subsystémů, apod)
Určena pro testování – po čase kdy je patch v mm a ukáže se jako správný ho Andrew “pushuje” upstream (subsystem tree, mainline)
Funguje dobře – Andrew je daleko pečlivější maintainer než Linus
“Vývojový model kernelu”
●
●
●
Stabilní release každé cca 23 měsíce (2.6.x)
Pro opravy kritických chyb (security, crashe, data corruption, ...) stable kernel releases: 2.6.x.y
Každý 2.6.x release je “major” release – obsahuje nové featury, mění vnitřní kernelové API, ...
“Vývojový model kernelu”
●
Týden 0
–
●
Týden 23: 2.6.xrc1
–
–
–
●
Zavřené “merge okno” (vetšinou) žádné nové featury, jen bugfixy
Stále vysoký “patchrate”
Týdny 38: další 2.6.xrcY releases.
–
●
Několik set patchů začleněno – nové featury, změny API, zásadní změny, ...
Po snížení bugfix patchrate – release dalšího 2.6.(x+1)
Později dle potřeby releases 2.6.x.y stable, paralelně s dalším vývojem
Developer essentials
●
●
●
http://www.kernel.org/ seznam aktualních releases (stable, rc, mm, git (snapshot))
GIT http://git.or.cz/
Documentation/Changes obsahuje seznam minimálních SW požadavků ke kompilaci kernelu
Developer essentials
●
●
●
●
make defconfig/allyesconfig/oldconfig/allmo
dconfig/allnoconfig/randconfig
make menuconfig/xconfig/gconfig
make
make modules_install && make install
Dokumentace
●
●
●
●
●
●
●
Documentation/*
KernelNewbies http://kernelnewbies.org/
LXR http://lxr.linux.no/
Robert Love – Linux Kernel Development 2nd Edition http://rlove.org/kernel_book/ (není zdarma)
Alessandro Rubini & Jonathan Corbet – Linux Device Drivers 3rd Edition http://lwn.net/Kernel/LDD3/
Mel Gorman – Understanding the Linux Virtual Memory Manager
http://www.skynet.ie/~mel/projects/vm/guide/pdf/un
derstand.pdf
Témata návrh
●
●
●
●
●
●
Kernel build systém, přenositelnost
VCS – GIT, Cogito
Konfigurace kernelu, Kconfig, závislosti mezi konfiguračními volbami
Stavba Makefiles, jak přidat svůj driver/kód do build systému
Jak kernel řeší přenositelnost mezi různými architekturami – oddělení archdependent kódu od zbytku
Přenositelnost datových typů – opaque typy, endianita, typy s explicitně udanou velikostí, padding struktur, ...
Témata návrh
●
●
●
●
●
Procesy a plánování
Vznik procesu, datové struktury (task_struct, thread_info), mechanismus copyonwrite, signály
Alokace PID, stavy procesu a přechody mezi nimi, přechod mezi userspace a kernelspace; processcontext, interruptcontext
Implementace threadů v linuxu; kernelové thready
Scheduler – I/Obound vs. CPUbound procesy, O(1) scheduler, priority, timeslices, runqueues, waitqueues, loadbalancer na SMP a HT, context
switch
Témata návrh
●
●
●
●
●
Syscally, zámky
Pasivní a aktivní čekání (spinlocky, semafory, mutexy); kdy co použít
Co je potřeba zamykat, jak může dojít k race condition (preemptivní vs. nepreemptivní kernel, interrupt, sleep, SMP, ...). Lockdep validator. RCU – lockless data access.
Completion variables, BKL, memory barriers
Syscall – vztah mezi libc a kernelem, int 0x80 vs. SYSENTER. Co je vsyscall, vDSO page. Předávání argumentů mezi kernelem a userspacem
Témata návrh
●
●
●
●
●
●
Interrupt handling
Asynchronní a synchronní interrupty. ISR – co se v ní smí a co ne.
Přiřazení ISR k IRQ. Sdílené a reentrantní ISR, interrupt context.
Povolení a zakázání přerušení, cli()/sti() vs. local_irq_{disable,restore}(). disable_irq() a disable_irq_nosync(). Bottom halves. Softirqs, tasklety. Kernelový thread ksoftirqd. Workqueues.
Zamykání v interruptech a mezi bottom halves
Témata návrh
●
●
●
●
VFS a filesystémy
Co je abstrakce VFS. Nejdůležitější datové struktury (superblock, inode, file, dentry) a operace nad nimi. Vztah mezi VFS a “skutečnými” filesystémy. Vazba mezi VFS a procesem. Přehled filesystémů, jejich vlastností a implementace (ext2,3,4, ReiserFS3,4, XFS, GFS2, ...)
Témata návrh
●
●
●
●
●
Memory management
Alokace paměti v kernelu kmalloc() vs. vmalloc()
struct page. Zóny (DMA, NORMAL, HIGHMEM). Alokace a dealokace stránek alloc_pages(), __get_free_pages(), get_zeroed_page().
Slab allocator – princip cachování u slab cache, vztah mezi cache, slab a object. Alokace na stacku, dočasná mapování kmap(), highmem, 3:1 split, ...
Témata návrh
●
●
●
●
●
Adresní prostor procesu, stránkování
Memory deskriptor (struct mm_struct). Kernel thready a jejich address space. Co jsou to VMA, jak jsou v kernelu reprezentovány. Přemisťování, spojování, rušení VMA, přístupová práva.
Co se stane když proces volá mmap() či malloc()
Jak funguje stránkování a swapování, pagetables, co je page cache a buffer cache. K čemu slouží thread pdflush
Témata návrh
●
●
●
●
Ovladače zařízení
Co je ovladač zařízení. Ovladače v userspace (vgalib, libusb)
Bloková a znaková zařízení, SCSI, PCI, input drivers (myš, klávesnice, joystick)
Bloková zařízení – struct bio, request queues, I/O schedulery (deadline, anticipatory, elevator, cfq)
Témata návrh
●
●
●
●
Síť
Síťová zařízení (jak funguje transport mezi různými vrstvami (i v vzhledem k ISO/OSI), co je skb, netfilter, nastavování parametrů socketu, raw sockety)
NAPI – nové síťové API
Nové protokoly v kernelu – DCCP, SCTP, ...
Témata návrh
●
●
●
●
●
Debugging, Time
Problémy s debugováním kernelu a jejich řešení – sériová konzole, printk(), kgdb, kprobes. Co je kernel oops a jak ho použít k ladění – ksymoops, kallsyms. Usermodelinux
Počítání času v Kernelu – hodnota HZ (přesnější timery, select(), poll(), scheduler). Co jsou jiffies a jejich reprezentace. RTC. BogoMIPS, hrtimers kernel patch, podpora pro realtime scheduling.
Témata návrh
●
●
●
●
●
●
Bezpečnost
LSM, SELinux. Podpora kernelu pro šifrování – cryptoAPI, šifrované filesystémy
rd
Bezpečnostní 3 party patche do kernelu (grsecurity, RBAC, ...)
Exploity
Rootkity
Témata návrh
●
●
●
●
ACPI (, APM)
K čemu ACPI je, stav implementace v linuxu. Problémy s HW neodpovídajícímu specifikaci. Co je DSDT, její dekompilace, úpravy, kompilace. ...
Zápočťáky
●
●
●
Kernelová bugzilla http://bugzilla.kernel.org/
http://www.kerneljanitors.org/ “We go through the Linux kernel source code, doing code reviews, fixing up unmaintained code and doing other cleanups and API conversions. It is a good start to kernel hacking.”
...
Podobné dokumenty
Příklad OP LZZ
Součástí Operačního programu Lidské zdroje a
zaměstnanost je financování intervencí v prioritní ose
„Adaptabilita“, tj. především „vzdělávání
zaměstnanců firem“. Tato oblast představuje zhruba
čt...
Mainlinovy kernel na telefonu Pavel Machek <pavel@ucw
Modem nepouziva sdilenou RAM
Klavesnice
Resistivni touchscreen
Cca 2000Kc, v kazdem lepsim bazaru
Linux jako real-time systém
(2) service the device; device driver's threaded IRQ handler
(1) mask&ack, then wake up the thread; generic IRQ code
ACPI a Software Suspend
V DSDT tabulce mohou být chyby (výrobce zajímá jen
jestli to funguje ve Windows)
Naštěstí je možno DSDT tabulku dekompilovat, upravit,
zkompilovat a zadat kernelu:
Device Drivers --->
Generic Drive...
Medveduv pruvodce po LibUCW
Medvědův průvodce po LibUCW
Martin Mareš
[email protected]
Katedra Aplikované Matematiky
MFF UK Praha
taktika-Reliquary of Souls
dostane za 11k coz je smrtici uder kolikrát. Zbytek healeru jedou chain heal a heal raidu. Kvuli tomu
v 2.fazi stojime tak jako na obrazku aby stali lidi u sebe a dobře s to healovalo.
Celkove vzat...
SWI 075 – Linux Kernel
• http://user-mode-linux.sourceforge.net/UserModeLinux-HOWT
CPU
Worker