terça-feira, 26 de agosto de 2008

O que é o Kernel?

A explicação para leigos de Kernel RT gerou uma dúvida sobre o que é o Kernel "sem o RT". Vou tentar explicá-lo aqui de maneira simplificada.

Primeiro, uma visão histórica
No começo da informática, os programas de computadores (também chamados aplicativos ou aplicações) eram feitos para serem executados em computadores específicos. Programas específicos para máquinas específicas existiram por um certo período e ainda existem. Quando existia a necessidade de mudar esta máquina, toda a programação dos aplicativos precisava ser alterada para continuar funcionando. Percebendo que esta era uma situação impossível de ser mantida, os cientistas da época resolveram mudar a forma de pensar a integração entre computadores e seus programas.


O sistema operacional
Neste ponto da história entra um programa chamado Sistema Operacional. A função principal do sistema operacional é gerenciar os recursos do computador. Por recurso entenda a memória, arquivos, processador, teclado, vídeo, impressora e tudo o mais que pode ou deve ser "espetado" em um computador. Desta maneira os programas passaram a ser feitos para um sistema operacional e não para uma máquina. Quando uma nova máquina era lançada, o sistema operacional era adaptado para ela e todas as aplicações continuariam funcionando.
Em paralelo ao conceito de sistema operacional, veio o conceito de aplicativo. O Word, por exemplo, é uma aplicação para o Sistema operacional Windows. O Rosegarden é outra aplicação que utiliza o sistema operacional Linux. Normalmente, o que o usuário vê é a aplicação.

Com a contínua evolução dos computadores, novos dispositivos foram criados. Atualmente monitores LCD, mouses óticso, impressoras lasers e pen drives são exemplos destes dispositivos. Ao Sistema Operacional ficaria impossível gerenciar todos estes recursos. A evolução dos Sistemas Operacionais acompanhou a evolução do Hardware e vários fabricantes de sistemas operacionais optaram por dividí-lo em partes: Uma parte principal que cuidaria dos recursos "genéricos" e uma parte que cuidaria de recursos específicos.

O Kernel
A parte principal passou a ser chamada de Kernel, ou cerne, em uma tradução literal. Esta parte é o cerne do sistema operacional. O Kernel de um sistema operacional está sempre executando e ligar um computador e esperar que ele inicie significa esperar que o kernel seja carregador. O Kernel irá gerenciar a parte "genérica" do computador de maneira a garantir o funcionamento da máquina para o usuário.

Ao kernel pode ser adicionadas novas partes específicas. A parte dos recursos específicos é conhecida como drivers, módulos ou drivers de dispositvo. Os drivers servem para ajudar o kernel a gerenciar hardwares específicos. Se você possui uma impressora laser em sua casa, por exemplo, há a necessidade de instalar o driver para este dispositivo. Do contrário, o mesmo não irá ser reconhecido pelo seu computador e não irá funcionar adequadamente.


O Kernel do Linux
De maneira geral, podemos dizer que todo sistema operacional moderno possui um Kernel, porém ele só alcançou fama depois que o Linux ficou conhecido. Usuários Linux podem escolher e configurar o Kernel e os módulos de seu sistema operacional de maneira a melhorar o gerenciamento dos recursos de sua máquina.

Em sistemas Linux nem todo módulo é um driver de dispositivo. Recursos como a própria interface gráfica do computador podem ser tratadas por meio de módulos. Se um computador é um servidor, por exemplo, ele não precisará de interface gráfica para ser utilizado.

Quando os computadores possuem dispositivos "genéricos" distintos, é necessário versões distintas de kernel. Usemos como exemplo um celular destes bem modernos. Ele possui um sistema operacional, porém seu teclado não é igual ao de um computador, ele não tem HD, não tem mouse, não podemos chamar seu visor de monitor. Isto significa que o kernel de seu computador não irá funcionar no seu celular. Sim, existem kernels específicos para vários tipos de computadores que vão desde um palmtop até computadores enormes chamados mainframes.

Fontes:

O que são distibuições Linux?

