Você está na página 1de 32

U NIVERSIDADE F EDERAL F LUMINENSE

E NGENHARIA DE T ELECOMUNICAES
S ISTEMAS DE C OMPUTAO PARA T ELECOMUNICAES
TET 00197

SISTEMA OPERACIONAL ANDROID

Grupo:
R AFAEL C AVEARI G OMES
J EAN A LVES R. F ERNANDES
V INICIUS C ORRA F ERREIRA
Professora:
NATALIA C ASTRO F ERNANDES

10 de julho de 2012

Sumrio
Lista de Figuras

Introduo

1.1

Gerenciamento de processos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.2

Gerenciamento de memria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.3

Sistema de arquivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.4

Entrada e sada de dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Objetivo e motivao

Estrutura do Sistema Android

3.1

O kernel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3.2

O sistema de arquivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

11

3.3

Os servios bsicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

12

3.4

As aplicaes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

13

3.5

O processo de boot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

14

3.5.1

O init . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

16

3.5.2

O Zygote . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

17

3.5.3

System server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

17

Gerenciamento de processos e memria

17

4.1

Android runtime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

18

4.2

Dalvik Virtual Machine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

18

4.2.1

Prioridade e status de processos . . . . . . . . . . . . . . . . . . . . . . . .

19

Memria Virtual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

20

4.3.1

Segmentao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

21

4.3.2

Paginao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

21

4.3.3

Substituio de pginas . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

22

4.4

Comunicao entre processos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

22

4.5

Escalonamento de CPU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

23

4.6

Deadlocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

24

4.3

Desenvolvimento no Android

24

5.1

26

Android.os . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Consideraes finais

26

A Tabela de funes da API android.os

27

Referncias

29

Lista de Figuras
1

Evoluo da quantidade de celulares no mundo. Fonte: UIT, Wireless Intelligence,


GSA/Informa e Teleco. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Arquitetura do sistema operacional Android. Fonte: http://developer.android.com/. .

Detalhes da arquitetura interna do sistema Android. Fonte: http://developer.android.com/. 10

Exemplo de log no Android. Fonte: [11]. . . . . . . . . . . . . . . . . . . . . . . .

Exemplo de uma rvore de diretrios de um sistema de arquivos no Android. Fonte:

11

[11]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

12

Executveis que fazem um link para o Toolbox. Fonte: [11]. . . . . . . . . . . . . .

13

Exemplo de processos rodando no Android. Fonte: [11]. . . . . . . . . . . . . . . .

14

Esquema da beagleboard. Fonte: [11]. . . . . . . . . . . . . . . . . . . . . . . . . .

15

Estados de processos e seu nvel de prioridade associado. Fonte: [4]. . . . . . . . . .

19

10

Paginao no Linux. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

22

11

Fluxograma de solicitao de pgina. . . . . . . . . . . . . . . . . . . . . . . . . . .

23

12

Funes de interfaces da API android.os. Fonte: http://developer.android.com/. . . .

27

13

Funes de exceptions da API android.os. Fonte: http://developer.android.com/. . . .

27

14

Funes de enums da API android.os. Fonte: http://developer.android.com/. . . . . .

27

15

Funes de classes da API android.os. Fonte: http://developer.android.com/. . . . . .

28

Introduo

Introduo
Um computador composto basicamente por uma Unidade Central de Processamento (CPU),

memria e dispositivos de entrada e sada. O responsvel pelo controle e alocao de recursos para
este sistema o programa chamado sistema operacional. Sistemas operacionais so programas com a
funo de gerir o hardware de um computador. O sistema operacional age como uma interface entre
o usurio e o hardware, provendo uma base para a execuo de programas. As principais funes de
um sistema operacional so portanto:
Gerenciamento de processos.
Gerenciamento de memria.
Sistema de arquivos.
Entrada e sada de dados.

1.1

Gerenciamento de processos

A maioria dos computadores modernos so sistemas multitarefa, ou seja, so feitos para dar ao
usurio a sensao de que mltiplos processos e programas esto sendo executados simultaneamente.
funo do sistema operacional coordenar a ordenao e execuo de cada processo. Alm disto
existe tambm a comunicao entre os processos, conhecido como InterProcess Communication
(IPC), que tambm deve ser fornecida pelo sistema operacional.

1.2

Gerenciamento de memria

O sistema operacional possui acesso memria e coordena a utilizao desta por processos dos
usurios e garante a utilizao segura da mesma. Grande parte dos sistemas operacionais utilizam o
conceito de memria virtual. O sistema deve portanto assegurar que cada processo tenha seu prprio
espao na memria, prover a proteo deste espao para que no haja a sobrescrio e utilizao por
outro processo e possibilitar que uma aplicao no utilize mais memria que a existente fisicamente.

Universidade Federal Fluminense

Sistemas de Computao

Objetivo e motivao

1.3

1.3

Sistema de arquivos

Sistema de arquivos

A memria principal do computador voltil, isto , todo o seu contedo perdido quando a
alimentao desligada, e seu tamanho limitado pelo custo do hardware. Assim, os usurios necessitam de algum mtodo para armazenar e recuperar informaes de modo permanente. Para uma
utilizao futura os dados devem ser armazenados em um dispositivo perifrico no volteis, como
um disco rgido (HD), CD, etc, que pode ser lido e gravado por um ou mais processos.

1.4

Entrada e sada de dados

necessrio haver a entrada de dados no sistema, para que estes sejam processados e gerem
as informaes desejadas pelo usurio. Em computadores pessoais geralmente so utilizados como
dispositivos de entrada o mouse, o teclado ou a leitura dos dados feita diretamente de dispositivo de
memria secundria, como CDs (Compact Discs) e HDs (Hard Disks). E para o usurio ter acesso
a estas informaes geradas necessita-se tambm de um dispositivo de sada de dados. Sendo os
mais comumente utilizados a tela, as caixas de som ou feita a escrita em dispositivos de memria
secundrio. Todas estas aes so realizadas pelo sistema operacional.

