UNIVERSIDADE ESTADUAL DE PONTA GROSSA SETOR DE CIÊNCIAS AGRÁRIAS E DE TECNOLOGIA DEPARTAMENTO DE INFORMÁTICA GABRIEL BOJKO LUIZ OTÁVIO OYAMA MECANISMO DE ESCALONAMENTO DE APLICAÇÕES NO iOS PONTA GROSSA 2016 GABRIEL BOJKO LUIZ OTÁVIO OYAMA MECANISMO DE ESCALONAMENTO DE APLICAÇÕES NO iOS Pesquisa apresentada para obtenção de nota parcial na Universidade Estadual de Ponta Grossa, na disciplina de Sistemas Operacionais. Professor: Dierone César Foltran Júnior. PONTA GROSSA 2016 1. INTRODUÇÃO Não podemos falar de iOS sem lembrar do seu principal idealizador: Steve Paul Jobs, nome pelo qual deve perdurar por tempos no cenário da Tecnologia da Informação. Grande parte do globo já pode ter utilizado algumas de suas criações, principalmente as provenientes da Apple. Vale citar aqui o Macintosh (Mac), iPhone, iPad, onde estes dois últimos fazem uso do Sistema Operacional iOS, abordado neste trabalho. Famoso por sua segurança, estabilidade e confiança, o iOS é conhecido como um dos melhores Sistemas Operacionais do mundo. Juntamente com o primeiro iPhone, foi originalmente lançado em 2007 e seu nome até a versão 4.0 era “iPhone OS”. Em 2010 passou a ser o sistema embarcado utilizado nos iPads, também da Apple. Antes de expressar detalhes a respeito do Escalonamento de Processos no iOS, é importante definir alguns termos, como “processo”, “multiprogramação” e “escalonador de processos”. Entrando no mérito de Sistemas Operacionais, um processo é uma abstração de um programa em execução (NOVATO, Douglas 2014). Ele mantém a capacidade de operações “pseudoconcorrentes”, mesmo quando existe apenas uma CPU disponível, CPU esta que só executa um processo a cada instante, porém, no decorrer de um segundo ela pode trabalhar sobre vários processos dando a ilusão de paralelismo. O mecanismo de trocas rápidas da CPU é chamado de multiprogramação. Quando diversos processos competem pela Unidade Central de Processamento cabe ao Sistema Operacional decidir o momento em que cada processo terá o seu acesso. Já o escalonador de processos fica responsável por decidir o momento em que cada processo obterá a CPU. São usados, aqui, algoritmos de escalonamento que estabelecem a lógica de decisão. 2. iOS E O SEU SISTEMA Assumindo a ideia de que o kernel do iOS é muito semelhante ao kernel Mach no MacOS, pode-se concluir que seus mecanismos de escalonamento são os mesmos usados nesse sistema. O MacOS é um Sistema Operacional baseado no kernel UNIX (XNU), sendo uma combinação do Darwin (um núcleo derivado do micronúcleo Mach) com a interface gráfica de usuário Aqua. O MacOS 9 utiliza o escalonamento cooperativo para as Threads, onde um processo pode controlar várias destas Threads fornecendo um escalonamento preemptivo para multitarefas. O kernel escalona multitarefas utilizando um algoritmo de escalonamento preemptivo. Todos os processos do Gerenciador de Processos são executados em uma tarefa especial, chama de blue-task (tarefa-azul). Usando um algoritmo de escalonamento round-robin (escalonamento circular), esses processos são programados cooperativamente. Um processo gera controle do processador para outro processo chamando uma função de bloqueio como WaitNextEvent. Cada processo tem sua própria cópia do Gerenciador de Threads que escalona as threads desse processo de forma cooperativa. Uma thread gera controle do processador para outra threads chamando YieldToAnyThread ou YieldToThread. O MacOS usa uma fila de vários níveis até chegar ao hardware, onde as threads são agendadas de forma preventiva. Esse sistema também suporta threads agendadas cooperativamente em sua implementação do Gerenciador de Threads. Basicamente, a estrutura é composta por quatro camadas, como pode ser visto na Figura 1. O Sistema obedece a uma hierarquia, de modo que quanto mais abaixo na camada, maior deve ser a dificuldade no desenvolvimento e na compreensão. Figura 1 – Gerenciamento de Processos iOS 3. TIPOS DE ESCALONAMENTOS DE PROCESSOS CITADOS 3.1. ESCALONAMENTO PREEMPTIVO Neste tipo de escalonamento o Sistema Operacional pode interromper um processo em execução para que outro processo utilize o processador, permitindo que o sistema dê atenção imediata a processos mais prioritários, como no caso de sistemas em tempo real. Ele também proporciona melhores tempos de resposta em sistemas de tempo compartilhado. O compartilhamento do processador ocorre mais uniformemente entre os processos, sendo que a troca de um processo pelo outro na Unidade Central de Processamento (CPU) gera um overhead (processamento ou armazenamento em excesso) no sistema. Os critérios de preempção devem ser bem definidos para o overhead não se tornar crítico. 3.2. ESCALONAMENTO CIRCULAR (ROUND-ROBIN) OU PREEMPÇÃO POR TEMPO O Escalonamento de Preempção por tempo é implementado em um algoritmo semelhante ao Escalonamento FIFO (First-in-First-out), mas quando um processo passa para o estado de execução ele adquire um tempo limite para sua utilização de forma continua. Esse tempo limite é chamado de quantum ou timeslice, que no geral tem seu valor entre 100ms e 300 ms. Se o processo não terminar a execução ele volta ao estado de pronto. Dentro desse método, nenhum processo poderá monopolizar a CPU, tornando o algoritmo bastante usual e adequado para sistemas multiusuários de tempo compartilhado. No caso, o processo CPU-bound (quando o tempo de processamento depende mais do processador do que das entradas e saídas) tem mais chances de ser executado que o processo IO-bound (quando o sistema faz um uso intensivo de processos de entrada e saída). 4 MACH OS – O SISTEMA O Mach é capaz de gerenciar recursos de processador como o uso da CPU e memória, manipula escalonamentos, fornece proteção de memória e uma infraestrutura centrada em mensagens para o restante das camadas do sistema operacional. O Mach contém um avançado escalonador baseado no CMU Mach 3. O escalonamento realizado por ele é baseado em um sistema de filas de execução em várias propriedades e que são tratas de formas diferentes. São 4 níveis de propriedades como mostra a Tabela 1: Tabela 1: Os níveis de prioridades e suas características Por várias razões as threads podem migrar entre os níveis de prioridade, sendo a maior parte como um artefato do algoritmo de compartilhamento de tempo usado. As threads marcadas como sendo prioridade em tempo real são também especiais aos “olhos” do escalonador. Uma thread em tempo real informa ao escalonador que algo precisa executar A ciclos fora dos próximos B ciclos. Exemplificando melhor, pode ser necessário executar para 3000 fora dos próximos 7000 ciclos de clock na ordem para manter em ordem. Ele também é capaz de informar o escalonador se esses ciclos devem ser próximos. O uso longo e bem agrupado de quanta (plural de quantum, menor valor que certas grandezas físicas podem apresentar), geralmente é desaprovado, mas ocasionalmente são necessários para aplicações especializadas em tempo real. O kernel fará todos os esforços para honrar o pedido, mas uma vez que este é suave em tempo real, não pode ser garantido. Em particular, se a thread em tempo real pede algo relativamente razoável, sua prioridade permanecerá na banda em tempo real, mas se ela estiver descaradamente relacionada às suas necessidades e se comportar de uma forma computacional, ela pode ser rebaixada para a prioridade de um segmento normal. 5. CONCLUSÃO Basicamente, o sistema de escalonamento é a parte do SO encarregada de decidir entre os processos prontos, qual será colocado em execução. Sendo assim, um bom algoritmo de escalonamento de processos é essencial para que cada processo tenha uma parte de tempo justa na CPU e para garantir a eficiência da mesma. O sistema para dispositivos móveis da Apple (iOS) possui kernel semelhante ao sistema MacOS. Sendo assim, conclui-se que o sistema de escalonamento de processos será semelhante. Infelizmente, informações deste tipo são de difícil acesso quando relacionados aos dispositivos da Apple, realidade totalmente diferente dos códigos abertos do Linux. 6. REFERÊNCIAS COLETTA, Alex. Escalonamento de Processos. Disponível em: <http://alexcoletta.eng.br/artigos/escalonamento-de-processos/>. Acesso em: 18 abr. 2017. MACH Scheduling and Thread Interfaces. Disponível em: <https://developer.apple.com/library/content/documentation/Darwin/Conceptual/Kern elProgramming/scheduler/scheduler.html#//apple_ref/doc/uid/TP30000905-CH211BEHJDFCA>. Acesso em: 17 abr. 2017. KERNEL Architecture Overview. Disponível em: < https://developer.apple.com/library/content/documentation/Darwin/Conceptual/Kernel Programming/Architecture/Architecture.html#//apple_ref/doc/uid/TP30000905-CH1gCACDAEDC>. Acesso em: 17 abr. 2017. MEYER, Maximiliano. A História do iOS. Disponível em: < https://www.oficinadanet.com.br/post/17950-a-historia-do-ios>. Acesso em: 16 abr. 2017. NOVATO, Douglas. Sistemas Operacionais- O que é Escalonamento de Processos. Disponível em: < https://www.oficinadanet.com.br/post/12781-sistemasoperacionais-o-que-e-escalonamento-de-processos>. Acesso em: 16. Abr. 2017. COSTA, C. E. C.; SILVA, F. A.; BRAGA, J. C. M.; CARVALHO, J. P. F. Sistema Operacional iOS. Disponível em: <http://www.midiacom.uff.br/~natalia/2012-1sisop/tgrupo7.pdf>. Acesso em: 17 abr. 2017. RIBEIRO, J.; SARAIVA, R.; NASCIMENTO, T. Sistemas Operacionais Escalonamento de Processos. Disponível em: <https://pt.slideshare.net/TallesNascimentoRodrigues/sistemas-operacionaisescalonamento-de-processos>. Acesso em: 17 abr. 2017. ABOUT This Document. Disponível em: <https://developer.apple.com/library/content/documentation/Darwin/Conceptual/Kern elProgramming/About/About.html>. Acesso em: 17 abr. 2017. HOW Does The Process Scheduler in iPhone OS Really Work Internally. Disponível em: <http://stackoverflow.com/questions/1600562/how-does-the-processscheduler-in-iphone-os-really-work-internally>. Acesso em: 17 abr. 2017. iOS Experts: What Scheduling Algorithm Does iOS Use. Disponível em: <http://iphonedevsdk.com/forum/iphone-sdk-development/112821-ios-experts-whatscheduling-algorithm-does-ios-use.html>. Acesso em: 17 abr. 2017. GERENCIAMENTO de Processos iOS. <https://bsi.github.io/ios/?full#5>. Acesso em: 17 abr. 2017. Disponível em: