1 / 179

Windows internals

Windows internals. http:// www.microsoft.com/italy/msdn/studenti scoriani@microsoft.com. Benvenuti. Un giorno di full immersion nel kernel di Windows Architettura del kernel Come funziona Come sfruttarlo al meglio Come analizzare i problemi. Agenda. Architettura kernel di Windows

landry
Télécharger la présentation

Windows internals

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Windows internals http://www.microsoft.com/italy/msdn/studenti scoriani@microsoft.com

  2. Benvenuti • Un giorno di full immersion nel kernel di Windows • Architettura del kernel • Come funziona • Come sfruttarlo al meglio • Come analizzare i problemi

  3. Agenda • Architettura kernel di Windows • Gestione della memoria • Processi • Thread • Thread pool • Jobs • Interprocess communication • Overlapped I/O • Domande & Risposte

  4. Architettura kernel di Windows

  5. MS Windows NT: obiettivi del progetto • Compatibilità • applicazioni Win32, Win16, MS-DOS, OS/2, POSIX • Portabilità • Ieri: piattaforma Intel, RISC • Oggi: IA-32 (Pentium), IA-64 (Itanium) • A breve: AMD-64 (Opteron) • Robustezza • Estendibilità • Performance • Compatibilità • binaria, sorgente, file system

  6. Symmetric Multiprocessors Server Personal Computer Laptop Computer Portabilità

  7. Applications and Subsystems (User-Mode Instruction Set) Software I/O Manager Process Manager Security Monitor Local IPC Object Manager Virtual Memory Manager GDI USER Kernel Device Drivers HAL Hardware CPU Privileged Architecture I/O Devices DMA/Bus Controller Caches, Interrupts Timers Architettura di MS Windows NT

  8. System Memory (2 GB) Non-paged Paged Physical Addressing Range Per-Process Memory (2 GB) Paged Robustezza:Spazi di indirizzamento separati

  9. Robustezza: User Mode ePrivileged-Processor Mode • User Mode • applicazioni in esecuzione • Accesso esclusivamente allo spazio di indirizzamento dei processi • Divieto di accesso diretto all’hardware • Privileged-Processor Mode • Contiene il codice di sistema: executive, drivers, kernel e HAL • “Trusted” • Può eseguire qualsiasi istruzione • Accesso all’intero spazio di indirizzamento

  10. Robustezza: Security • Per-User Permissions • Access Control List (ACL) • Auditing Access • Quotas (sempre presente, non implementato fino a Windows 2000)

  11. Send Reply Robustezza: i sottosistemi User Mode Win32-Based Application POSIX OS/2 Subsystem Win32 Subsystem Local Procedure Call Executive Privileged-Processor Mode

  12. Applications and Subsystems (User-Mode Instruction Set) Software NTFS-5 I/O Manager Process Manager Security Monitor Local IPC Object Manager Virtual Memory Manager NTFS Jobs GDI USER Kernel FAT TimerQueue Device Drivers Encryption HAL Hardware CPU Privileged Architecture I/O Devices DMA/Bus Controller Caches, Interrupts Timers Estendibilità

  13. Process Access Token Mutex Thread Event Semaphore Section File Registry Gli oggetti di NT (kernel objects)

  14. Object model • L’object model consente di: • monitorare le risorse • implementare la sicurezza • condividere le risorse

  15. Object Attributes Object Name Object Directory Security Descriptor Quota Charges Open Handle Counter Open Handle Database Permanent/Temporary Kernel/User Mode Type Object Pointer Object Header Type Object Object Body Object: struttura interna

  16. Object: interfaccia esterna • Funzioni Parametri comuni • Createxxx Security attributes, inheritance, name • Openxxx Security attributes, inheritance, name • BOOL CloseHandle(hObject) • BOOL DuplicateHandle(hSourceProcess, hSource, hTargetProcess, lphTarget, fdwAccess, fInherit, fdwOptions) • Lo scope di un Object Handle è relativo a ogni singolo processo • Durata di un oggetto

  17. Struttura SECURITY_ATTRIBUTES typedef struct _SECURITY_ATTRIBUTES { DWORD nLength; LPVOID lpSecurityDescriptor; BOOL bInheritHandle; } SECURITY_ATTRIBUTES;

  18. Access Token Security ID: LEES Group IDs: TEAM1 TEAM2 LOCAL INTERACTIVE WORLD Privileges: None . . . Event Object Access Control List . . Security Descriptor Allow LEES Synchronize Modify State Allow TEAM1 Synchronize Allow TEAM2 Synchronize Modify State . . Security Detail

  19. Architettura Windows NT/2000 • Radici nel passato (VMS) • Disegno modulare ed estendibile • Pochi cambiamenti e molte ottimizzazioni dal kernel di Windows NT 3.1 a quello di Windows 2000 • Modello ad oggetti, ma non object-oriented

  20. Gestione della memoria(Memory Manager)

  21. Gestione della memoria • I processori iAPX86 • Indirizzamenti real-mode e protected-mode • Funzioni API • Condivisione della memoria • VLM – Very Large Memory • AWE – Address Windowing Extension

  22. I Processori Intel iAPX86 • Tutti eseguono il boot in Real Mode • Su 8088/8086 è l’unica possibilità • Su 286 e successivi è necessario per compatibilità • Dopo il boot 286 e successivi possono passare al protected mode • Tutti hanno un’architettura segmentata

  23. Indirizzamento in real-mode 15 0 15 0 : segment offset (shift leftby 4 bits) 19 4 3 0 19 16 15 0 segment’s base address 0 0 0 0 0 0 0 0 effective address + 1 MB RAM 19 0 linear address 220 = 1MB 0

  24. Real-mode • Nessun meccanismo di protezione della memoria • Diverse combinazioni segment:offset indirizzano la stessa locazione di memoria fisica • Nessun supporto hardware nativo per una efficacie implementazione del multitasking • Microsoft ha inventato una implementazione software del multitasking per Windows 1.x

  25. x 8192 x 8192 BASE BASE ACC. ACC. LIMIT LIMIT ACCESS ACCESS BASE BASE BASE BASE LIMIT LIMIT Protected-mode (32 bit) 15 2 1 0 31 0 : selector TI RPL offset GDT 15 0 16GB/ 64TB 0 BA+SS ? 63 48 BA LDT SEGMENT 15 0 1 TI = Table Index RPL = Requestor Privilege Level GDT = Global Descriptors Table (64KB) LDT = Local Descriptors Table (64KB) BASE = BA = Base Address (32 bit) LIMIT = Limit (20 bit) = 1 MB ACC. = ACCESS = Access Byte (12 bit) SS = Segment Size 0 RAM 63 48 G D 0 AVL P DPL S TYPE Struttura Interna Access Byte G = 0 SS = Limit x 1 Byte = 1 MB G = 1 SS = Limit x 1 Page = Limit x 4KB = 4GB (G = Granularity Bit)

  26. Protected-mode (32 bit) • Se la granularità è una pagina (4KB), ciascun segmento è da 4GB e lo spazio di indirizzamento virtuale è di 64TB! • Il descriptor è comunque compatibile con 16 bit PM • L’architettura è comunque segmentata e limita la portabilità • Tipicamente le piattaforme RISC non hanno architettura segmentata…

  27. Eliminare la Segmentazione • In Win95 e WinNT, il sistema operativo utilizza un solo segmento da 4GB • In pratica, l’indirizzamento in Win32 è basato esclusivamente sull’offset (32 bit) • L’indirizzamento appare lineare (o flat) • Questo assicura la portabilità ad architetture non segmentate (es. RISC) • Win32 indirizza fino a 4GB RAM fisica • Tuttavia la strategia di implementazione è basata sulle Pagine • La quantità minima di memoria allocabile è la pagina = 4KB

  28. Perchè Paginare la Memoria • Se l’offset fosse usato come un riferimento diretto alla locazione di memoria, lo spazio di indirizzamento virtuale coinciderebbe con la RAM fisica installata • Per indirizzare 4GB virtuali, sarebbe necessario disporre di 4GB di RAM fisica in ogni sistema! • La paginazione consente di simulare uno spazio di indirizzamento fisico da 4GB anche se la RAM fisica installata è <4GB • Remapping della memoria fisica sulla memoria virtuale • Paginazione su disco • Exceptions generate dal processore e gestite dal sistema operativo

  29. 32 bit Offset in Win32 31 22 21 12 11 0 PDE (10 bit) PTE (10 bit) OFFSET (12 bit) 20 bits 12 bits 20 bits 12 bits 4GB 1023 1023 PAGE 4KB 0 0 Page Directory Page Table Win32 Process Context CR#3 0 i386 RAM PDE = Page Directory Entry PTE = Page Table Entry CR#3 = Control Register #3

  30. System Memory (2 GB) Non-paged Paged Physical Addressing Range Per-Process Memory (2 GB) Paged Spazio di indirizzamento

  31. Process Address Space Physical Memory 2 GB Page Tables Committed Pages R e s e r v e d Invalid Invalid Committed Pages 0 Memoria virtuale

  32. Virtual Address Space Physical Memory 2 GB Directory 1024 Entries Table 1024 Entries 4K 12 MB Frame Invalid Invalid 8 MB 4 MB 4K 4K Valid Paged 0 Paging File 10 Bits 10 Bits 12 Bits Directory Index Table Index Byte Within Page Page Directory, Page Table,Page Frame

  33. Paging File • Contiene Pagine scambiate dalla Memoria RAM al Disco • Dimensione pagina: 4K o 8K • Paging Policy

  34. Process Address Space 2 GB Committed Pages R e s e r v e d Committed Pages Page Commitment

  35. Committed Memory Process 1 Virtual Memory Page 1 Page 2 Page 1 Section Page 2 Page 1 Page 2 Copy Page 2 Copy (Read-Write) Process 2 Virtual Memory Copy-on-Write e Guard Pages

  36. Funzioni API: VirtualAlloc • Manipolazione pagine virtuali o spazi di indirizzamento • Lettura stato pagine virtuali o spazi di indirizzamento • LPVOID VirtualAlloc(lpvAddress,cbSize, fdwAllocationType,fdwProtect) • BOOL VirtualFree(lpAddress,cbSize,fdwFreeType) • BOOL VirtualProtect(lpvAddress,cbSize, fdwNewProtect, pfdwOldProtect) • DWORD VirtualQuery(lpAddress,pmbiBuffer,cbLength) • BOOL VirtualLock(lpvAddress,cbSize) • BOOL VirtualUnlock(lpvAddress,cbSize)

  37. Esempio: Uso di Funzioni VirtualXXX ... lpBase = VirtualAlloc (NULL, my_size, MEM_RESERVE, PAGE_NOACCESS); ... __try{ // an EXCEPTION_ACCESS_VIOLATION here // will be fixed by MyFilter if possible } __except (MyFilter (GetExceptionInformation())) { } ... VirtualFree (lpBase, 0, MEM_RELEASE); ...

  38. Gestione Heap • Lo Heap è ottimizzato per allocare blocchi di memoria più piccoli senza l’overhead di pagina (4k o 8k) • Ogni processo ha uno Heap di default • E’ possibile allocare Heap privati • La memoria allocata in uno heap può portare a fenomeni di frammentazione • Sono Thread-Safe per default

  39. Funzioni API: HeapAlloc • Allocazione di un Heap privato • HANDLE HeapCreate(flOptions,dwInitialSize,dwMaximumSize) • BOOL HeapDestroy(hHeap) • LPVOID HeapAlloc(hHeap,dwFlags,dwBytes) • BOOL HeapFree(hHeap,dwFlags,lpMem) • DWORD HeapSize(hHeap,dwFlags,lpMem) • LPVOID HeapReAlloc(hHeap,dwFlags,lpMem,dwBytes) • Sono Thread-Safe per default

  40. Funzioni API: LocalAlloc/GlobalAlloc • Tutti i puntatori sono valori a 32 bit • LocalAlloc e GlobalAlloc allocano memoria dallo stesso Heap • GlobalAlloc garantisce allocazioni con allineamento a 16 bit • HGLOBAL GlobalAlloc(fuFlags,cbBytes) • HLOCAL LocalAlloc(fuFlags,cbBytes) • Presenti solo per ragioni di compatibilità: richiamano HeapAlloc

  41. Funzioni API: C Run-Time Library • Le funzioni delle Standard C Run-Time Libraries possono essere usate (malloc, calloc, free, realloc, ...) • Bilanciare chiamate malloc() con free(), senza mischiare con GlobalFree(), HeapFree() o altro

  42. Memory-Mapped File • I Memory-Mapped Files consentono di condividere la memoria tra processi diversi • Sono l’equivalente Win32 dell’oggetto kernel Section

  43. Physical Memory PG.SYS Sections Views File Viste di Memory-Mapped File

  44. FileMapping: le cose ovvie • Il file è mappato in memoria come se fosse effettivamente caricato • Gli indirizzi di memoria necessari ad effettuare il mapping devono essere riservati • Solo le pagine effettivamente utilizzate (a cui si accede in lettura o in scrittura attraverso puntatori di memoria) vengono effettivamente lette/scritte su disco • Il Paging File usato come Memory Mapped File non rende persistenti le operazioni effettuate in memoria

  45. File Mapping: le cose meno ovvie • Tutte le operazioni di I/O su file avvengono come operazioni di file-mapping • La cache dell’I/O Manager è integrata con il Memory Manager • Tutte le volte che si apre un eseguibile (.EXE, .DLL, .OCX), il codice e le risorse non vengono caricate in memoria fino a che non sono realmente utilizzate (anche queste sono operazioni di file-mapping) • Caricando più volte la stesso file EXE/DLL da processi diversi, la memoria fisica impegnata è sempre la stessa

  46. CreateFileMapping e OpenFileMapping • Crea un oggetto Section • HANDLE CreateFileMapping(hFile, lpsa, fdwProtect, dwMaximumSizeHigh, dwMaximumSizeLow, lpszMapName) • Apre un oggetto Section • HANDLE OpenFileMapping(dwDesiredAccess, bInheritHandle, lpszMapName) • Assegnando a hFile il valore –1 si usa il PagingFile

  47. MapViewOfFile e UnmapViewOfFile • LPVOID MapViewOfFile(hMapObject,fdwAccess,dwOffsetHigh,dwOffsetLow,cbMap) • BOOL UnmapViewOfFile(lpBaseAddress) • BOOL FlushViewOfFile(lpvBase, cbFlush) • UnmapViewOfFile scrive tutti i cambiamenti su disco • Lazy Writes su disco delle scritture in memoria • E’ garantita la coerenza di viste differenti di un singolo oggetto Section

  48. Process 1 Virtual Memory Committed Memory View Section Process 2 Virtual Memory View Usare Memory-Mapped File come Shared Memory

  49. Gestione della memoria • Superare il muro dei 4Gb con Win32 • Solo per i dati, non per il codice • VLM – Very Large Memory • Solo su Windows 2000 Advanced Server • Solo per processori a 64 bit, ad oggi solo Alpha, che non supporta più Windows 2000 • AWE – Address Windowing Extension • Su tutte le versioni di Windows 2000 • Per tutti i processori a 32 e 64 bit (Win64) • Meno comodo da usare...

  50. AWE – Address Windowing Extension • Per tutti i processori e per tutte le versioni di Windows 2000 • Memoria mappata nello spazio virtuale disponibile al processo (2Gb/3Gb) • Non funziona con funzioni grafiche/video • Granularità 4K/8K • Il processo deve essere abilitato (diritto Lock Pages in Memory) • Una zona allocata con AWE non può essere condivisa con altri processi

More Related