Objetivo e motivao
Estudos mostram que nos dias atuais mais de seis bilhes de pessoas possuem um celular, como

visto na Figura 1, e isto quase a totalidade da populao mundial que de sete bilhes de habitantes,
segundo a ONU.
A crescente evoluo dos dispositivos mveis, impulsionada pelo modo em que os fabricantes
vm trazendo aparelhos cada vez mais completos, tem aberto um novo mercado de aplicaes para
celular. A presena de GPS (Sistema de Posicionamento Global), conexo WiFi, acelermetros
(sensores de movimento) e aumento na capacidade de processamento, fazem com que estes aparelhos
estejam aptos a portar aplicaes mais robustas e prover novas funcionalidades. Aparelhos mais
robustos requerem sistemas operacionais mais complexos, e com capacidade de gerenciar os novos
componentes de seu hardware. Sendo assim, alguns sistemas operacionais surgiram para sanar este
ponto, dentre eles podese citar: Symbian OS, Iphone OS, Google Android e Windows Mobile [10].
Neste trabalho vamos nos aprofundar no sistema operacional Android.
Universidade Federal Fluminense

Sistemas de Computao

Objetivo e motivao

Figura 1: Evoluo da quantidade de celulares no mundo. Fonte: UIT, Wireless Intelligence,


GSA/Informa e Teleco.
Android a plataforma para dispositivos mveis mais popular do mundo. O Android est presente em milhes de celulares, tablets, e outros dispostivos trazendo o poder da Google e da web em
suas mos.
Com um browser incrvelmente rpido, sincronizao em nuvem, sistema multitarefa, facilidades para se conectar e compartilhar, e os mais recentes aplicativos da Google (e milhares de outros
aplicativos disponveis na Google Play) com Android seu dispositivo est muito alm de inteligente
[2].
A histria deste sistema iniciase em julho de 2005 quando a Google adquiriu a Android Inc., uma
pequena empresa em Palo Alto, California, USA [3]. Na Google, no tempo em que era conduzida
por Andy Rubin, foi desenvolvida uma plataforma para sistemas mveis baseado em Linux, com o
objetivo de ser uma plataforma flexvel, aberta e de fcil migrao para os fabricantes. Nascia assim
o embrio do sistema operacional Android. Esse sistema foi desenvolvido na plataforma Java e atualmente mantido pela OHA (Open Handset Alliance), um grupo constitudo por aproximadamente
80 empresas (entre as quais esto a HTC, LG, Motorola, Samsung, Sony Ericsson, Toshiba, Sprint
Nextel, China Mobile, T-Mobile, Asus, Intel, Garmin e outras mais) as quais se uniram para inovar
e acelerar o desenvolvimento de aplicativos e servios, com a finalidade de trazer aos consumidores
uma experincia muito mais rica em termos de recursos e menos custosa em termos financeiros para
o mercado de telefonia mvel.

Universidade Federal Fluminense

Sistemas de Computao

Estrutura do Sistema Android

Estrutura do Sistema Android


Como dito anteriormente, o Android um sistema operacional baseado no kernel do Linux.

Apesar de ter sido desenvolvido inicialmente para smartphones, hoje usado em diversas outras
aplicaes como tablets, netbooks, relgios, etc.
Apesar de ser baseado no kernel do Linux, existe pouca coisa em comum com distribuies Linux
convencionais (embarcadas ou no), lembrando que um sistema embarcado (ou sistema embutido)
um sistema microprocessado no qual o computador completamente encapsulado ou dedicado ao
dispositivo ou sistema que ele controla [13]. grosso modo, o Android uma mquina virtual Java
rodando sobre o kernel do Linux, dando suporte para o desenvolvimento de aplicaes Java atravs
de um conjunto de bibliotecas e servios.
Muitas caractersticas presentes no Android, tais como grficos 3D e suporte a banco de dados
nativo, tambm esto disponveis em outras plataformas mveis. Porm, apenas no Android h um
componente que permite exibir e manipular um mapa do Google Maps, servio de mapas do Google,
dentro de uma aplicao. Somente no Android todos os aplicativos so criados igualmente. Ou
seja, nele no h distino entre aplicativos que so nativos e os demais. Isso possibilita uma grande
customizao do sistema operacional, permitindo a substituio completa de aplicativos nativos por
outros, criados por terceiros. Alm disto, todos os aplicativos tm acesso as mesmas funcionalidades
[12].
Sua arquitetura possui basicamente 4 camadas, como visto na Figura 2. Uma breve descrio das
mesmas mostrada abaixo:
Aplicaes: A camada de aplicativos a que est no topo da pirmide da arquitetura do sistema
operacional Android, composta pelo conjunto de aplicaes nativas do mesmo. Dentre estes
podese citar: cliente de e-mail, despertador, calendrio, jogos, mapas, browser e internet, etc.
Framework: A camada de framework nativo disponibiliza aos desenvolvedores as mesmas
Applications Programming Interface (APIs) Interface de Programao de Aplicativos utilizadas para a criao de aplicaes originais do sistema operacional Android. Este framework
permite que o programador tenha o mesmo acesso ao sistema que os aplicativos da camada
de aplicativos possuem. Este framework foi criado para abstrair a complexidade e simplificar o reutilizao de procedimentos. Essa camada funciona como um link com a camada de
Universidade Federal Fluminense

Sistemas de Computao

Estrutura do Sistema Android

Figura 2: Arquitetura do sistema operacional Android. Fonte: http://developer.android.com/.