Bem, eu sei que este assunto já foi bastante debatido e que boa parte do "pessoal da informática" sabe o que são distribuições Linux. Estou escrevendo este texto a pedidos do pessoal da Música que leu o post sobre distribuições Linux para áudio e que ficaram com dúvidas a este respeito. Por esta razão, me perdoem os Linuxers pela licensa poética do texto.

O que é o Linux?
O Linux (ou GNU/Linux) é um sistema operacional inicialmente escrito por Linus Torvalds do Departamento de Ciência da Computação da Universidade de Helsinki, Finlândia. Este sistema operacional teve sua primeira versão lançada em Outubro de 1991. Quando o Linus começou a escrever o Linux ele conseguiu o apoio de várias pessoas e entidades que ajudaram-no a transformar este sistema operacional no que ele é hoje. Atualmente o Linux é um sistema operacional utilizado em larga escala por ser gratuíto e possuir seu código-fonte disponível.

Para quem nunca ouviu falar no termo "código-fonte".
Um programa de computador é escrito em uma linguagem de programação e depois convertido em linguagem de máquina. A linguagem de máquina é numérica e normalmente são entendidas apenas por máquinas. A linguagem de programação é textual e normalmente entendida por alguns humanos. Este "texto" escrito em linguagem de programação é o chamado código-fonte. Com ele em mãos é possível alterar o código de máquina. Alterando o código de máquina altera-se o próprio aplicativo.

Voltando ao Linux...
Atualmente, todo curso de graduação em Ciência da Computação, Informática, Análise de Sistemas ou afins possuem a disciplina de Sistemas Operacionais. Imagine a seguinte situação: um aluno, no trabalho desta disciplina, precisa escrever um sistema de arquivos. Outros sistemas operacionais como o Windows ou o MacOs da Macintosh não disponibilizam seu código-fonte. Qual a solução mais simples? Utilizar o código-fonte do Linux e alterá-lo para seu trabalho, correto?

O sistema operacional das opções
Alunos, cientistas ou entusiastas da informática começaram a escrever novos programas e também disponibilizar o código-fonte. Novos programas com novos códigos-fontes geram novos programas com mais códigos-fontes. Resultado? Várias opções.

Ok, temos várias opções. Milhares de combinações possíveis. Um monte de coisas que não sabemos se funciona, quem fez e se o projeto ainda existe. Bacana, não? Como faço para garimpar nesta mina de códigos-fontes, instalar e utilizar o Linux?

Distribuições Linux
É neste ponto que entram as distribuições Linux. De maneira simples, uma distribuição (ou simplesmente distro) é a escolha entre as várias opções existentes no universo Linux. De maneira mais formal é o kernel do Linux, aplicações, manuais e instaladores. Não é necessário que você fique garimpando os melhores códigos. As ditribuições fazem isto. Garimpam, testam, criam, aprimoram, empacotam e distribuem. Por isto o termo.

Um usuário experiente pode ignorar as distribuições já existentes, ir atrás deste garimpo e fazer tudo do zero. A opção ainda existe. Mas aos usuário que não querem garimpar cabe escolher entre a distribuição que melhor lhe satisfaça.

As distribuições podem ser mantidas por projetos comunitários (como o Gentoo e o Debian), empresas (como Red Hat e Suse) ou mesmo indivíduos (como o Slackware, distribuo pelo Patrick Volkerding).

Há distribuições que executam a partir do próprio CD, chamadas de LiveCD ou que devem ser instaladas. Há distribuições que executam a partir de disquetes e que são extremamente simplistas. Há distribuições gratuítas e também distribuições pagas. Há distribuições que, para não começar do zero, são feitas baseadas em outras distribuições. Há distribuições específicas para trabalharem como servidores na Internet. Há distribuições específicas para trabalhar com áudio e multimídia. Isto significa que uma trará aplicativos para um servidor de Internet e a outra trará aplicativos para áudio e multimídia.

Fontes:

domingo, 24 de agosto de 2008

Todo adolescente deve ter um Revolver

Eu não sei qual seria a idade certa para isto. Bem provável que ao ingressar o ensino médio, o antigo segundo grau. Algo entre 14 e 15 anos. Todo adolescente deveria ganhar um Revolver. Não apenas ganhar mas aprender a usá-lo.

