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 1 Introduo 1.1 1.2 1.3 1.4 2 3 Gerenciamento de processos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Gerenciamento de memria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Sistema de arquivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Entrada e sada de dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 4 4 4 5 5 5 7 9 11 12 13 14 16 17 17 17 18 18 19 20 21 21 22 22 23 24

Objetivo e motivao Estrutura do Sistema Android 3.1 3.2 3.3 3.4 3.5 O kernel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . O sistema de arquivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Os servios bsicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . As aplicaes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . O processo de boot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.5.1 3.5.2 3.5.3 O init . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . O Zygote . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . System server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Gerenciamento de processos e memria 4.1 4.2 Android runtime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Dalvik Virtual Machine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2.1 4.3 Prioridade e status de processos . . . . . . . . . . . . . . . . . . . . . . . .

Memria Virtual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.1 4.3.2 4.3.3 Segmentao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Paginao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Substituio de pginas . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4.4 4.5 4.6

Comunicao entre processos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Escalonamento de CPU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Deadlocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Desenvolvimento no Android 5.1 Android.os . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

24 26 26 27 29

Consideraes nais

A Tabela de funes da API android.os Referncias

Lista de Figuras
1 Evoluo da quantidade de celulares no mundo. Fonte: UIT, Wireless Intelligence, GSA/Informa e Teleco. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 3 4 5 Arquitetura do sistema operacional Android. Fonte: http://developer.android.com/. . 6 8

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]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 13 14 15 19 22 23 27 27 27 28 11

6 7 8 9 10 11 12 13 14 15

Executveis que fazem um link para o Toolbox. Fonte: [11]. . . . . . . . . . . . . . Exemplo de processos rodando no Android. Fonte: [11]. . . . . . . . . . . . . . . . Esquema da beagleboard. Fonte: [11]. . . . . . . . . . . . . . . . . . . . . . . . . . Estados de processos e seu nvel de prioridade associado. Fonte: [4]. . . . . . . . . . Paginao no Linux. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fluxograma de solicitao de pgina. . . . . . . . . . . . . . . . . . . . . . . . . . . Funes de interfaces da API android.os. Fonte: http://developer.android.com/. . . . Funes de exceptions da API android.os. Fonte: http://developer.android.com/. . . . Funes de enums da API android.os. Fonte: http://developer.android.com/. . . . . . Funes de classes da API android.os. Fonte: http://developer.android.com/. . . . . .

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 sicamente.

Universidade Federal Fluminense

Sistemas de Computao

Objetivo e motivao

1.3

Sistema de arquivos

1.3

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 5 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 exvel, 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 nalidade de trazer aos consumidores uma experincia muito mais rica em termos de recursos e menos custosa em termos nanceiros 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 grcos 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 simplicar o reutilizao de procedimentos. Essa camada funciona como um link com a camada de Universidade Federal Fluminense 7 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, grcos, banco de dados e browser. Algumas bibliotecas so a Bionic, a OpenGL/ES para trabalhar com interface grca, 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 modicaes foram feitas para otimizar memria e tempo de processamento das aplicaes. Essas modicaes 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 modicada do kernel do Linux. Dentre as principais modicaes, podemos citar: Binder: Em todo sistema operacional com suporte memria virtual os processos rodam em diferentes regies de memria. Isso signica 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 9 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 car 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 nalize 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 vericar 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 grca, 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 conguraes 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 ash 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, ash NAND e leitora MMC, e carrega o bootloader de terceiro estgio, que o UBoo t; 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

O processo de boot

3.5.1

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 congurao chamado init.rc. Este arquivo tem objetivos parecidos com o /etc/inittab do mecanismo de inicializao System V. no init.rc que esta congurada 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 innito monitorando a ocorrncia de eventos e a execuo de processos. Pode-se, por exemplo, congurar 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, Notication 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 nal do boot, o Activity Manager inicia alguns processos bsicos, dentre eles o com.android.launcher, que a aplicao responsvel pela interface grca 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 eciente. 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 car interpretando dexcodes. Diferentemente da Java VM e .Net, o Android tambm gerencia o tempo de vida do processo. Para otimizar o uso de memria verica-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

Dalvik Virtual Machine

4.2.1

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 nalizados 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 nalizados 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 nalizados, que so mantidos na memria pelo sistema operacional, para acelerar o startup do mesmo e melhorar a performance do sistema. Estes processos so frequentemente nalizados para serem nalizados 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 nalizado 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 eciente 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 sicamente existente. Simplicadamente, 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

Memria Virtual

4.3.1

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 suciente 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 xo (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 eld 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 conitantes: tempo de resposta rpido, bom throughput para processos em segundo plano, evitar postergao indenida, 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 cam 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 beneciados 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 cam impedidos de continuar suas execues, ou seja, cam 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 especicaes 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 modicao 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 denida pelo utilizador. Entre as principais APIs podemos destacar: Location Manager (android.maps): Usada para obter a posio geogrca 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 grca; 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 m de que sejam otimizados para ocupar menos espao e demorar menos tempo para que sejam carregados. Essa API facilita o acesso a esses recursos; Notication Manager: Permite que uma aplicao exiba noticaes, 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 nais

5.1

Android.os

vai para o topo de pilha de atividades e se torna uma running activity, signicando 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 nais
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 exibilidade 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] Ocina 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