bibliotecas do sistema operacional que sero acessadas atravs de APIs contidas no framework.
Bibliotecas e servios: Essas bibliotecas so responsveis por fornecer funcionalidades para
manipular o udio, vdeo, grficos, banco de dados e browser. Algumas bibliotecas so a
Bionic, a OpenGL/ES para trabalhar com interface grfica, e a SQLite para trabalhar com banco
de dados. Aqui tambm esto os servios usados em camadas superiores, como mquina virtual
Java Dalvik. (trataremos mais desse assunto na seco 4.2). A maior parte destas bibliotecas e
servios esto desenvolvidos em C e C++;
O Android Runtime: Permite que cada thread rode sua prpria instncia da MV (mquina
virtual). Embora no desenvolvimento de aplicativos seja utilizada a linguagem Java, as aplicaes no so executadas em uma mquina virtual Java tradicional, e sim em outra chama
de Dalvik. Essa mquina virtual otimizada especialmente para dispositivos mveis. A plataforma Google Android permite o desenvolvimento de aplicativos na linguagem Java. Essa

Universidade Federal Fluminense

Sistemas de Computao

Estrutura do Sistema Android

3.1

O kernel

mquina virtual foi construda pelos engenheiros da Google, para obter um consumo mnimo
de memria e isolamento de processos. Ela permite que as aplicaes escritas em linguagem
Java sejam executadas normalmente;
Kernel Linux: A camada do kernel baseada em um sistema do sistema operacional Linux
verso 2.6. Esta camada atua tambm como responsvel pela abstrao entre o hardware e os
aplicativos e responsvel pelos servios principais do sistema operacional Android, como o
gerenciamento de memria e de processos. Vrias funes do kernel so utilizadas diretamente
pelo Android, mas muitas modificaes foram feitas para otimizar memria e tempo de processamento das aplicaes. Essas modificaes incluem novos dispositivos de drivers, adies no
sistema de gerenciamento de energia e um sistema que possibilita terminar processos de maneira criteriosa quando h pouca memria disponvel. O Linux 2.6 foi escolhido por j conter
uma grande quantidade de drivers de dispositivos slidos e por ter um bom gerenciamento de
memria e processos.
Se olharmos para a arquitetura interna do Android, veremos o nvel de complexidade deste sistema
operacional, vista na Figura 3.

3.1

O kernel

Como vimos anteriormente o Android usa uma verso modificada do kernel do Linux. Dentre as
principais modificaes, podemos citar:
Binder: Em todo sistema operacional com suporte memria virtual os processos rodam em
diferentes regies de memria. Isso significa que nenhum processo tem acesso direto regio
de memria de outro processo ou thread. Dessa forma precisamos de um mecanismo de comunicao entre processos. No Android utilizado o Binder, que ser visto com mais detalhes na
seco 4.5.
Ashmem: um novo mecanismo de compartilhamento de memria, onde dois ou mais processos podem comunicarem-se atravs de uma regio compartilhada de memria. mais leve
e fcil de usar, tem um melhor suporte a dispositivos com pouca memria, j que tem a capacidade de descartar regies de memria compartilhada de maneira segura em caso de pouca
memria disponvel. Sua implementao encontra-se em mm/ashmem.c.
Universidade Federal Fluminense

Sistemas de Computao

Estrutura do Sistema Android

3.1

O kernel

Figura 3: Detalhes da arquitetura interna do sistema Android. Fonte: http://developer.android.com/.


Logger: O Android possui um sistema global de logs, implementado atravs de um mdulo
do kernel. criado quatro arquivos de dispositivo em /dev/log, onde cada um representa um
buffer diferente.
Para as aplicaes acessarem o sistema de log, deve-se abrir, escrever ou ler num destes arquivos
de dispositivo. A implementao deste mdulo no kernel encontra-se em drivers/misc/logger.c.
Um exemplo pode ser visto na Figura 4.
Wakelocks: Se um dispositivo Android ficar um tempo sem ser usado, entrar em modo de
baixo consumo para garantir economia de bateria, visto que a energia em dispositivos mveis
um recurso escasso, diferente de um computador pessoal que o principal alvo do sistema
Linux. O mdulo de wakelock permite que as aplicaes desabilitem o mecanismo de baixo
consumo. Por exemplo, se voc precisar executar um processo em plano de fundo que no
pode ser interrompido para entrar em modo de baixo consumo, este mdulo possibilita a desativao temporria deste recurso at que seu processo finalize a execuo. Sua implementao

Universidade Federal Fluminense

10

Sistemas de Computao

Estrutura do Sistema Android

3.2

O sistema de arquivos

encontra-se em kernel/power/wakelock.c.
Oom handling: Faz o controle do uso de memria do sistema operacional e encerra processos
se verificar que a memria disponvel esta abaixo de um valor mnimo aceitvel. implementado em
drivers/misc/lowmemorykiller.c.
Timed GPIO: o que possibilita acionar sadas de Input/Output (I/O) Entrada e Sada de
forma temporizada. Est implementado em
drives/misc/timed_gpio.c.

Figura 4: Exemplo de log no Android. Fonte: [11].

3.2

O sistema de arquivos

Uma rvore de diretrios de um sistema de arquivos para o Android pode ser visto na Figura 5.
Novamente podemos notar um grande diferena se comparado ao sistema Linux usual. Os dois
principais diretrios so o data, que armazena os dados das aplicaes, e o system, com as bibliotecas (system/lib), servios (system/bin e system/xbin) e aplicaes Java (system/app).
O Android implementou uma biblioteca chamada Bionic para usar como biblioteca do sistema.
O Google tem problemas burocrticos com licenas GPL. A Bionic usa a licena BSD, e suporta as
arquiteturas x86 e ARM. Diferentemente do Linux, as bibliotecas no so a glibc ou uClibc.
Uma alternativa vivel seria utilizar a licena GPL da Busybox, no entanto os engenheiros da
Google preferiram usar a Toolbox, uma implementao no mesmo esquema do Busybox, que tambm
traz um conjunto mais limitado de comandos e ferramentas teis para gerenciar um sistema Android.
Podemos ver os executveis que fazem um link para a Toolbox na listagem na Figura 6.
O Android ainda usa por padro o SQLite como gerenciador de banco de dados para as aplicaes
e o OpenGL/ES como biblioteca para interface grfica, dentre outras bibliotecas disponveis.

