SlideShare uma empresa Scribd logo
1 de 29
Baixar para ler offline
Kernel Linux

Apresentando arquitetura e implementações
   internas do kernel open source Linux
                      v2.0




           Líus Fontenelle Carneiro
               http://hypercast.info/
                                                   1
Agenda
■   Localizando
■   Um pouco de história
■   Arquitetura
■   Linux x Unix clássico
■   Código Fonte
■   Kernel-space e User-space
■   Processos e Threads
■   Escalonador (CFS)




                                     2
Localizando




          3
Um pouco de história
■ Início em 1991, por Linus Torvalds
■ Inspirado no Minix, e não baseado nele
■ Implementação dos mais variados recursos,
  encontrados nas variantes Unix e BSD
■ Preocupação com portabilidade e escalabilidade




                                                   4
Linha de Tempo




             5
O tamanho do Linux




                 6
Arquiteturas de Kernel




                     7
Arquitetura GNU/Linux




                    8
Kernel Subsystems




                9
Linux x Unix clássico
■   Carregamento dinâmico de módulos;
■   Suporta multiprocessamento;
■   Suporta preempção;
■   Suporta “processos leves”;
■   Modelo de devices sysfs.




                                          10
Código Fonte
■   Obtendo: http://www.kernel.org/
■   Versionamento
■   Explorando diretórios
■   Compilação




                                                 11
Código Fonte
■   Obtendo: http://www.kernel.org/
■   Versionamento
■   Explorando diretórios
■   Compilação




                                           12
Código Fonte
■   Obtendo: http://www.kernel.org/
■   Versionamento
■   Explorando diretórios
■   Compilação




                                                 13
Código Fonte
■   Obtendo: http://www.kernel.org/
■   Versionamento
■   Explorando diretórios
■   Compilação




                                                 14
Código Fonte
■   Obtendo: http://www.kernel.org/
■   Versionamento
■   Explorando diretórios
■   Compilação




                                                 15
Kernel-space e User-space
■   Detalhes de desenvolvimento no kernel-space:
       Sem acesso à biblioteca C;
       Codificar em C99 e GNU C, não em ANSI;
       Sem proteção para acesso à memória;
       Sem acesso a ponto flutuante;
       Cuidado com sincronia e concorrência;
       Nunca esquecer da portabilidade.




                                                   16
Processos e Threads
■ Implementação de processos a nível de kernel;
■ Nível básico da abstração gerenciável de
  programas em execução;
■ Estrutura task_struct;
       include/linux/sched.h, linha 994
■   Process ID máximo é um short int por default;




                                                    17
Estados dos processos




                    18
Criação de Processos
■   Criação em duas etapas: fork() e exec();
■   Otimização de realocação de recursos;
■   O Linux faz COW!




                                               19
COW: Copy-On-Write
■ Aproveitamento de recursos já alocados;
■ Não escreve dados desnecessários ou
  redundantes;
■ Menor overhead em sistemas orientados a
  processos;
■ Estrutura thread_info e o slab allocator;
       include/asm-x86_64/thread_info.h
■   Recurso disponibilizado pelo slab allocator.




                                                   20
Threads no Linux
■ Não existem como na forma conceitual;
■ O Linux implementa threads como processos
  comuns;
■ LWP – Lightweight Processes;
■ Não existem mecanismos de escalonamento
  especiais ou estruturas de dados específicas;
■ Contraste com outros sistemas;
■ KISS;
■ Assim como um processo, é criada partindo de
  um fork(), que usa a função clone():
       kernel/fork.c
■   As flags da função clone() estão definidas em:
       include/linux/sched.h
                                                     21
CFS
■ “Completely Fair Schedule” ou Escalonador
  Completamente Justo;
■ Foi implementado por Ingo Molnar e está na
  árvore oficial desde a versão 2.6.23;
■ Foco em melhorar tempo de resposta das tarefas
  interativas e dar flexibilidade no gerenciamento do
  escalonamento em geral;
■ Não se baseia mais em runqueues ou timeslices;
■ Não requer mais análises heurísticas para definir
  o grau de interatividade de uma tarefa;
