Sunteți pe pagina 1din 71

Proiectarea sistemelor de operare

Introducere
Introducere

Prezentarea generală a cursului


The kernel world
Arhitectura Linux
Arhitectura Windows NT
Echipa

Octavian Purdilă, Răzvan Deaconescu, Dragoş


Tatulea, Irina Ţîrdea, Cosmin Raţiu, George
Ciobanu, Adrian Stanciu, Răzvan Alecsandrescu,
Mihai Capotă

Mult succes în noul semestru!


Where do we stand?

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

system programming (PC, SO, PT) user space

kernel space
kernel programming (PSO)
Administrative
Site: http://cs.pub.ro/~pso
Wiki
10 puncte teme de casă
Temele pot fi implementate pe Linux, pe Windows sau şi pe
Linux si pe Windows
Tema copiată -> punctaj 0 la toate temele
2 puncte activitate la laborator
nu se punctează doar prezenţa
3 puncte examen
9 întrebări, open book
Testează înţelegerea conceptelor
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 şi NT
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
Cursuri necesare

Programare: C
SDA: tabele de dispersie, arbori balansaţi
PLAS: lucrul cu regiştri şi instrucţiuni de bază
(adunări, comparaţii, salturi)
CN: TLB/CAM, cache
PC, RC: ethernet, IP, sockeţi
SO: procese, fişiere, thread-uri, memorie virtuală
Despre curs

12 cursuri
ultimul curs – simulare examen
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
Despre curs (2)

Introducere Memorie fizică


Procese Block I/O
Scheduling Sisteme de fişiere (1)
Apeluri de sistem Sisteme de fişiere (2)
Traps SMP
Spaţiul de adresă Securitate
Memorie virtuală Networking
Despre laborator

Device Drivers (C)


20 min prezentare / 80 minute lucru
se punctează activitatea
learn by doing
maxim 15 puncte pe laborator
bonusul poate compensa activitatea slabă la alte
laboratoare şi cel mult un laborator pierdut
(absenţă)
Despre teme

Monitorizare apeluri de sistem


Driver pentru portul serial
Software RAID
Driver pentru un sistem de fişiere simplu
Statefull firewall
Despre teme (2)

necesare: aprofundare API (laborator) şi concepte


(curs)
teste publice
suport de testare
relativ puţin cod de scris dar relativ dificile
dificultatea constă în acomodarea cu noul mediu
sunt deja afişate pe site! :-)
Bibliografie curs

Linux Kernel Development, 2nd edition, Robert Love,


Novel Press 2005
Windows Internals 4th edition, David A. Solomon & Mark
E. Russinovich, Microsoft Press 2005
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
Bibliografie laborator

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

UTLK: capitolul 1
LKD: capitolul 1
WI: capitolele 1 şi 2
Arhitectura unui sistem de operare
Aplicaţii
Sistem de operare
Shell, utilitare de bază
Kernel
User vs Kernel

Spaţiul de adresă (memorie virtuală)


Module de execuţie
Kernel mode Kernel Space
User mode 3GB
Protecţia la memorie
Kernel-space User Space

User-space
Contexte de execuţie

Context process
Cod ce rulează în user-space
Cod ce rulează în kernel-space în urma unui apel de
sistem efectuat de un anumite proces
Context întrerupere
Codul rulează ca urmare a apariţiei unei întreruperi
Întotdeauna rulează în kernel space
Monolitic vs microkernel
App App
User Mode
Client Memory Network
App Server Server
Kernel Mode

System services Process File Display


Server Server Server

User Mode
Kernel Mode

request
Microkernel
reply

OS
procedures
Hardware

Hardware
Monolitic vs microkernel (2)

Linux Minix 3.0


Unix QNX
Windows
Mac OS X
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: macrou-
uri, funcţii inline, pointeri la funcţii
Performanţe foarte bune
Nu există protecţie
Kernele 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'."
Spaţiu de adresă

Spaţiul de adresă fizic


RAM-ul + periferice
Spaţiu de adresă (virtual)
Modul în care procesorul vede memoria: o zonă
continuă de memorie de 4GB (32biti)
Spaţiul de adresă al unui proces
Modul în care un proces vede memoria
Spaţiul de adresă kernel
Zona din spaţiul de adresă care este rezervat kernelului sau
Spaţiul de adresă dedicat kernelelui
Multi tasking/programming/processing

Sisteme de operare ce permit execuţia simultană a


mai multor procese
Mod de implementare
Cooperativ
Preemptiv
Kernel preemptibil

Un kernel este preemptibil dacă un proces poate fi


preemptat chiar şi atunci când rulează în kernel.
Pageable kernel memory

Memorie folosită exclusiv de kernel (cod, variabile


globale, stivă, memorie alocată dinamic) care poate
fi swap-ată.
Stiva kernel

