Transcript SO_Curs-13

Cursul 13
13
Android
Suport curs 13
• Analysis of Dalvik-VM
o
http://imsciences.edu.pk/serg/wpcontent/uploads/2010/10/1st_Analysis-of-Dalvik-VM.pdf
• A Survey on Android vs. Linux
o
http://handycodeworks.com/wpcontent/uploads/2011/02/linux_versus_android.pdf
Dispozitivele mobile cuceresc lumea
Toata lumea are macar unul…
Toata lumea are macar unul…
Cine conduce pe cine?
Raspuns
• Oamenii conduc masinile
– Scriu sisteme de operare
– Programe
–…
Cum arata un sistem de operare
pentru dispozitive mobile?
• Stim cum arata on SO pentru desktop/server
• Care sunt diferentele hardware intre dispozitivele
mobile si servere?
Hardware dispozitive mobile
• Procesoare ARM (in loc de x86)
• Memorie limitata
• Consumul de energie conteaza
enorm
• Storage flash (in loc de HDD)
• User Interface – conteaza!
• Mobilitate: acces la Internet?
Android
• Sistem de operare Open source pentru sisteme mobile
• Dezvoltat de Google pe kernelul de Linux, versiunea 2.6
• De ce Linux?
o
o
o
o
Drivere
Gestiune procese și memorie
Suport rețea
Alte servicii
• Au fost adăugate
o
o
o
Biblioteci C proprii
Mediu de rulare JAVA (Dalvik Virtual Machine)
Framework pentru aplicații
Arhitectura
Arhitectura (2)
• Suportă doar x86 și ARM
• x86
o MIDs (Mobile Internet Device) – desktop/laptop/server
• ARM
o telefoane mobile
o Nokia, Research in Motion (RIM), Apple, HTC and Samsung
o Supremația ARM in dispozitivele mobile (98%)
o Consumul de energie – principalul factor de design
ARM vs x86
• Marea diferență între x86 și ARM este arhitectura setului de
instrucțiuni
o
o
X86 – CISC (Complex Instruction Set Computer)
ARM – RISC (Reduced Instruction Set Computer)
• Consum mic de energie
o ARM7100
 72mW la 14 MIPS
 33mW idle
 33uW standby
o Atom 10W pentru MIDs
o
Medfield lansat pe piata acum (comparabil cu ARM la consum de energie)
Android Kernel
• Driver alarma
o
implementează timere pentru a trezi device-urile din sleep
• Ashmem
o
permite aplicațiilor să partajeze memoria și să o gestioneze la nivel de
kernel
• Binder driver
o comunicare între procese
• Gestiunea consumului
o
o
peste Linux Power Management (PM)
implementează o politică mai agresivă
BIONIC
• Biblioteca C standard din Android
• De ce?
o Google nu a vrut LGPL in userspace
o GNU C nu este bună pentru a lucra în sistemele integrate unde
există mari constrângeri de memorie
• Caracteristici:
o BSD C + codul sursă Android
o Dimensiune mică
o Viteză
BIONIC – Suport C++
• Nu implementează suport pentru excepții (nu aruncă și nici nu
pasează mai departe)
o excepțiile adaugă overhead la nivelul apelului de funcții
o în plus ele sunt implementate în JAVA, limbajul folosit pentru
dezvoltarea aplicațiilor
• Nu există suport pentru C++ STL (Standard Template Library)
BIONIC – Thread-uri
• GNU C oferă NPTL (Native POSIX Thread Library), dar acestea au
nevoie de memorie și spațiu pe disc.
• Android vine cu o implementare proprie a pthreads
o mutex, rwlocks, variabile de condiție sunt implementate folosind
kernel futexes
o nu există pthread_cancel() - thread-urile se pot termina, dar nu pot fi
omorâte de altele
o nu există pthread_atfork()
 folosită de thread-urile ce apelează fork()
 primește ca parametri funcții ce se vor executa înainte de fork(), dar
