sexta-feira, 27 de janeiro de 2012

Linux 3.3



... mais um kernel?

Uma vez pronto o kernel 3.2 (ou pelo menos a versão estável), Torvalds anunciou a abertura do kernel 3.3 RC1. Começa, então, um novo ciclo de desenvolvimento. E nada como ter a coragem de "mergulhar" em 15.000.000 de linhas de código (marca que foi atingida pelo kernel 3.0).

O que esperar do novo kenel? Não muito! Mas, segundo o próprio Torvalds:

"Linux kernel 3.3 RC1 is composed of 20% arch updates (arm, x86, power, mips),  60% drivers (wireless networking, media, dri, staging, sound, removal of 'struct sysdev'), and 20% filesystems improvements, networking, perf, etc."

Os componentes de um kernel Linux são distribuídos conforme o gráfico da figura 1 e podemos notar que mais de 50% do kernel é dedicado aos drivers e quase 20% é código específico de arquiteturas.


Fig. 1 Representação gráfica do kernel Linux [1]


Vamos lá, o kernel 3.0 já tem um nível de complexidade muito grande e pode-se dizer que mais complexidade deve ser considerada como um ponto negativo. Desenvolver e manter um kernel de SO muito complexo não é uma tarefe fácil. Ainda mais coordenar um exército de programadores espalhados pelo mundo todo.

Uma das cláusulas pétreas do desenvolvimento de kernels é o mandamento: "não gerarás problemas que não existiam nos kernels anteriores". Sabemos que alguns SOs (não vou dizer quais) não seguem este mandamento, mas Linux e BSD são muito criteriosos com respeito a isto.

O kernel 3.3 não deve alterar este panorama mas deve, principalmente, incluir a tecnologia LPAE (Large Physical Address Extension) para a arquitetura ARM (32 bits v7) para o acesso a mais de 4 GB de memória. Além disso tem pela frente, uma boa briga! Manter a arquitetura ARM aberta, a despeito de todas as tentativas da Micro$oft tornar o processador bloqueado dependente para rodar apenas o Windows 8.0 em certos tablets.

Além disso, a fatia do bolo deve aumentar (pouco, mas deve) para suprir certos drivers específicos para Android em tabletes e celulares. Na área dos drivers já se fala em melhorar o suporte a HDMI nos drivers para processadores gráficos AMD e NVIDIA; e outros drivers gráficos.

Outras melhorias deve se dar no nível de sistemas de arquivos, com melhoras no ext4, RAID e NFS. Ainda no segmento "net" do kernel, muita coisa deve melhorar, levando-se em conta, também, que 2012 está sendo visto como o ano do IPv6.

Quando devemos ter o 3.3? Março ou abril... aguardem!


Referências:

[1] Fonte da imagem: http://www.h-online.com/open/features/Kernel-Log-15-000-000-lines-of-code-3-0-promoted-to-long-term-kernel-1408062.html?view=zoom;zoom=1


Outras referências:

Download Linux Kernel 3.3 RC1 Now
http://www.linuxtoday.com/infrastructure/2012012000839NWKNRL (20/01/2012).

What's Coming For The Linux 3.3 Kernel DRM Pull
http://www.phoronix.com/scan.php?page=news_item&px=MTAzNzc
(22/01/2012)

quarta-feira, 18 de janeiro de 2012

Em 2012

muitas novidades neste início... novidades no final?

Para um fatídico ano de 2012 que, pelas profecias não deve terminar bem, pelo menos começa bem. Na área dos sistemas operacionais temos novo kernel do Linux e do FreeBSD, novos lançamentos das distros — Mint 12, Fedora 16, Ubuntu 12 e FreeBSD 9, para citar alguns. Eu diria que é uma porrada na Microsoft que anda patinando e só deve lançar o "Metro" (horrível, por sinal) no final do ano... tsc, tsc, tsc...

Das novidades em SO às novidades nas interfaces gráficas (GUI) só nos resta lamentar a guinada do GNOME e o aparecimento do UNITY — não colou. Para quem estava acostumado ao gnome tradicional ou um ambiente mais "clean", este novo paradigma é bem contraproducente. Ok, estou usando sim! Mas não posso dizer que a usabilidade, acessibilidade e ergonomia do Gnome 3 e do Unity sejam boas em um desktop com tela de 24 polegadas. Afinal, nem mesmo o Torvalds gostou. Quer ver? Então digita: "linus torvalds" "gnome 3" no Google (assim mesmo com as aspas) e verás!

Mas todos os Linux novos virão ou com o Gnome 3 ou com o Unity... não teremos outra opção? Então "morda a fronha", relaxe e goze! Mas, se quiser, instale o XFCE ou o LDXE. É de se lamentar pelo Gnome que nos acostumamos usar. No entanto o Mint 12 vem com o Gnome 2 feelings (http://www.linuxjournal.com/content/linux-mint-12-offers-traditional-gnome-feel) e o FreeBSD ainda vem com o Gnome 2.

Choramingos à parte, porque não experimentar outros ou configurar o Gnome 3 como o Gnome 2. Existem muitas receitas para isso, inclusive o Gnome-fallback, e não é difícil achar tudo isso no Google. Veja meu post sobre o assunto, siga as instruções e viva feliz.

Mas prevejo muitas novidades boas a caminho, tais como sistemas de arquivos mais seguros com maior disseminação do Zettabyte File Sistem ou ZFS e neste assunto, o Linux deve contornar o problema da incompatibilidade de licenças entre GPL e CDDL que rege o ZFS.  Outra novidade é  a implementação do NFS 4 que está mais light para a rede e melhor para se fazer backup. Além disso, antes que o mundo acabe, devemos ter a implantação definitiva do IPv6 — Linux e BSDs estão prontos, mas cadê?

No quesito "segurança" já temos o novo OpenSSH (em sua versão High Performance) e o novo maduro OpenSSL 1.0.0 (*BSD) e GnuTLS 3.0.11 (GPL). Também no campo dos compiladores temos novidades. Uma delas é a maior compatibilidade para a integração do llvm com o gcc (clang). Como diria o Meme: "...agora essa p*rr* ficou séria!"

Com tudo isso, teremos um ano bem agitado no mundo da TI e dos SOs e, pelo visto, terei muito assunto para este blog!

Que venha 2012... sobreviveremos a mais este!

segunda-feira, 16 de janeiro de 2012


O novo FreeBSD


... ou quando segurança e liberdade andam de mão dadas

Realmente, se tua palavra de ordem for "segurança" o SO de escolha tem que ser um BSD. Net, Open ou Free? Depende da tua paranóia! O FreeBSD sempre foi a minha escolha para servidores, plataforma de testes, administração de rede ou computação de alto desempenho. E nunca me decepcionou.

Ok, existem reclamações sobre demora de instalação, configuração (muitas vezes manual e na base do "vi") mas o resultado supera estes problemas. Afinal, o FreeBSD é um sistema amigável... o único problema é que ele é quem escolhe os amigos.

Mas chega de mimimi... afinal, a instalação do 9.0 foi um tiro: 15 minutos! A instalação foi em uma máquina virtual (VirtualBox) com 1MB de RAM e 15 GB de disco, rodando sobre Gnome 3/Ubuntu 11.10 em um HP Pavilion.

Contando o boot inicial de 1 minuto e 22 segundos, a instalação de base, kernel, doc, games, ports e src levou exatos 9 minutos. O restante já pode ser considerado configuração inicial (rede, nntp, sshd e serviços) depois disto aparece um display oferecendo a possibilidade de uma configuração extra, manual e mais fina. Mas isto pode ser feito depois e aos poucos, não é?

A interface de instalação é tipo ncurses mas bem fácil e intuitiva. Sem muitas complicações para o newbie. E aí vem o primeiro boot + 3 "enters" (sabem como é né?)... POW! 42 segundos... fiquei ali olhando achando que não era o FreeBSD que eu conhecia.

A primeira instalação feita foi o vim (o vi improved) que levou quase 45 minutos via rede (pkg_add -rvv vim) porque tinha instalar mais libs de curses e se pôs a instalar ruby, python, perl, x11 e suas dependências... assustador! Mas o procedimento foi tranquilo. Apesar de ter baixado o DVD completo, achei melhor instalar via rede para testar o desempenho em uma rede doméstica. Aí dá para entender porque a instalação do sistema é rápida. Mas melhorou muito em relação às versões anteriores.

Em seguida, o bash porque não vem instalado. O default é o sh, nu e cru. A instalação foi em segundos. Mas espere até ter que gerar o INDEX-9 do ports... meia hora! Claro que ainda tem muito o que fazer, principalmente se pretendes usá-lo como desktop.

Pessoalmente recomendo o FreeBSD como desktop para quem o usa para computação científica, adminstração de sistemas, redes etc. Caso contrário tem que ser muito nerd mesmo para usá-lo como SO do dia-a-dia. Se este for teu caso, e quiseres deixar tudo "redondinho" prepare-se para 2 ou 3 dias de compilação do Xorg, gnome ou KDE e todas as "perfumarias" do desktop gráfico... boa sorte!

A sério, sério mesmo, o FreeBSD faz juz ao seu padrinho Dennis Ritchie... um "monstro" da computação! Por falar nele, o SO vem com o gcc 4.2.1 e muitas outras novidades. Yesss... tem a máquina virtual de baixo nível para nós que gostamos de escovar bits. O LLVM é uma infraestrutura de compilador com um conceito de complilação projetado para certas otimizações efetivas por meio de um conjunto de instruções virtuais.

Ainda, outras novidades estão presentes nesta versão do FreeBSD. Uma das melhores é o ssh com High Performance (OpenSSH 5.8 hpn13v11) e o NFS versão 4 (man 4 nfsv4). Esta versão do NFS usa um único RPC que concatena as operações do FS, equivalentes aos vários RPCs da versão anterior. Além disso a manutenção dos arquivos de backup se dá de maneira diferente (veja a página do manual).

Por fim, o ZFS versão 5 e aplicativos como zetaback... são nossa alegria e tranquilidade. Um sistema seguro como o FreeBSD tinha que ter um sistema de segurança de arquivos assim. Afinal, como servidor o FreeBSD é imbatível. A instalação não é complicada e é de fácil operação e manutenção.

Quer mais? Vai lá instale e descubra as novidades. Mas não espere a amabilidade de um Linux. Pelo contrário, pense forte e prepare-se para uma "atitude", o Free é mesmo pra macho! Mas é "bão" o danado!

sexta-feira, 13 de janeiro de 2012

FreeBSD 9.0

O novo "Beastie" está na rua...

A equipe do FreeBSD anunciou, nesta semana, a versão 9.0 do FreeBSD. Dedicado a Dennis M. Ritchie — um dos "pais" do sistema UNIX e que faleceu recentemente — o FreeBSD apresenta uma nova versão que vem cheia de novidades. Dentre elas, por exemplo:

  1. uma versão mais rápida do sistema de arquivos com suporte a journaling
  2. uma nova versão do ZFS (ver meu post sobre ZFS)
  3. NFS versão 4
  4. SSH de alta performance: HPN-SSH
  5. Um compilador com otimização interprocedural, o LLVM compiler (veja llvm.org).

Além disso, o novo sistema operacional vem com suporte a arquiteturas amd64, i386, ia64, powerpc, powerpc64, e sparc64.

Muita novidade a ser testada e apresentada. Já estou "baixando" a imagem ISO e logo, logo volto com os "comments" aqui no blog.

Por enquanto aguardem ou vejam por si mesmos:

http://www.freebsd.org

domingo, 8 de janeiro de 2012



0-1 ou On/OFF

Desde que comecei esta "brincadeira" de escrever sobre sistemas operacionais — bem, uma brincadeira que está ficando cada vez mais séria — tenho recebido emails, mensagens da rede social me estimulando e perguntando algumas particularidades dos sistemas. Para mim, tem sido um desafio de atualização e mesmo de aprendizado pois os novos processadores estão há anos-luz daquele velho código do 8086 que aprendi na escola de engenharia.

O assunto, desta vez, é o on/off, para responder à uma pergunta que os alunos de sistemas fazem frequentemente: como o sistema operacional é carregado na memória do computador? Em que exato momento isto acontece e o que acontece em seguida? Este assunto também é uma continuidade do último artigo (Anatomia de um kernell).



Bem, primeiro, é preciso explicar que quando a corrente elétrica começa a percorrer os circuitos da placa-mãe e chega ao processador este se encontra no que chamamos de "real mode" (em contraposição ao "protected mode"). Neste estado, o processador tem acesso a 1MB de memória ROM e começa executando o código que se encontra no endereço final deste segmento ou 0xFFF0 (absoluto CS:IP F000:FFF0). Este código é o que chamamos de Sistema Básico de Entrada e Saída ou Basic Input Output System (BIOS).

Usando uma descrição simplista e resumida, este programa (BIOS) executa, então o self-test ou Power-On Self Test (POST) que verifica a integridade física do sistema e dos periféricos. Em seguida, o programa procura pela palavra 0xAA55 (assinatura de boot) no primeiro setor de um periférico do tipo disco (Floppy, HD, CD/DVD etc.) ou cartão de memória (pen drive, cartão SD etc.).

Clicando nesta imagens podes ver um exemplo do POST


Uma vez encontrado o setor de boot, normalmente chamado de Master Boot Record (MBR) o sistema carrega o código para o endereço 0x7C00 do segmento inicial da memória (CS:IP 0000:7C00) e passa a executar as instruções a partir daí.

Bem, a partir daí o kernel do sistema operacional é carregado na memória. No caso do Linux, o código binário do kernel é carregado em 0x07C0 (em modo real 0000:7C00 = 0x07C0 shifted left once + 0). O código Assembly do Loader pode ser encontrado em /usr/src/linux/arch/x86/boot/header.S (linux=linux-source-X.X.X para cada versão de kernel). O código do header.S substitui os antigos códigos do kernel bootsect.S/setup.S.

Master Boot Record [1]


O passo seguinte é a descompressão do kernel (zImage ou vmlinuz). O arquivo zImage (vmlinuz) não é apenas uma imagem comprimida mas tem o próprio gzip no início do arquivo (não se pode descomprimir o arquivo vmlinuz). Durante este processo, qualquer erro trava tudo pois o sistema não está operativo e a BIOS não tem o controle. Finalmente, a função start_kernel() que é descrita no arquivo /usr/src/linux/init/main.c entra em ação e nunca retorna. A partir deste ponto, todo o SO codificado em C entra em operação.

Hello World!

Referências:

[1] Fonte da imagem: Voronin, A. Data storage on hard discs (Part 1) May 22, 2001, http://www.engineersgarage.com/mygarage/how-computer-boots-up

terça-feira, 3 de janeiro de 2012



Anatomia de um kernel

… uma visão global.


O núcleo (kernel) de um sistema operacional é o responsável pela camada que faz a interface entre o hardware e os serviços principais do SO. No caso do Linux, ele tem uma estrutura derivada do MINIX do Tannenbaum [1], desenvolvido pelo Linus Torvalds ainda quando estudante. Torvalds tomou por base o microkernel MINIX e criou um kernel monolítico com cinco subsistemas [2]:

1. O Process scheduler (SCHED) que é responsável pelo controle de acesso dos processos à CPU. Ele cria as facilidades de interface entre hardware – CPU – processos. É o SCHED que controla os semáforos do sistema operacional Linux (veja o artigo sobre semáforos).

2. O Memory Manager (MM) que controla o uso da memória principal pelos processos de forma segura e eficiente. O MM suporta memórias virtuais que permite ao Linux rodar processos que usem mais memória do que disponível no sistema e, ainda, controla a paginação de segmentos de memória na área de SWAP.

3. O Virtual File System (VFS) que reune a diversidade de hardware em uma interface comum, criando uma abstração dos detalhes de cada tipo de dispositivo. O VFS também permite a utilização concomitante e simultânea de vários formatos de sistemas de arquivos (Mac, DOS, BSD etc.).

4. O Network Interface (NET) que disponibiliza e controla o acesso a dispositivos de rede, tais como placas de rede, MODEM, Bluetooth etc.

5. O Inter-Process Communication (IPC) é o subsistema que controla a interação entre os processos e prove a comunicação entre eles. É o IPC que é responsável pela preemptividade (ver meu artigo sobre preemptividade e multitarefa).

Figura 1 - Esquema de relações entre os subsistemas do kernel do Linux


Na figura 1 se observa que o subsistema principal ou centro do núcleo é o SCHED do qual dependem todos os outros processos pois ele é quem controla o tempo de execução de cada processo. O IPC depende do MM para alocar e compartilhar a memória pois isto permite que dois processos acessem a mesma área de memória comum. A relação entre o SCHED e o MM está ligada ao gerenciamento do mapa de memória do hardware para controle de acesso de cada processo em execução. Isto permite que os segmentos de memória sejam "paginados" e reconstituídos dependendo do processo em execução. O VFS usa o NET para suportar o dispositivo de ramdisk e o sistema de arquivo remoto (NFS) [3]

Além do subsistema MM depender do SCHED ele usa o subsistema VFS para suporte ao swap principalmente quando um processo precisa acessar um segmento que se encontra "paginado" (swapped).

A vantagem de um kernel monolítico está na performance. Embora um microkernel seja mais flexível, um kernel monolítico permite que o núcleo e todos os serviços rodem como um único processo, num espaço de endereçamento único possibilitando uma alta performance (serviços em um microkernel rodam e espaços de endereçamento separados).

Existem vantagens e desvantagens na comparação de um microkernel e um kernel monolítico. Por exemplo, em um microkernel a manutenção é mais simples porque qualquer modificação é feita em cada tarefa (task) do subsistema. Por outro lado, é necessário 2 vezes a chamada de TASK_SWITCH (uma para entrar no âmbito da tarefa e outro para retornar da função).

Os microkernels são bons exemplos didáticos de sistemas (e.g. Minix) mas não são otimizados. O kernel do Linux pode usar "threads" do kernel para implementar uma estrutura do tipo microkernel como, por exemplo, o daemon kswapd (kernel swap daemon) que é usado para recuperar as páginas de memória na área de swap e não tem problemas de performance pois a operação é lenta por natureza.


Referências:

[1] Tanenbaum, A. S. Modern Operating Systems, Prentice Hall, 1992

[2] Bovet, D. P. e Cesati, M. Understanding the Linux Kernel, O'Reilly, 2000

[3] Rubini, A. Linux Device Drivers, O'Reilly, 1998

segunda-feira, 2 de janeiro de 2012









 Windows 7


...Sete? Que sete? Sete o quê?


Quanta honra para ser o primeiro post de 2012. Mas é para mostrar que mentalidade tem que ser aberta... ABERTA, eu disse. Não sou fã do Windows da Microsoft, isto todo mundo sabe, mas a filosofia de portabilidade me obriga a conhecê-lo como SO se bem que, convenhamos... o sistema operacional do Windows 7 é o DOS ainda. Vou fazer alguns comentários sobre o SO para cumprir a missão deste blog (viu guri? Não sou tão xiita assim!).

Claro que a instalação foi feita em uma máquina virtual Oracle VirtualBox, com 1,5 GB de memória, e uma configuração bem comum e econômica. Diga-se de passagem que o SO me surpreendeu, roda bem, sem nenhuma lentidão e tem uma interface mais limpa.

O processo de instalação em si, foi tranquilo, sem sustos e apenas a mensagem: "O computador será iniciado várias vezes durante a instalação" que não surpreendeu... afinal, o kernel  precisa ser recarregado depois das primeiras alterações de configuração (heranças do microkernel NT?). Alguns descuidos são perceptíveis. Primeiro, é horrorosa a primeira tela de "loading files... ". Acho que nem o Hurd consegue ser pior! Parecia um Atari antigão! Segundo, o gerundismo que impera e que "vai poder estar imperando" enquanto o sistema "vai poder estar sendo instalado" e que causa a literal verborragia informática típica do século (já) passado. Porque dizer "a instalação está sendo inicializada..." quando se pode dizer "inciando a instalação"? Pois é ... verborragia!

Depois do clássico "O Windows precisa ser reiniciado para continuar" vem mais letras sem antialiasing (descuido estético) informando: "Inciando os serviços". Depois vem o "concluindo a instalação... " e os três pontinhos piscando me lembrou o tempo dos terminais ASCII. Eu usava muito este recurso em meus programas em Assembly! Mas depois de novo reboot, apareceu o "Iniciando o Windows..." halas... sem aquele irritante "inicializando" que era de matar.

O que mais decepciona? É que o Windows 7 é "programa de índio", ou seja, vem pelado! Não tem editor de texto, nem de imagem e nem de apresentação. Não tem planilha nem compilador... C, então, nem pensar. Primeira coisa que um usuário Unix faz? Executar comando: cmd.exe e enter! O que se lê? Microsoft Windows [versão 6.1.7601]... Windows 7 porque? WTF!

Como pretendia explorar mais o SO, escolhi instalar um "commander" para verificar arquivos e diretórios. Instalei o FreeCommander e a grande decepção me desestimulou... lá está o velho DOS... com seus .bat e .sys. Talvez o mais longe do DOS que o Windows chegou foi na versão de 64 bits. Mas digo isso em relação àquele velho MS-DOS, porque o Windows continua sendo um sistema operado a disco, ou seja, um DOS. Uma olhadinha no velho command.com (16 bits), agora com o nome de cmd.exe (32 bits), e encontramos as interrupções 21H... no dump do arquivo:

pop     DS
mov     DX,000E
mov     AH,09
INT     21

Alguém se lembra disso? "Encontre o segmento de dados, carregue o endereço em DX, chame a interrupção 21H do DOS com o código 09." Não é preciso dizer mais nada... Nem tem sentido avaliar o SO chamado DOS (6.1 ???) sem novidades. Em suma, não mudou nada! O usuário, para variar, sempre pagando mais por nada menos que enfeites; ou pagando mais por maquilagem!