O Revolver é um divisor de águas. Quanto a isto, não há o que negar. Ter um Revolver também é passar por este divisor de águas. Eu comprei meu Revolver por volta dos 23 anos de idade. Deveria ter comprado antes. Apesar disto, não acho que embarquei tarde demais nas sensações que só um Revolver pode proporcionar.

Já diria a Fernandinha Takai do Pato Fu: "Mamãe ama é o meu Revolver". Tem de aprender a revolver. Sim. Revolver. Não Revólver. Revolver. Direita volver, esquerda revolver.


O Revolver marca o início de uma nova era na discografia dos Beatles. O que veio depois, só veio porque o passo mais importante já tinha sido dado: Era preciso Revolver.

Em Sgt. Pepper's Lonely Hearts Club Band a banda pensou em fazer um disco que não seria tocado ao vivo, podendo, com isto, extrapolar as possibilidades que o estúdio de gravação oferecia.

Isto foi apenas conseqüência do Revolver. A banda já tinha gravado EleanorRigby com um arranjo que a banda não conseguiria fazer ao vivo.

O que o Revolver tem?

1 - TAXMAN
2 - ELEANOR RIGBY
3 - I´M ONLY SLEEPING
4 - LOVE YOU TO
5 - HERE THERE AND EVERYWHERE
6 - YELLOW SUBMARINE
7 - SHE SAID SHE SAID
8 - GOOD DAY SUNSHINE
9 - AND YOUR BIRD CAN SING
10 - FOR NO ONE
11 - DR ROBERT
12 - I WANT TO TELL YOU
13 - GOT TO GET YOU INTO MY LIFE
14 - TOMORROW NEVER KNOWS

Bem, se você ainda não tem um Revolver, acho melhor começar a pensar em revolver!

Links:

terça-feira, 19 de agosto de 2008

O que é ALSA?

Tentando ajudar os novos usuários de Linux para multimídia é hora de explicar mais uma sigla que é bastante popular. Com vocês:

Advanced Linux Sound Architecture (ALSA)
Você acaba de comprar uma placa de som. Bonita, nova e cheirosa, tão sonhada e aguardada por meses. Ao abrir a caixa encontra a placa, um manual e o CD / Disquete (infelizmente os disquetes sobrevivem...) com o driver da placa. Ao manual, ninguém dá bola. É só "espetar" a placa de som, ligar a máquina e instalar o driver. Certeza que ela vai funcionar, certo?
Quase. Os fabricantes ainda não disponibilizam drivers de seus periféricos para o Linux. O tal CD com o driver só será útil para usuários Windows e, pelo jeito, não é o seu caso.

O que são os drivers?
No começo havia apenas a famosa placa de som Sound Blaster 16 bits que vinha com tal "kit multimídia" e tudo era muito simples. Atualmente existem placas de som com diversas configurações distintas. Várias entradas, várias saídas, entrada / saída para controlador MIDI, full-duplex (capacidade de gravar e ouvir ao mesmo tempo), com conexão USB, PCI e por ai vai. A função de deixar sua placa funcionando é do sistema operacional. O sistema operacional, com certeza, não conhece todas as placas de som do universo e por isto eles contam com uma ajudinha do fabricante para lhe explicar como conversar com sua placa de som. Esta "ajudinha do fabricante" é o tal driver de dispositivo. Quando o Sistema operacional consegue identificar sua placa a mesma se torna disponível para todas as aplicações que irão utilizá-la.

Bem, se o fabricante não tem Driver para Linux, o que fazer?
É neste ponto que entra o ALSA. Assim como você, muita gente precisa destes drivers. Esta gente se juntou, cada um escreveu um driver e o ALSA conta hoje com suporte a grande parte das placas de som do mercado. Bacana, não? Vai além. Mais do que escrever estes programas, o ALSA também partiu de outros objetivos como:
  • Síntese de MIDI baseada em hardware;
  • Mixagem em hardware de múltiplos canais;
  • Operação Full-duplex;
  • Drivers que trabalham com múltiplos processadores.
  • Suporte para aplicações que utilizam o OSS*
