MKZ III. Windows CE architektura Procesy, vlákna, plánování Správa paměti GWES Souborový systém
Platformy CE {
AutoPC z
{ { { { { { { {
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 z
{
Windows Mobile devices (Smartphone, PocketPC)
změny ve verzi CE 6.0 oproti předchozím z z
množství paměti pro proces počet procesů
Windows CE architektura Applications Embedded Shell
Remote Connectivity
Windows CE Shell Services
WIN32 APIs COREDLL, WINSOCK, OLE, COMMCTRL, COMMDLG, WININET, TAPI Kernel Library
GWES
File Manager
Device Manager
IrDA OAL Bootloader
Drivers
Device drivers
File drivers
OEM Hardware
TCP/IP
Windows CE zjednodušená arch. Applications Development Tools
Shell
Kernel
Persistent Storage
GWES
Communications
Built-in Drivers
Installable Drivers OEM Hardware
Window CE 6.0 architektura Applications User Space
SHELL
SERVICES . EXE
COREDLL /
WINSOCK /
Services Services Services Services
UDEVICE . EXE
COMMCTRL
/
WININET /
User Mode Services Drivers Services Services
COMMDLG
DEVICE .DLL KERNEL . DLL Kernel Space
FILESYS
GWES
NETWORK Drivers
OAL . DLL Boot Loader
KCOREDLL Hardware
DLL
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
{ { {
z
pro telefonie, multimedia, GDI
Object Store – filesys module {
object store API
{
File system z
{
System registry z
{
aplikace a datové soubory konfigurace systému
Windows CE database z
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ů z
{ { {
Každý proces – libovolný počet vláken Jednotkou vykonávání pod Windows CE je vlákno Vlákna jsou nezávislá z
z
z
{
Windows CE 6: cca 32 000 procesů
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
User VM Memory Mapped files 2 GB per Process
User DLLs
Process Code User VM
. . .
. . . Up to 32 K Processes
Procesy a vlákna {
Přeplánování vlákna schedulerem z z z
{
uložení kontextu začne se vykonávat další thread obnovení kontextu při dalším naplánování
Ochrana procesů z
Každý proces vlastní kod a data
Procesy a vlákna - priority { {
procesy nemají prioritu thready mají prioritu (nejprve 8 úrovní, později 256) z z z z z
{ {
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 z z
{
plný přístup ke zdrojům OS Operating System Threads a Interrupt Service Routines (ISRs)
V uživatelském režimu z z
chráněné prostředí aplikace, ovladače zařízení
Vytváření procesů a vláken {
Vytvoření procesu z z
{
Vytvoření vlákna z z z z z
{
CreateProcess vrací handle a ID procesu 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í z
handle vlákna předán funkci CloseHandle
Plánování {
Preemptivní plánovač, priority-based z z z
z
{
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 z z
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 z
{
critical section, mutex
Časové kvantum z z z
typicky 1OO milisekund 0 – kvantum nikdy nevyprší OEM můžou specifikovat jiné kvantum
Plánování {
Vlákna dostanou časové kvantum z
z
z
{
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 z
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
TH starts, requests resource TL locks resource
TL boosted until resource freed
Time
TH continues to completion
TL runs as scheduled
Inverze priorit vlákna spuštěna 3,2,1
Architektura paměti {
adresní prostor z
{ {
procesy mohou adresovat až 4GB paměti pouze spodní 2GB dostupné pro procesy z
{ {
jeden, plochý, sdílený všemi procesy
proces alokuje pamět – vrací ze spodních 2GB
horní 2GB – pro použití systémem stránkovaná virtuální paměť z z z
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 z z
{
Každý proces omezen na vlastní 32MB adresní prostor x CE 6.0 z
{
každý slot – 512 bloků po 64KB každý blok rozdělen na stránky
každý 64KB blok má lock, každý thread má klíč
Horní 1GB – pro large memory allocation z
paměťově mapované soubory
Pokračování {
Zavedení procesu z
{
{
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 Shared Memory 32 . . . 4 3 2 1
Slot 0
1 GB
Shell GWE Filesys Kernel
(Current)
32 MB 0 MB
User Space Virtual Memory Mappig 0x80000000
User Space 2 Gigabytes Each process has its own mapping
Shared System Heap 255 MB
R/W for OS components Read only for user process
RAM Backed Mapfiles 256 MB
RAM Backed Map files Mapped at fixed location for better backwards compatibility
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 z
z
{
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 z
Alokace rezervované paměti je rychlejší než alokace potvrzené paměti
Heap {
Lokální heap z z
{
Všechny procesy mají alokován defaultní heap od jádra z
{
Oblast paměti Izoluje procesy od velikosti stránky procesoru
192KB alokováno automaticky
HeapAlloc, HeapFree
Zásobník {
Procesy alokují 60KB stack per vlákno z z
{ {
{
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ů z
{
Long-term storage
ROM – permanent storage z z
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ě z
{
Persistent storage
RAM na dvě oblasti z
z
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 z z
{
Windows CE databáze z z
{
Aplikace nainstalované uživ., datové soubory Vždy komprimovaný Strukturovaná forma úložiště Více databází, sdílené mezi aplikacemi
Windows CE system registry z z z
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 z z z z
{ {
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 Application Window GWES
Window Manager Message System Controls, Menus, Resources
Keyboard Driver
Touch Driver
Graphics Device Interface
Display Drivers
GWES {
GDI (Graphical Device Interface) z z
{
{
{
{
Ří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 z
{
SendMessage z
{
Dá zprávu do fronty cílového vlákna, vrací se hned Čeká, dokud příjemce nezpracuje zprávu
SendThreadMessage z
Pošle zprávu přímo vláknu
GWES – správa napájení {
No power z
{ {
On Idle z z
{
Zapnuté zařízení, nepoužité nějaký čas PCMCIA, modemy, NIC shut down
Suspend z z
{
Není energie z AC, baterie, záložní baterie
Periferie a CPU vypnuto Energie k udržování RAM
Critical off z z
Low battery condition Odsud se nedostane, dokud není dostatek energie
Windows CE memory model {
32bitový OS z z
{
Může adresovat až 4GB virtuální paměti Stejně jako 32bit Windows pro desktopy
Odlišné členění z
z
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 z
{ {
read-only soubory umístěné v \Windows
Storage Manager Object Store z z
Paměťová halda řízená filesys.exe RAM systém registry { {
z
RAM file systém {
z
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) 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 z
{
Partition drivers z z
{
Správa víc partition na jednom storage zařízení Fyzický disk – víc partition – různé filesystémy
File systém drivers z z
{
Přístup k fyzickému mediu, block driver
Organizuje data do souborů a adresářů UDFS – CD a DVD, FATFS
File systém filters z
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 z
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ářů