Projektovanje namenskih računarskih struktura 1 · računarskihstruktura 1 Nativni sloj Androida....

23
Odsek za računarsku tehniku i računarske komunikacije Projektovanje namenskih ra čunarskih struktura 1 Nativni sloj Androida

Transcript of Projektovanje namenskih računarskih struktura 1 · računarskihstruktura 1 Nativni sloj Androida....

Odsek za računarsku tehniku i računarske komunikacije

Projektovanje namenskihračunarskih struktura 1

Nativni sloj Androida

Arhitektura Androida

2020 2

App0 App1 App2 App3 App4

Application layer

Activity manager

Frameworks layerWindow manager

Content providers

View systemNotification

manager

Package manager

Resource manager

XMPP service

Surface manager

Runtime layer

OpenGL/ES

SGL

Media framework

Freetype

SSL

SQLite

Webkit

libc

Libraries Android runtime

CoreLibraries

Dalvik Virtual Machine (DVM)

Kernel layer

Display driver

USB driver

Mouse driver

Keyboard driver

Ethernet driver

WiFi driver

Flash memory driver

Audio drivers

Binder (IPC) driver

Power management

Hardware

Java

C, C

++, n

ativ

e co

de

Ass

emb

ler,

C

Graphics Audio Camera GPS ...

Hardware Abstraction Layer (HAL)

Izvršni sloj

Nativne biblioteke

Sistemski servisi i sistemske aplikacije

Virtuelna mašina

Podsistem za reprodukciju multimedijalnog sadržaja

2020 3

Menadžer graf. površinama

Radni sloj

OpenGL/ES

SGL

Multimedijalni podsistem

Freetype

SSL

SQLite

Webkit

libc

Biblioteke u izvršnom sloju Jezgro za izvršavanje Android aplikacija

Osnovne biblioteke

Dalvik Virtuelna Mašina (DVM)C

, C+

+, i

zvrš

ni k

od

Nativne biblioteke

Bionic Libc

Uslužne biblioteke (Webkit, Media Framework, SQLite)

Nativni serveri (Surface Manager – SurfaceFlinger, Audio Manager –AudioFlinger)

Hardware Abstraction Libraries (Graphics, Camera, Bluetooth, GPS, Radio, WiFi,...)

2020 4

Bionic Libc

Šta je Bionic?o Sistemska C biblioteka koja je deo svakog C programa

o Bionic je prilagođena libc implementacija, optimizovana za korišćenje u integrisanim sistemima

o Bionic je zamena za glibc, koji je GPL licenciran

Motivacijao Licenca je presudna (GPL izvan user-space)

o Mala veličina

… ali nije sve implementirano!

Mogući problemi sa kompatibilnošću

o Poboljšane performanse

Brži kod, racionalnija upotreba memorije

Manja veličina

Optimizovan za namenske sisteme

2020 5

Bionic Libc - Prednosti

BSD licenca koja ne zahteva otvaranje izvornog koda

Minimalna implementacija najbitnijih funkcija glibc

Brži prolaz kroz funkcijske pozive

Veoma brza, minimalna i prilagođena pthread implementacija

Ključna komponenta svih nativnih biblioteka

2020

Surface manager

OpenGL/ES ...

Media framework

Freetype SSL

SQLite Webkit libc

Libraries

Audio manager

6

Bionic Libc - Nedostaci

Ne podržava POSIX pravila

Sav izvorni kod se prevodi i vezuje za Bionic

Nije 100% usaglašena sa standardnom Gnu bibliotekom (glibc) – mada poseduje veliki broj sličnosti (prebacivanje programske podrške sa Linux distribucija je moguće bez većih problema)

2020 7

Nativne biblioteke - Webkit

Web prikazivač je ključna web komponenta u Android

Živi svoj život, koristi se u mnogim drugim platformama

Podrška CSS, Javascript, DOM, AJAX support

Zasnovan na open source WebKit pretraživaču: http://webkit.org

Veoma kompleksna komponenta (puno linija koda) sa puno zavisnosti (eksterne biblioteke)

2020

Surface manager

OpenGL/ES ...

Media framework

Freetype SSL

SQLite Webkit libc

Libraries

Audio manager

8

Nativne biblioteke – Media Framework

Mutimedijalni aspekt Androida je veoma značajan

Baziran na PacketVideo OpenCORE platformi

o Froyo Stagefright, MooPlayer, ExoPlayer

Podrška za standardne audio i video formate

Podrška za hardware/software plug-ins dekodere (open-max interface)

Podrška za DRM (Digital Rights Management)

2020

Surface manager

OpenGL/ES ...

Media framework

Freetype SSL

SQLite Webkit libc

Libraries

Audio manager

9

Nativne biblioteke - SQLite

U sistemu i aplikacijama postoji potreba za struktuiranim skladištenjem podataka

Odabran je SQLite zbog:

o Licence (Public Domain, javno dobro)

o Lagana transakciona baza podataka

o jednostavnosti uključivanja (2 datoteke: zaglavlje i izvorni fajl) i upotrebe

o Zgodna za namenske sisteme – nema ozbiljne memorijske zahteve

2020

Surface manager

OpenGL/ES ...

Media framework

Freetype SSL

SQLite Webkit libc

Libraries

Audio manager

10

Sistem datoteka

2020 11

Sistem datoteka nasleđena od Linux

o Organizacija

o Prava pristupa

o Specifičnosti (dev, tmp)