■ Armazenamento de informações sobre os
  processos em Red Black Trees.

                                                    22
RBT
■ O “Red Black Tree” é um algoritmo de
  armazenamento e busca de informações
  utilizando árvores;
■ Funcionamento parecido com B-Trees
  convencionais, mas sendo alto-balanceadas e
  mantendo a simetria;




                                                23
CFS
■   A implementação do novo algoritmo de
    escalonamento veio com uma reimplementação
    completa do escalonador:
       Agora é modular (em termos de código);
       O novo “escalonador” na verdade é um novo algoritmo
        de escalonamento é um módulo do escalonador, que
        também é novo!
■   Qual é a idéia? Pelo próprio Ingo Molnar:
       quot;This project is a complete rewrite of the Linux task
        scheduler. My goal is to address various feature
        requests and to fix deficiencies in the vanilla scheduler
        that were suggested/found in the past few years, both
        for desktop scheduling and for server scheduling
        workloads.quot;
                                                                24
CFS
■   Como funciona?
       quot;CFS's design is quite radical: it does not use
        runqueues, it uses a time-ordered rbtree to build a
        'timeline' of future task execution, and thus has no
        'array switch' artifacts (by which both the vanilla
        scheduler and RSDL/SD are affected). CFS uses
        nanosecond granularity accounting and does not rely
        on any jiffies or other HZ detail. Thus the CFS
        scheduler has no notion of 'timeslices' and has no
        heuristics whatsoever.”

■   Essa granularidade pode ser checada em:
       /proc/sys/kernel/sched_min_granularity_ns

                                                          25
CFS
■   O CFS está implementado em:
       kernel/sched_fair.c
■   Modificações na task_struct:
       - struct prio_array *array;
       + struct sched_entity se;




                                        26
CFS
■   CFS Group Scheduling
       Redução do escopo do CFS para garantir e justiça de
        distribuição de processamento entre processos de um
        grupo;
       Administração no user-space baseada em arquivos e
        diretórios de um sistema de arquivos virtual;
       Ainda sem suporte na versão estável do kernel para
        gerenciamento de mais de um nível de grupo, como
        no caso de usar grupos dentro de grupos.




                                                          27
E a Engenharia?
■ Vantagens das ferramentas open source em
  geral;
■ Conhecimento aprofundado e reaproveitável;
■ Custo e fontes disponíveis;
■ Liberdade para escolher;
■ Liberdade para contribuir.




                                               28
Kernel Linux



                Fim




               Contato
Página pessoal: http://hypercast.info/
     E-mail: liusfc@gmail.com


                                         29

Mais conteúdo relacionado

Mais procurados

Replicação de dados
Replicação de dadosReplicação de dados
Replicação de dadoselliando dias
 
Adequação do servidor Proxy/Cache Squid a redes de extrema carga
Adequação do servidor Proxy/Cache Squid a redes de extrema cargaAdequação do servidor Proxy/Cache Squid a redes de extrema carga
Adequação do servidor Proxy/Cache Squid a redes de extrema cargaLucas Brasilino
 
DevOps e redes -- SDN NFV e Docker
DevOps e redes -- SDN NFV e DockerDevOps e redes -- SDN NFV e Docker
DevOps e redes -- SDN NFV e DockerLucas Arbiza
 
Cluster ha com banco de dados
Cluster ha com banco de dadosCluster ha com banco de dados
Cluster ha com banco de dadosMarcio Jonnes
 
Alta Disponibilidade utilizando Pacemaker e DRBD
Alta Disponibilidade utilizando Pacemaker e DRBDAlta Disponibilidade utilizando Pacemaker e DRBD
Alta Disponibilidade utilizando Pacemaker e DRBDFrederico Madeira
 
Análise de segurança e hacking de containers Docker - Fernando Silva - Tcheli...
Análise de segurança e hacking de containers Docker - Fernando Silva - Tcheli...Análise de segurança e hacking de containers Docker - Fernando Silva - Tcheli...
Análise de segurança e hacking de containers Docker - Fernando Silva - Tcheli...Tchelinux
 
Inovações no mundo das distribuições Linux - Victor Hugo Aguiar Pacce - Tchel...
Inovações no mundo das distribuições Linux - Victor Hugo Aguiar Pacce - Tchel...Inovações no mundo das distribuições Linux - Victor Hugo Aguiar Pacce - Tchel...
Inovações no mundo das distribuições Linux - Victor Hugo Aguiar Pacce - Tchel...Tchelinux
 
Opennebula instalação
Opennebula instalaçãoOpennebula instalação
Opennebula instalaçãoLuís Eduardo
 
Containers PostgreSQL com a Crunchy Container Suite
Containers PostgreSQL com a Crunchy Container SuiteContainers PostgreSQL com a Crunchy Container Suite
Containers PostgreSQL com a Crunchy Container SuiteRoberto Mello
 
Sistemas Distribuídos - Replicação de Banco de Dados
Sistemas Distribuídos - Replicação de Banco de DadosSistemas Distribuídos - Replicação de Banco de Dados
Sistemas Distribuídos - Replicação de Banco de DadosValdir Junior
 
Análise comparativa entre as versões 3 e 4 do protocolo NFS em arquitetura NA...
Análise comparativa entre as versões 3 e 4 do protocolo NFS em arquitetura NA...Análise comparativa entre as versões 3 e 4 do protocolo NFS em arquitetura NA...
Análise comparativa entre as versões 3 e 4 do protocolo NFS em arquitetura NA...Joao Galdino Mello de Souza
 
Bancos de dados open source
Bancos de dados open sourceBancos de dados open source
Bancos de dados open sourceRodrigo Aurélio
 
Análise comparativa entre as versões 3 e 4 do protocolo NFS em arquiteturas NAS
Análise comparativa entre as versões 3 e 4 do protocolo NFS em arquiteturas NASAnálise comparativa entre as versões 3 e 4 do protocolo NFS em arquiteturas NAS
Análise comparativa entre as versões 3 e 4 do protocolo NFS em arquiteturas NASKleber Silva
 

Mais procurados (20)

Replicação de dados
Replicação de dadosReplicação de dados
Replicação de dados
 
Apresentacao docker
Apresentacao dockerApresentacao docker
Apresentacao docker
 
O que é Docker?
O que é Docker?O que é Docker?
O que é Docker?
 
Adequação do servidor Proxy/Cache Squid a redes de extrema carga
Adequação do servidor Proxy/Cache Squid a redes de extrema cargaAdequação do servidor Proxy/Cache Squid a redes de extrema carga
Adequação do servidor Proxy/Cache Squid a redes de extrema carga
 
Apresentação docker
Apresentação dockerApresentação docker
Apresentação docker
 
DevOps e redes -- SDN NFV e Docker
DevOps e redes -- SDN NFV e DockerDevOps e redes -- SDN NFV e Docker
DevOps e redes -- SDN NFV e Docker
 
Cluster ha com banco de dados
Cluster ha com banco de dadosCluster ha com banco de dados
Cluster ha com banco de dados
 
Alta Disponibilidade utilizando Pacemaker e DRBD
Alta Disponibilidade utilizando Pacemaker e DRBDAlta Disponibilidade utilizando Pacemaker e DRBD
Alta Disponibilidade utilizando Pacemaker e DRBD
 
Análise de segurança e hacking de containers Docker - Fernando Silva - Tcheli...
Análise de segurança e hacking de containers Docker - Fernando Silva - Tcheli...Análise de segurança e hacking de containers Docker - Fernando Silva - Tcheli...
Análise de segurança e hacking de containers Docker - Fernando Silva - Tcheli...
 
Inovações no mundo das distribuições Linux - Victor Hugo Aguiar Pacce - Tchel...
Inovações no mundo das distribuições Linux - Victor Hugo Aguiar Pacce - Tchel...Inovações no mundo das distribuições Linux - Victor Hugo Aguiar Pacce - Tchel...
Inovações no mundo das distribuições Linux - Victor Hugo Aguiar Pacce - Tchel...
 