Universidade Federal Fluminense

11

Sistemas de Computao

Estrutura do Sistema Android

3.3

Os servios bsicos

Figura 5: Exemplo de uma rvore de diretrios de um sistema de arquivos no Android. Fonte: [11].

3.3

Os servios bsicos

Se listarmos os processos rodando em um dispositivo com Android, a sada ser mais ou menos
como o visto na Figura 7.

Universidade Federal Fluminense

12

Sistemas de Computao

Estrutura do Sistema Android

3.4

As aplicaes

Figura 6: Executveis que fazem um link para o Toolbox. Fonte: [11].


Conclui-se que:
1. O processo init o pai de todos os processos que rodam em modo usurio, como o /sbin/ueventd
e o /system/bin/mediaserver;
2. O processo kthreadd o pai de todas as threads do kernel como o ksoftirqd e o khelper;
3. O processo zygote o pai de todas as aplicaes rodando no Android, como o
android.process.media e o com.android.email. Tudo que roda em cima de uma mquina
virtual, tem como antecessor comum o processo zygote [11].

3.4

As aplicaes

As aplicaes so escritas em linguagem Java. H bibliotecas Java disponveis para acessar todos
os recursos do dispositivo.
Ao executar uma aplicao, o processo zygote cria uma instncia da MV Dalvik para executla. E cada aplicao roda com um user ID diferente. Como vemos na coluna USER da listagem de
processos da Figura 7. Isso protege os processos uns dos outros, e do sistema como um todo. Isso
permite limitar o acesso aos arquivos do sistema e aos recursos do dispositivo atravs de permisses
de usurio.

Universidade Federal Fluminense

13

Sistemas de Computao

Estrutura do Sistema Android

3.5

O processo de boot

Figura 7: Exemplo de processos rodando no Android. Fonte: [11].

3.5

O processo de boot

O kernel do Linux executa o processo init, que faz as configuraes bsicas do sistema operacional Android e inicia outros processos e servios, incluindo o zygote, que responsvel por inicializar
a MV Dalvik e todos os processos e servios Java.
Normalmente a CPU possui um cdigo de boot residente em ROM (bootloader de primeiro nvel), responsvel por carregar um bootloader de segundo nvel para a memria. Este bootloader pode
ainda carregar um outro bootloader de terceiro nvel antes de iniciar o kernel do Linux. Na beagleboard, podemos ver o que acontece na Figura 8.
1. O bootloader de primeiro estgio, residente em ROM, procura por imagens de boot em diversos dispositivos de armazenamento e carrega para a SRAM (limite de 64KB). Neste caso
encontrar o XLoader na flash NAND ;

Universidade Federal Fluminense

14

Sistemas de Computao

Estrutura do Sistema Android

3.5

O processo de boot

Figura 8: Esquema da beagleboard. Fonte: [11].


2. O XLoader, bootloader de segundo estgio, carregado para a SRAM. Ele inicializa a controladora da DRAM, flash NAND e leitora MMC, e carrega o bootloader de terceiro estgio, que
o UBoot;
3. O UBoot, bootloader de terceiro estgio, roda da RAM. Ele inicializa alguns dispositivos de
hardware (rede, USB, etc.), carrega a imagem do kernel do Linux na RAM e passa o controle
para ele;
4. O kernel roda da RAM e assume o controle do sistema. Tirando o controle dos bootloaders
[11].
Sob a viso do sistema operacional, o importante saber que um bootloader ser carregado em
algum momento de sua execuo, ir inicializar o hardware, executar rotinas de testes, carregar o
kernel para a memria e execut-lo.
O processo de boot do kernel do Linux muito semelhante, independentemente da plataforma
ser Android, Meego, Ubuntu ou outra distribuio qualquer. O importante saber que o kernel far
seu trabalho normalmente, inicializando processos, memria virtual, dispositivos, drivers, sistemas
de arquivos, etc.

Universidade Federal Fluminense

15

Sistemas de Computao

Estrutura do Sistema Android

3.5.1

3.5

O processo de boot

O init

Como j mencionado anteriomente, o Android implementa seu prprio mecanismo de inicializao dos processos bsicos do sistema.
A implementao do init encontrase nos cdigos fontes do Android disponvel em system/core/init/init.c. Este processo faz algumas inicializaes de sistema operacional, como por
exemplo: criar diretrios e pontos de montagem bsicos do Linux como o /proc, o /sys e o /dev;
inicializar o sistema de log e abrir o console.
Uma tarefa importante deste processo o tratamento de um arquivo de configurao chamado
init.rc. Este arquivo tem objetivos parecidos com o /etc/inittab do mecanismo de inicializao
System V.
no init.rc que esta configurada boa parte do restante da inicializao do sistema, incluindo a
execuo dos servios bsicos do Android, dentre eles:
Console: Inicia o shell ash ;
ServiceManager: Inicia o binder (responsvel pela comunicao entre os processos);
Vold: Volume daemon controla a montagem de volumes de mdia no sistema de arquivos;
Adbd: Android debugger bridge daemon servidor para comunicao com o cliente adb ;
Media: Inicia os servidores multimdia (udio, vdeo, etc);
Bootsound: Executa um arquivo de udio no boot, lendo um arquivo em
/system/media/audio/ui/boot.mp3;
Installd: Servidor de instalao de pacotes/aplicaes *.apk.
Depois de interpretar este arquivo, o init entra em um loop infinito monitorando a ocorrncia de
eventos e a execuo de processos.
Pode-se, por exemplo, configurar o init.rc para que um processo seja iniciado quando conectado um pendrive na porta USB, (o init monitora a criao do device node em /dev quando um
dispositivo USB for conectado). [11]