No momento da escrita deste post, o ALSA conta com suporte a 110 placas de som. Apesar de ser um número bastante significativo, o conselho dos usuários Linux ainda é: Verifique se há um driver ALSA para sua placa antes de adquirí-la.

Fontes:
* OSS (Open Sound System) é o antigo Sistema de som do Linux. Para saber mais, leia este blog.

segunda-feira, 18 de agosto de 2008

O que é Kernel RT?

Algumas distribuições de Linux para Áudio possuem Kernel RT e outras não. O que isto significa?

Um sistema operacional Multi-tarefas
Durante muito tempo os sistemas operacionais não suportavam a execução de vários programas simultaneamente. Estes sistemas operacionais, como o MS-DOS, eram chamados de Mono-tarefa.
Boa parte dos sistemas operacionais atuais permitem a execução de vários programas ao mesmo tempo. É bastante comum que, por exemplo, você esteja navegando na Internet e ouvindo música ao mesmo tempo. Estes sistemas operacionais, como o Linux ou o Windows, são chamados Multi-tarefas.
Bem, sabendo que o seu computador possui apenas um processador, como ele é capaz de executar vários programas ao mesmo tempo? A resposta é simples: Ele não é. Sim, seu computador executa apenas um programa de cada vez, porém, alterna entre os vários programas que estão executando deixando uma fatia de tempo (time slice) para cada um deles. É como o cinema, várias fotos piscando rapidamente dão a impressão de movimento. Vários programas alternando rapidamente dão a impressão de multi-tarefa. A realidade é que apenas um deles irá executar por vez. O responsável por alternar entre as várias tarefas é o sistema operacional, ou mais especificamente, seu escalonador.

O escalonador
O escalonador é uma parte do sistema operacional que irá cuidar da divisão das fatias de tempo (time slice) do processamento entre os vários programas em execução. Há uma série de algoritmos diferentes para escalonamento como, por exemplo, SJF ou FIFO e nem todos trabalham com fatias de tempo. Além de usar fatias de tempo, alguns destes algoritmos de escalonamento tratam os programas em execução com prioridades diferentes. O Linux utiliza esta abordagem. Assim, se um programa for mais importante, ele poderá executar por mais tempo e se ele for menos importante ele executará por menos tempo.

Prioridades
Para garantir que processos (ou tarefas, ou programas) mais importantes executem sempre que for necessário, há a possibilidade de atribuir-lhes uma prioridade maior. Os processos do Sistema operacional, por exemplo, costumam possuir maior prioridade que os processos do usuário. No Linux, os processos mais importantes possuem prioridade 0 (isto mesmo, zero) e conforme este valor cresce a importância do processo diminui. Os programas que não estão executando ficam esperando em uma fila. Os algoritmos de escalonamento fazem uma conta para tentar dividir de uma maneira justa o processador para todos os processos. Quem está esperando a mais tempo, por exemplo, pode ser chamado primeiro que alguém com maior prioridade. Para alterar entre um processo e outro, o escalonador utiliza um recurso chamado preempção.

Preempção
A preenpção é a alternância entre os vários processos da fila. Partimos da idéia de que apenas um deles está no processador. O escalonador pode preemptar um processo que já executou por tempo bastante e garantir com isto a sensação de multi-tarefa. Porém, além dos processos da fila, o usuário também pode requisitar algum processamento. Isto é feito, por exemplo, digitando no teclado ou movendo o mouse pela tela. Isto é chamado de interrupção de Hardware. Logicamente que cada dispositivo tem um endereço (chamado IRQ) que identifica se esta interrupção está vindo do teclado, da placa de rede, do mouse ou da placa de som, por exemplo. O tempo entre você pressionar uma tecla e o computador responder por isto, ou seja, atender a esta interrupção, é o que chamamos de latência.

