Marianna Soares Veríssimo
Joffily Ferreira dos Santos
PhoneGap é uma ferramenta open source utilizada na criação de aplicativos, para diversas plataformas usando HTML5, CSS e JavaScript.
Com a tecnologia Apache Codorva ele acessa as funções do aparelhos móveis sem precisar de APIs específicas.
Os aplicativos feitos com o PhoneGap são compatíveis com várias plataformas.
Plataformas Suportadas:
Firefox OS é uma marca Mozilla (e de seus parceiros OEM) e serviços de suporte aplicados em cima do Boot to Gecko (B2G), que é o codinome de engenharia do sistema operacional Firefox OS.
Boot to Gecko é desenvolvido por um time de engenheiros da Mozilla somado a muitos colaboradores externos pertencentes a uma vasta comunidade Mozilla/Open Source.
Um Sistema Computacional é dividido em hardware, Sistema Operacional, programas aplicativos e usuários.
No Firefox OS o hardware é o conjunto de memória, dispositivos de entrada e saída, processador, GPS e sensores.
Já os programas de aplicativos, são as aplicações que utilizam dos recursos de hardware para a solução de problemas.
O Firefox OS é destinado para as grandes massas por ser ágil, fácil de ser utilizado e de código aberto (mais interessante para desenvolvedores).
O sistema operacional é o Firefox OS, responsável por administrar eficientemente os recursos que os programas consumirão e gerenciar os eventos de entrada e saída.
O Gonk é a camada mais baixa do sistema operacional e consiste em um kernel Linux (baseado no Android Open Source Project (AOSP). O kernel e várias das bibliotecas são ligados a projetos de código aberto conhecidos: Linux, dentre outros. Pode-se dizer que o Gonk é uma distribuição Linux simplificada.
Uma vez que o projeto do Firefox OS tem controle sobre o Gonk, é possível que interfaces baixo nível sejam expostas ao Gecko, por exemplo, o acesso direto para a pilha de serviços de telefonia.
Estas características são novas e não ocorrem no caso de outros sistemas operacionais.
Nessa camada estão presentes os programas básicos (device drives) que são indispensáveis ao funcionamento do hardware. Como o próprio Sistema Operacional.
O Gecko oferece uma infra estrutura de padrões web como HTML5, CSS, SVG, WebGL, JavaScript, dentre outros. Ele também oferece recursos do sistema como device API assim permitindo que aplicações web possam acessar serviços do dispositivo móvel, como por exemplo o GPS e câmera.
O Gecko também
carrega várias
funcionalidades
básicas que são
importantes para que
aplicações web possam rodar corretamente, como a camada de rede e segurança, a camada de gráficos, o motor máquina virtual JavaScript, dentre outros.
É a interface visual do Firefox OS, que apresenta a experiência do sistema ao usuário. A camada Gaia contém várias aplicações (Programas de Aplicação) padrão como Tela de Bloqueio e Tela Inicial, e várias aplicações que são esperadas em um smartphone.
O Gaia é completamente implementado com padrões web como HTML, CSS, JavaScript, dentre outros.
As interfaces entre a camada web e os recursos do sistema operacional são feitas via APIs web — algumas abertas e outras que estão em desenvolvimento na camada Gecko.
Além dos aplicativos básicos disponíveis no telefone, o Firefox OS disponibiliza um marketplace para que os usuários possam escolher as aplicações que mais lhe interessem.
Aplicativos famosos como o Easy Taxi, e jogos como Cut The Rope e Mario NES já estão presentes na loja.
Diversas marcas já utilizam o Firefox OS como Sistema Operacional padrão.
Tais como: LG, Alcatel, Hauwei.
Por utilizar um fork do kernel do Linux são herdadas system calls desse kernel.
Abaixo esta um exemplo de System Calls.
accept, accept4
int accept4(int sockfd, struct sockaddr *addr,
socklen_t *addrlen, int flags);
Os processos de nível alto (usuário), rodam em cima de um template de processos fornecido por uma parte do sistema chamada Nuwa. Todos os processos que rodam neste nível são subprocesos do B2G (multi-thread), cada processo possui seu espaço de endereçamento dedicado, contexto de hardware dedicados e softwares dedicados, já que rodam em cima de uma sandbox de alto nível (usuário).
Os processos que rodam a partir do template do Nuwa usam os mesmos estados de processos de um sistema de linux padrão. Porém esses processos 'criados' pelo Nuwa, são Threads que após a sua execução pelo processador ou ao entrar em estado de bloqueio por I/O, salvam o seu contexto de hardware no contexto de memória daquele template copiado do Nuwa. Levando em conta que as threads são excluídas após serem executadas, elas são renovadas utilizando o mesmo espaço de endereçamento dedicado.
Os estados dos processos são: criação, execução, pronto, esperando I/O, terminado.
1) Quando um aplicativo é iniciado o B2G chama o Nuwa.
2) O Nuwa cria o contexto para o processo.
3) O processo é inicializado com o minimo de privilégios possíveis.
4) Todo processo é um processo filho do B2G.
Podemos listar os aplicativos que estão em execução pelo sistema via JavaScript utilizando o emulador de sistema do navegador Firefox.
Resultado dos aplicativos abertos no sistema.
Toda ação realizada no aplicativo é feita por meio de uma Thread. Todo processo (aplicativo) possui um Thread que foi clonada do template do Nuwa que foi anteriormente criada no processo de inicialização do B2G.
Assim sabemos que um aplicativo já possui uma Thread destinada exclusivamente para o proposito de socket e comunicação via IPC (chamadas para o b2g). Além disso, todo aplicativo tem outras threads que rodam concorrentemente para realizar as tarefas as quais são destinadas.
Aplicativo 1
Aplicativo 2
Cenário
Deadlock
O escalonador trabalha com prioridades estatísticas e dinâmicas.
Nas prioridades dinâmicas o escalonador monitora os processos e faz ajustes nas prioridades.
Nas prioridades estatísticas são utilizados apenas para processos de tempo real.
O escalonador executa os processos com prioridades dinâmicas somente, quando não houver mais processos de tempo real.
Para processos de tempo real é utilizado o FIFO.
Para processos dos usuários é utilizado o Round-Robin.
Como o Firefox OS utiliza o Kernel do Android, o mesmo não oferece swap para memória. Mas, ele usa paginação e mapeamento para gerenciamento de memória.
Isto significa que qualquer memória pode se modificar diante da atribuição de novos processos.
Arquivos mapeados e sem modificações, tais como código, podem ser paginados fora da RAM, se o sistema quiser usar essa memória em outro lugar.
As páginas da memória RAM são compartilhadas entre os processos.
No gerenciamento de memória, o programador tem noção dos programa que por ele são alocados e liberados, utilizando para tal, funções de biblioteca (por exemplo, malloc, free).
Essas funções por sua vez, invocam chamadas no sistema que permitem aumentar, diminuir, proteger, etc. o espaço de endereçamento do processo invocador.
O Firefox OS utiliza diferentes tipos de sistemas de arquivos.
O sistema operacional utiliza um fork do Kernel do Android, toda vida o seu sistema de arquivos é em sua maioria EXT4, por default o tamanho do cluster nesse sistemas de arquivos é de 4Kb.
Primordialmente o usuário e os aplicativos de usuários só possuem permissão de ler e escrever em determinadas partes.
O ponto de montagem /data é onde haverá a montagem dos diretórios de Imagens, músicas e etc.
O /mnt/sdcard é onde o sistema irá montar o acesso ao cartão de memória que o celular poderá ter e o usuário mais uma vez possui acesso de leitura e escrita.
Recuperando um arquivo utilizando a Web API do FFOS
var sdcard = navigator.getDeviceStorage('sdcard');
var request = sdcard.get("my-file.txt");
request.onsuccess = function () {
var file = this.result;
console.log("Get the file: " + file.name);
}
request.onerror = function () {
console.warn("Unable to get the file: " + this.error);
}Adicionando um arquivo utilizando a webapi do Firefox OS
var sdcard = navigator.getDeviceStorage("sdcard");
var file = new Blob(["This is a text file."], {type: "text/plain"});
var request = sdcard.addNamed(file, "my-file.txt");
request.onsuccess = function () {
var name = this.result;
console.log('File "' + name + '" successfully wrote on the sdcard storage area');
}
// An error typically occur if a file with the same name already exist
request.onerror = function () {
console.warn('Unable to write the file: ' + this.error);
}O Firefox OS é um sistema operacional projetado para ser utilizado em celulares e tablets e até mesmo em Smart TVs, como é de se imaginar, com a miniaturização dos componentes internos desses aparelhos, não há espaço físico e nem bateria com carga alta que consiga manter a utilização de discos magnéticos, portanto é unânime a utilização de memória flash para armazenar.
Buscando a informação sobre os setores destas memórias, descobrimos que os setores são mencionados como blocos e que possuem o tamanho de 512 bytes físicos.
Gerenciamento de Entrada e Saída
Como estamos trabalhando com um equipamento onde o toque em uma tela é um evento de entrada, fica claro que se não houvesse algo que tratasse diretamente deste processo, o processador ficaria muito ocupado em verificar o status dos toques e ações.
O sistema implementa classes que tratam diretamente desses eventos e essas classes são auxiliadas pelo controlador do touch.
Quando um toque/ação é feita é gerada a interrupção para o processador atender a chamada e posteriormente voltar ao trabalho que estava realizando. Caso fosse necessário a verificação constante do status do touch o processador iria trabalhar muito mais, consequentemente consumiria mais energia.
Referências :