Ambiente de testes para módulos no Linux Kernel

De alguns dias pra cá, vim testando alguns módulos no Linux kernel que mexem com alocação de memória, doubly linked lists e algumas macros como a ‘current’ que faz referência a famosa task_struct de “linux/sched.h”, o problema é que toda vez que eu carregava um módulo que lidava diretamente com uma alocação errônia de memória em kernel-space, o kernel crashava e em consequência, a máquina também, Eis o problema na vida do indivíduo — máquina de produção travando a cada insmod executado não é boa coisa, acredite.

A solução: ambiente especial para testes, responsável: UML (user mode linux) como pode ver abaixo (note que o método aqui apresentado é uma abstração do método usual, o modo mais usual da utilização do UML como ambiente de depuração pode ser encontrado no final desde guia como indicação):

(mais…)

2 comments Fevereiro 27, 2009

Instrumentação do kernel (SystemTap)

Salve galera!

Para quem se interessa por depuração de Kernel, vou deixar uns links úteis para vocês; Por acaso, eu tinha uma palestra do Marcelo Tossati em meu HD falando sobre instrumentação do Kernel com SystemTap no Fisl 7 se não me falha a memória, mais infelizmente perdi o vídeo e não consegui recupera-lo pelo fato de que os mirrors que forneciam o download do vídeo não estão mais funcionando, é uma pena.

(mais…)

Add comment Fevereiro 10, 2009

Timestamp de processos

Veja o timestamp dos processos:
ls -lt /etc/init.d

Add comment Fevereiro 10, 2009

Utilizando o GNU Profiler (gprof)

O gprof é um programa do projeto GNU que mede os tempos de execução dos métodos presentes em um programa, possibilitando ao programador a análise desses tempos e a consequente otimização de seu código.

(mais…)

2 comments Fevereiro 10, 2009

Linux Kernel Development

Para quem quer ingressar no desenvolvimento do Kernel terá de aprender coisas essenciais como se comunicar em grupo, principalmente em inglês, saber expor idéias, trechos de códigos a serem avaliados pela comunidade, saber aceitar e acima de tudo saber trabalhar em grupo. Ainda não mexo com o kernel mais espero que em breve possa estar participando também no desenvolvimento do Linux.

Fiz minha inscrição no LKML e meu email inscrito é felipektojo@gmail.com. o trafego diário da lista é pesado, entre 200-300 mensagens diárias mais vale a pena também se deseja conhecer conceitos técnicos principalmente se é estudante de coisas correlacionadas a Sistemas Operacionais, programação concorrente e etc. Vou deixar alguns links abaixo para facilitar a sua vida:

(mais…)

Add comment Fevereiro 9, 2009

Fazendo backup via rede

Para fazer um backup via rede basta instalar o programa netcat, você irá utilizar o comando nc.

Na maquina 1 (a ser feito o Backup, no exemplo esta o primeiro disco sata)
dd if=/dev/sda | nc “outroserver” 7000 -q 10
Na maquina 2 (ira receber o backup , uma IMAGEM COMPLETA do HD)
nc -l -p 7000 | dd of=/home/disco_sda.iso

lembrando que isso faz uma COPIA completa e do disco entao voce precisa ter o mesmo tamanho do outro lado para receber , o que voce pode fazer e customizar um pouco o comando e meter um bzip ai e reduzir o tamanho do iso :)

ai deixo a liberdade para voce escolher como fazer isso.

Créditos: Liberie (Google).

Add comment Fevereiro 9, 2009

Matando bugs.