Universidade Federal Fluminense

16

Sistemas de Computao

Gerenciamento de processos e memria

3.5.2

O Zygote

O zygote o pai dos processos Java. Todos os aplicativos desenvolvidos em Java criado por
este processo, que instancia uma MV Dalvik para executar um processo ou servio Java.
O zygote tem basicamente dois objetivos principais:
1. Prover uma infraestrutura para a execuo de aplicaes Java. Primeiramente, inicia a mquina
virtual Dalvik. Em seguida, executa um servidor que abre um socket que aguarda requisies
para execuo de aplicaes Java. Qualquer requisio de execuo de aplicaes Java passa
por esse servidor, que faz um fork para executar a aplicao em uma outra instncia da mquina
virtual. O cdigofonte deste servidor esta disponvel em
frameworks/base/core/java/com/android/internal/os/ZygoteConnection.java;
2. Iniciar o System Server, que gerencia a base dos servios do sistema operacional Android [11].
3.5.3

System server

A implementao do system server encontra-se em


frameworks/base/services/java/com/android/server/SystemServer.java. Ele inicia todos os servios
Java bsicos do Android. Dentre eles temos o Power Manager, Activity Manager, Telephony Registry, Package Manager, Context Manager, System Context Providers, Battery Service, Alarm Manager,
Sensor Service, Window Manager, Bluetooth Service, Mount Service, Status Bar Service ,Hardware
Service, NetStat Service, Connectivity Service, Notification Manager, DeviceStorageMonitor Service, Search Service, Clipboard Service, etc.
Todos os servios tem sua importncia dentro do ambiente e das aplicaes do sistema Android.
O mais importante entender que cada funcionalidade esta abstrada atravs de um servio, e a API
do Android disponibiliza funes para as aplicaes se comunicarem com estes servios.
Quase no final do boot, o Activity Manager inicia alguns processos bsicos, dentre eles o
com.android.launcher, que a aplicao responsvel pela interface grfica no Android.

Gerenciamento de processos e memria


Como j foi dito anteriormente o Android um sistema operacional baseado em Linux com o

kernel 2.6.x e utiliza o gerenciamentode memria baseado em tal. Todas as operaes bsicas do
Universidade Federal Fluminense

17

Sistemas de Computao

Gerenciamento de processos e memria

4.1

Android runtime

sistema operacional em nveis mais baixos, como o I/O, gerenciamento de memria, e assim por
diante, so tratados pelo kernel do Linux. Sendo assim o sistema se utiliza da biblioteca padro do C,
que acompanha o Linux h anos.

4.1

Android runtime

Existem algumas peculiaridades no gerenciamento de memria do Android. O Android inclui um


grupo de bibliotecas que fornece a maioria das funcionalidades disponveis nas principais bibliotecas
da linguagem Java. Toda aplicao Android possui um processo e instncia prprios na mquina
virtual Dalvik. Assim como nas plataformas Java e .Net, o Android utiliza-se de uma Mquina
Virtual(VM) prria, para assegurar que a execuo de vrias instncias em um nico dispositivo seja
eficiente. A Dalvik utiliza o kernel do Linux para lidar com funcionalidades de nvel mais baixo,
como segurana, threading e gerenciamento de processos e memria.

4.2

Dalvik Virtual Machine

Todo hardware do dispositivo e servios do sistema operacional so controlados usando o Dalvik


como uma camada intermediria. Atravs do uso desta mquina virtual para hospedar a execuo
de aplicativos os desenvolvedores podem abstrair da implementao em hardwares em particular,
facilitando a criao de novos aplicativos, que podem executar em qualquer dispositivo igualmente.
A Dalvik possui tambm uma extenso prpria para os arquivos executveis, a .dex, que garante
um menor consumo de memria. Os arquivos .dex so criados atravs da transformao das classes
compiladas do Java pelas ferramentas fornecidas na Android SDK.
Alm disso, desde a verso 2.2 (Froyo), o Android possui uma implementao de Justintime
(JIT), que compila dexcodes para a arquiteturaalvo em tempo de execuo, tornando a execuo dos
processos consideravelmente mais rpidas, j que no precisa ficar interpretando dexcodes.
Diferentemente da Java VM e .Net, o Android tambm gerencia o tempo de vida do processo.
Para otimizar o uso de memria verifica-se o estado de resposta do aplicativo, parando e matando
processos conforme necessrio para liberar recursos aplicaes de maior prioridade.
Junto com a mquina virtual Dalvik, o Android usa o framework Apache Harmony, desenvolvido
pela Apache Software Fundation como biblioteca padro de classes Java.

Universidade Federal Fluminense

18

Sistemas de Computao

Gerenciamento de processos e memria

4.2.1

4.2

Dalvik Virtual Machine

Prioridade e status de processos

No Android todos os processos so mantidos na memria at que haja a necessidade de recursos


para outros processos. A ordem na qual os processos so finalizados para liberao de recursos est
associada ao nvel de prioridade da aplicao do mesmo. A prioridade de uma aplicao igual a de
seu componente de maior prioridade. Na Figura 9 temos os possveis estados e os nveis de prioridade
com o qual os processos so tratados.

Figura 9: Estados de processos e seu nvel de prioridade associado. Fonte: [4].

Active Processes: So processos em interao com usurio (foreground ). So os processos


