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