Aspectos do kernel Linux e Instalação

1,544 views

Published on

Palestra: Aspectos do Kernel Linux e Instalação - Prof. Mauro Tapajós Santos

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,544
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
46
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide
  • Stephen Tweedie claims “All kernel code executes in a process context (except during startup)”. He also says that it is possible for an interrupt to occur during a context switch. So it is uncommon for there to be no user process mapped. The real problem is not knowing what process is mapped. Kernel mode, system context activities occurs asynchronously and may be entirely unrelated to the current process.
  • Aspectos do kernel Linux e Instalação

    1. 1. Aspectos do Kernel do Linux e Instalação Prof. Mauro Tapajós
    2. 2. Objetivos <ul><li>Nivelar os participantes do projeto Itautec nos vários aspectos do kernel do sistema Linux que será uma das plataformas a serem analisadas sobre as máquinas Itautec
    3. 3. Levantar as questões relevantes sobre o assunto para a pesquisa em andamento do projeto
    4. 4. Investigar as dúvidas que ocorrerem aos participantes e esclarecê-las para que a pesquisa siga adiante </li></ul>
    5. 5. Kernel do Linux <ul><li>Trata-se do componente central deste sistema operacional ( core )
    6. 6. Totalmente customizável – pode ficar pequeno e compacto
    7. 7. Monolítico (é a escolha
    8. 8. Pode rodar em hardwares modestos
    9. 9. Grande compatibilidade </li><ul><li>Filesystems (Windows, OS/2, MAC OS, Solaris, SunOS, NeXTSTEP, BSD, etc)
    10. 10. Rede (Ethernet, Fast e Giga, FDDI, HIPPI, Token Ring, WaveLAN, DEC Roamabout)
    11. 11. Com as bibliotecas adequadas pode até rodar programas escritos para outros SO’s </li></ul></ul>
    12. 12. Características do Kernel <ul><li>Multitarefa real - gerencia o tempo de CPU entre os vários processos
    13. 13. Multiprocessamento – pode trabalhar com vários processadores
    14. 14. Gerenciamento otimizado de memória, com suporte a memória virtual ( swap )
    15. 15. Faz a gestão de recursos da máquina (portas seriais, impressoras, rede, etc)
    16. 16. Continuamente atualizado (evolução de hardware) </li></ul>
    17. 17. Características do Kernel <ul><li>Controla e media o acesso ao hardware
    18. 18. Controla os filesystems , apresentando qualquer dispositivo de armazenamento numa forma padronizada
    19. 19. Implementa e suporta abstrações fundamentais ao sistema como processos, arquivos, dispositivos, usuários, rede, filesystems
    20. 20. Controla a distribuição de recursos do sistema
    21. 21. Realiza tarefas de manutenção rotineiras </li></ul>
    22. 22. Modo de Operação <ul><li>Execução de processos em modo kernel / usuário
    23. 23. Kernel reentrante – possibilidade de rodar vários processos em kernel mode
    24. 24. Não preemptivo (em sistemas monoprocessados)
    25. 25. Kernel control path – sequência de instruções executada pelo kernel em resposta a chamadas de sistema, interrupções ou exceções
    26. 26. É interessante se rodar com as interrupções habilitadas na maior parte do tempo </li></ul>
    27. 27. Plataformas Suportadas <ul><li>alpha (HP)
    28. 28. arm
    29. 29. cris (thin servers)
    30. 30. i386
    31. 31. Ia64 – itanium
    32. 32. m68k
    33. 33. mips e Mips64
    34. 34. parisc (HP)
    35. 35. ppc
    36. 36. s390 e s390x (IBM zSeries)
    37. 37. sh (superH Hitachi)
    38. 38. sparc e sparc64 (SUN) </li></ul>
    39. 39. Numeração dos kernels <ul><li>Formato X.Y.Z, onde </li></ul>X – número de versão Y <ul><ul><ul><li>se for par – é uma versão estável
    40. 40. se for ímpar – é uma versão em desenvolvimento </li></ul></ul></ul>Z – número do release (estável ou beta) <ul><li>O kernel 2.4 (atual) foi lançado em jan/2001 </li></ul>
    41. 41. Características da Versão 2.4 do kernel <ul><li>Não há mais a limitação de 1024 processos/threads
    42. 42. Melhor suporte multiprocessador (SMP)
    43. 43. Suporte USB e PCMCIA interno no kernel e não em pacotes separados
    44. 44. Suporte genérico a portas paralelas
    45. 45. Melhor suporte a filesystems e NFSv3
    46. 46. Facilidade na importação de filesystems externos (tecnologia de filesystem virtual)
    47. 47. Melhor suporte a memória virtual
    48. 48. Novos dispositivos são suportados </li></ul>
    49. 49. Algumas Distribuições Linux
    50. 50. Layout Básico dos diretórios do Linux /bin Arquivos aplicativos/utilitários binários executáveis /sbin Arquivos binários executáveis essenciais ao sistema /etc Arquivos de inicialização, configuração e administração do sistema /root Diretório pessoal do usuário root /dev Arquivos de dispositivos /lib Bibliotecas /lib/modules Módulos que podem ser carregados no kernel /mnt Ponto de montagem de filesystems temporários /var Arquivos permanentemente atualizados e que mudam muito de tamanho como, por exemplo, logs e spools de impressão /usr Arquivos de aplicações do sistema /usr/src/linux Arquivos de código-fonte do kernel do Linux /usr/doc Alguns arquivos com documentação específica /boot Arquivos usados na inicialização (boot) /tmp Arquivos temporários /home Arquivos locais dos usuários /opt Arquivos de instalação de aplicações /lost+found Blocos de filesystem encontrados perdidos pelo comando fsck /proc Informações do sistema: processos, dispositivos, memória, filesystems, etc.
    51. 51. Diretório /proc <ul><li>Diretório especial ilusório criado pelo kernel em memória para disponibilizar informações online sobre o sistema
    52. 52. Permite acesso à várias informações sobre o que está acontecendo na máquina </li></ul>Exemplos: /proc/x – informações do processo de número x /proc/cpuinfo – processador, tipo, modelo, etc /proc/devices – lista de dispositivos no kernel atual /proc/modules – lista os módulos carregados no momento
    53. 53. Arquitetura do Kernel Applications System Libraries (libc) System Call Interface Hardware Architecture-Dependent Code I/O Related Process Related Scheduler Memory Management IPC File Systems Networking Device Drivers
    54. 54. Arquitetura do Kernel
    55. 55. Kernel Isola o hardware das aplicações (intermediário)
    56. 56. Memória <ul><li>Memória usada pelos processos (Texto, dados e pilha) </li></ul>
    57. 57. Gerenciamento de Memória <ul><li>Parte da memória física de um sistema é alocada para o kernel e suas estruturas de dados estáticas
    58. 58. A outra parte é gerenciada pelo sistema de memória virtual, atendendo ao kernel, processos e caches de dispositivos de I/O
    59. 59. Cada processo terá sua área de endereçamento privativa
    60. 60. Várias cópias do mesmo processo podem compartilhar sua execução, separando apenas as áreas de dados </li></ul>
    61. 61. <ul><li>Usada para disponibilizar memória virtual e task swapping
    62. 62. Vantagens </li><ul><li>Rodar processos que exigem mais memória que a fisicamente instalada no sistema
    63. 63. Somente parte do código de um programa é armazenada na memória físisca
    64. 64. Pode-se realocar programas para qualquer área da memória física do sistema </li></ul><li>O kernel cria um espaço de endereçamento virtual único de forma que memória física e memória virtual se tornam transparente para processos
    65. 65. Um mapeamento automático traduz endereços de memória em endereços físicos </li></ul>Memória Virtual
    66. 66. <ul><li>Swapping – cópia de todo o escopo de um processo para o disco
    67. 67. Paginação – cópia de partes (páginas) para o disco (4 kb)
    68. 68. Dependendo da aplicação, velocidade desejada e tamanho da RAM, o espaço de memória virtual pode ter de 1 a 3 vezes o tamanho da RAM
    69. 69. Pode-se ter 16 áreas de swap em disco, inclusive em discos diferentes!
    70. 70. Alguns comandos envolvidos: </li></ul>mkswap swapon / swapoff free Memória Virtual
    71. 71. Interação com o Kernel <ul><li>Chamadas de Sistema - normalmente exigem endereços de memória como parâmetros
    72. 72. Endereços errados podem causar crash
    73. 73. O kernel deve checar se os endereços estão coerentes antes de realizar a chamada (através de funções específicas) ou apenas tratar as falha a nível de kernel mode
    74. 74. Neste caso é enviado um sinal para o processo falho (SIGSEGV) </li></ul>
    75. 75. Interrupções <ul><li>Possibilidade do hardware se comunicar com o sistema
    76. 76. Usadas pelos device drivers
    77. 77. Números de interrupções </li><ul><li>Primeiro conjunto : 0-7
    78. 78. Segundo conjunto : 8-15 </li></ul><li>Em placas SMP </li><ul><li>irq13 para interrupções Interprocessador
    79. 79. irq16 para SMP reschedule </li></ul></ul>
    80. 80. Chamadas de Sistema Exemplos: kill () sigaction () sigprocmask () sigpending () ssetmask() sigsuspend() settimer fork
    81. 81. Interação com o Kernel <ul><li>Exceções – falha de hardware ou instrução falha
    82. 82. Processos podem criar seus timers para controle temporizado de eventos
    83. 83. Necessidade de controle do kernel para estes timers (ordenação e ticks de 10 ms - i386) </li></ul>
    84. 84. Sinais <ul><li>Mensagens do sistema para processos em execução
    85. 85. Cada sinal tem um número e significação
    86. 86. Exemplos: </li></ul>SIGHUP 1 hangup SIGINT 2 interrupt SIGQUIT 3 quit SIGILL 4 illegal instruction SIGTRAP 5 trace trap SIGBUS 7 bus error SIGFPE 8 arithmetic exception SIGKILL 9 kill (cannot be caught, blocked, or ignored)
    87. 87. Devices <ul><li>Device driver – permite a interação do kernel com o dispositivo de I/O
    88. 88. Os DD podem ser módulos do kernel e podem se carregados e descarregados dinamicamente sob demanda
    89. 89. O diretório /dev contém os arquivos de dispositivos ( não são drivers para o dispositivo)
    90. 90. Existem arquivos de dispositivos para dispositivos abstratos como /dev/null e /dev/log
    91. 91. Exemplo: Dispositivos para HD’s </li></ul>/hda1: primeiro HD primeira partíção /hda2: primeiro HD segunda partíção /hdb1: segundo HD primeira partíção /hdb2: segundo HD segunda partíção
    92. 92. Arquivo de dispositivo <ul><li>O arquivo de dispositivo é o arquivo que representa o hardware no sistema
    93. 93. O ponto de montagem é o diretório onde o filesystem é montado
    94. 94. Os drivers dos dispositivos são partes do kernel responsáveis em controlar os diversos hardwares da máquina
    95. 95. Os dispositivos se comunicam com o kernel através dos arquivos do diretório /dev </li></ul>
    96. 96. Acesso a dispositivos
    97. 97. SMP - Symmetrical MultiProcessor <ul><li>O kernel suporta o trabalho de vários processadores em paralelo
    98. 98. Sistemas Multiprocessados – vários kernels control path
    99. 99. O procedimento de desabilitar interrupções de hardware não faz sentido em sistemas multiprocessados (outros processo de kernel podem acessar os dados protegidos na região crítica)
    100. 100. Semáforos ou spin locks podem ser usados para manter a integridade de estruturas de dados em sistemas multiprocessados
    101. 101. As estruturas de dados de processos ( tasks ) deve conter informação de que processador está executando o processo </li></ul>
    102. 102. Compilação do Kernel <ul><li>Razões: </li></ul><ul><li>Kernel mais simples / leve
    103. 103. Kernel mais genérico
    104. 104. Kernel com suportes específicos </li></ul>Pode-se gerar um kernel numa máquina mais rápida e depois copiá-lo para uma mais lenta
    105. 105. Compilação do Kernel <ul><li>Procedimento: </li></ul><ul><li>make config / menuconfig / xconfig
    106. 106. make dep
    107. 107. make clean
    108. 108. make zImage/bzimage/bzdisk
    109. 109. Cópia da imagem gerada para o diretório /usr/src/Linux/arch/i386/boot/zImage ou um diskette (bzdisk)
    110. 110. make modules
    111. 111. Make modules_install
    112. 112. Atualização do LILO (ou outro boot manager) </li></ul>
    113. 113. Compilação do Kernel <ul><li>HARDWARE-How To – listas de compatibilidade com o kernel
    114. 114. Checar se as versões de gcc e libc são as corretas
    115. 115. Ao chamar algum dos comandos config, será apresentado um lista das opções possíveis do kernel
    116. 116. Itens que variam de acordo com a versão do kernel, como: </li></ul><ul><ul><li>Suporte SCSI
    117. 117. Itens de Networking
    118. 118. Adequação para determinadas famílias de processadores </li></ul></ul>
    119. 119. Suporte a Módulos <ul><li>Alternativas para um kernel lidar com vários dispositivos: microkernel (exige muita comunicação interprocesso) e suporte a módulos
    120. 120. Linux usa módulos em razão da eficiência, normalmente device drivers
    121. 121. Quase todas as partes do kernel podem ser transformadas em módulos
    122. 122. O kernel possui uma tabela de símbolos que indica o módulo que deve ser carregado
    123. 123. Modernas arquiteturas podem realizar o check do hardware e o kernel pode identificar os dispositivos em tempo de boot para carregar os módulos correspondentes </li></ul>
    124. 124. Suporte a Módulos <ul><li>Processo kerneld – não é mais usado
    125. 125. Nos novos kernels, esta função pode ser feita pelo próprio kernel (opção kmod de compilação)
    126. 126. Alguns comandos envolvidos: </li></ul>modprobe insmod rmmod
    127. 127. Instalação do Kernel <ul><li>Make bzlilo (somente se o lilo estiver em /sbin/ e o kernel está em vmlinuz) </li></ul><ul><li>Ou usar o lilo diretamente configurando o arquivo /etc/lilo.conf </li></ul><ul><li>Outro boot manager - GRUB </li></ul>
    128. 128. Formato da Árvore de Código Fonte do Linux /usr/src/linux Documentation arch fs init kernel include ipc drivers net mm lib scripts alpha arm i386 ia64 m68k mips mips64 ppc s390 sh sparc sparc64 acorn atm block cdrom char dio fc4 i2c i2o ide ieee1394 isdn macintosh misc net … adfs affs autofs autofs4 bfs code cramfs devfs devpts efs ext2 fat hfs hpfs … asm-alpha asm-arm asm-generic asm-i386 asm-ia64 asm-m68k asm-mips asm-mips64 … linux math-emu net pcmcia scsi video adfs affs autofs autofs4 bfs code cramfs devfs devpts efs ext2 fat hfs hpfs … 802 appletalk atm ax25 bridge core decnet econet ethernet ipv4 ipv6 ipx irda khttpd lapb …
    129. 129. <ul><li>documentation </li><ul><li>documentos dos desenvolvedores divididos por itens específicos </li></ul><li>arch </li><ul><li>um subdiretório para cada arquitetura, sendo que cada um pode ter subdiretórios para /usr/src/linux/ específicos para a arquitetura
    130. 130. O lib contém rotinas já otimizadas para a plataforma em questão (memcpy, checksums, etc) </li></ul><li>drivers </li><ul><li>Maior parte do código (~1.5M)
    131. 131. Subdiretórios específicos (por exemplo: SCSI) </li></ul><li>fs </li><ul><li>Mecanismos de virtual filesystem (VFS)
    132. 132. Subdiretórios para cada tipo de fs </li></ul></ul>Código Fonte do Linux
    133. 133. <ul><li>include </li><ul><li>Contém os arquivos de definições (include) usados </li></ul></ul>linux math-emu net pcmcia scsi video <ul><ul><li>Porções específicas do kernel sao guardadas com estruturas #ifdefs </li></ul></ul>#ifdef __KERNEL__ /* kernel stuff */ #endif Código Fonte do Linux
    134. 134. <ul><li>init </li><ul><li>Processos de inicialização
    135. 135. Somente dois arquivos </li></ul></ul>version.c – contains the version banner that prints at boot main.c – architecture-independent boot code <ul><ul><li>Implementam a função start_kernel </li></ul></ul><ul><li>ipc </li><ul><li>Implementação de comunicação interprocesso System V (semáforos, memória compartilhada e filas de mensagens) </li></ul></ul>Código Fonte do Linux
    136. 136. <ul><li>kernel </li><ul><li>Código core do sistema </li></ul></ul><ul><ul><li>sched.c (o arquivo principal do kernel) - scheduler, wait queues, timers, alarms, task queues </li></ul></ul><ul><ul><li>Interrupçoes ( irq.c)
    137. 137. Controle de processos ( fork.c, exec.c, signal.c, exit.c - acct.c, capability.c, exec_domain.c )
    138. 138. Suporte a módulos ( kmod.c, ksyms.c, module.c)
    139. 139. Outras operações ( time.c, resource.c, dma.c, softirq.c, itimer.c, printk.c, info.c, panic.c, sysctl.c, sys.c) </li></ul></ul>Código Fonte do Linux
    140. 140. <ul><li>lib </li><ul><li>Compressores do tipo gzip
    141. 141. Analisadores de comandos e erros
    142. 142. Rotinas de suporte </li></ul><li>mm </li><ul><li>Gerenciamento de memória
    143. 143. Paginação e swapping , políticas, rotinas de baixo nível
    144. 144. Alocação e liberação de memória
    145. 145. Memória virtual
    146. 146. Mapeamento de memória </li></ul><li>net </li><ul><li>Networking
    147. 147. Em constante alteração </li></ul><li>scripts </li><ul><li>Configurações do kernel em menus
    148. 148. Patching </li></ul></ul>Código Fonte do Linux
    149. 149. Desenvolvimento no Linux <ul><li>Scripts (Awk, perl, shells)
    150. 150. WEB: html, php, javascript
    151. 151. Linguagem C, C++
    152. 152. Java
    153. 153. Velhas Linguagens: cobol e lisp
    154. 154. Bibliotecas: sockets , rpc , motif (paga)
    155. 155. Comunicação entre processos: FIFO, RPC, IPC </li></ul>
    156. 156. Desenvolvimento no Linux - Ferramentas <ul><li>Script configure (autoconf)
    157. 157. gcc ( cc )
    158. 158. Ambientes gráficos ( xwpe , proprietários)
    159. 159. Bibliotecas dinâmicas e estáticas (.a e .so)
    160. 160. Linkagem: ld </li></ul>
    161. 161. Ferramenta make <ul><li>make : determina que partes de um programa devem ser recompiladas em função de uma alteração. </li></ul><ul><li>Aceita qualquer linguagem
    162. 162. Arquivo Makefile
    163. 163. Várias possibilidades ( target ) </li></ul>
    164. 164. Instalação de Aplicativos <ul><li>Aplicações no Linux são, como nos outros sistemas, um conjunto de arquivos com pelo menos um executável
    165. 165. Normalmente vem num formato padrão ou apresentarão um script que automatiza as tarefas de instalação </li></ul><ul><li>Utilitário install </li></ul>
    166. 166. RPM – RedHat Packets Management <ul><li>Formato padrão desenvolvido pela RH
    167. 167. Baseado num pequeno utilitário de mesmo nome
    168. 168. Modos de operação (Instalação, verificação, consulta, desinstalação, etc) </li></ul><ul><li>Nomenclatura dos arquivos dos pacotes </li></ul>Nome-versão-release.arquitetura.rpm <ul><li>Base de dados RPM: /var/lib/rpm/* </li></ul>
    169. 169. RPM – RedHat Packets Management <ul><li>Comandos básicos </li></ul><ul><li>Listagem dos pacotes instalados </li></ul>rpm –qi(a) <ul><li>Instalação de um pacote </li></ul>rpm –i <pacote> <ul><li>Desinstalação </li></ul>rpm –e <pacote>
    170. 170. Outras Maneira de Instalar <ul><li>Aplicativos na forma de código fonte
    171. 171. Deve-se compilar o pacote, gerando seus executáveis
    172. 172. Normalmente vem na forma de um arquivo tar
    173. 173. LER A DOCUMENTAÇÃO!!!
    174. 174. O sistema deverá ter os aplicativos de compilação, linkagem e controle (citados na documentação) </li></ul>
    175. 175. Compilação de Pacotes <ul><li>Nem sempre é da mesma forma </li></ul><ul><li>Procedimento genérico </li></ul>./configure make make install

    ×