Fiecare proces are asociată o stivă kernel, folosită


pentru a menţine starea procesului pe durata
execuţie în kernel space
Dimensiunea stivei este redusă (4KB – 12 KB)
Portabilitate

Există cel puţin trei straturi în kernelele moderne:


Cod dependent de arhitectură (C & ASM)
Cod independent de arhitectură (C):
core
device drivere
SMP vs ASMP
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
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 dezvolatare: 2 – 3 ani
Noul model:
Fiecare versiune 2.6 este stabilă,
Ciclul de dezvoltare: 3 – 4 luni
„Git trees”

Oficial: Linus Torvalds


git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git

-mm git tree: Andrew Morton


Fiecare distribuţie îşi menţine propriul tree
Organizarea surselor
Arhitectura Linux

User User
applications applications

User
Mode libc

Kernel
Mode Kernel Device drivers
Architecture dependent code
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.”
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.
Device drivere

Unified device model


Reduce duplicarea codului
Posibilitatea enumerării
device-urile
Crearea unui arbore de
dependenţă
Legături între drivere şi
device-uri
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: SCSI device drivers
Filesysteme device drivers
Network device drivers
USB device drivers
Frame buffer drivers
3D acceleration device drivers
Kernel

Process management
Memory management
Block I/O
VFS – Virtual Filesystem Subsystem
Networking
Securitate: LSM, SeLinux
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
Managerul de memorie
Managerul de memorie (2)

Gestiunea memoriei fizice


Memorie virtuală: paginare, swap, demand paging,
copy on write, memorie partajată
Algoritmul de evacuarea a paginilor: kswapd
Servicii pentru user-space: spaţiul de adresă
procese, mmap(), brk()
Servicii pentru kernel-space: slab, vmalloc
Block I/O management

I/O schedulers
Buffer cache
VFS
VFS (2)

Implementarea operaţiilor open(), read(), write(),


close(), ioctl(), pipe(), exec()
Internals: page cache, icache, dcache
Implementarea diverselor sisteme fişiere suportate
de Linux
LSM

Linux security modules


Hook-uri pentru module de securitate
SELinux – proiect NSA, extinde modelul clasic de
securitate UNIX
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
Arhitectura W2K

System
support Service User Environment
processes processes applications subsystems

User
Mode Subsystem DLLs

Kernel
Mode Executive Windowing
Kernel Device drivers and graphics
Hardware Abstraction Layer (HAL)
HAL

Hardware Abstraction Layer


Modul kernel
Izolează sistemul de operare de diferenţe hardware
pe aceeaşi arhitectură
Hardware-ul nu se accesează direct ci indirectat
prin HAL
Accesul la I/O (porturi)
Controlerul de întreruperi
Device Drivere
Module kernel (.sys)
Tipuri de device drivere
Hardware device drivere
Ex: ethernet, PCI, mouse, etc
File system drivers
Traduc cereri I/O la nivel fişier în cereri I/O la nivel bloc
File system filter drivers
Sunt interpuse între file system drivers şi gestiunea I/O la
nivel bloc
Criptare, RAID software
Device Drivere (2)

Tipuri de device drivere


Redirectoare de reţea
Tipuri de drivere file system care traduc operaţiile de I/O la
nivel fişier în pachete destinate unei alte maşini
Protocol drivers
Implementează protocoale de reţea (TCP/IP, NetBEUI,
IPX/SPX)
Device Drivere (3)

Imbunatatiri aduse în W2K


Suport pentru Plug&Play şi Power Management
Device driverele sunt clasificate în 3 mari clase
(WDM)
Bus driver
Function driver
Filter driver
Kernel-ul
Funcţii implementate în NTOSKRNL.EXE; sunt
folosite de executiv
Independete de arhitectură
Sincronizare
Planificare
Dependente de arhitectură
Suport întreruperi şi excepţii
Implementat în C si ASM
Implementează mecanismele necesare SO, dar nu
ia decizii de policy (cu execepţia planificării)
Obiecte Kernel

Fiecare entitate manipulată în kernel este


reprezentată de un obiect (o structură care adună
la un loc informaţiile despre acea entitate)
Obiecte de control
APC, DPC, obiecte întreruperi
Obiecte dispecer (sincronizare şi planificare)
Thread-uri kernel
Mutex-uri, semafoare
Timere
Executivul

Funcţii implementate în NTOSKRNL.EXE


Exportate şi apelabile din user-space (system services =
apeluri de sistem)
Exportate şi apelabile din kernel-space (folosite de
device drivere)
Foloseşte serviciile (funcţiile) puse la dispoziţie de
kernel
Aici se implementează politica dorită
Obiecte executiv

Încapsulează (conţin pointeri către) obiecte kernel