mantidos a todo custo pelo gerenciador;
Visible Processes: So processos que esto visveis, mas no esto interagindo com o usurio. Estes processos somente so terminados em casos de extrema necessidade, para que um
processo ativo continue executando;
Started Service Processes: So processos hospedando servios que foram iniciados e no
possuem interface visvel. Como no interagem diretamente com o usurio possuem um nvel
de prioridade inferior ao de processos visveis;
Background Processes: So processos de atividades que no esto visveis e no possuem
servios iniciados. Estes processos so finalizados utilizando-se o padro LastSeenFirst
Killed ;
Universidade Federal Fluminense

19

Sistemas de Computao

Gerenciamento de processos e memria

4.3

Memria Virtual

Empty Processes: So processos j finalizados, que so mantidos na memria pelo sistema


operacional, para acelerar o startup do mesmo e melhorar a performance do sistema. Estes
processos so frequentemente finalizados para serem finalizados e cederem recursos aos processos em execuo.
O nvel de prioridade de um processo tambm afetado pelas dependncias interprocessos. Se
um processo depende de um servio ou de um contedo a ser provido por um outro processo, este
segundo processo ter um nvel de prioridade igual ou maior que o primeiro.
Quando dois processos possuem mesmo nvel de prioridade, como critrio de desempate o processo que teve histrico de prioridade mais baixa durante mais tempo escolhido para ser finalizado
primeiro.

4.3

Memria Virtual

Memria virtual, uma tcnica que usa a memria principal como uma cache para armazenamento secundrio. Houve duas motivaes principais: permitir o compartilhamento seguro e eficiente da memria entre vrios programas e remover os transtornos de programao de uma quantidade
pequena e limitada na memria principal. A memria virtual consiste em recursos de hardware e
software com trs funes bsicas:
Realocao: Que assegura que cada processo (aplicao) tenha o seu prprio espao de endereamento, comeando em zero;
Proteo: Impede que um processo utilize um endereo de memria que no lhe pertena;
Paginao (paging) ou troca (swapping): Que possibilita a uma aplicao utilizar mais memria do que a fisicamente existente.
Simplificadamente, um usurio ou programador v um espao de endereamento virtual, que pode
ser igual, maior ou menor que a memria fsica [9].
Como foi dito anteriormente, o gerenciamento de memria em baixo nvel do Android feito pelo
Linux Kernel 2.6. A descrio da memria virtual feita portanto no Linux atravs de segmentao
e paginao. Faremos uma breve descrio de ambos a seguir.

Universidade Federal Fluminense

20

Sistemas de Computao

Gerenciamento de processos e memria

4.3.1

4.3

Memria Virtual

Segmentao

A segmentao divide a memria em 2 espaos distintos, o espao do kernel (Kernel Space) e o


espao do usurio (User Space). Dentro destes espaos temos os 4 segmentos bsicos:
Kernel Code.
Kernel Data/Stack.
User Code.
User Data/Stack.
Desta forma podemos garantir a proteo da memria, evitando o acesso de memria entre usurios.
Garantindo principalmente que processos em modo kernel no se misturem com processos em modo
usurio e que a pilha de dados no cresa indiscriminadamente.
4.3.2

Paginao

Somente com a segmentao teramos blocos de memria contnuos para cada processo. Isso
sobrecarregaria a memria, copiando a imagem de um processo todo de uma vez. Caso no haja
um espao de memria suficiente para alocar todo o processo, ou seja, no h um segmento que o
comportasse e haver falha por falta de segmento (segmentation fault). Para resolver tal problema
usada a paginao, onde a memria dividida em pedaos de tamanho fixo (pginas), e segmentos de
cdigo so alocados nestes e mapeados utilizando-se uma tabela de pginas, ao invs de alocao de
todo cdigo de uma nica vez.
No Linux a paginao feita em 3 nveis, ou seja, so usadas 3 tabelas para mapear a memria, a
Page Directory, Page Middle Directory e Page Table. O campo directory field usado como ndice
para o diretrio global, que existe para cada processo. O valor achado nessa posio um ponteiro
para a page middle table, que novamente indexada e contm um ponteiro que indica para o endereo
virtual de memria. Isso pode ser visto na Figura 10. Alm disso, para aumentar o desempenho do
sistema mantido um buffer com os ltimos endereos acessados, para que no haja necessidade
de fazer mltiplos acessos as pginas. Este buffer chamado de TLB (Translation Lookaside Buffer). Logo antes de realizar a procura do endereo utilizando as tabelas de pgina o sistema busca a
traduo direta do endereo no TLB. importante que a TLB se mantenha atualizada com relao
Universidade Federal Fluminense

21

Sistemas de Computao

Gerenciamento de processos e memria

4.4

Comunicao entre processos

Figura 10: Paginao no Linux.


ao contedo da memria principal. Como a TLB, em geral, possui tamanho menor que a memria
principal, necessrio substituir alguma traduo armazenada por outra mais recente.
4.3.3

Substituio de pginas

Quando a memria j preencheu todas as pginas possveis necessrio realizar a substituio de


pginas quando o processo em execuo requisita que uma nova pgina seja alocada. Para tal existem
diversos algoritmos de substituio paara escolher qual pgina dever ser removida para a entrada da
nova pgina na memria. Na Figura 11 vemos a seguncia de aes desenvolvidas por um sistema
operacional quando da solicitao de uma pgina, que envolve os conceitos de tabela de pginas e
TLB.
Alguns algoritmos foram criados para otimizar esta substituio. O algoritmo utilizado no Linux
o Least Recentment Used (LRU).
O LRU remove da memria a pgina que no foi utilizada por mais tempo. Isso baseia-se na
suposio de que pginas que no foram recentemente utilizadas tambm no o sero nas prximas
instrues, enquanto pginas bastante utilizadas agora tendem a ser bastante utilizadas na instrues
seguintes.

4.4

Comunicao entre processos

Como a memria segmentada e paginada, o acesso de um processo memria que no lhe


pertence no permitida. Por isso foram criados mecanismos de comunicao entre processos. Para