Opennebula instalação
Opennebula instalaçãoOpennebula instalação
Opennebula instalação
 
Containers PostgreSQL com a Crunchy Container Suite
Containers PostgreSQL com a Crunchy Container SuiteContainers PostgreSQL com a Crunchy Container Suite
Containers PostgreSQL com a Crunchy Container Suite
 
Sistemas Distribuídos - Replicação de Banco de Dados
Sistemas Distribuídos - Replicação de Banco de DadosSistemas Distribuídos - Replicação de Banco de Dados
Sistemas Distribuídos - Replicação de Banco de Dados
 
Bem vindo ao Docker
Bem vindo ao DockerBem vindo ao Docker
Bem vindo ao Docker
 
Análise comparativa entre as versões 3 e 4 do protocolo NFS em arquitetura NA...
Análise comparativa entre as versões 3 e 4 do protocolo NFS em arquitetura NA...Análise comparativa entre as versões 3 e 4 do protocolo NFS em arquitetura NA...
Análise comparativa entre as versões 3 e 4 do protocolo NFS em arquitetura NA...
 
Linux como funciona esta fera
Linux como funciona esta feraLinux como funciona esta fera
Linux como funciona esta fera
 
Gfs slides
Gfs slidesGfs slides
Gfs slides
 
Introdução à plataforma Docker
Introdução à plataforma DockerIntrodução à plataforma Docker
Introdução à plataforma Docker
 
Bancos de dados open source
Bancos de dados open sourceBancos de dados open source
Bancos de dados open source
 
Análise comparativa entre as versões 3 e 4 do protocolo NFS em arquiteturas NAS
Análise comparativa entre as versões 3 e 4 do protocolo NFS em arquiteturas NASAnálise comparativa entre as versões 3 e 4 do protocolo NFS em arquiteturas NAS
Análise comparativa entre as versões 3 e 4 do protocolo NFS em arquiteturas NAS
 

Semelhante a Arquitetura e implementações internas do kernel Linux

Desenvolvendo Sistemas de Linux Embarcado - Marcelo Veiga Neves
Desenvolvendo Sistemas de Linux Embarcado - Marcelo Veiga NevesDesenvolvendo Sistemas de Linux Embarcado - Marcelo Veiga Neves
Desenvolvendo Sistemas de Linux Embarcado - Marcelo Veiga NevesTchelinux
 
Desenvolvendo Sistemas de Linux Embarcado - Tchelinux 2009
Desenvolvendo Sistemas de Linux Embarcado - Tchelinux 2009Desenvolvendo Sistemas de Linux Embarcado - Tchelinux 2009
Desenvolvendo Sistemas de Linux Embarcado - Tchelinux 2009Marcelo Veiga Neves
 
1º IoT Day - O que é Linux Embarcado
1º IoT Day - O que é Linux Embarcado1º IoT Day - O que é Linux Embarcado
1º IoT Day - O que é Linux EmbarcadoDiego Sueiro
 
Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling Landgraf
Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling LandgrafDesenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling Landgraf
Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling LandgrafTchelinux
 
Prog shell
Prog shellProg shell
Prog shellTiago
 
Aula - Comandos Linux - Parte 1
Aula - Comandos Linux - Parte 1Aula - Comandos Linux - Parte 1
Aula - Comandos Linux - Parte 1Leo Amorim
 
Comandos Linux Parte 1
Comandos Linux Parte 1Comandos Linux Parte 1
Comandos Linux Parte 1Leo Amorim
 
[Cliqueapostilas.com.br] arquitetura-de-sistemas-operacionais
[Cliqueapostilas.com.br] arquitetura-de-sistemas-operacionais[Cliqueapostilas.com.br] arquitetura-de-sistemas-operacionais
[Cliqueapostilas.com.br] arquitetura-de-sistemas-operacionaisSuperTec1
 
Linux - Sobre a Disciplina + Introdução ao Linux
Linux - Sobre a Disciplina + Introdução ao LinuxLinux - Sobre a Disciplina + Introdução ao Linux
Linux - Sobre a Disciplina + Introdução ao LinuxFrederico Madeira
 