Latência
Latência, como dito anteriormente, é o tempo que o computador demora para responder quando, por exemplo, uma tecla é pressionada no teclado. Nem todos computadores querem trabalhar com latência baixa. Imagine um servidor da Internet. Normalmente estes computadores não possui nem teclado nem mouse. Usuários não operam estas máquinas e, logicamente, elas não trabalham com preempção forçada. Isto significa que ninguém "fura fila" de execução. Seria o mesmo que dizer: Computador, faça isto. E ele responder: Agora não posso, estou gravando um arquivo. Para um servidor, é mais importante gravar o arquivo. A Latência, neste caso, é bastante alta.
Computadores Desktop trabalham com preempção voluntária do Kernel. Isto significa que, quando há uma interrupção dos usuário, o programa voluntariamente cede seu espaço no processador para que esta seja executada. Talvez ele termine de fazer o que estava fazendo se julgar que isto seja importante. A Latência, neste caso, é menor.
Aplicações que exigem que o tempo de resposta do processador sejam menor necessitam de uma alteração no Kernel do mesmo. Sistemas operacionais como o MacOS e o Windows não permitem alterações em seu Kernel. O Linux permite. Então temos um Kernel preemptível de baixa latência que, como seu próprio nome diz, ele possui uma latência ainda menor devido ao mesmo permitir preempção.
Foi com a intenção de diminuir este tempo de latência que um Húngaro chamado Ingo Molnar, desenvolvedor da Red Hat americana, iniciou o projeto de um Kernel com preempção completa, também chamado de Kernel RT.

Então este é o Kernel RT?
Sim, o Kernel RT foi modificado para permitir preempção completa e acelerar assim o tempo de resposta do processador as interrupções. Você não corre o risco de ouvir do computador "Espera um pouco" quando pedir ao mesmo para executar uma tarefa. Só para exemplificar, um dos parâmetros que o escalonador utiliza para a preempção é o System Timer Resolution. Existe um intervalo de tempo (time slice) para cada tarefa que o processador recebe para fazer. Cada sistema utiliza uns milésimos de segundos para gerenciar estes intervalos de tempo. Assim um sistema gasta 1/n segundos por intervalo; algo como 1/33 para o W95, 1/100 para a série o Windows NT, 1/250 para o Linux padrão e 1/1000 para o Linux com Kernel RT.

E aonde entra a parte Multimídia?
O tempo de resposta do processador afeta especialmente as aplicações gráficas e multimídias, não apenas em velocidade, mas também em qualidade. Com a utilização de um Kernel RT são menores as chances de um programa multipista não conseguir executar suas 18 faixas "simultaneamente". Com o tempo de 0,001 segundos de preempção entre uma faixa e outra fará o resultado final, com certeza, soar como um único som. O mesmo se aplicaria para gravações. É normal em um ambiente de produção musical gravar uma faixa enquanto se ouve outras 5 ou 6.
Devido a utilização mais pesada do processador, o Kernel RT só funciona com processadores mais recentes, não funcionando, por exemplo, com Pentium II.

É devido esta diferença de abordagem que algumas distribuições de Multimídia que possuem a finalidade de trabalhar com produção sonora optam por um Kernel RT e outras, que planejam executar em qualquer tipo de computador, não possuem tal característica.

Fontes:

quarta-feira, 13 de agosto de 2008

Distribuições de Linux para áudio

Para os que trabalham com produção musical no computador e procuram uma alternativa no mundo Linux, segue uma lista de distribuições com este propósito:

- Ubuntu Studio
Baseado na distribuição Ubuntu, o Ubuntu Studio acompanha as versões desta distribuição e possui pacotes adicionais em um repositório próprio para Música, Vídeo e Imagem. Possui Kernel RT e as opções de instalação para seus pacotes adicionais.
Site oficial: http://ubuntustudio.org/


- 64 Studio
Baseado na distribuição Debian, o 64 Studio é uma boa opção para máquinas com processador 64 bits. A distribuição também possui i386 para computadores 32 bits e também conta com Kernel RT. Sua versão 2.0 possui a vantagem adicional de ter sido lançada também para Live CD e em DVD para instalação.
Site oficial: http://64studio.com/


