1 of 53

Cursul 1

1

Introducere

2 of 53

Introducere

  • Prezentarea generală a cursului
  • The kernel world
  • Arhitectura Linux

3 of 53

Echipa

  • Octavian Purdilă, Daniel Băluță, Răzvan Deaconescu,Vlad Dogaru, Laura Vasilescu, Irina Preşa

  • Mult succes în noul semestru!

4 of 53

Where do we stand?

application programming (EGC, SPG, PP, SPRC, IOC, etc.)

system programming (PC, SO, CPL)

kernel programming (SO2)

kernel space

user space

5 of 53

Resurse

  • wiki: http://ocw.cs.pub.ro/courses/so2
  • pagină NeedToKnow: http://ocw.cs.pub.ro/courses/so2/need-to-know
  • listă de discuții: so2@cursuri.cs.pub.ro
  • pagină de Facebook
  • mașini virtuale
  • vmchecker
  • catalog Google, calendar Google
  • documentație
  • LXR
  • cs.curs.pub.ro - rol de portal
  • karma awards

6 of 53

Comunitate / colaborativ

  • laboratoarele (din wiki) sunt editabile
    • folosiți contul de pe cs.curs.pub.ro
    • corecții, ajustări, precizări, informații utile
  • cursurile sunt în format Google Docs
    • puteți solicita acces de editare
    • corecții etc.
    • pentru detalii folosiți "Speaker Notes"
  • listă de discuții
    • răspundeți la întrebările colegilor voștri
    • propuneți subiecte de discuție care au legătură cu disciplina
  • Facebook
    • sugestii, propuneri, feedback
  • Primiți puncte de karma

7 of 53

Notare

  • 7 puncte teme de casă
    • Punctajul > 5 puncte e corelat direct proportional cu nota de la examen (la fel ca la SO)
  • 2 puncte activitate la laborator
  • 3 puncte examen, notare pe parcurs
  • Condiţii de promovare: nota finală 4.5, nota minimă examen 3

8 of 53

Obiectivele cursului

  • Prezentarea structurii interne a unui sistem de operare
  • Target: sisteme de operare de uz general
  • Structura și componentele unui kernel monolitic
    • Procese, FS, Networking
    • Memory management
  • Exemplificare pe Linux

9 of 53

Obiectivele laboratorului/temelor

  • Însușirea cunoștințelor necesare implementării de device drivere
  • Înțelegerea în profunzime a cunoștințelor prin rezolvarea de exerciții

10 of 53

Cursuri necesare

  • Programare: C
  • SD: tabele de dispersie, arbori echilibrați
  • IOCLA: lucrul cu registre și instrucțiuni de bază (adunări, comparaţii, salturi)
  • CN: TLB/CAM, memorie, procesor, I/O
  • PC, RL: ethernet, IP, sockeți
  • SO: procese, fișiere, thread-uri, memorie virtuală

11 of 53

Despre curs

  • 11/12 cursuri
  • interactiv
    • participaţi la discuţii
    • întrebaţi atunci când nu aţi înţeles
  • destul de dens, se recomandă călduros parcurgerea suportului bibliografic înainte şi după curs
  • 1h:30 prezentare + 30min test si discutii pe marginea testului

12 of 53

Despre curs (2)

  • Introducere
  • Procese
  • Scheduling
  • Apeluri de sistem
  • Traps
  • Spaţiul de adresă
  • Memorie virtuală
  • Memorie fizică
  • Kernel debugging
  • Block I/O
  • Sisteme de fişiere
  • SMP
  • Networking
  • Virtualizare

13 of 53

Despre laborator

  • Kernel Modules and Device Drivers
  • 15 min prezentare / 80 de minute lucru
  • se punctează activitatea și workshop-ul
  • learn by doing

14 of 53

Despre teme

  • Monitorizare apeluri de sistem
  • Driver pentru portul serial
  • Software RAID
  • Driver pentru un sistem de fișiere simplu
  • Networking

15 of 53

Despre teme (2)

  • necesare: aprofundare API (laborator) și concepte (curs)
  • teste publice
  • suport de testare (vmchecker)
  • relativ puţin cod de scris dar relativ dificile
  • dificultatea constă în acomodarea cu noul mediu

16 of 53

Bibliografie curs

  • Linux Kernel Development, 3rd edition, Robert Love, Addison Wesley, 2010
  • Understanding the Linux Kernel, 3rd edition, Daniel P. Bovet & Marco Cesati, O'Reilly 2005
  • Linux Networking Architecture, Klaus Wehrle, Frank Pahlke, Hartmut Ritter, Daniel Muller, Marc Bechler, Prentice Hall 2004
  • Understanding Linux Network Internals, Christian Benvenuti, O'Reilly 2005

17 of 53

Bibliografie laborator

  • Linux Device Drivers, 3nd edition, Alessandro Rubini & Jonathan Corbet, O'Reilly 2006
  • Programming the Windows Driver Model, 2nd edition, Walter Oney, Microsoft Press, 2002
  • The Windows 2000 Device Driver Book, 2nd edition, Art Baker & Jerry Lozano, Prentice Hall, 2001
  • Linux Kernel in a Nutshell, Greg Kroah-Hartman, O'Reilly 2005