o Filozofija

Višekorisnička podrška

Sistemski servisi i sistemske aplikacije

Sistemski servisi

o Osnovne funkcionalnosti i usluge za više nivoe

o Sprega ka specifičnim podsistemima

o Ovi servisi sa jezgrom čine OO platformu sa grafičkim interfejsom

o Životni vek

Sistemske aplikacije

o Aktivne od momenta pokretanja sistema

o Jezgro ih pokreće ponovo ako se zaustave

Primeri: Service Manager, Android Runtime, Zygote, Dalvik ili ART

2020 12

Designpattern!

Gradivne komponente

Service Manager

o Upravlja servisima i obezbeđuje pristup servisima

o Demistifikacija - init.rc

Zygote

o Specijalan proces za pokretanje aplikacija

o Pokretanje Zygote

o service zygote /system/bin/app_process –Xzygote /system/bin –zygote –start-

system-server

o Pokretanje aplikacije

o app_process [java-options] cmd-dir start-class-name [options]

Android Runtime (libandroid_runtime.so)

Dalvik/ART

2020 13

Zygote

Optimizovani način pokretanja aplikacija

Koriste se neke mogućnosti Linux

o Fork

o Učitavanje dinamičkih biblioteka

Svaka aplikacija ima svoju VM u svom procesu

2020 14

Stvaranje procesa iz Zygote

2020 15

Sistemski server

Centralna komponenta Androida

Startuje se iz Zygote-a

U udžbeniku postoji fragment koda

o Koji pokreće sistemske servise ActivityManager, PowerManager, itd.

o Napisan je u Javi

Neki servisi su razvijeni u Java, neki u C

2020 16

Zygote

com.android.server.SystemServer.main() {

loadLibrary(“libandroid_servers.so”);

}

Frameworks/base/cmds/

system_server/library/

system_init.cpp

Start -> Sensor Service

Sistemski nativni servisi

Surface Flinger + Bootanim - C

Sensor Service – C

Telephony Service

MediaServer

o Audio Flinger

o Media Player

o Camera Service

Package Manager (instalacija, optimizacija, Intenti)

o Manifest

2020 17

Izvorni uslužioci – Surface Flinger

Zadužen za crtanje po grafičkom prostoru (GUI)

Spaja više surface-a u jedan frame buffer uređaj

Može da kombinuje više 2D i/ili 3D surface-a iz više aplikacija

2020

Surface manager

OpenGL/ES ...

Media framework

Freetype SSL

SQLite Webkit libc

Libraries

Audio manager

Designpattern!

18

Izvorni uslužioci – Surface Flinger

Surface-i su atomske površine koje se iscrtavaju

Reference na njih se preko preko Binder IPC poziva prosleđuju SF

SF za kompoziciju koristi OpenGL ES i platformsku akceleraciju

Tokom kompozicije, uvažava i životni ciklus aplikacija, kao i redosled iscrtavanja (Z-order)

Poseduje podršku za double-buffering. To podrazumeva postojanje dve ravni za crtanje:

o U jednu se crta, druga se prikazuje

o Nakon završetka crtanja, uloge se menjaju

o Na taj način postiže se iscrtavanje bez neželjenih efekata, na primer svetlucanja, skokovitih promena, i poluiscrtanih objekata i sl.

Veoma važna komponenta za UX

2020 19

Izvorni uslužioci – Audio flinger

Rukovodi svim izlaznim audio uređajima

Obrađuje više audio tokova u različite PCM audio izlazne putanje

Veoma bitna komponenta za orkestraciju svih funkcija telefona (multimedija, poziv, BT)

2020

Surface manager

OpenGL/ES ...

Media framework

Freetype SSL

SQLite Webkit libc

Libraries

Audio manager

20

Komunikacija ServiceManager i Binder

Sistemski servisi su različiti procesi

Koriste RPC/IPC za komunikaciju

Preko reference na Bindera

Mehanizam je sakriven u ServiceManager i API!

2020 21

Power Manager pm =

(PowerManager)getSystemService(POWER_SERVICE);

PowerManager.WakeLock wakeLock =

pm.newWakeLock(PowerManager.FULL_WAKE_LOCK,

“myPreciousWakeLock“);

wakeLock.acquire(100);

Ostali sistemski servisi

Activity Manager

o Upravlja aktivnostima

o Pokretanje i zaustavljanje (OOM uključen u AM)

o Koristi PackageManager da bi pronašao traženu aktivnost

Pokretanje aplikacija nakon inicijalizacije sistema

o Manifest

Sistemske aplikacije

o Aplikacije koje mogu imati malo više privilegije

o android:persistent = „true“

o Sistem ih održava živim

2020 22

Rezime

Nativni sloj Androida uključuje veliki broj biblioteka i čini dominantni deo Androida

Tokom dizajna po pitanju svake biblioteke se odlučilo da li se razvija ili koristi postojeće rešenje (tkzv. make vs buy odluka). Neke biblioteke su razvijene namenski (npr. Bionic), a mnoge su preuzete.

Bitno pravilo je da se ne koriste LGPL i GPL licencirane biblioteke.

Nativni sloj krije puno interesantnih rešenja i koncepata koji se mogu iskoristiti u drugim projektima

Održavanje sinhronizma svih korišćenih biblioteka je veliki posao

Android je imao uticaja na mnoge biblioteke, tako da je održavanje postalo malo jednostavnije

2020 23