și după în copil sau părinte
BIONIC – General
• Zonă de memorie partajată pentru configurări
o Ex: configurările DNS nu se fac în /etc/resolv.conf
o valorile pot fi accesate/modificate prin property_get() și
property_set()
• Nu există openlog() sau syslog()
o
__libc_android_log_print()
• Nu există AIO (Asynchronous I/O)
• Propriul sistem de gestionare a utilizatorilor
o
o
nu există /etc/passwd, getpwent()
android_filesystem_config.h – 25 conturi
Dalvik Virtual Machine
• Nokia, Motorola și Samsung includ o versiune optimizată de JAVA
Virtual Machine, Java 2, Micro Edition (J2ME)
• Constrângeri
o CPU încet
o cu puțin RAM
o cu un SO fără swap
o pe un dispozitiv cu baterie
• Aplicațiile Android rulează propriul proces, cu instanța de DVM
separată.
o
DVM execută Dalvik Executable(.dex), format optimizat cu privire la
spațiul ocupat
• Se bazează pe nucleul Linux pentru funcționalități precum threading
și gestiunea memoriei
DVM – Formatul DEX (1)
• JAVA
o codul sursă compilat în java bytecode, salvat într-un fișier .class
o .class rulat în JVM
• Android
o
o
o
codul sursă compilat și rezultatul salvat în fișierul .class
folosind instrumentul ‘dx’ se face conversia de la .class la .dex
.dex se execută în DVM
DVM – Formatul DEX (2)
DVM – Formatul DEX (3)
DVM – Concluzii
• Memorie
o folosire .dex partajate de procese
• Redundanță și spațiu
o
agregare .class într-un singur fișier .dex
• Verificare byte-code
o
este un proces încet, însă a fost optimizat printr-o pre-verficiare
• Exista compilator JIT (Just-In-Time) de la versiunea Android 2.2
o foarte rapid, optimizând codul în scurt timp
o folosește puțin RAM - 100k
Dispozitive de stocare
Memoria flash
• Memoria flash are un timp de acces mic și este rezistentă la șocuri
Doua tipuri de memorie flash:
o
NOR – densitate mică, oferă scrieri încete și citiri rapide
o
o
o
Citire si programare la nivel de octet
Stergere/reprogramare la nivel de block (64,128 sau 256KB)
NAND – cost mic, densitate mare și oferă scrieri rapide și
citiri încete
o
o
o
o
O pagina are 512, 2048 sau 4096B.
Un block contine 32-128 de pagini – 16KB pana la 512KB
Citire si programare la nivel de pagina
Stergere la nivel de block
• Dispozitivele mobile folosesc NAND pentru
stocare și NOR pentru cod și execuție
Caracteristicile memoriei Flash
• Nu exista “seek”
• Citirile aleatoare sunt la fel de eficiente ca si cele contigue
• Rescrierea blocurilor
o când dorim rescrierea/ștergerea oricărei memorii, trebuie șters tot
blocul ce o conține
o Solutie: tinem minte dirty pages, stergem cand tot block-ul e dirty
Caracteristicile memoriei Flash
• Uzura memoriei
o există un număr limitat de cicli șterge-scrie (100.000-1 milion)
o Rezolvare:
 tehnici de scriere uniformă
 BBM (Bad Block Management) - verificare scrieri și