Semana da computacao - Linux Day
Semana da computacao - Linux DaySemana da computacao - Linux Day
Semana da computacao - Linux DayFábio Albuquerque
 
T@rget Trust - Formação: Administrador e Suporte Linux
T@rget Trust - Formação: Administrador e Suporte LinuxT@rget Trust - Formação: Administrador e Suporte Linux
T@rget Trust - Formação: Administrador e Suporte LinuxTargettrust
 
Integração contínua com Jenkins
Integração contínua com JenkinsIntegração contínua com Jenkins
Integração contínua com JenkinsAécio Pires
 
Introdução ao Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilli...
Introdução ao Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilli...Introdução ao Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilli...
Introdução ao Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilli...Tchelinux
 

Semelhante a Arquitetura e implementações internas do kernel Linux (20)

Desenvolvendo Sistemas de Linux Embarcado - Marcelo Veiga Neves
Desenvolvendo Sistemas de Linux Embarcado - Marcelo Veiga NevesDesenvolvendo Sistemas de Linux Embarcado - Marcelo Veiga Neves
Desenvolvendo Sistemas de Linux Embarcado - Marcelo Veiga Neves
 
Desenvolvendo Sistemas de Linux Embarcado - Tchelinux 2009
Desenvolvendo Sistemas de Linux Embarcado - Tchelinux 2009Desenvolvendo Sistemas de Linux Embarcado - Tchelinux 2009
Desenvolvendo Sistemas de Linux Embarcado - Tchelinux 2009
 
Gentoo
GentooGentoo
Gentoo
 
1º IoT Day - O que é Linux Embarcado
1º IoT Day - O que é Linux Embarcado1º IoT Day - O que é Linux Embarcado
1º IoT Day - O que é Linux Embarcado
 
Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling Landgraf
Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling LandgrafDesenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling Landgraf
Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling Landgraf
 
Prog shell
Prog shellProg shell
Prog shell
 
Arch Linux
Arch LinuxArch Linux
Arch Linux
 
Aula - Comandos Linux - Parte 1
Aula - Comandos Linux - Parte 1Aula - Comandos Linux - Parte 1
Aula - Comandos Linux - Parte 1
 
Comandos Linux Parte 1
Comandos Linux Parte 1Comandos Linux Parte 1
Comandos Linux Parte 1
 
Sistemas Operacionais de Tempo Real
Sistemas Operacionais de Tempo RealSistemas Operacionais de Tempo Real
Sistemas Operacionais de Tempo Real
 
Minicurso Linux
Minicurso Linux Minicurso Linux
Minicurso Linux
 
[Cliqueapostilas.com.br] arquitetura-de-sistemas-operacionais
[Cliqueapostilas.com.br] arquitetura-de-sistemas-operacionais[Cliqueapostilas.com.br] arquitetura-de-sistemas-operacionais
[Cliqueapostilas.com.br] arquitetura-de-sistemas-operacionais
 
Linux - Sobre a Disciplina + Introdução ao Linux
Linux - Sobre a Disciplina + Introdução ao LinuxLinux - Sobre a Disciplina + Introdução ao Linux
Linux - Sobre a Disciplina + Introdução ao Linux
 
Artigo jaquiel-paim-final
Artigo jaquiel-paim-finalArtigo jaquiel-paim-final
Artigo jaquiel-paim-final
 
Semana da computacao - Linux Day
Semana da computacao - Linux DaySemana da computacao - Linux Day
Semana da computacao - Linux Day
 
T@rget Trust - Formação: Administrador e Suporte Linux
T@rget Trust - Formação: Administrador e Suporte LinuxT@rget Trust - Formação: Administrador e Suporte Linux
T@rget Trust - Formação: Administrador e Suporte Linux
 
Axuste do Kernel 2.6
Axuste do Kernel 2.6Axuste do Kernel 2.6
Axuste do Kernel 2.6
 
Integração contínua com Jenkins
Integração contínua com JenkinsIntegração contínua com Jenkins
Integração contínua com Jenkins
 
