O documento discute o sistema operacional Firefox OS, incluindo sua arquitetura baseada em HTML5 e Web APIs, gerenciamento de processos e memória usando o kernel Linux, e vantagens como código aberto e desenvolvimento usando tecnologias da web.
2. Agenda
Visão Geral
Gerenciamento de Processos
Gerenciamento de Memória
Entrada e Saída
Sistemas de Arquivos
Vantagens e Desvantagens
3. Visão Geral – Firefox OS
• O Firefox OS é um Sistema Operacional desenvolvido pela Mozilla,
baseado no motor de funcionamento do navegador Firefox o Gecko.
• Também conhecido como B2G (Boot to Gecko). Seu alicerce é
constituído com HTML5 e Web APIs.
• A base do Sistema é o Android Open Source que usa o Kernel do Linux
mais o Gecko. Basicamente é um browser como sistema operacional.
7. GAIA
• O Gaia é a interface gráfica do Firefox OS.
• Tudo que você precisa saber para criar
aplicativos são tecnologias web como
JavaScript, HTML e CSS.
• As APIs de acesso são definidas pela W3C
DAP (DeviceAPis).
8. GECKO
Gecko é o nome do motor de layout desenvolvido
pelo Projeto Mozilla.
A função do Gecko é ler o conteúdo da web,
como HTML, CSS, XUL, JavaScript e renderiza-lo na
tela do usuário.
9. GONK
• Gonk é o nível mais baixo da
plataforma do sistema
operacional Firefox OS, composto por
um kernel Linux baseado no (AOSP).
• É uma camada de portabilidade do
dispositivo: um adaptador entre o
hardware e o Gecko.
10. Gerenciamento de Processos
• Firefox OS usa threads POSIX para implementar as threads de
aplicações, isso inclui a thread principal de cada aplicação
bem como as Web workers e helper threads. Valores "Nice" são
usados para priorizar os processos e a execução das threads
confiando no agendador padrão do kernel do Linux.
Dependendo do status do processo nós atribuimos um
diferente valor "Nice" do nível. Temos atualmente 7 níveis:
11. Gerenciamento de Processos
• Alguns níveis possuem os mesmos "nice
values", isso acontece porque esses níveis
diferem da forma que são tratados pelo "out-
of-memory killer". Todas as prioridades
podem ser ajustadas em tempo de
compilação via "Preferências". Os valores
relevantes podem ser encontrados no
arquivo b2g/app/b2g.js
12. Gerenciamento de Processos
• Dentro de um processo a thread principal herda o "nice value" do
processo, enquanto às threads do web worker é atribuido um "nice
value" um ponto maior que a thread principal que roda na menor
prioridade. Isso é feito para evitar que processos que utilizem muita
CPU degradem a performance da thread principal. Prioridades de
processos são alterados sempre que acontece um grande evento
como quando uma aplicação é enviada para rodar em background
ou foreground, uma nova aplicação é iniciada, ou uma aplicação
existente executa uma wake-lock da CPU. Toda vez que a prioridade
de um processo é ajustada todas as prioridades de suas threads
também são ajustadas em conformidade.
13. Gerenciamento de Memória
Dois subsistemas são usados para gerenciar:
Low memory killer (LMK - Finalizador de memória baixa)
Low memory notifications ( LMN - Notificações de pouca
memória)
14. Low memory Killer - LMK
• O LMK é um subsistema do kernel do Android que encerra
automaticamente os processos para dar lugar a pedidos de
memória. Para escolher qual o processo deve ser encerrado
primeiro para liberar memória, a cada processo é atribuido
uma prioridade através dos arquivos /proc/<pid>/oom_adj ou
/proc/<pid>/oom_score_adj. Um processos tem uma prioridade
conhecida como prontuação de ajuste, ou oom_adj. Valores
menores de oom_adj corresponde a processos de maior
prioridade.
15. Low memory Killer - LMK
• O LMK oferece múltiplos níveis, cada um correspondendo a uma
certa quantidade de memória livre e uma mínima de pontuação de
ajuste. Sempre que a quantidade de memória livre no sistema cair
abaixo de um certo nível, todos os processos com uma pontuação
de ajuste maior do que o mínimo especificado para este nível são
elegíveis para ser encerrado. O LMK irá começar a encerrar esses
processos, os maiores em primeiro lugar, e continuará até que tenha
liberado memória suficiente de acordo com o limite definido.
16. Prioridade de Processos - LMK
• No Firefox OS os aplicativos são encerrados seguindo a política
de ordem de prioridade, que é imposta dando a cada
aplicação um nível de prioridade e associando uma pontuação
de ajuste (OOM) a esses níveis. (os valores correntes são
definidos em prefs):
1. Os primeiros aplicativos a serem encerrados serão os aplicativos
em segundo plano, iniciando pelos menos utilizados
recentemente.
2. O aplicativo homescreen é o próximo a ser encerrado.
17. Prioridade de Processos
3. Em seguida, são encerrados os aplicativos em segundo plano que são
perceptíveis pelo usuário (por exemplo, um leitor de música reproduzindo
áudio em segundo plano.
4. Se o teclado estiver em uso, será o próximo a ser encerrado.
5. Aplicações em primeiro plano serão as próximas a serem encerradas.
6. Finalmente, aplicações em primeiro plano que solicitaram um wakelock
high-priority ou cpu serão as últimas a serem encerradas.
18. Prioridade de Processos
• Existe algumas exceções para essas regras:
O processo principal nunca é terminado pelo LMK, pois se isso for feito
todos os demais processos serão terminados e o sistema operacional
seria reiniciado. O processo principal é executado com oom_adj 0.
Nós mantemos um processo que é utilizado para acelerar o início de
novos aplicativos chamado preallocated process. Normalmente esse
processo é mantido ativo pois consome pouca memória e permite uma
maior velocidade ao iniciar um aplicativo. A única situação na qual
esse processo pode ser terminado é se não existir memória suficiente
para o processo principal manter-se ativo após os outros processos
terem sido terminados.
19. Low memory notifications - LMN
O LMK fornece um limite especial que quando ultrapassa pode enviar
notificações para o userspace informando que o sistema está sendo
executado com pouca memória.
Quando for encontrada uma condição de pouca memória o primeiro
evento memory-pressure enviado possuirá o parâmetro low-memory. Se
após um período pré-definido (5s) persistir a condição de pouca
memória, um outro evento memory-pressure será disparado, mas dessa
vez com o parâmetro low-memory-ongoing.
20. Como LMK e LMN trabalham juntos
Atualmente o limite de pouca memória é definido abaixo do
nível do LMK. Assim, as ações agregadas para o LMK e LMN
quando um dispositivo possui pouca memória:
1. Terminar aplicativos em segundo plano em ordem dos
menos usados recentemente.
2. Se não for liberada memória suficiente envia o evento
memory-pressure para os aplicativos remanescentes.
21. Como LMK e as notificações de
pouca memória trabalham juntos
3. Se a condição persistir é renviado um evento memory-pressure a cada 5
segundos, mas marcando-os como em execução para que os processos
de GC/CC (Garbage Collector e Cycle Collector) não respondam a eles.
4. Terminar o aplicativo Tela Inicial.
5. Terminar aplicações em segundo plano perceptíveis e de alta prioridade.
6. Terminar o aplicativo teclado se estiver sendo executado.
7. Terminar aplicativos em primeiro plano.
8. Terminar aplicativos em primeiro plano de alta prioridade.
9. Terminar os processos pré-alocados.
22. Entrada e Saída
Componente Descrição
Kernel Linux Usa bibliotecas do Android (GPS, câmera, etc.) e outros
projetos de código aberto
(Linux, libusb, bluez, e assim por diante).
Radio
Interface
Layer (RIL)
Interage com o hardware modem (telefonia) no telefone.
Consiste em duas componentes:
• rild daemon fala com o firmware do modem
• rilProxy proxies mensagens entre rild eo processo B2G
Media
process
Controles de reprodução de áudio e vídeo. Gecko se
comunica com o servidor de mídia através de um mecanismo
RPC Android.
Network
process
Daemon de rede que interage diretamente com interfaces de
rede (Wi-fi) no hardware.
Bluethoof e
outros
Bluetooth e outros de nível de serviço daemons que dão
acesso ao hardware capacidades.
23. Sistema de Arquivos
• FAT32
• A tabela de alocação de arquivos (FAT) é uma tabela que guarda
informações sobre a localização de cada arquivo dentro da unidade
física para que elas possam ser salvas, recuperadas, alteradas ou
deletadas posteriormente.
• Elas são armazenadas em blocos dispostos em diferentes posições do
disco, justificando a necessidade de uma tabela que aponte para cada
um destes blocos.
24. Vantagens e Desvantagens
• Vantagens
Sistema Operacional totalmente aberto
Opção “não me ratrei”(funcionalidade do firefox)
Baixo Custo
Poucos Aplicativos (Bom para desenvolvedores)
Linguagem de desenvolvimento (Padrões WEB)
Totalmente personalizável (Acesso ao código de gerenciamento do Sistema)
Um simples site definido como favorito é considerado um aplicativo
25. Vantagens e Desvantagens
• Desvantagens
Hardware simples
Poucas APIS de acesso para desenvolvedores
Falta de aplicativos (Não tem Whatsapp Oficial)
26. Curiosidades SO para TV
• SO
Android TV
Tizen
WebOS – LG
Firefox OS
Linux
• Streaming de mídias - TV
Android – Chrome Cast
Firefox OS – Matchstick
Amazon Fire TV
Roku
Apple TV
Interface Portável entre Sistemas Operacionais
POSIX define a interface de programação de aplicações (API)
Muitos "processos filhos" são executados com oom_adj 2 enquanto estão em primeiro plano. Ao serem executados em segundo plano o valor de oom_adj ficam entre 3 e 6(inclusive). O valor exato de oom_adj de um processo filho depende de vários de fatores: se está tocando uma música, se é o aplicativo de tela inicial, etc.
Muitos "processos filhos" são executados com oom_adj 2 enquanto estão em primeiro plano. Ao serem executados em segundo plano o valor de oom_adj ficam entre 3 e 6(inclusive). O valor exato de oom_adj de um processo filho depende de vários de fatores: se está tocando uma música, se é o aplicativo de tela inicial, etc.
Esse parâmetro é utilizado quando continuamos com a condição de pouca memória e gostaríamos de liberar caches e utlizar outras formas "mais baratas" de minimizar o uso da memória, mas sabendo que abordagens mais pesadas como GC (Garbage Collector) provavelmente não terão sucesso
Muitos "processos filhos" são executados com oom_adj 2 enquanto estão em primeiro plano. Ao serem executados em segundo plano o valor de oom_adj ficam entre 3 e 6(inclusive). O valor exato de oom_adj de um processo filho depende de vários de fatores: se está tocando uma música, se é o aplicativo de tela inicial, etc.
Sem uma estrutura de armazenamento de dados como o FAT32, nenhum procedimento de acesso a disco é possível.
O qual é o sistema de arquivos usado pelo Firefox OS, precisando está no formato FAT32 o cartão SD do dispositivo, ao contrário não é reconhecido.