18 of 53

Introducere

  • Noţiuni generale despre nucleul unui sistem de operare
  • Arhitectura nucleului Linux

  • Bibliografie:
    • UTLK: capitolul 1
    • LKD: capitolul 1

19 of 53

User vs Kernel

  • Module de execuţie
    • Kernel mode
    • User mode
  • Protecţia la memorie
    • Kernel-space
    • User-space

Kernel Space

User Space

3GB

Spațiul de adresă�(memorie virtuală)

1GB

20 of 53

Arhitectura unui sistem de operare

  • Aplicaţii
  • Sistem de operare
    • Shell, utilitare de bază
    • Kernel

21 of 53

Contexte de execuţie

  • Context proces
    • Cod ce rulează în user-space
    • Cod ce rulează în kernel-space în urma unui apel de sistem efectuat de un anumit proces
  • Context întrerupere
    • Codul rulează ca urmare a apariţiei unei întreruperi
    • Întotdeauna rulează în kernel space

22 of 53

Monolitic vs microkernel

Memory�Server

Client�App

Network �Server

Process�Server

File�Server

Display�Server

Microkernel

Hardware

request

reply

User Mode

Kernel Mode

App

App

System services

Hardware

OS

procedures

User Mode

Kernel Mode

23 of 53

Monolitic vs microkernel (2)

  • Linux
  • Unix
  • Windows
  • Mac OS X
  • Minix 3.0
  • QNX

24 of 53

Pot fi kernelele monolitice modulare?

  • Componente selectate la compilare
  • Module kernel încărcare dinamică
  • Stratificarea (logică) a codului
  • Interfaţa dintre straturi este hard coupled: macro-uri, funcţii inline, pointeri la funcţii
    • Performanţe foarte bune
    • Nu există protecţie

25 of 53

Nuclee hibride?

Many operating systems and kernel experts have dismissed the label as meaningless, and just marketing: Linus Torvalds said of this issue:

"As to the whole 'hybrid kernel' thing - it's just marketing. It's 'oh, those microkernels had good PR, how can we try to get good PR for our working kernel? Oh, I know, let's use a cool name and try to imply that it has all the PR advantages that that other system has'."

26 of 53

Spaţiu de adresă

  • Spaţiul de adresă fizic
    • RAM-ul + periferice
  • Spaţiu de adresă (virtual)
    • procesorul lucrează cu adrese logice (din spațiul virtual)
    • Spaţiul de adresă al unui proces
      • Modul în care un proces vede memoria: o zonă continuă de memorie de 4GB (pe un sistem pe 32biți)
    • Spaţiul de adresă kernel
      • Zona din spaţiul de adresă care este rezervat kernelului sau
      • Spaţiul de adresă dedicat kernelului

27 of 53

Multitasking/programming/processing

  • Sisteme de operare ce permit execuţia simultană a mai multor procese făcând frecvent switch între ele, astfel încât utilizatorii să poată interacționa cu fiecare program care rulează.
  • Mod de implementare
    • Cooperativ
    • Preemptiv

28 of 53

Kernel preemptibil

  • Un kernel este preemptibil dacă un proces poate fi preemptat chiar şi atunci când rulează în kernel.

29 of 53

Pageable kernel memory

  • Memorie folosită exclusiv de kernel (cod, variabile globale, stivă, memorie alocată dinamic) care poate fi swap-ată.

30 of 53

Stiva kernel

  • Fiecare proces are asociată o stivă kernel, folosită pentru a menţine starea procesului pe durata execuţiei în kernel space
  • Dimensiunea stivei este redusă (4KB 12 KB)

31 of 53

Portabilitate

  • Există cel puţin trei straturi în kernelele moderne:
    • Cod dependent de arhitectură (C & ASM)
    • Cod independent de arhitectură (C):
      • core
      • device drivere

32 of 53

SMP vs ASMP

33 of 53

Scalabilitate

  • Modul în care cresc performanţele relativ la numărul de procesoare din sistem
  • Fine grained vs Loose grained locking
  • Algoritmi lock free
  • Complexitatea algoritmilor

34 of 53

Modelul de dezvoltare Linux

  • Open source
    • Companii (RedHat, Novell, SGI, IBM, Intel, Oracle, MontaVista, Qumranet, Nokia, HP, Google, etc.) (concurente) lucrează împreună
  • Vechiul model
    • Versiuni stabile = pare: 1.0, 1.2, 2.0, 2.2, 2.4, 2.6
    • Versiuni de dezvoltare = impare: 0.x, 2.1, 2.3, 2.5
    • Ciclul de dezvoltare: 2 3 ani
  • Noul model:
    • Fiecare versiune 2.6 este stabilă
    • Ciclul de dezvoltare: 3 4 luni
    • Merge window de 2 săptămâni

35 of 53