Embarcados
EmbarcadosEmbarcados
Embarcados
 
Introdução ao Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilli...
Introdução ao Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilli...Introdução ao Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilli...
Introdução ao Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilli...
 

Mais de Líus Fontenelle Carneiro (16)

DSPic
DSPicDSPic
DSPic
 
Transputer
TransputerTransputer
Transputer
 
AVR
AVRAVR
AVR
 
Wavecom
WavecomWavecom
Wavecom
 
PSoC
PSoCPSoC
PSoC
 
HC11
HC11HC11
HC11
 
Blackfin
BlackfinBlackfin
Blackfin
 
ARM
ARMARM
ARM
 
Zilog
ZilogZilog
Zilog
 
Microcontroladores AVR
Microcontroladores AVRMicrocontroladores AVR
Microcontroladores AVR
 
Java Web Start
Java Web StartJava Web Start
Java Web Start
 
Rtai Apresentacao
Rtai ApresentacaoRtai Apresentacao
Rtai Apresentacao
 
Apresentacao sobre o KURT
Apresentacao sobre o KURTApresentacao sobre o KURT
Apresentacao sobre o KURT
 
Apresentacao sobre o QNX Neutrino
Apresentacao sobre o QNX NeutrinoApresentacao sobre o QNX Neutrino
Apresentacao sobre o QNX Neutrino
 
Programação para Redes de Computadores: Multithread e Multicast
Programação para Redes de Computadores: Multithread e MulticastProgramação para Redes de Computadores: Multithread e Multicast
Programação para Redes de Computadores: Multithread e Multicast
 
Sistemas Distribuídos: RMI, CORBA e SOA
Sistemas Distribuídos: RMI, CORBA e SOASistemas Distribuídos: RMI, CORBA e SOA
Sistemas Distribuídos: RMI, CORBA e SOA
 