Universidade Federal Fluminense

22

Sistemas de Computao

Gerenciamento de processos e memria

4.5

Escalonamento de CPU

Figura 11: Fluxograma de solicitao de pgina.


os sistemas Linux tradicionais usa-se o padro System V IPC para comunicao entre processos
(message queues, semforos e shared memory). J no Android usa-se o binder para a comunicao
entre processos. Ele implementa um mdulo no kernel em drivers/misc/binder.c para esta tarefa.
Toda comunicao entre processos no Android passa pelo binder. Para o desenvolvedor de aplicaes
Android, o processo transparente, j que abstrado pelas bibliotecas do sistema.

4.5

Escalonamento de CPU

O problema bsico de escalonamento em sistemas operacionais como satisfazer simultaneamente objetivos conflitantes: tempo de resposta rpido, bom throughput para processos em segundo
plano, evitar postergao indefinida, conciliar processos de alta prioridade com de baixa prioridade,
etc. O conjunto de regras utilizado para determinar como, quando e qual processo dever ser executado conhecido como poltica de escalonamento. Assim como no Linux, o sistema operacional
Android divide os seus processos em trs grandes classe: processos interativos, processos batch e
processos tempo real. Em cada classe, os processos podem ser ainda subdivididos em I/O bound ou
CPU bound de acordo com a proporo de tempo que ficam esperando por operaes de entrada e
sada ou utilizando o processador. O escalonador do Android no distingue processos interativos de
processos batch, diferenciando-os apenas dos processos em tempo real. O escalonador do sistema
Universidade Federal Fluminense

23

Sistemas de Computao

Desenvolvimento no Android

4.6 Deadlocks

Android baseado em time-sharing, ou seja, o tempo do processador dividido em fatias de tempo,


fatias essas denominadas de quantum, as quais so alocadas aos processos. Se, durante a execuo
de um processo, o quantum esgotado, um novo processo selecionado para execuo, provocando
ento uma troca de contexto. Esse procedimento completamente transparente ao processo e baseiase em interrupes de tempo. Esse comportamento confere ao Android um escalonamento do tipo
preemptivo. O algoritmo de escalonamento do Android divide o tempo de processamento em pocas
(epochs). Cada processo, no momento de sua criao, recebe um quantum calculado no incio de uma
poca. Diferentes processos podem possuir diferentes valores de quantum. Outra caracterstica do escalonador do sistema Android a existncia de prioridades dinmicas. O escalonador do monitora
o comportamento de um processo e ajusta dinamicamente sua prioridade, visando a equalizar o uso
do processador entre os processos. Processos que recentemente ocuparam o processador durante um
perodo de tempo considerado longo tm sua prioridade reduzida. De forma anloga, aqueles que
esto h muito tempo sem executar recebem um aumento na sua prioridade, sendo ento beneficiados
em novas operaes de escalonamento [17].

4.6

Deadlocks

Um deadlock caracterizado por uma situao em que ocorre um impasse entre dois ou mais
processos que ficam impedidos de continuar suas execues, ou seja, ficam bloqueados. O deadlock
ocorre com um conjunto de processos e recursos no-preemptveis, onde um ou mais processos desse
conjunto est aguardando a liberao de um recurso por um outro processo que, por sua vez, aguarda
a liberao de outro recurso alocado ou dependente do primeiro processo [15].
Assim como no Linux, no Android no feito tratamento de deadlocks. O sistema parte do
princpio de que eles no viro a ocorrer.

Desenvolvimento no Android
Existem diversas ferramentas para auxiliar no desenvolvimento de aplicativos para o sistema An-

droid. A mais completa o kit de desenvolvimento Android SDK, que contm um ambiente com as
caractersticas e especificaes do Android. Dentre as vantagens no desenvolvimento Android, esto
as APIs (Application Programming Interface) com diversas funcionalidades provendo os servios do

Universidade Federal Fluminense

24

Sistemas de Computao

Desenvolvimento no Android

sistema.
As APIs estabelecidas para o Android permitem total modificao por meio de programao do
seu contedo. Porm, programas que no precisa envolver-se em detalhes da implementao do software podem apenas utilizar os servios, se a preocupao de como funciona, utilizando apenas as
caractersticas menos evidentes ao usurio padro. Um ponto forte das APIs bsicas do Android a
otimizao que estas possuem, focando a utilidade dos pacotes, em conjunto com um bom aproveitamento, deixando de fora pacotes pesados e pouco evoludos. Atravs destas, pode ser criada toda a
interface com o usurio, permitindo a criao de telas, acessar arquivos, criptografar dados, ou seja,
utilizar a funcionalidade definida pelo utilizador.
Entre as principais APIs podemos destacar:
Location Manager (android.maps): Usada para obter a posio geogrfica do usurio. Como
por exemplo, em aplicaes que fazem uso de GPS ;
Telephony Manager (android.telephony): Informaes sobre dispositivos como bateria e servios de telefonia celular podem ser obtidos atravs dessa API ;
Window Manager (android.view): Responsvel pelo gerenciamento de toda janela de uma
aplicao, principais funes e componentes de inteface grfica;
Content Providers (android.provider): Responsvel pela disponibilizao dos dados atravs
das aplicaes tornando esses dados pblicos. Quase todo tipo de dado compartilhvel, como
udio, vdeo, imagens e texto;
Resource Manager (android.util): Todos os recursos que uma aplicao ir usar como udio,
vdeo, arquivos XML, so separados dela a fim de que sejam otimizados para ocupar menos
espao e demorar menos tempo para que sejam carregados. Essa API facilita o acesso a esses
recursos;
Notification Manager: Permite que uma aplicao exiba notificaes, ative LEDs, luzes, sons
ou vibrao disponveis no dispositivo;
Activity Manager: Responsvel pelo gerenciamento de cada atividade do sistema. No Android
cada atividade gerenciada atravs de uma pilha de atividades. Toda nova atividade criada

