MKZ III. Windows CE architektura Procesy, vlákna, plánování Správa paměti GWES Souborový systém
Platformy CE AutoPC Car computer, navigační systém HandheldPC PocketPC Pocket PC 2002 Pocket PC 2003 SE Smartphone 2002 Smartphone 2003 Windows Mobile 5.0 Windows Mobile 6.0
Windows CE není modifikací Windows pro desktopy from scratch od mid. 1990 s real-time OS pro embedded zařízení základní technologie pro Windows Mobile devices (Smartphone, PocketPC) změny ve verzi CE 6.0 oproti předchozím množství paměti pro proces počet procesů
Windows CE architektura Applications Embedded Shell Windows CE Shell Services Remote Connectivity WIN32 APIs COREDLL, WINSOCK, OLE, COMMCTRL, COMMDLG, WININET, TAPI Kernel Library GWES Device Manager File Manager IrDA TCP/IP OAL Bootloader Drivers Device drivers File drivers OEM Hardware
Windows CE zjednodušená arch. Applications Development Tools Shell Kernel Persistent Storage GWES Communications Built-in in Drivers Installable Drivers OEM Hardware
Window CE 6.0 architektura Applications User Space SHELL SERVICES. EXE Services Services Services Services UDEVICE. EXE User Mode Drivers Services Services Services COREDLL / WINSOCK / COMMCTRL / WININET / COMMDLG Kernel Space KERNEL. DLL OAL. DLL Boot Loader FILESYS GWES NETWORK KCOREDLL DLL DEVICE Drivers.DLL Hardware
Windows CE architektura složeno z modulů moduly rozděleny do komponent komponenty kompaktní, < 200KB ROM 4 základní moduly jádro object store GWES (Graphics, Windowing and Events Subsystem) komunikace
Windows CE architektura optional moduly správa installable device drivers podpora COM viz http://www.microsoft.com/technet/prodtechnol/wce/plan/wceintro.mspx
Jádro (coredll module) základní funkcionalita všude správa paměti, procesů, file management scheduling, multitasking, multithreading exception handling některé optional kernel komponenty pro telefonie, multimedia, GDI
Object Store filesys module object store API File system aplikace a datové soubory System registry konfigurace systému Windows CE database poskytuje strukturované úložiště
GWES rozhraní uživatel aplikace OS převádí keystrokes, stylus movements na zprávy window aplikace potřebují okno, aby mohly přijímat zprávy z OS; i pokud nemají grafický displej controls, menus, dialogové boxy GDI zobrazování textu a grafiky
Komunikace Serial I/O RAS TCP/IP TAPI Wireless Services
Windows CE kernel Základní funkcionalita: Správa procesů a vláken Plánování vláken Správa paměti Správa přerušení
Procesy a vlákna Windows CE podporuje až 32 souběžných procesů Windows CE 6: cca 32 000 procesů Každý proces libovolný počet vláken Jednotkou vykonávání pod Windows CE je vlákno Vlákna jsou nezávislá každé patří nějakému procesu (sdílí stejný paměťový prostor, obvykle 32MB, CE 6: až 2GB) každé vlákno má ID, soukromý 64KB zásobník a set of registers tj. kontext vlákna Každý proces po startu primární thread
CE Kernel 2 GB Kernel Space File system GWES Drivers 2 GB per Process User VM Memory Mapped files User DLLs...... Process Code User VM Up to 32 K Processes
Procesy a vlákna Přeplánování vlákna schedulerem uložení kontextu začne se vykonávat další thread obnovení kontextu při dalším naplánování Ochrana procesů Každý proces vlastní kod a data
Procesy a vlákna - priority procesy nemají prioritu thready mají prioritu (nejprve 8 úrovní, později 256) THREAD_PRIORITY_TIME_CRITICAL.. THREAD_PRIORITY_NORMAL.. THREAD_PRIORITY_IDLE při vytvoření normální priorita ve stejném procesu lze thready s různou prioritou
Běh vláken V režimu jádra plný přístup ke zdrojům OS Operating System Threads a Interrupt Service Routines (ISRs) V uživatelském režimu chráněné prostředí aplikace, ovladače zařízení
Vytváření procesů a vláken Vytvoření procesu CreateProcess vrací handle a ID procesu Vytvoření vlákna CreateThread vrací handle a ID vlákna vstupním bodem vlákna funkce adresa funkce předána do CreateThread ukončení vlákna návrat z funkce Ukončení handle vlákna předán funkci CloseHandle
Plánování Preemptivní plánovač, priority-based vlákna stejné priority round robin kdyžnenížádnédanépriority, dalšínižšíprioritu TIME_CRITICAL.. běží do ukončení bez přerušení plánovačem využíváno pro zpracování ISR (Int.Ser.Routine) Plánování založeno na vláknech 10 vlákne jeden proces, 1 vlákno druhý každý dostane 1/11 času
Plánování vláken, vlákno 1 má nejvyšší prioritu
Běh vlákna je přerušen, když: časové kvantum vyprší je přerušeno vláknem s vyšší prioritou blokováno při soupeření o zdroj critical section, mutex Časové kvantum typicky 1OO milisekund 0 kvantum nikdy nevyprší OEM můžou specifikovat jiné kvantum
Plánování Vlákna dostanou časové kvantum mohou se vzdát CPU Sleep(0) naplánováno další vlákno mohou čekat na dostupnost zdroje WaitForSingleObject (handle, timeout) WaitForMultipleObjects (pocet, ppole, timeout) kritické sekce nelze sdílet s jinýmy procesy více threadů souběžný přístup Inverze priorit nízkoprioritní vlákno drží zdroj vyžadovaný vláknem s vysokou prioritou
Kritická sekce void InitializeCriticalSection (LPCRITICAL_SECTION lpcriticalsection); void EnterCriticalSection (LPCRITICAL_SECTION lpcriticalsection); void LeaveCriticalSection (LPCRITICAL_SECTION lpcriticalsection); void DeleteCriticalSection (LPCRITICAL_SECTION lpcriticalsection);
Inverze priorit Řešení dočasně zvýží prioritu low-priority vlákna než uvolní zdroj TIME_CRITICAL NORMAL T L locks resource T H starts, requests resource T L boosted until resource freed T H continues to completion TL runs as scheduled Time
Inverze priorit vlákna spuštěna 3,2,1
Architektura paměti adresní prostor jeden, plochý, sdílený všemi procesy procesy mohou adresovat až 4GB paměti pouze spodní 2GB dostupné pro procesy proces alokuje pamět vrací ze spodních 2GB horní 2GB pro použití systémem stránkovaná virtuální paměť mapování virt. adres do fyzické paměti žádný swap (disk..) paměť plná, aplikace spadne
Low 2GB paměti dostupná programům 1GB rozdělen na 33 slotů, každý po 32MB každý slot 512 bloků po 64KB každý blok rozdělen na stránky Každý proces omezen na vlastní 32MB adresní prostor x CE 6.0 každý 64KB blok má lock, každý thread má klíč Horní 1GB pro large memory allocation paměťově mapované soubory
Pokračování Zavedení procesu přiřadí další dostupný slot Jádro chrání každý proces tím, že mu přiřadí unikátní slot Jeden slot je rezervován pro aktuálně běžící proces
Zavedení procesu Zavedení procesu Přiřazen další dostupný slot DLL nahrána od nejnižší adresy ve slotu následuje stack a default process heap executable Naplánování procesu kopie ze svého slotu do slotu 0
Zavedení procesu Když proces alokuje pamět vrácena adresa odpovídající slotu 0 mapována zpátky do původního slotu přiřazenému procesu, když je proces neaktivní Jádro, file system, windowing system všechny mají svoje vlastní sloty
Rozdělení paměti 4 GB Reserved for System 2 GB 32... 4 3 2 1 Slot 0 Shared Memory Shell GWE Filesys Kernel (Current) 1 GB 32 MB 0 MB
User Space Virtual Memory Mappig 0x80000000 Shared System Heap 255 MB RAM Backed Mapfiles 256 MB R/W for OS components Read only for user process RAM Backed Map files Mapped at fixed location for better backwards compatibility User Space 2 Gigabytes Each process has its own mapping Shared User DLLs 512 MB All DLLs code and data Same mapping across all processes Data pages are unique physical pages Code pages are shared 0x40000000 Process space 1 GB per process 0x00000000
Manipulace s pamětí Paměť alokovaná procesem Rezervovaná Rezervuje adresní prostor pro aplikaci Nemapuje virtuální stránky na fyzické Potvrzená (Committed) Virtuální str. mapované na fyzické stránky v RAM Označeno, že se používají Proces může rezervovat paměť a potvrdit jí až ji bude potřebovat Alokace rezervované paměti je rychlejší než alokace potvrzené paměti
Heap Lokální heap Oblast paměti Izoluje procesy od velikosti stránky procesoru Všechny procesy mají alokován defaultní heap od jádra 192KB alokováno automaticky HeapAlloc, HeapFree
Zásobník Procesy alokují 60KB stack per vlákno 2KB použity jako ochrana proti overflow 58KB pro použití Proměnné uvnitř funkcí na zásobníku Žádost o zásobník může skončit odložením vlákna když je málo paměti Uvolnění paměti po ukončení vlákna
Využití fyzické paměti Windows CE obvykle nemá žádný disk RAM a ROM odlišná role od desktopů Long-term storage ROM permanent storage Obsah daný OEM OS a vestavěné aplikace (Excel,..)
Využití fyzické paměti 2 Většinou RAM je napájena nepřetržitě Persistent storage RAM na dvě oblasti Storage (Object Store) Uložení dat a spustitelného kódu, který není v ROM Program Memory Použita pro běh programů
Object Storage 3 typy úložišť Windows CE file system Aplikace nainstalované uživ., datové soubory Vždy komprimovaný Windows CE databáze Strukturovaná forma úložiště Více databází, sdílené mezi aplikacemi Windows CE system registry Uložení konfiguračních dat Bratříček registrů z klasických windows Přístup standardními funkcemi
GWES Graphics, Windowing and Event Subsystem GUI rozhraní (uživatel, aplikace, OS) Spravuje Vstupy (převod stisků kláves, pohyb stylusu..) Výstupy (správa oken, grafiky, textu) Předávání zpráv (Message Event Passing) Správa napájení WinCE nepodporuje Maximize a Minimize Platformy bez GUI stále potřebují GWES kvůli předávání zpráv
GWES struktura GWES Application Window Message System Window Manager Controls, Menus, Resources Graphics Device Interface Keyboard Driver Touch Driver Display Drivers
GWES GDI (Graphical Device Interface) Řídí zobrazování textu a grafiky Kreslení čar, křivek, textu, obrázků Všechny aplikace potřebují okno, aby mohli přijímat zprávy z OS (i zařízení bez graf. displeje) Vytvoření okna CE vytvoří message queue pro dané okno OS převádí info od uživatele do zpráv, které jdou do message queue aktivního okna Aplikace zpracuje většinu zpráv, zbytek předá OS
GWES posílání zpráv Fronta zpráv asociována s oknem Fronty jsou asociovány s vlákny Každé vlákno v CE má svojí frontu zpráv Fronta je vytvořena, když vlákno volá GetMessage Posílání zpráv PostMessage Dá zprávu do fronty cílového vlákna, vrací se hned SendMessage Čeká, dokud příjemce nezpracuje zprávu SendThreadMessage Pošle zprávu přímo vláknu
GWES správa napájení No power Není energie z AC, baterie, záložní baterie On Idle Zapnuté zařízení, nepoužité nějaký čas PCMCIA, modemy, NIC shut down Suspend Periferie a CPU vypnuto Energie k udržování RAM Critical off Low battery condition Odsud se nedostane, dokud není dostatek energie
Windows CE memory model 32bitový OS Může adresovat až 4GB virtuální paměti Stejně jako 32bit Windows pro desktopy Odlišné členění Každá aplikace má garantováno jen 32MB virtuální paměti Další alokace už není privátní paměť aplikace, společná pro všechny aplikace
Paměť dostupná Windows CE aplikaci
Souborový systém - architektura Spravováno filesys.exe Implementuje objectstore a StorageManager Jeden jmenný prostor pro všechny file systémy začínající \ Žádná písmenka C:, D: Drives připojeny jako adresáře pod \ Např.: \Storage Card
Filesys.exe - komponenty ROM File System read-only soubory umístěné v \Windows Storage Manager Object Store Paměťová halda řízená filesys.exe RAM systém registry Do verze Win CE 4.0 vždy objekt store Win CE.NET může být jako soubor na externě připojeném filesystému (disk) RAM file systém Root filesystému, např. \soubor.txt Prophety database
Storage manager Nový v Win CE.NET Správa úložných zařízení a file systémů Storage drivers Přístup k fyzickému mediu, block driver Partition drivers Správa víc partition na jednom storage zařízení Fyzický disk víc partition různé filesystémy File systém drivers Organizuje data do souborů a adresářů UDFS CD a DVD, FATFS File systém filters Např. komprese, kryptování, statistiky
Windows CE file system
Storage Manager Fliters jsou pod StorageManagerem neaplikují se na ROM filesystem ani RAM file systém v ObjectStore
Jak to funguje OS bootuje.. NK.exe zavede FileSys.exe z ROM filesystemu Filesys.exe inicializuje registry z default registry v ROM filesystemu Filesys.exe dle záznamů v registrech spustí různé aplikace Jedna z prvních device.exe Device Manager načte záznamy o drives
Storage Manager
Materiály Zpracováno s využitím materiálů: Windows CE Architecture Computing Department, Lancaster University, UK MSDN dokumentace, Blogy vývojářů