remaparea sectoarelor defecte
• Perturbarea la citire
o Celulele de langa celula citita isi pot schimba valoarea in timp
daca nu sunt rescrise (la cateva sute de mii de citiri).
o Rezolvare: tine minte nr. de citiri si rescrie preventiv celulele
adiacente
Sistemul de fișiere
• YAFFS, primul sistem de fișiere optimizat petru memoria flash
NAND
• Noile sisteme Android folosesc ext4
o dispozitivele folosesc un flash ce apare pentru procesor ca un card
SD, kernel-ul tratându-l ca și un block device
YAFFS (1)
• Yet Another Flash File System
• Folosit cu succes pe Linux, WinCE, pSOS, eCos, ThreadX
YAFFS - Caracteristici
• Jurnalizare
o folosire log-uri pentru recuperare
• Garbage collection
o
o
optimizat
executat când spațiul liber devine foarte mic – se alege blocul cu ceva
pagini murdare, iar paginile bune se mută pe alt bloc
• Cerințe mici de memorie
• Flexibilitate
o
folosește o definiție generală a flash-urilor NAND, putând fi configurat
și customizat pentru alte memorii flash
• Portabil
o
dezvoltat pentru Linux, dar modular și ușor de modificat pentru alte
sisteme
• Robust
o
bine testat și folosit în multe produse
• Suport POSIX
o
directoare, link-uri simbolice și hard
YAFFS vs. EXT3
• Accesibilitate fișiere
o sisteme de fișiere pentru discuri sunt optimizate pentru căutări
o device-urile ce folosesc memoria flash nu au latențe la căutare și
pot accesa fișiere random
• Blocarea ștergerii
o
o
ușor să ștergi un fișier de pe disc
consumator de timp pentru flash de aceea ar trebui făcută când
device-ul este idle
• Tehnici împotriva uzurii
o
numai memoria flash are de a face cu o astfel de problemă
Reducerea consumului de energie
Gestiunea bateriei - Linux
• Este necesar reducerea consumului energetic datorită creșterii
cerinței de putere din partea calculatoarelor și a laptop-urilor.
• APM (Advanced Power Management) sau ACPI (Advanced
Configuration and Power Interface)
o scalarea voltajelor
o activare sleep-mode
o dezactivarea memoriei cache
• Folosește "runtime PM" în versiunele foarte noi de kernel, pentru a
face shutdown la device-uri atunci cand acestea nu sunt folosite
• Folosește CPU idle pentru a trece procesorul într-o stare de
consum redusă
Gestiunea bateriei - Android
• Folosește arhitectura ACPI din Linux, dar diferă abordarea folosită
• Încearcă intrarea în suspend to RAM automat (starea ACPI S3)
"când se poate" pentru a conserva energie
• Propria extensie Linux (PowerManager)
• Modulul are drivere pentru controlul perifericelor (display și
backlight, lumina tastaturii) accesate prin primitive WakeLocks
• PowerManager monitorizează viața bateriei și statusul device-ului
• Coordonează circuitul de încărcare și se ocupă de închiderea
device-ului când bateria ajunge la un pas critic
Gestiunea bateriei – Wake Lock
Flag
CPU
Ecran
Tastatura
PARTIAL_WAKE_LOCK
On*
Off
Off
SCREEN_DIM_WAKE_LOCK
On
Dim
Off
SCREEN_BRIGHT_WAKE_LOCK
On
Bright
Off
FULL_WAKE_LOCK
On
Bright
Bright
* Dacă se ține un wakelock partial, CPU va continua să ruleze,
chiar dacă utilizatorul vrea să pună device-ul în sleep
Gestiunea bateriei - Arhitectura
Retea
Acces la Internet de pe mobil
3G celltower
Acces la Internet de pe mobil
3G celltower
Acces la Internet de pe mobil
3G celltower
Acces la Internet de pe mobil
3G celltower
Offload to WiFi
Acces la Internet de pe mobil
3G celltower
All ongoing TCP connections die
Cuvinte cheie
•
•
•
•
•
•
•
Android
Google
BIONIC
ARM
x86
Dalvik Virtual Machine
DEX
•
•
•
•
•
YAFFS
NOR, NAND
APM, ACPI
PowerManager
WakeLocks
Intrebari
• Cate calorii trebuie sa manance cainele pe zi pentru a nu se
ingrasa?
• Cum rezolvam problema conectivitatii unui dispozitiv mobil?
MPTCP Connection Management
MPTCP Connection Management
MPTCP Connection Management
SUBFLOW 1
CWND
Snd.SEQNO
Rcv.SEQNO
FLO
WY
MPTCP Connection Management
SUBFLOW 1
CWND
Snd.SEQNO
Rcv.SEQNO
FLO
WY
MPTCP Connection Management
SUBFLOW 1
CWND
Snd.SEQNO
Rcv.SEQNO
FLO
WY
MPTCP Connection Management
SUBFLOW 1
CWND
Snd.SEQNO
Rcv.SEQNO
FLO
WY
SUBFLOW 2
CWND
Snd.SEQNO
Rcv.SEQNO
Întrebări