Programação para Kernel Linux - Parte 2

527 views
472 views

Published on

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
527
On SlideShare
0
From Embeds
0
Number of Embeds
10
Actions
Shares
0
Downloads
41
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Programação para Kernel Linux - Parte 2

  1. 1. Os protocolos TCP e DCCP Implementa¸˜o dos CCIDs ca Atividades Programa¸˜o para o Kernel Linux (Parte 2) ca Ivo Augusto Andrade Rocha Calado Instituto Federal de Educa¸˜o, Ciˆncia e Tecnologia de Alagoas ca e 8 de Dezembro de 20111 / 37 Ivo Calado IFALPrograma¸˜o para o Kernel Linux (Parte 2) ca
  2. 2. Os protocolos TCP e DCCP Implementa¸˜o dos CCIDs ca AtividadesAgenda I 1 Os protocolos TCP e DCCP TCP DCCP Implementa¸˜es no Kernel co 2 Implementa¸˜o dos CCIDs ca CCID-2 CCID-3 e CCID-4 CCID-249 3 Atividades Adicionando um Novo CCID Adicionando uma nova Sysctl Logando os pacotes enviados2 / 37 Ivo Calado IFALPrograma¸˜o para o Kernel Linux (Parte 2) ca
  3. 3. Os protocolos TCP e DCCP Implementa¸˜o dos CCIDs ca AtividadesObserva¸˜o sobre este material ca Este material ´ derivado de diversos trabalhos livremente e dispon´ ıveis na Internet3 / 37 Ivo Calado IFALPrograma¸˜o para o Kernel Linux (Parte 2) ca
  4. 4. Os protocolos TCP e DCCP Implementa¸˜o dos CCIDs ca AtividadesTCPTCP: O que ´? e Protocolo de transporte mais difundido no mundo Provˆ comunica¸˜o unicast e ca Efetua controle de congestionamento e de fluxo Protocolo confi´vel: os dados perdidos na rede s˜o a a retransmitidos4 / 37 Ivo Calado IFALPrograma¸˜o para o Kernel Linux (Parte 2) ca
  5. 5. Os protocolos TCP e DCCP Implementa¸˜o dos CCIDs ca AtividadesTCPTCP: Controles de congestionamento Possui diversas varia¸˜es do mecanismo de controle de co congestionamento Utiliza duas fases: partida lenta e preven¸˜o de ca congestionamento A vers˜o mais conhecida ´ o Reno que implementa o AIMD a e Por´m, existem diversas outras variantes como: Tcp Cubic, e Bic, NewReno, Vegas, Compound, WestWood, Africa, etc No linux o algoritmo padr˜o ´ o Cubic enquanto que no a e Windows Vista ´ o Compound e A sele¸˜o algoritmo default de CC ´ realizada ou na ca e configura¸˜o do kernel ou via sysctl, por´m o valor ´ v´lido ca e e a em n´ de protocolo (todos os sockets s˜o afetados) ıvel a5 / 37 Ivo Calado IFALPrograma¸˜o para o Kernel Linux (Parte 2) ca
  6. 6. Os protocolos TCP e DCCP Implementa¸˜o dos CCIDs ca AtividadesDCCPDCCP: O que ´? e Protocolo de transporte Provˆ comunica¸˜o unicast e ca Controle de congestionamento e entrega n˜o confi´vel a a Possui como principal foco aplica¸˜es multim´ co ıdia6 / 37 Ivo Calado IFALPrograma¸˜o para o Kernel Linux (Parte 2) ca
  7. 7. Os protocolos TCP e DCCP Implementa¸˜o dos CCIDs ca AtividadesDCCPDCCP: Controles de congestionamento Oferece uma estrutura componentiz´vel para gerˆncia de a e mecanismos de controle de congestionamento Possibilita que novos algoritmos sejam “plugados” no formato de CCIDs A sele¸˜o do algoritmo de CC se d´ ou via sysctl (todos os ca a sockets s˜o afetados) ou por socket (apenas a transmiss˜o ´ a a e afetada) Uma transmiss˜o ´ composta por duas “half-connections” a e7 / 37 Ivo Calado IFALPrograma¸˜o para o Kernel Linux (Parte 2) ca
  8. 8. Os protocolos TCP e DCCP Implementa¸˜o dos CCIDs ca AtividadesDCCPCCIDs: 2, 3, 4, 249 Atualmente encontram-se padronizados 3 mecanismos de controle de congestionamento no DCCP e um experimental CCID-2 (RFC4341): baseado em janela, esquema AIMD (Additive Increase Multiplicative Decrease) e confirma¸˜o ca seletiva (Ack Vectors). Uso: jogos online CCID-3 (RFC4342): baseado na equa¸˜o TFRC, evita ca mudan¸as abruptas na taxa de transmiss˜o (diminui¸˜o c a ca suave). Uso: fluxo de v´ ıdeo CCID-4 (RFC5622): variante do TFRC voltado para aplica¸˜es que podem adaptar o fluxo a partir da altera¸˜o do co ca tamanho do pacote enviado. Uso: VoIP CCID-249 (Dccp Cubic): algoritmo baseado no TCP Cubic, voltado para redes de alta velocidade8 / 37 Ivo Calado IFALPrograma¸˜o para o Kernel Linux (Parte 2) ca
  9. 9. Os protocolos TCP e DCCP Implementa¸˜o dos CCIDs ca AtividadesImplementa¸˜es no Kernel coAs implementa¸˜es no Kernel co Apresentam arquiteturas bastante diferentes TCP considera que todos os algoritmos de CC s˜o compostos a dos estados partida lenta e preven¸˜o de ca congestionamento DCCP apresenta uma interface mais gen´rica e, portanto, e mais flex´ para o mecanismo de controle de ıvel congestionamento Para o registro do protocolo no sistema operacional ambos os protocolos devem criar um instˆncia das structs proto, a net protocol, inet protosw e pernet operations e registr´-las no SO a9 / 37 Ivo Calado IFALPrograma¸˜o para o Kernel Linux (Parte 2) ca
  10. 10. Os protocolos TCP e DCCP Implementa¸˜o dos CCIDs ca AtividadesImplementa¸˜es no Kernel coImplementa¸˜o do TCP ca Definido em linux/net/ipv4 Apresenta tanto os componentes gen´ricos quanto as e implementa¸˜es dos algoritmos de CC co Cada algoritmo de CC, ` exce¸˜o do Reno, ´ implementado a ca e como um m´dulo o Estrutura de um algoritmo ´ definida em include/net/tcp.h e10 / 37 Ivo Calado IFALPrograma¸˜o para o Kernel Linux (Parte 2) ca
  11. 11. Os protocolos TCP e DCCP Implementa¸˜o dos CCIDs ca AtividadesImplementa¸˜es no Kernel coImplementa¸˜o do TCP ca struct list head l i s t ; unsigned long f l a g s ; v o i d (∗ i n i t ) ( s t r u c t sock ∗ sk ) ; v o i d (∗ r e l e a s e ) ( s t r u c t sock ∗ sk ) ; u32 ( ∗ s s t h r e s h ) ( s t r u c t s o c k ∗ s k ) ; u32 ( ∗ min cwnd ) ( c o n s t s t r u c t s o c k ∗ s k ) ; v o i d ( ∗ c o n g a v o i d ) ( s t r u c t s o c k ∗ sk , u32 ack , u32 in flight ); v o i d ( ∗ s e t s t a t e ) ( s t r u c t s o c k ∗ sk , u8 n e w s t a t e ) ; v o i d ( ∗ c w n d e v e n t ) ( s t r u c t s o c k ∗ sk , enum t c p c a e v e n t ev ) ; u32 ( ∗ undo cwnd ) ( s t r u c t s o c k ∗ s k ) ; v o i d ( ∗ p k t s a c k e d ) ( s t r u c t s o c k ∗ sk , u32 num acked , s 3 2 rtt us ) ; v o i d ( ∗ g e t i n f o ) ( s t r u c t s o c k ∗ sk , u32 e x t , s t r u c t s k b u f f ∗ skb ) ;11 / 37 Ivo Calado IFALPrograma¸˜o para o Kernel Linux (Parte 2) ca
  12. 12. Os protocolos TCP e DCCP Implementa¸˜o dos CCIDs ca AtividadesImplementa¸˜es no Kernel coImplementa¸˜o do TCP ca Como pode-se ver, a implementa¸˜o do algoritmo de CC no TCP ´ ca e fortemente ligada a Mudan¸a de estados da conex˜o c a Recebimento de pacote de confirma¸˜o ca Limiar de partida lenta12 / 37 Ivo Calado IFALPrograma¸˜o para o Kernel Linux (Parte 2) ca
  13. 13. Os protocolos TCP e DCCP Implementa¸˜o dos CCIDs ca AtividadesImplementa¸˜es no Kernel coImplementa¸˜o do DCCP ca Definido em linux/net/dccp Apresenta uma estrutura bem definida sobre o que ´ o n´cleo e u do protocolo e o que ´ algoritmo de controle de e congestionamento Apesar de n˜o ser implementado como m´dulo, a estrutura do a o controle de congestionamento ´ componentiz´vel e a13 / 37 Ivo Calado IFALPrograma¸˜o para o Kernel Linux (Parte 2) ca
  14. 14. Os protocolos TCP e DCCP Implementa¸˜o dos CCIDs ca AtividadesImplementa¸˜es no Kernel coOpera¸oes de um CCID c˜ struct ccid operations { v o i d ( ∗ c c i d h c r x p a c k e t r e c v ) ( s t r u c t s o c k ∗ sk , s t r u c t s k b u f f ∗ skb ) ; v o i d ( ∗ c c i d h c t x p a c k e t r e c v ) ( s t r u c t s o c k ∗ sk , s t r u c t s k b u f f ∗ skb ) ; i n t ( ∗ c c i d h c t x s e n d p a c k e t ) ( s t r u c t s o c k ∗ sk , s t r u c t s k b u f f ∗ skb ) ; v o i d ( ∗ c c i d h c t x p a c k e t s e n t ) ( s t r u c t s o c k ∗ sk , unsigned i n t len ) ; // O u t r a s f u n c o e s e ¸˜ };14 / 37 Ivo Calado IFALPrograma¸˜o para o Kernel Linux (Parte 2) ca
  15. 15. Os protocolos TCP e DCCP Implementa¸˜o dos CCIDs ca AtividadesImplementa¸˜es no Kernel coUm pouco mais sobre a implementa¸˜o dos CCIDs ca Os CCIDs s˜o livres para implementar as funcionalidades que a desejarem Antes de fazer a chamada a alguma das a¸˜es do CCID, o co n´cleo DCCP verifica se tal fun¸˜o ´, de fato, implementada e u ca e caso n˜o seja descarta a chamada a15 / 37 Ivo Calado IFALPrograma¸˜o para o Kernel Linux (Parte 2) ca
  16. 16. Os protocolos TCP e DCCP Implementa¸˜o dos CCIDs ca AtividadesCCID-2Funcionamento Cria uma estrutura em lista que armazena os ultimos Acks ´ recebidos (n˜o faz uso de Ack acumulativo!) a Porque uma abordagem utilizando Ack acumulativo n˜o ´ poss´ a e ıvel no DCCP?16 / 37 Ivo Calado IFALPrograma¸˜o para o Kernel Linux (Parte 2) ca
  17. 17. Os protocolos TCP e DCCP Implementa¸˜o dos CCIDs ca AtividadesCCID-2Funcionamento Cria uma estrutura em lista que armazena os ultimos Acks ´ recebidos (n˜o faz uso de Ack acumulativo!) a Porque uma abordagem utilizando Ack acumulativo n˜o ´ poss´ a e ıvel no DCCP? Por que o protocolo DCCP ´ n˜o confi´vel!! e a a Os hosts trocam os vetores de confirma¸˜o (enviado ca juntamente com o pacote de dados)16 / 37 Ivo Calado IFALPrograma¸˜o para o Kernel Linux (Parte 2) ca
  18. 18. Os protocolos TCP e DCCP Implementa¸˜o dos CCIDs ca AtividadesCCID-3 e CCID-4CCID-3 Utiliza uma equa¸˜o para fazer o c´lculo da taxa de envio ca a Mais complexo que o CCID-2 pois necessita sincronizar o tempo de envio ao inv´s de ser Ack-Clocked e Utiliza o conceito de intervalo de perda (1 RTT) onde em um intervalo todas as perdas s˜o consideradas como apenas uma a Apresenta tanto um crescimento quanto uma queda na taxa de envio mais suave Define um tamanho fixo de pacotes (1500 bytes) e em caso de diminui¸˜o da taxa de envio altera o n´mero de pacotes ca u enviados17 / 37 Ivo Calado IFALPrograma¸˜o para o Kernel Linux (Parte 2) ca
  19. 19. Os protocolos TCP e DCCP Implementa¸˜o dos CCIDs ca AtividadesCCID-3 e CCID-4CCID-3 e CCID-4 Varia¸˜o do CCID-3 onde, ao inv´s de variar o n´mero de ca e u pacotes enviados varia o tamanho dos pacotes Possui taxa de transmiss˜o limitada a 1,5 Mbps a CCID-4 ainda n˜o dispon´ na ´rvore principal do Kernel a ıvel a18 / 37 Ivo Calado IFALPrograma¸˜o para o Kernel Linux (Parte 2) ca
  20. 20. Os protocolos TCP e DCCP Implementa¸˜o dos CCIDs ca AtividadesCCID-249Funcionamento Implementa uma mistura entre TCP Cubic e CCID-2 “Rouba” o mecanismo de confirma¸˜o seletiva via Ack ca Vectors do CCID-2 Utiliza a fun¸˜o de c´lculo de janela do Tcp Cubic ca a Consegue obter maior vaz˜o que os outros CCIDs a Disponibiliza¸˜o ca N˜o dispon´ na ´rvore principal do Kernel, sendo a ıvel a disponibilizado apenas na ´rvore git mantida por Gerrit a Renker (principal mantenedor do Dccp)19 / 37 Ivo Calado IFALPrograma¸˜o para o Kernel Linux (Parte 2) ca
  21. 21. Os protocolos TCP e DCCP Implementa¸˜o dos CCIDs ca AtividadesAdicionando um Novo CCIDAdicionando um Novo CCID Agora vamos criar um novo CCID Este CCID ir´ simular o protocolo UDP, ou seja, sem controle a algum de taxa de envio Para isso, vamos escolher o n´mero 248 para ser o CCID (na u ´rvore oficial o Dccp Cubic ainda n˜o existe!) a a20 / 37 Ivo Calado IFALPrograma¸˜o para o Kernel Linux (Parte 2) ca
  22. 22. Os protocolos TCP e DCCP Implementa¸˜o dos CCIDs ca AtividadesAdicionando um Novo CCID1a etapa: Definir a constante para o CCID Abrir o arquivo include/linux/dccp.h Buscar o enum onde est´ definido DCCPC CCID3 a Adicionar uma nova constante DCCPC CCID248 = 2 4 8 ,21 / 37 Ivo Calado IFALPrograma¸˜o para o Kernel Linux (Parte 2) ca
  23. 23. Os protocolos TCP e DCCP Implementa¸˜o dos CCIDs ca AtividadesAdicionando um Novo CCID2a etapa: Implementar o algoritmo Criar um novo arquivo chamado ccid248.c em linux/net/dccp/ccids item Adicionar a seguinte implementa¸˜o ca #i n c l u d e " ../ ccid .h" struct ccid operations ccid248 ops = { . c c i d i d = DCCPC CCID248 , . c c i d n a m e = " UDP - like " };22 / 37 Ivo Calado IFALPrograma¸˜o para o Kernel Linux (Parte 2) ca
  24. 24. Os protocolos TCP e DCCP Implementa¸˜o dos CCIDs ca AtividadesAdicionando um Novo CCID3a etapa: Adicionar o CCID ` lista de CCIDs dispon´ a ıveis Abrir o arquivo linux/net/dccp/ccid.c No vetor ccid operations adicionar a seguinte linha no final #i f d e f CONFIG IP DCCP CCID248 &c c i d 2 4 8 o p s , #e n d i f23 / 37 Ivo Calado IFALPrograma¸˜o para o Kernel Linux (Parte 2) ca
  25. 25. Os protocolos TCP e DCCP Implementa¸˜o dos CCIDs ca AtividadesAdicionando um Novo CCID4a etapa: Adicionar a constante de CCID a lista de CCIDsque podem ser negociados Abrir o arquivo linux/net/dccp/feat.c Localizar a fun¸˜o dccp feat is valid sp val ca Alterar o op¸˜o DCCPF CCID para que fique da seguinte ca forma c a s e DCCPF CCID : r e t u r n v a l == DCCPC CCID2 | | v a l == DCCPC CCID3 | | v a l == DCCPC CCID248 ;24 / 37 Ivo Calado IFALPrograma¸˜o para o Kernel Linux (Parte 2) ca
  26. 26. Os protocolos TCP e DCCP Implementa¸˜o dos CCIDs ca AtividadesAdicionando um Novo CCID5a etapa: Adicionar as dependˆncias de negocia¸˜o e ca Ainda no arquivo linux/net/dccp/feat.c Localize a fun¸˜o dccp feat ccid deps ca Adicione antes do switch final o seguinte bloco s t a t i c const struct ccid dependency ccid248 dependencies [ 2 ] [ 2 ] = { {{ 0 , 0 , 0 , 0 } } , {{ 0 , 0 , 0 , 0 }} }; Adicionar ao switch final a seguinte linha c a s e DCCPC CCID248 : r e t u r n c c i d 2 4 8 d e p e n d e n c i e s [ is local ];25 / 37 Ivo Calado IFALPrograma¸˜o para o Kernel Linux (Parte 2) ca
  27. 27. Os protocolos TCP e DCCP Implementa¸˜o dos CCIDs ca AtividadesAdicionando um Novo CCID6a etapa: Declarar opera¸oes do novo CCID em ccid.h c˜ Abra o arquivo linux/net/dccp/ccid.h Localize o seguinte trecho #i f d e f CONFIG IP DCCP CCID3 extern struct ccid operations ccid3 ops ; #e n d i f Ap´s ele, adicione o seguinte trecho o #i f d e f CONFIG IP DCCP CCID248 extern struct ccid operations ccid248 ops ; #e n d i f26 / 37 Ivo Calado IFALPrograma¸˜o para o Kernel Linux (Parte 2) ca
  28. 28. Os protocolos TCP e DCCP Implementa¸˜o dos CCIDs ca AtividadesAdicionando um Novo CCID7a etapa: Adicionar ao menu de configura¸˜es o novo coCCID Abrir arquivo linux/net/dccp/ccids/Kconfig Adicione ao final da se¸˜o menu o seguinte trecho ca c o n f i g IP DCCP CCID248 b o o l " CCID -248 (UDP - like ) novo CCID " def bool n −−−h e l p −−− Aqui v a i a d e s c r i ¸ ˜ o do novo CCID . ca27 / 37 Ivo Calado IFALPrograma¸˜o para o Kernel Linux (Parte 2) ca
  29. 29. Os protocolos TCP e DCCP Implementa¸˜o dos CCIDs ca AtividadesAdicionando um Novo CCID8a etapa: Adicionar o novo CCID ` compila¸˜o a ca Abrir o arquivo linux/net/dccp/ccids/Makefile Ap´s a defini¸˜o do CCID-3, adicionar o seguinte trecho o ca dccp−y += c c i d s / c c i d 2 4 8 . o28 / 37 Ivo Calado IFALPrograma¸˜o para o Kernel Linux (Parte 2) ca
  30. 30. Os protocolos TCP e DCCP Implementa¸˜o dos CCIDs ca AtividadesAdicionando um Novo CCIDTestando Habilitar o novo CCID no menuconfig durante a configura¸˜o ca do kernel Compilar o Kernel e instalar Reiniciar a m´quina virtual a Instalar o iperf com suporte a DCCP (http: //139.133.210.30/~gerrit/dccp/apps/iperf/zip/ iperf-2.0.2_DCCP-patched-CBR-continuous.tar.bz2)29 / 37 Ivo Calado IFALPrograma¸˜o para o Kernel Linux (Parte 2) ca
  31. 31. Os protocolos TCP e DCCP Implementa¸˜o dos CCIDs ca AtividadesAdicionando um Novo CCIDTestando Executar a sysctl para alterar o CCID padr˜o a s y s c t l −w n e t . dccp . d e f a u l t . t x c c i d =248 s y s c t l −w n e t . dccp . d e f a u l t . r x c c i d =248 Iniciar o lado servidor do iperf i p e r f −d −s − i 1 Iniciar o lado cliente do iperf i p e r f −d −c 1 2 7 . 0 . 0 . 1 − i 130 / 37 Ivo Calado IFALPrograma¸˜o para o Kernel Linux (Parte 2) ca
  32. 32. Os protocolos TCP e DCCP Implementa¸˜o dos CCIDs ca AtividadesAdicionando uma nova SysctlAdicionando uma nova Sysctl sysctl ´ uma abordagem utilizada pelo SO para uma e comunica¸˜o entre o espa¸o de usu´rio e o espa¸o de n´cleo ca c a c u Realizado a partir de entradas em /proc O protocolo pode disponibilizar tanto a leitura quanto a altera¸˜o de algumas vari´veis ca a A altera¸˜o do valor ´ realizado tanto via arquivo virtual em ca e /proc quanto via chamada de sistema syscall31 / 37 Ivo Calado IFALPrograma¸˜o para o Kernel Linux (Parte 2) ca
  33. 33. Os protocolos TCP e DCCP Implementa¸˜o dos CCIDs ca AtividadesAdicionando uma nova Sysctl1a etapa: Definir a vari´vel a ser exportada a Vamos considerar o compartilhamente de uma vari´vel inteira a chamada “value1” Abrir o arquivo linux/net/dccp/proto.c Declarar uma vari´vel inteira chamada “value” a int sysctl dccp value read mostly = 5; Exportar a vari´vel em linux/net/dccp/dccp.h a extern int sysctl dccp value ;32 / 37 Ivo Calado IFALPrograma¸˜o para o Kernel Linux (Parte 2) ca
  34. 34. Os protocolos TCP e DCCP Implementa¸˜o dos CCIDs ca AtividadesAdicionando uma nova Sysctl2a etapa: Adicionar uma entrada em ctl table Abrir arquivo linux/net/dccp/sysctl.c Localizar array dccp default table Adicionar o seguinte trecho ao final do array { . procname = " value " , . d a t a = &s y s c t l d c c p v a l u e , . maxlen = s i z e o f ( s y s c t l d c c p v a l u e ) , . mode = 0 6 4 4 , . proc handler = proc dointvec minmax , . e x t r a 1 = &z e r o , },33 / 37 Ivo Calado IFALPrograma¸˜o para o Kernel Linux (Parte 2) ca
  35. 35. Os protocolos TCP e DCCP Implementa¸˜o dos CCIDs ca AtividadesAdicionando uma nova SysctlTestando Ap´s salvar tudo e recompilar o Kernel, realizar a seguinte o opera¸˜o ca c a t / p r o c / s y s / n e t / dccp / d e f a u l t / v a l u e Ao realizar essa opera¸˜o deve ser impresso na tela o valor 5 ca Um segundo teste a ser realizado ´ a tentativa de alterar o e valor da vari´vel a s y s c t l −w n e t . dccp . d e f a u l t . v a l u e =1034 / 37 Ivo Calado IFALPrograma¸˜o para o Kernel Linux (Parte 2) ca
  36. 36. Os protocolos TCP e DCCP Implementa¸˜o dos CCIDs ca AtividadesLogando os pacotes enviadosLogando os pacotes enviados Nesta atividade o aluno ir´ modificar o CCID rec´m criado a e para que toda vez que um pacote seja recebido ser´ realizado a um log do pacote Deste modo, o aluno deve implementar a fun¸˜o correta que ca registre o recebimento de pacotes no lado receptor Dica... Analisar fun¸˜o ccid hc tx packet sent ca Tempo da atividade: 10 - 15 minutos35 / 37 Ivo Calado IFALPrograma¸˜o para o Kernel Linux (Parte 2) ca
  37. 37. Os protocolos TCP e DCCP Implementa¸˜o dos CCIDs ca AtividadesLogando os pacotes enviadosBibliografia I Jeremy Andrews. Linux: Documenting how patches reach the kernel. http://kerneltrap.org/node/3180, Maio 2004. The Git Community Book. The git community book. http://book.git-scm.com/index.html, Outubro 2011. Ariejan de Vroom. How to create and apply a patch with git. http://ariejan.net/2009/10/26/ how-to-create-and-apply-a-patch-with-git/, Outubro 2009.36 / 37 Ivo Calado IFALPrograma¸˜o para o Kernel Linux (Parte 2) ca
  38. 38. Os protocolos TCP e DCCP Implementa¸˜o dos CCIDs ca AtividadesLogando os pacotes enviadosBibliografia II Wikipedia Foudation. Sco-linux controversies. http: //en.wikipedia.org/wiki/SCO-Linux_controversies, Outubro 2011.37 / 37 Ivo Calado IFALPrograma¸˜o para o Kernel Linux (Parte 2) ca

×