Universidade Federal Fluminense

25

Sistemas de Computao

Consideraes finais

5.1

Android.os

vai para o topo de pilha de atividades e se torna uma running activity, significando que ser
executada;
Webkit (android.webkit): Inclui APIs para contedo web, bem como um navegador embutido
para utilizao geral;
android.app: APIs de Alto nvel referentes ao modelo da aplicao;
android.widget: Contm widgets prontos (botes, listas, grades, etc) para serem utilizados nas
aplicaes;
android.database: Contm as APIs para comunicao com o banco de dados SQLite;
android.os: Contm servios referentes ao sistema operacional, passagem de parmetros e
comunicao entre processos.

5.1

Android.os

A API Android.os prov os servios bsicos e essenciais do sistema operacional, alm de servios
de troca de mensagens e a comunicao entre processos. As funes da API podem ser observadas
no Apndice A.

Consideraes finais
No decorrer desse trabalho foram destacadas as principais caractersticas do sistema operacio-

nal Android dando nfase ao bom momento em que se encontra o mercado atual dos dispositivos
mveis. Com um evidente crescimento no desenvolvimento de dispositivos mveis, o desenvolvimento de aplicativos para smartphones se torna um grande nicho de mercado que vem crescendo
exponencialmente. O sistema operacional Android se tornou um atrativo para esse mercado vido
por tecnologia, principalmente pelo seu conceito de integrao e flexibilidade embutidos, fornecendo
total acesso aos programadores que desenvolvem aplicativos para essa plataforma.

Universidade Federal Fluminense

26

Sistemas de Computao

Tabela de funes da API android.os

Tabela de funes da API android.os

Figura 12: Funes de interfaces da API android.os. Fonte: http://developer.android.com/.

Figura 13: Funes de exceptions da API android.os. Fonte: http://developer.android.com/.

Figura 14: Funes de enums da API android.os. Fonte: http://developer.android.com/.

Universidade Federal Fluminense

27

Sistemas de Computao

Tabela de funes da API android.os

Figura 15: Funes de classes da API android.os. Fonte: http://developer.android.com/.

Universidade Federal Fluminense

28

Sistemas de Computao

Referncias

Referncias

Referncias
[1] Silberschatz, A.; Galvin, P.B.; Gagne, G. Fundamento de Sistemas Operacionais. 8 ed.,
LTC, 2010.
[2] Android.com Discover Android.
Disponvel em: http://www.android.com/about/
Acesso em 17 de maio de 2012.
[3] Businessweek.com Google Buys Android for Its Mobile Arsenal.
Disponvel em:
http://www.businessweek.com/technology/content/aug2005/tc20050817_0949_tc024.htm
Acesso em 11 de maio de 2012.
[4] Mobworld Memory Management in Android.
Disponvel em:
http://mobworld.wordpress.com/2010/07/05/memory-management-in-android/
Acesso em 14 de maio de 2012.
[5] HowStuffWorks Como Funciona A Memria Virtual.
Disponvel em: http://informatica.hsw.uol.com.br/memoria-virtual.htm
Acesso em 18 de maio de 2012.
[6] Wikipdia Android.
Disponvel em: http://pt.wikipedia.org/wiki/Android
Acesso em 15 de maio de 2012.
[7] Wikipdia Sistema Operacional.
Disponvel em: http://pt.wikipedia.org/wiki/Sistema_operativo
Acesso em 15 de maio de 2012.

Universidade Federal Fluminense

29

Sistemas de Computao

Referncias

Referncias

[8] Wikipdia Linux (Ncleo).


Disponvel em: http://pt.wikipedia.org/wiki/Linux_(ncleo)
Acesso em 15 de maio de 2012.
[9] Wikipdia Memria Virtual.
Disponvel em: http://pt.wikipedia.org/wiki/Memria_virtual
Acesso em 17 de maio de 2012.
[10] Oficina da Net Tudo sobre o Google Android OS.
Disponvel em:
http://www.oficinadanet.com.br/artigo/outros_sistemas/google_android_os
Acesso em 20 de maio de 2012.
[11] Padro, Sergio, Entendendo o processo de boot do Android" e Introduo ao funcionamento interno do Android.
Disponvel em: http://sergioprado.org/entendendo-o-processo-de-boot-do-android/
Disponvel em:
http://sergioprado.org/introducao-ao-funcionamento-interno-do-android/
Acesso em 18 de maio de 2012.
[12] Meier, Reto. Professional Android Application Development. Indianapolis: Wiley Publishing, 2009. Werneck, Rafael.
[13] Nakashima, Rafaela, IntroduoEmbarcados Bsico.
Disponvel em: http://embarcadosbasico.wordpress.com/2011/12/14/introducao/
Acesso em 18 de maio de 2012.
[14] Zanuz, L.; Meneghel, M.; Marcon.F; Borba, M. Escalonamento de CPU no Linux.
Disponvel em: http://lzanuz.sites.uol.com.br/escalonamento.htm
Acesso em 20 de maio de 2012.

Universidade Federal Fluminense

30

Sistemas de Computao

Referncias

Referncias

[15] Wikipdia Deadlock.


Disponvel em: http://pt.wikipedia.org/wiki/Deadlock
Acesso em 21 de maio de 2012.
[16] Pereira, L. C. O.; Silva, M. L. Android Para Desenvolvedores. 1 ed., Brasport, 2009.
[17] de Oliveira, R.; Carissimi, A.; Toscani, S. Escalonamento em Linux
Disponvel em: http://www.inf.ufrgs.br/~asc/livro/secao94.pdf
Acesso em 21 de maio de 2012.

Universidade Federal Fluminense

31

Sistemas de Computao

Você também pode gostar