Algumas das ferramentas ideais para extinguir esse tipo de coisa nojenta qu vem atormentando seus programas é o GNU Debugger para depuração de falhas no código (ele lhe dá o endereco da chamada da função armazenada na pilha e se possível, lhe indica a instrução causadora da falha, que pode ser um transbordamento de buffer ou uma proteção do compilador própriamente dita, por meio de um recurso chamado symbols e entre outras coisas, e um outro também muito interessante que além de ser um depurador de memória é também um profiler é o Valgrind, antigo Heimdall.

Note que para entender melhor conceitos de depuração, de alocação de memória para os respectivos processos em andamento é necessario conhecer conceitos de memória virtual, a nível de implementação de um sistema operacional. Irei posteriormente indicar alguns livros que falam sobre isso, e inclusive uma dissertação de mestrado bem legal do Rodrigo de Castro (ex MS employee atualmente na Amazon) e  que participa da LKML, no qual venho conversando a pouco tempo via email e gtalk.

Add comment Fevereiro 6, 2009

Como embarcar a biblioteca Server do MySQL em um fonte C.

Nos próximos posts tratarei com detalhes sobre este tópico para quem programa em C e usa MySQL como banco de dados.

Add comment Janeiro 26, 2009

Tradução, classes ODBC do wxWidgets

Sentindo a necessidade de uma documentação mais concisa em português sobre as classes ODBC do famoso framework wxWidgets, decidi colocar a mão na massa e traduzir o documento original que pode ser encontrado no site oficial.

Note que não levei a tradução totalmente a sério pois necessitava disso o mais rápido possível e estava com bastante pressa também, o importante é esclarecer da melhor forma possível alguns parágrafos para os que não sabem inglês.

A tradução segue abaixo:

(mais…)

Add comment Janeiro 26, 2009

Projetos Funcionais — A Colaboratividade.

Projetos Funcionais — A Colaboratividade.

Escrevi esse artigo de modo mais conciso possível, partindo do pressuposto de que tens em mente algum projeto utilizando linguagens como C/C++ e que espera portabilidade do seu programas á outras plataformas, o que pode ser um pouco trabalhoso devido a demasiada quantidade de passos a serem gerenciadas por apenas uma pessoa, hipoteticamente falando é claro.

Acredito que nos dias de hoje, pela complexidade que um projeto funcional exige, fica um pouco difícil você focar seu tempo em apenas um aspecto do programa, já que na elaboração de um programa existem vários outros fatores a serem levados em consideração, dentre esses, posso citar alguns:

* Preocupação com as plataformas alvo.
* Em uma linguagem como C++, por exemplo, é preciso tomar muito cuidado com a tipagem de métodos, variáveis, e do código em geral (isso se quiser como resultado final um código legível e organizado), já que C++ é uma linguagem de tipagem fortíssima o que exige bastante cautéla por parte do programador nesse quesito.

* Preocupação com os algoritimos a serem utilizados no programa, se é um programa ligado a banco de dados (entende-se aqui como linhas e colunas) assim sendo, um objeto bidimensional e consequentemente é importante o entendimento de vetores do mesmo tipo (vetores bidimensionais, mais há quem use como denominação pra esse tipo de vetor o termo matriz).
* Conhecimentos de API’s e frameworks, bibliotecas.

* Experiência com uso de debuggers, compiladores, ferramentas de construção de projeto como o autotools da GNU (caso você for desenvolver sobre Unix) e outros tipos de ferramentas para criação de documentações, criação de bibliotécas estáticas, dinâmicas, monitoramento de links quebrados, detecção de problemas e necessidades extras, então por isso é um pouco complexo você sair fazendo um projeto sozinho na garantia de que todas as partes de seu programa terão maturidade suficiente a ponto de se tornar apresentavel. Em termos gerais, assim como existirão muitas partes intrínsecas e essenciais no funcionamento de alguns métodos no programa, há de haver colaboradores especialistas nessas partes, partes essas estarão articulados aos demais módulos inerentes ao programa — vide programação modular.

* Conhecimentos de idiomas: periodicamente você irá precisar de apoio em termos de documentação, hora durante a pesquisa se deparará com sites e fóruns franceses, por exemplo (não é regra, claro :D), a última documentação, que por acaso, foi excepcional ao meu ponto de vista no qual precisei consultar, foi em um site de taiwan cujo o artigo estava escrito em inglês (uffa!, não me vejo lendo coisas escritas com aqueles caracteres malucos descendentes japoneses, ou chineses, sei lá :-) ).

Então uma dica que eu daria, é: antes de começar a desenvolver o projeto, analise bem com o que irá lhe dar ao longo do desenvolvimento do programa, crie especificações, ao invés de sair escrevendo o código e confiar na sorte que certamente não estará contigo, escreva os passos em português claro (ou sua linguagem nativa :P) que deverá tomar até chegar a um resultado, só assim você entenderá melhor o problema no qual está lidando, e por conseguinte, a resolução se tornará mais simples (a comunidade também é grande).

E isso tudo possuí grande relevância, como já dito, principalmente pela escolha de uma linguagem nativa de máquina como C/C++ ou mesmo o Assembly (no qual o programador deixa de se concentrar no algoritimo em si, e tem de levar em consideração as peculiaridades da linguagem e da máquina). Por esse motivo há quem prefira o uso de Python para projetos do tipo Desktop (não se limitando apenas a isso), o E. Reymond é um, e é claro, como todos já estão carecas de saber, em um programa de missão crítica, ou que exija desempenho, no entanto, de jeito maneira é desenvolvido em linguagens interpretadas como Python que abstrai bastante o conceito de manipulação das questões relacionadas ao baixo nível da máquina e dos algoritimos, entretanto, Python ainda consegue manter um nível relativamente bom e consistente de velocidade em comparação a outras linguagens do mesmo tipo, enfim, como diz o ditado popular — e, por favor, não tome como regra :D, “Se quer ser valorizado, saiba C/C++ fluentemente, no entanto, se prefere ganhar sua grana e viver mais (“mais” exatamente no sendo de aproveitar melhor a vida :-)) aprenda Python” (lembrando que Python, assim como uma gama de outras linguagens foram desenvolvidas em C e concedida como “programação para todos” ao público, vide CPython — implementação original de Python em C); E C, por sua vez, é uma linguagem histórica com um teor mais alto de ascenção entre Hackers e escovadores de bits.

Sem contar que o mundo Linux tá saturado (e quando digo saturado, não me refiro a quantidade de programas já criados, pois nesse quesito C ganha disparado, mas me refiro aqui de perda de performance por decorrencia da utilização de linguagens interpretadas para criação de projetos desktop — sim, admito que as máquinas estão em um processo contínuo e rápido de evolução e por isso alguns segundos a menos para processar um programa não fará lá muita diferença, pra alguns, mas, temos de pensar em todos, nem todo mundo tem um Multicore rodando na máquina … ).

E são muitos outros pontos a serem levados em consideração que poderia citar aqui fazem-nos perder o foco, de uma maneira geral em um aspecto específico do programa (é necessário colaboradores, nesse ponto, estou precisando de colaboradores para o desenvolvimento do projeto Lambda, caso estejam interessados, podem me contactar pelo meu email: felipecatojoªgmail°com, sem contar que também é uma boa oportunidade de aprendizado, e isso serve pra mim também :D).

2 comments Janeiro 26, 2009

Previous Posts


RSS Assine o Feed

Páginas

 

Dezembro 2009
S T Q Q S S D
« Fev    
 123456
78910111213
14151617181920
21222324252627
28293031  

1356