Arquitetura e implementações internas do kernel Linux

  • 1. Kernel Linux Apresentando arquitetura e implementações internas do kernel open source Linux v2.0 Líus Fontenelle Carneiro http://hypercast.info/ 1
  • 2. Agenda ■ Localizando ■ Um pouco de história ■ Arquitetura ■ Linux x Unix clássico ■ Código Fonte ■ Kernel-space e User-space ■ Processos e Threads ■ Escalonador (CFS) 2
  • 4. Um pouco de história ■ Início em 1991, por Linus Torvalds ■ Inspirado no Minix, e não baseado nele ■ Implementação dos mais variados recursos, encontrados nas variantes Unix e BSD ■ Preocupação com portabilidade e escalabilidade 4
  • 6. O tamanho do Linux 6
  • 10. Linux x Unix clássico ■ Carregamento dinâmico de módulos; ■ Suporta multiprocessamento; ■ Suporta preempção; ■ Suporta “processos leves”; ■ Modelo de devices sysfs. 10
  • 11. Código Fonte ■ Obtendo: http://www.kernel.org/ ■ Versionamento ■ Explorando diretórios ■ Compilação 11
  • 12. Código Fonte ■ Obtendo: http://www.kernel.org/ ■ Versionamento ■ Explorando diretórios ■ Compilação 12
  • 13. Código Fonte ■ Obtendo: http://www.kernel.org/ ■ Versionamento ■ Explorando diretórios ■ Compilação 13
  • 14. Código Fonte ■ Obtendo: http://www.kernel.org/ ■ Versionamento ■ Explorando diretórios ■ Compilação 14
  • 15. Código Fonte ■ Obtendo: http://www.kernel.org/ ■ Versionamento ■ Explorando diretórios ■ Compilação 15
  • 16. Kernel-space e User-space ■ Detalhes de desenvolvimento no kernel-space:  Sem acesso à biblioteca C;  Codificar em C99 e GNU C, não em ANSI;  Sem proteção para acesso à memória;  Sem acesso a ponto flutuante;  Cuidado com sincronia e concorrência;  Nunca esquecer da portabilidade. 16
  • 17. Processos e Threads ■ Implementação de processos a nível de kernel; ■ Nível básico da abstração gerenciável de programas em execução; ■ Estrutura task_struct;  include/linux/sched.h, linha 994 ■ Process ID máximo é um short int por default; 17
  • 19. Criação de Processos ■ Criação em duas etapas: fork() e exec(); ■ Otimização de realocação de recursos; ■ O Linux faz COW! 19
  • 20. COW: Copy-On-Write ■ Aproveitamento de recursos já alocados; ■ Não escreve dados desnecessários ou redundantes; ■ Menor overhead em sistemas orientados a processos; ■ Estrutura thread_info e o slab allocator;  include/asm-x86_64/thread_info.h ■ Recurso disponibilizado pelo slab allocator. 20
  • 21. Threads no Linux ■ Não existem como na forma conceitual; ■ O Linux implementa threads como processos comuns; ■ LWP – Lightweight Processes; ■ Não existem mecanismos de escalonamento especiais ou estruturas de dados específicas; ■ Contraste com outros sistemas; ■ KISS; ■ Assim como um processo, é criada partindo de um fork(), que usa a função clone():  kernel/fork.c ■ As flags da função clone() estão definidas em:  include/linux/sched.h 21
  • 22. CFS ■ “Completely Fair Schedule” ou Escalonador Completamente Justo; ■ Foi implementado por Ingo Molnar e está na árvore oficial desde a versão 2.6.23; ■ Foco em melhorar tempo de resposta das tarefas interativas e dar flexibilidade no gerenciamento do escalonamento em geral; ■ Não se baseia mais em runqueues ou timeslices; ■ Não requer mais análises heurísticas para definir o grau de interatividade de uma tarefa; ■ Armazenamento de informações sobre os processos em Red Black Trees. 22
  • 23. RBT ■ O “Red Black Tree” é um algoritmo de armazenamento e busca de informações utilizando árvores; ■ Funcionamento parecido com B-Trees convencionais, mas sendo alto-balanceadas e mantendo a simetria; 23
  • 24. CFS ■ A implementação do novo algoritmo de escalonamento veio com uma reimplementação completa do escalonador:  Agora é modular (em termos de código);  O novo “escalonador” na verdade é um novo algoritmo de escalonamento é um módulo do escalonador, que também é novo! ■ Qual é a idéia? Pelo próprio Ingo Molnar:  quot;This project is a complete rewrite of the Linux task scheduler. My goal is to address various feature requests and to fix deficiencies in the vanilla scheduler that were suggested/found in the past few years, both for desktop scheduling and for server scheduling workloads.quot; 24
  • 25. CFS ■ Como funciona?  quot;CFS's design is quite radical: it does not use runqueues, it uses a time-ordered rbtree to build a 'timeline' of future task execution, and thus has no 'array switch' artifacts (by which both the vanilla scheduler and RSDL/SD are affected). CFS uses nanosecond granularity accounting and does not rely on any jiffies or other HZ detail. Thus the CFS scheduler has no notion of 'timeslices' and has no heuristics whatsoever.” ■ Essa granularidade pode ser checada em:  /proc/sys/kernel/sched_min_granularity_ns 25
  • 26. CFS ■ O CFS está implementado em:  kernel/sched_fair.c ■ Modificações na task_struct:  - struct prio_array *array;  + struct sched_entity se; 26
  • 27. CFS ■ CFS Group Scheduling  Redução do escopo do CFS para garantir e justiça de distribuição de processamento entre processos de um grupo;  Administração no user-space baseada em arquivos e diretórios de um sistema de arquivos virtual;  Ainda sem suporte na versão estável do kernel para gerenciamento de mais de um nível de grupo, como no caso de usar grupos dentro de grupos. 27
  • 28. E a Engenharia? ■ Vantagens das ferramentas open source em geral; ■ Conhecimento aprofundado e reaproveitável; ■ Custo e fontes disponíveis; ■ Liberdade para escolher; ■ Liberdade para contribuir. 28
  • 29. Kernel Linux Fim Contato Página pessoal: http://hypercast.info/ E-mail: liusfc@gmail.com 29