Git trees

  • Oficial: Linus Torvalds
    • git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
  • Andrew Morton: -mm
  • Fiecare subsistem important este menţinut de o anumită persoană şi ea are un arbore separat
    • Networking: David Miller, net-2.6
  • linux-next, Stephen Rothwell - primeşte feature-uri în afara merge window-ului
    • Majoritatea subsistemelor menţin arborii lor pentru -next (e.g. net-next-2.6 pentru networking)
  • Fiecare distribuţie îşi menţine propriul tree

36 of 53

Organizarea surselor

37 of 53

Arhitectura Linux

User�applications

User

applications

libc

Core kernel

Device drivers

Architecture dependent code

User

Mode

Kernel

Mode

38 of 53

arch

  • Cod dependent de arhitectură
  • Fiecare arhitectură poate conţine mai multe sub-arhitecturi
  • Linux este unul dintre cele mai portate kernele:
    • Linux was first developed for 32-bit x86-based PCs (386 or higher). These days it also runs on (at least) the Compaq Alpha AXP, Sun SPARC and UltraSPARC, Motorola 68000, PowerPC, PowerPC64, ARM, Hitachi SuperH, IBM S/390, MIPS, HP PA-RISC, Intel IA-64, DEC VAX, AMD x86-64 and CRIS architectures.

39 of 53

arch (2)

  • Interfaţarea cu bootloader-ul, BIOS-ul
  • Accesul hardware pentru: controlerele de întrerupere, controler SMP, controlere BUS-uri, setup trap-uri (handlere întreruperi, excepţii, apeluri de sistem)
  • Acces hardware pentru memoria virtuală
  • Optimizări specifice arhitecturii pentru funcţii de lucru pe şiruri, copieri, etc.

40 of 53

Device drivere

  • Unified device model
  • Reduce duplicarea codului
  • Posibilitatea enumerării device-urilor
  • Crearea unui arbore de dependenţă
  • Legături între drivere şi device-uri

41 of 53

Device drivere (2)

  • Modularitate, multe clase ce oferă infrastructură pentru clase specifice de device drivere
    • Character device drivers: TTY device drivers, serial device drivere
    • Block device drivers: SCI device drivers
    • Filesystem device drivers
    • Network device drivers
    • USB device drivers
    • Frame buffer drivers
    • 3D acceleration device drivers
    • KSM

42 of 53

Core kernel

  • Process management
  • Memory management
  • Block I/O
  • VFS Virtual Filesystem Subsystem
  • Stiva de reţea
  • Securitate: LSM, SeLinux

43 of 53

Process management

  • Domenii de execuție
  • Scheduling
  • Procesele și thread-urile sunt abstractizate în task-uri
    • Task-urile conțin resurse
    • Thread-urile = task-uri ce partajează aceleași resurse

44 of 53

Memory management

  • Gestiunea memoriei fizice: alocarea memoriei fizice
  • Gestiunea memoriei virtuale: paginare, swapping, demand paging, copy on write
  • Servicii pentru user-space: spaţiul de adresă proces, mmap(), brk(), memorie partajată
  • Servicii pentru kernel-space: slab, vmalloc

45 of 53

Block I/O management

VFS

Device Mapper

Generic Block Layer

Block device

driver

Block device

driver

I/O scheduler

46 of 53

VFS

Block I/O layer

Inode cache

Dentry cache

Page cache

file

Superblock

stat

open

read

inode

dentry

dentry

file

file

Superblock

file

Filesystem�driver

inode

Filesystem�driver

47 of 53

LSM

  • Linux Security Modules
  • Hook-uri pentru module de securitate
  • Security Enhancened Linux - SELinux proiect NSA, extinde modelul clasic de securitate UNIX
  • AppArmor proiect similar dezvoltat de Novell, bazat pe LSM

48 of 53

Security Enhanced Linux

49 of 53

Stiva de reţea

Berkeley Socket Interface

Network device drivers

Queing discipline

Data link layer

Transport layer

TCP

UDP

Network layer

IP

NetFilter

BRIDGING

ARP

ETH

Routing

50 of 53

Fișiere sistem de bază

  • vmlinux imaginea kernelului obţinută după compilare
  • Vmlinuz imaginea de kernel compresată şi stripuită; este încărcată şi executată de către bootloader
  • Initrd Initial Ram Disk conţine driverele necesare montării sistemului de fişiere root (compilate ca module)

51 of 53

Procese sistem

  • swapper
    • PID 0
    • Contorizează timpul nefolosit (idle)
  • init
    • PID 1
    • În contextul acestui proces rulează kernel thread-urile
      • Primul proces rulat de kernel; rulează scripturile de iniţializare a sistemului /etc/rc.d/, gestionează nivelele de rulare
      • Nu poate fi terminat
      • Înfiază procesele orfane

52 of 53

Kernel thread-uri

  • migration
  • ksoftirqd
  • watchdog
  • events
  • khelper
  • kblockd
  • pdflush
  • kswapd
  • aio
  • kjournald
  • kondemand
  • ...

53 of 53

Intrebări

?