- Musix
Sim, o site oficial está correto e esta é uma distribuição Argentina. Possui a colaboração de brasileiros e é, sem dúvidas, uma boa alternativa para Multimídia. Possui kernel RT, um pacote variado de aplicações e, o que é melhor, vários exemplos. Esta é a razão de eu julgar o Musix é a melhor distribuição para iniciantes: Exemplos prontos para vários softwares. Baseada no Knopix esta distro está disponível em duas versões: Live CD e Live DVD.
Site oficial: http://musix.org.ar/en/index.html


- Jack Lab Audio Distribution
Também conhecido por sua sigla: JAD, esta distribuição é baseada no OpenSUSE. Possuindo opções de Live DVD e também de um DVD para instalação, o JAD também possui Kernel RT além de WineASIO para suporte completo para VST.
Site oficial: http://jacklab.net


- Planet CCRMA
Desenvolvido pela Universidade de Stanford, o Planet CCRMA (lê-se "Karma") não é propriamente uma distribuição mas um conjunto de pacotes RPM para ser utilizados em distribuições baseadas no Red Hat como o Fedora ou o CentOS. Entre estes pacotes há um Kernel de baixa latência, drivers para dispositivos de áudio e várias aplicações para esta finalidade.
Site oficial: http://ccrma.stanford.edu/planetccrma/software/


- Dyne:bolic
Produzido pela Dyne (http://dyne.org/), uma fundação de Software Livre para as Artes, o dyne:bolic é baseado em Knopix. É distribuído em Live CD e foi otimizado para trabalhar com máquinas de poucos recursos. Seus requisitos mínimos de Hardware: Pentium 1 com 64MB de RAM. Logicamente, esta estação deve possuir Leitor de CD.
Site Oficial: http://www.dynebolic.org/


- Pure:dyne
Entre as distribuições de propósitos específicos esta tem uma peculiaridade: o Pure:Dyne nasceu como uma versão do dyne:bolic com o propósito de trabalhar programação musical. Segundo a distribuição, o mesmo encontra-se pronto para trabalhar com softwares como Pure Data, Supercollider, Icecast, Csound e Fluxus, por exemplo. Distribuído em Live CD.
Site oficial: http://code.goto10.org/projects/puredyne/


- ArtistX
Distribuído em Live DVD o ArtistX é talvez a distribuição mais bonita para Áudio. Baseado no Debian possui um Menu KDE modificado para sua finalidade e muitas, mas muitas aplicações. Infelizmente não possui Kernel Real Time.
Site oficial: http://www.artistx.org/site2/


Distribuições descontinuadas

-AGNULA
AGNULA é um projeto que foi financiado pela Comissão Européia para o desenvolvimento de duas distribuições para áudio em Linux. Este projeto criou duas distribuições Linux para Áudio: uma baseada em Debian (DeMuDi - sigla para Debian Music Distribution) e outra baseada em Red-Hat (RehMuDi - sigla para Red-Hat Music Distribution). Até onde encontrei este projeto não continuou voluntariamente visto que o site oficial (http://www.agnula.info) e o site da comunidade (http://www.agnula.org) estão fora do ar. Segundo o site DistroWatch o projeto teve início em 01/04/2002 (Sim, primeiro de Abril!) e seria mantido por 2 anos.

Fonte: Estúdio Livre

- DeMuDi
DeMiDi é a sigla de Debian Multimedia Distribution. Esta distribuição não existe mais e foi descontinuada. O termo que se utiliza para isto é uma distro defunct (defunto). Foi desenvolvida por uma fundação Européia chamada AGNULA. Por esta razão é também chamado de A/DeMuDi. O site oficial não está no ar, mas consta como http://demudi.agnula.info/. Segundo o site DistroWatch o último release do DeMuDi foi liberado em Outubro de 2005.

- ReHMuDi
A distribuição Red Hat da AGNULA. Também um projeto descontinuado (defunct). Sobre esta distribuição não encontrei nenhum dado adicional.

- AudioSlack
Inspirado no Planet CCRMA, o Audioslack era um conjunto de pacotes de áudio para a distribuição Slackware. Também é um projeto descontinuado. Procurando mais informações encontrei o email do Luke Yelavich, team leader, encerrando o projeto. O site oficial consta como http://www.audioslack.com, porém o mesmo encontra-se desativado.

Fonte das Imagens: http://www.distrowatch.com