Conţin şi alte informaţii necesare pentru a servi
cererile utilizatorului (handler-uri pentru
manipularea obiectelor)
Implementarea politicii necesită de asemenea
informaţii si operaţii în plus: informaţii/verificări
de securitate
Componente ale executivului

Managerul de configurare
Implementarea si gestiunea registry-ului
Managerul de thread-uri şi procese
Crearea si terminarea thread-urilor
Managerul de securitate
Mangerul operaţiilor de I/E
Transferă cererile de I/E către device driverele de tip bloc
Interactionează cu Cache Managerul
Componente ale executivului (2)

Power Managerul
Cache Managerul
Managerul de memorie virtuală
Componente speciale ale executivului
Managerul de obiecte
Crează, gestionează si distruge obiectele executiv
Funcţii LCP (Local Procedure Call)
Execuţie de proceduri inter-proces
Versiune optimizată a RPC
Biblioteca run-time
Operatii cu şiruri, matematice, etc.
Rutine de suport
Alocator de memorie (paged şi non-paged)
Subsisteme de mediu
Prezintă utilizatorului mai multe vederi prin care
acesta să acceseze funcţiile sistem
În W2K există trei subsisteme
OS/2
POSIX
Win32
Win32 este necesar, OS/2 si POSIX sunt opţionale
şi sunt încarcate doar la cerere
Fiecare subsistem are asociat un proces
Subsistemul Win32

Procesul asociat subsistemului este creat prin


rularea csrss.exe
Gestiunea consolei
Crearea si terminarea proceselor şi thread-urilor
Părti din maşina virtuală pentru aplicaţii DOS
Un device driver (Win32k.sys)
Managerul de ferestre
GDI
Subsistemul Win32 (2)

DLL-uri (kernel32.dll, user32.dll gdi32.dll


advapi32.dll)
Face apeluri de sistem în kernel sau LPC-uri către csrss.exe
Subsistemul POSIX
POSIX = “a Portable Operating System Interface
based on uniX”
Suport doar pentru POSIX 1003.1
Pentru că era inclus în lista necesară unui sistem pentru a fi
folosit de guvern
Din acest motiv portarea aplicatiilor UNIX nu este comodă
Procesul asociat subsistemului este creat prin
rularea psxss.exe
Aplicaţiile POSIX sunt rulate cu ajutorul posix.exe
şi sunt legate cu psxdll.dll
Selectarea subsistemului

Selectarea subsistemului se face automat de SO,


examinând un câmp din executabil (creat de
către linker)
Subsistemele POSIX si OS/2 se incarcă dinamic, la
prima invocare a unui executabil din acel
subsistem
Subsistemele sunt izolate între ele (un program
POSIX nu poate face apeluri Win32)
Arhitectura W2K (detaliu)
Fisiere sistem de baza
Procese sistem
Idle process
PID 0
Cate unu pentru fiecare procesor
Nu are ca suport o imagine (un executabil)
Este folosit pentru a contoriza timpul cât procesorul este
liber
System process
PID 8
Este folosit pentru a rula kernel thread-uri: memory
managerul le foloseşte pentru a scrie paginile murdare pe
disc, cache manager-ul pentru a implementa read ahead şi
write-behind
Procese sistem (2)
Session manager (Smss.exe)
Primul proces user-mode creat
Efectueaza operatii vitale pentru boot: crearea variabilelor
de mediu, lansarea subsistemelor configurate să fie pornite
şi a procesului de login
Daca csrss.exe sau winlogon.exe se termină se generează un
crash
Logon process (Winlogon.exe)
Se ocupă de login-urile si logout-urile (interactive)
După ce utilizatorul se autentifică (se apeleaza lsass.exe
pentru verificare) se lansează userinit.exe care termină
iniţializarea sistemului şi ruleaza explorer.exe
Procese sistem (3)
Logon process (Winlogon.exe)
Identificarea şi autentificarea sunt incapsulate într-o
bibliotecă GINA cu interfaţa bine definită astfel încat
poate fi inlocuită
Local security authentication server (lsass.exe)
Este apelat de către winlogon, face verificările de rigoare şi
generează un token de acces care va fi verificat de către
executiv la operaţiile făcute de proces
Token-ul de acces va fi folosit de winlong pentru a crea
shell-ul (implicit explorer.exe)
Token-ul de access va fi apoi moştenit de fiecare process
lansat din shell
Procese sistem (4)

Service control manager


Procesul care porneşte, gestionează şi opreşte servicii sistem
Serviciile sunt programe cu o interfata bine definită prin
care pot interacţiona cu SCM-ul
SCM-ul citeste configuraţia serviciilor din registry
Tot SCM-ul încarcă şi device drivere

S-ar putea să vă placă și