Pesquisar no blog

domingo, 20 de dezembro de 2009

Anti-Vírus


          Introdução

São programas de computador concebidos para prevenir, detectar e eliminar vírus de computador. Existe uma grande variedade de produtos com esse intuito no mercado, a diferença entre eles está nos métodos de detecção, no preço e nas funcionalidades.
Os antivírus não são necessariamente produtos pagos, e também não existe relação entre custo e eficiência, exemplo disso são vários antivírus como o Active Virus Shield e o Avast, muito usado atualmente e que possui versão gratuita. É importante ressaltar que a maioria dos fabricantes (mesmo aqueles onde os softwares são pagos) distribuem vacinas e atualizações gratuitas, assim como "pequenos antivírus" para eliminar vírus específicos, quando surge determinados vírus com alto grau de propagação e perigosos.
O segredo do antivírus é mantê-lo atualizado, e essa é uma tarefa que a maioria deles já faz automaticamente, bastando estar conectado à internet para ser baixado do site do fabricante a atualização e estar configurado para isso.
Vale salientar que nenhum antivírus é totalmente seguro o tempo todo, e existe a necessidade de sua manutenção (atualização) e, antes de tudo, fazer sempre uso do backup para proteger-se realmente contra perda de dados importantes.

Histórico

Em 1982, Peter Norton, empresário de tecnologias de informação, apagou acidentalmente um arquivo, daí então desenvolveu o Norton Utilities para restaurá-los. A partir disso, resolveu criar a Symantec, dando início a criação e comercialização de softwares de seguranças no mercado, e livros sobre o assunto, tornando-se um dos primeiros desenvolvedores de sistemas de segurança.
Em 1988, com a primeira contaminação de vírus de computador, John McAfee, programador da Lockheed Air Corporation, desenvolveu o VirusScan, primeira vacina até então conhecida.

Métodos de Identificação do Anti-Vírus
  • Escaneamento de vírus conhecidos - Quando um novo vírus é descoberto seu código é desmontado e separado num grupo de caracteres (string) que não é encontrado em outros softwares não maliciosos. Tal string passa a identificar esse vírus, e o antivírus a utiliza para ler cada arquivo do sistema (da mesma forma que o sistema operacional), de forma que quando encontrá-la em algum arquivo, emite uma mensagem ao usuário ou apaga o arquivo automaticamente.
  • Sensoriamento heurístico - O segundo passo é a análise do código de cada programa em execução quando usuário solicita um escaneamento. Cada programa é varrido em busca de instruções que não são executadas por programas usuais, como a modificação de arquivos executáveis. O método é complexo e sujeito à erros, pois algumas vezes um executável precisa gravar sobre ele mesmo, ou sobre outro arquivo, dentro de um processo de reconfiguração, ou atualização, por exemplo. Portanto, nem sempre o aviso de detecção é confiável.
  • Busca Algorítmica – Utilizam algoritmos para buscar as strings (cadeias de texto) que detectariam um vírus de computador.
  • Checagem de Integridade - Checagem de integridade cria um banco de dados, com o registro dos dígitos verificadores de cada arquivo existente no disco, para comparações posteriores. Quando for novamente feita esta checagem, o banco-de-dados é usado para certificar que nenhuma alteração foi encontrada nesses dígitos verificadores. Caso seja encontrada alguma modificação nesses dígitos, é dado o alerta de uma possível existência de arquivo contaminado.

Programas Antivírus

Segue-se uma lista de programas antivírus disponíveis:
  • Dirigido ao mercado empresarial
    • GFi WebMonitor e GFi MailSecurity, da empresa GFI Software
    • Sybari Software
    • Empresa Sophos
    • Empresa Trend Micro (várias soluções de segurança)
    • Uniwares Leon Enterprise Anti-Spam Server (com antivírus integrado)
    • Vexira da empresa Central Command
  • Dirigido ao mercado em geral
    • Matheus Antivirus, da empresa Matheus Multimarcas
    • BitDefender, da empresa Softwin
    • Bullguard Antivirus, da empresa BullGuard
    • Command Antivirus, da empresa Authentium
    • Dr.Web da empresa Doctor Web, Ltd.
    • eTrust EZ Antivirus, da empresa Computer Associates
    • Kaspersky Anti-Virus, da empresa Kaspersky Lab
    • McAfee VirusScan, da empresa McAfee
    • NOD32, da empresa Eset
    • Norman
    • Norton Antivírus, da empresa Symantec
    • F-Prot, da empresa FRISK Software International
    • F-Secure Anti-Virus, da empresa F-Secure
    • Panda AntiVírus, da Panda Software
    • Pc-cillin Internet Security, da Trend Micro
    • Pocket Antivirus, da JSJ Software
    • Rising AntiVirus
    • Virex (Mac OS), da empresa McAfee
    • Windows Live OneCare, da empresa Microsoft
    • ZoneAlarm AntiVirus, da empresa Zone Labs
  • Gratuitos
    • BankerFix - Removedor Genérico de Bankers e malwares brasileiros
    • Avira AntiVir Personal - Free Antivirus, da empresa Avira
    • Avast!, da empresa Alwil
    • AVG Anti-vírus, da empresa AVG Technologies
    • BitDefender edição Linux e Windows
    • ClamWin
    • Comodo
  • On-line
    • Softwin Bitdefender Online
    • Kaspersky Online Scan
    • Panda Activescan Online
    • Symantec Online Scan
    • HouseCall Online Scanner, da empresa Trend Micro
    • Mcafee Freescan
    • Avast Online Scanner
    • F-Secure Online Scan
    • Etrust Online Scan, Computer Associates
    • Virustotal
    • Fortinet
  • Sob licença GPL
    • ClamAV - Tomasz Kojm
    • ClamWin - alch
    • Winpooch - (combinado com o ClamWin)
    • ClamTk
    • ClamXav

    quarta-feira, 11 de novembro de 2009

    Vírus

    Introdução
    Vírus de computador é um programa malicioso desenvolvido por programadores que, tal como um vírus biológico, infecta o sistema, faz cópias de si mesmo e tenta se espalhar para outros computadores, utilizando-se de diversos meios.
    A maioria das contaminações ocorre pela ação do usuário executando o arquivo infectado recebido como, por exemplo, em um anexo de e-mail. A contaminação também pode ocorrer por meio de arquivos infectados em mídias de armazenamento. A segunda causa de contaminação é por Sistema Operacional desatualizado, sem correções de segurança, que poderiam corrigir vulnerabilidades conhecidas dos sistemas operacionais ou aplicativos, que poderiam causar o recebimento e execução do vírus inadvertidamente. Ainda existem alguns tipos de vírus que permanecem ocultos em determinadas horas, entrando em execução em horas específicas.
    Abaixo segue gráfico com evolução do nº. de vírus ao longo do ano.
    Histórico
    Em 1983, Len Eidelmen demonstrou em um seminário sobre segurança computacional, um programa auto-replicante em um sistema VAX11/750. Este conseguia instalar-se em vários locais do sistema. Um ano depois, na 7th Annual Information Security Conference, o termo vírus de computador foi definido como um programa que infecta outros programas, modificando-os para que seja possível instalar cópias de si mesmo. O primeiro vírus para PC nasceu em 1986 e chamava-se Brain, era da classe dos Vírus de Boot, ou seja, danificava o sector de inicialização do disco rígido. A sua forma de propagação era através de um disquete contaminado.
    Em 1988, surge o primeiro Antivírus, por Denny Ramdhani, na Indonésia. O primeiro Antivírus a imunizar sistema contra o vírus Brain, onde ele extraía as entradas do vírus do computador em seguida imunizava o sistema contra outros ataques da mesma praga. Um ano depois, a IBM fornece o primeiro antivírus comercial. No início de 1989, apenas 9% das empresas pesquisadas tinha um vírus. No final do ano, esse número veio para 63%.
    Em 1992, surge o primeiro vírus a aparecer na mídia, o Michelangelo. Ele é programado para sobre-gravar partes das unidades de disco rígido criando pastas e arquivos com conteúdos falsos em 6 de março, dia do nascimento do artista renascentista. As vendas de software antivírus subiram rapidamente. Em 1994, pela primeira vez um autor de vírus é condenado à prisão, 18 meses.
    Em 1999, o vírus Chernobyl, apagava o acesso à unidade de disco e não deixava o usuário ter acesso ao sistema. Seu aparecimento deu-se em abril e sua contaminação foi bastante difundida. Sendo que a China sofreu o maior prejuízo, de mais de US$ 291 milhões. Turquia e Coréia do Sul foram também duramente atingidas. Em 2000, foi a vez do vírus LoveLetter que causou danos estimados em US$ 8,7 bilhões na Europa e Estados Unidos infectando cerca de cerca de 2,5 milhões a 3 milhões de máquinas.Em 2001, a moda são os vírus do tipo Worm que se proliferam por páginas da Internet e principalmente e-mail.
    A partir de 2006, houve muitas ocorrências de vírus no Orkut que é capaz de enviar recados automaticamente para todos os contatos da vítima na rede social, além de roubar senhas e contas bancárias de um micro infectado através da captura de teclas e cliques. Apesar de que aqueles que receberem o recado precisarem clicar num link para se infectar, a relação de confiança existente entre os amigos aumenta muito a possibilidade de o usuário clicar sem desconfiar de que o link leva para um worm. Ao clicar no link, um arquivo bem pequeno é baixado para o computador do usuário. Ele se encarrega de baixar e instalar o restante das partes da praga, que enviará a mensagem para todos os contatos do Orkut.
    Classificação
    Vírus de Boot
    Um dos primeiros tipos de vírus conhecido, o vírus de boot infecta a partição de inicialização do sistema operacional. Assim, ele é ativado quando o computador é ligado e o sistema operacional é carregado.
    Time Bomb
    São programados para se ativarem em determinados momentos, definidos pelo seu criador. Uma vez infectando um determinado sistema, o vírus somente se tornará ativo e causará algum tipo de dano no dia ou momento previamente definido. Alguns vírus se tornaram famosos, como o "Sexta-Feira 13", "Michelangelo", "Eros" e o "1º de Abril (Conficker)".
    Worm
    Como o interesse de fazer um vírus é ele se espalhar da forma mais abrangente possível, os seus criadores deixaram de lado o desejo de danificar o sistema dos usuários infectados e passaram a programar seus vírus de forma que apenas se repliquem sem o objetivo de causar graves danos ao sistema. Desta forma, os seus autores visam tornar suas criações mais conhecidas na Internet. Este tipo de vírus passou a ser chamado de worm. Eles estão mais aperfeiçoados, já há uma versão que ao atacar a máquina hospedeira, não só se replica, mas também se propaga pela internet, pelos e-mail que estão registrados no cliente de e-mail, infectando as máquinas que abrirem aquele e-mail, reiniciando o ciclo.
    O primeiro worm que atraiu grande atenção foi o Morris Worm, escrito por Robert T. Morris Jr. no Laboratório de Inteligência artificial do MIT. Ele foi iniciado em 2 de novembro de 1988, e rapidamente infectou um grande número de computadores pela Internet. Ele se propagou através de uma série de erros no BSD Unix e seus similares. Morris foi condenado a prestar 400 horas de serviços à comunidade e pagar uma multa de US$10.000.
    Nem todo Worm é malicioso. Existem worms que podem ser úteis: a família de Worms Nachi, por exemplo, onde tentam buscar e instalar patches do site da Microsoft para corrigir diversas vulnerabilidades no sistema. Isto eventualmente torna os sistemas atingidos mais seguros, mas gera um tráfego na rede considerável causando reboots da máquina no processo de aplicação do patch e, talvez o mais importante, fazem o seu trabalho sem a permissão do usuário do computador. Por isto, muitos especialistas de segurança desprezam os worms, independentemente do que eles fazem.
    Trojans (Cavalo de Tróia)
    São vírus que trazem em seu código fonte um código a parte, que permite a um estranho acessar o micro infectado ou coletar dados e enviá-los pela Internet para um desconhecido, sem notificar o usuário.
    Inicialmente, os cavalos de Tróia permitiam que o micro infectado pudesse receber comandos externos, sem o conhecimento do usuário. Desta forma o invasor poderia ler, copiar, apagar e alterar dados do sistema. Atualmente os cavalos de Tróia agora procuram roubar dados confidenciais do usuário, como senhas bancárias.
    Atualmente, os cavalos de Tróia não mais chegam exclusivamente transportados por vírus (Worm), agora são instalados quando o usuário baixa um arquivo da internet e o executa. Prática eficaz devido a enorme quantidade de e-mails fraudulentos que chegam às caixas postais dos usuários. Tais e-mails contêm um endereço na Web para a vítima baixar o cavalo de Tróia, ao invés do arquivo que a mensagem diz ser. Esta prática se denomina phishing, expressão derivada do verbo to fish, "pescar" em inglês. A maioria dos cavalos de Tróia visam sites bancários, "pescando" a senha digitada pelos usuários dos micros infectados. Há também cavalos de Tróia que ao serem baixados da internet "guardados" em falsos programas ou em anexos de e-mail, encriptografam os dados e os comprimem no formato ZIP.
    Outra conseqüência é o computador tornar-se um zumbi e, sem que o usuário perceba, executar ações como enviar Spam para infectar outros computadores e fazer ataques a servidores. Por exemplo, considerando apenas um micro de uma rede infectado, este pode consumir quase toda a banda de conexão com a internet realizando essas ações mesmo que o computador esteja sem utilização, apenas ligado. O objetivo disso é muitas vezes criar uma grande rede de computadores zumbis que, juntos, possam realizar um grande ataque a algum servidor que o autor do vírus deseja "derrubar" ou causar grande lentidão.
    Hijackers
    Hijackers são programas ou scripts que "sequestram" navegadores de Internet. Quando isso ocorre, o hijacker altera a página inicial do browser e impede o usuário de mudá-la, exibe propagandas em pop-ups ou janelas novas, instala barras de ferramentas no navegador e podem impedir acesso a determinados sites (como sites de software antivírus, por exemplo).
    Vírus do Orkut
    Em torno de 2006 e 2007 houve muitas ocorrências desse tipo de vírus. Ele é capaz de enviar scraps (recados) automaticamente para todos os contatos da vítima na rede social, além de roubar senhas e contas bancárias de um micro infectado através da captura de teclas e cliques. Apesar de que aqueles que receberam o recado precisam clicar em um link para se infectar, a relação de confiança existente entre os amigos aumenta muito a possibilidade de o usuário clicar sem desconfiar de que o link leva para um Worm. Ao clicar no link, um arquivo bem pequeno é baixado para o computador do usuário. Ele se encarrega de baixar e instalar o restante das partes da praga, que enviará a mensagem para todos os contatos do Orkut. Além de simplesmente se espalhar usando a rede do Orkut, o vírus também rouba senhas de banco.
    Vírus de Macro
    Vírus de macro são parecidos com outros vírus em vários aspectos: são códigos escritos para que, sob certas condições, este código se "reproduz", fazendo uma cópia dele mesmo. Como outros vírus, eles podem ser escritos para causar danos, apresentar uma mensagem ou fazer qualquer coisa que um programa possa fazer. Vírus de macro infecta, geralmente, os arquivos do Microsoft Office (.doc, .xls, .ppt, .mdb).
    Detectando, Prevenindo e Combatendo os Vírus
    Nada pode garantir a segurança total de um computador. Entretanto, você pode melhorar a segurança dele e diminuir a probabilidade de ser infectado.
    Remover um vírus de um sistema sem a ajuda das ferramentas necessárias é uma tarefa complicada até mesmo para um profissional. Alguns vírus e outros programas maliciosos (incluindo o spyware) estão programados para re-infectar o computador mesmo depois de detectados e removidos.
    Atualizar o computador periodicamente é uma ação preventiva contra os vírus. Além dessa opção, existem algumas empresas que fornecem ferramentas não gratuitas, que ajudam na detecção, prevenção e remoção permanente dos vírus.

    terça-feira, 20 de outubro de 2009

    Importância da Comunicação

    Para um Analista de Sistemas o processo de comunicação é importante tanto no momento em que o analista é o emissor da informação quanto no momento em que ele é o receptor.

    Quando o Analista é um emissor, ele precisa se expressar de maneira clara e objetiva a fim de transmitir a mensagem ao cliente de maneira compreensiva, de preferência utilizando palavras com que o cliente entenda. Pois quando o cliente está ciente de todo o processo de desenvolvimento, a obtenção dos requisitos e o próprio desenvolvimento do sistema tornam-se mais eficiente.

    Já quando o analista faz o papel do receptor, a mensagem transmitida pelo cliente também deve ser enviada de forma clara e objetiva, pois uma má comunicação e uma possível má interpretação do analista pode acabar resultando num péssimo levantamento de requisitos atrasando assim o desenvolvimento do sistema.

    Para garantir uma boa comunicação entre o emissor e receptor (analista e cliente), é importante levar em conta vários aspectos, entre eles a expressão corporal. Saber expressar-se corporalmente e saber dosar o tom de voz, além de usar as palavras adequadas podem garantir uma transmissão da informação (mensagem) eficiente e com isso seria possível fazer um levantamento de requisitos capaz de extrair do cliente todos os requisitos funcionais possíveis para o desenvolvimento do sistema, além dos requisitos não-funcionais.

    Abaixo segue uma imagem com um exemplo clássico de uma má comunicação entre todos os indivíduos relacionados ao projeto, entre eles o analista e o cliente:

    quarta-feira, 16 de setembro de 2009

    XNU - Kernel do Iphone

    INTRODUÇÃO

    Muitas palavras-chaves estão associadas com o Mac OS X: Mach kernel, microkernel, kernel FreeBSD, C++, 64 bits, UNIX... mas tudo isto se aplica ao "XNU". O Mac OS X não é nem kernel Mach, nem baseado em FreeBSD, não é um microkernel, não é escrito em C++ e não é de 64 bits.

    Diferentemente de muitos SO’s o MAC OS X não foi planejado e implementado a partir do zero, ele foi desenvolvido a partir da combinação de vários outros SO’s. Ele é um Kernel híbrido com características de microkernel e monolítica, buscando tirar proveito das vantagens de cada tecnologia.

    O coração do Mac OS X é o kernel XNU. XNU é composto basicamente de um Núcleo Mach, com características complementares previstos do Berkeley Software Distribution (BSD). Além disso, o XNU é responsável por proporcionar um ambiente de drivers do kernel chamado de I / O Kit. XNU tem todo o código fonte disponível livremente.

    Arquitetura Mac OS X:

    HISTÓRICO DO MAC OS X

    O MAC OS iniciou em 1984 em um Macintosh 128KB, porém devido às limitações da memória, não suportava multitarefa. Como a Apple estava com a necessidade de conseguir um sucessor para o MAC OS, eles decidiram comprar outro SO e construir um MAC OS compatível com as máquinas multitarefa da época. A Apple resolveu então comprar a NEXT, convertendo o NEXTSTEP/OpenStep no: MAC OS X.

    O NEXTSTEP era fortemente baseado no Mach. O Mach foi desenvolvido em resposta ao aumento da complexidade dos kernels do UNIX e do BSD. Com um dos primeiros microkernels, ele apenas incluía gerenciamento de memória, scheduling e IPC (Comunicação entre Processos) e todas as outras funcionalidades encontradas nos outros SO’s. Uma das vantagens do Mach era que ele poderia rodar aplicações de SO’s diferentes ao mesmo tempo. Ele utilizava algo parecido com virtualização.

    O problema do kernel do Mach era que ele era muito mais lento do que um kernel monolítico tradicional por causa da lentidão na troca de contexto entre usuário e o kernel, quando um servidor comunicava-se com o próprio kernel. O código de gerenciamento de memória do Mach, que era muito eficiente, foi posteriormente integrado no BSD.

    O NEXTSTEP era uma combinação de BSD com o Mach. Dessa forma, o NEXT ficou muitos anos à frente da concorrência com o NEXTSTEP sendo o primeiro SO com suporte a multitarefa preemptiva, proteção de memória e compatibilidade com o Unix. Com a aquisição do NEXTSTEP pela Apple, muitas mudanças foram feitas, entre elas a introdução do novo I/O - Kit, a atualização do código-base do Mach para o 3.0, e a atualização de parte do BSD para o 4.4BSD e o FreeBSD, além da inclusão de um suporte pra sistemas de arquivos HFS e protocolos de redes para o kernel.

    IPHONE

    O sistema operacional Mac OS X é o SO do iPhone, porém as diferenças entre o sistema operacional (OS X) executado nos computadores Macintosh e no iPhone não foram oficialmente explicadas. O iPhone possui uma CPU ARM, sendo a versão do OS X que é executada no iPhone diferente da versão de desktop pelo fato que ela foi escrita para as instruções de arquitetura ARM ao invés de x86 e PowerPC ISA na qual a versão do OS X para Mac foi escrita. O sistema operacional ocupa aproximadamente 300MB do total do dispositivo de 8 ou 16 gigabytes.

    A Arquitetura ARM (primeiramente Acorn RISC Machine, atualmente Advanced RISC Machine) é uma arquitetura de processador de 32 bits e é usada principalmente em sistemas embarcados. Seu desenvolvimento se deu visando obter o melhor desempenho possível, com a limitação de ser simples, ocupar pouca área e ter baixo consumo de energia. Os processadores ARM são conhecidos pela sua versatilidade, pois possuem poucas instruções para programação.

    Segue abaixo algumas caracteristicas dessa Arquitertura:

    · Arquitetura Load-Store: as instruções somente processarão valores que estiverem nos registradores e sempre armazenarão os resultados em algum registrador.

    · Instruções fixas de 32 bits de largura (com exceção das instruções Thumb compactas de 16 bits) alinhadas em 4 bytes consecutivos da memória, com capacidade da ULA executar uma única instrução num ciclo de clock.

    · Formato de instruções de 3 endereços (isto é, os dois registradores operandos e o registrador de resultado são independentemente especificados)

    · 15 registradores de 32 bits para uso geral

    · Manipulação de periféricos de I/O como dispositivos mapeados na memória com suporte à interrupções.

    · Conjunto de instruções aberto a extensões através de co-processador, incluindo a adição de novos registradores e tipos de dados ao modelo do programador.

    · Pipelines de 3 e 5 estágios

    ARQUITETURA XNU

    O kernel do Mac OS X, chamado "XNU" ("X não é UNIX") é constituído por três componentes principais: Mach, BSD e I / O – Kit.


    MACH

    Um pouco de historia

    O XNU contém o código baseado no Mach, SO que surgiu como um projeto da universidade de Rochester em 1975 e se chamava RIG. Ele tinha como objetivo demonstrar que sistemas operacionais poderiam ser construídos de forma modular, como uma coleção de processos se comunicando com trocas de mensagens. Quando um dos engenheiros do projeto mudou-se para universidade de Carnegie-Mellon continuou com o projeto de desenvolver tais sistemas. O projeto do Mach foi impulsionado pela agencia de defesa americana, DARPA. A primeira versão do sistema ficou pronta em 1986 e rodava em uma maquina com quatro CPU’s. Como o sistema UNIX estava ganhando espaço gradativamente foi necessária a criação da nova versão do sistema agora chamado de Mach.

    O sistema Mach era compatível com o UNIX e, portanto, a maioria dos softwares poderiam ser aproveitados. Alem disso o Mach possuía alguns recursos a mais que o UNIX, tais como threads e suporte a multiprocessadores.

    Sistemas operacionais baseados no MACH

    · Mac OS X

    · GNU Hurd/GNU Mach

    · Lites

    · MkLinux

    · mtXinu

    · MachTen

    · MacMach

    · NEXTSTEP

    · OSF/1 (Tru64)

    · Workplace OS

    · xMach

    · UNICOS MAX

    Funcionalidade MACH no XNU

    O componente Mach do XNU é baseado na versão 3.0 do Mach, mas não é usado como um microkernel. O Mach é um subsistema de parte do kernel como também são vários outros subsistemas que são tipicamente implementados nos sistemas microkernel. O Mach do XNU é responsável por vários aspectos de baixo nível do sistema, tais como:

    · Proteção de memória;

    · Gerenciamento de memória virtual;

    · Comunicação inter-processos;

    · Gerenciamento de interrupção;

    · Suporte real-time;

    · Console I/O

    · Multitarefa preemptiva, incluindo threads de kernel;

    · Suporte a depuração do kernel.

    BSD

    Histórico do BSD

    O BSD é um SO Unix desenvolvido pela Computer Systems Research Group da Universidade da Califórnia, em Berkeley, em 1977. A sigla BSD significa Berkeley Software Distribution.

    O BSD tem sido considerado um marco do UNIX porque ele compartilhava o código base inicial com o design original do Sistema Operacional AT&T UNIX.

    O BSD foi pioneiro em muitos dos avanços da computação moderna. Foi o primeiro a incluir bibliotecas de apoio ao Protocolo de Internet: os soquetes Berkeley.

    Hoje o BSD continua a ser usado para testes de dispositivos tecnológicos de organizações acadêmicas. A qualidade geral do seu código fonte, bem como a sua documentação, torná-lo adequado para vários propósitos.

    O BSD contém uma camada de compatibilidade binária que pode executar softwares nativos de vários outros sistemas operacionais na mesma arquitetura. Muito mais simples e mais rápido que a emulação, o que permite, por exemplo, aplicações previstas para o Linux ser executado em altíssima velocidade.

    Isso também permite que aos administradores a migrarem aplicações legadas comercialmente, que pode ter suporte apenas às variantes comerciais do Unix, para um sistema operacional mais moderno, mantendo a funcionalidade de tais aplicações, até poder ser substituído por uma alternativa melhor.

    BSD no XNU

    O componente do BSD que está no XNU usa boa parte do código-base do FREEBSD como referencia principal (embora alguns códigos possam ser atribuídos a outros BSD’s). Esse código é executado como parte do kernel juntamente com Mach e usando o mesmo espaço de endereço. O código do FreeBSD no XNU pode diferir significantemente a partir do código original do FreeBSD, já que mudanças tiveram que ser feita para ele coexistir com Mach. Abaixo segue a lista de componentes com o qual o BSD é responsável:

    · Processos;

    · Signals;

    · Permissões e políticas de segurança;

    · Pilhas TCP/IP, sockets BSD, firewall;

    · VFS e Sistemas de Arquivos;

    · Estrutura para Chamadas do Sistema;

    · Diferentes Mecanismos de Sincronização.

    O XNU tem um buffer de cache unificado. Ele utiliza uma abstração sincronizada chamada funnels para serializar o acesso à parte do kernel do BSD. As variáveis do kernel que apontam para esses funnels têm o sufixo _flock, como kernel_flock e network_flock. Quando Mach inicializa o subsistema BSD através de uma chamada para bsd_init (), a primeira operação executada é a atribuição de funnels. Posteriormente:

    · O locador de memória do kernel é inicializado;

    · A "Plataforma Expert" é chamada para ver se há quaisquer argumentos de boot para BSD;

    · Os Buffers do VFS/Tabelas Hash são alocados e inicializados;

    · Os processos relacionados às estruturas são inicializados. Isso inclui a lista de todos os processos, a lista de processos zumbis, as tabelas hash para IDs de processo e os grupos de processo;

    · O processo 0 é criado e inicializado e a variável kernproc aponta para processo 0;

    · O buffer da cache Unificado é inicializada;

    · Várias estruturas do VFS são inicializadas. Cada sistema de arquivos presente também é inicializado;

    · Subsistemas, tais como syslog e audit são inicializadas;

    · A MIB do Kernel é inicialziada;

    · A camada de interface de ligação de dados é inicializada;

    · Sockets e protocolos são inicializados;

    · O perfil do Kernel é inicializado, e o BSD é "publicado" como um recurso no I/O Kit;

    · Dispositivos Ethernet são inicializados;

    · BSD tenta montar o sistema de arquivos raiz;

    · Um novo processo é criado do kernproc (processo 0). Este processo recém-criado tem PID 1, e está prestes a ser inicializado.

    Existem basicamente dois kernels na XNU: Mach e BSD com dois tipos de sistemas de chamadas do sistema distintos. Embora ambos utilizassem um único ponto de entrada inteiro 0x80/sysenter/sc, sistemas de chamadas com números negativos são encaminhados para o Mach e os positivos para o BSD.

    Para se ter uma idéia da complexidade da interação entre esses dois conjuntos de código pode-se considerar a idéia da unidade fundamental de execução. No BSD a unidade fundamental é o processo, já no MACH é a thread. A disparidade é resolvida associando cada processo BSD com uma Tarefa MACH consistindo exatamente de uma única thread. Quando a chamada do sistema BSD fork() é feita, o codigo BSD no kernel usa a chamada MACH para criar uma tarefa e uma thread. Além disso, é importante notar que tanto as camadas do MACH e do BSD têm modelos de segurança distintos. O modelo de segurança do BSD é baseado nas portas, enquanto do MACH é baseado nos processos.

    I/O Kit

    O I/O Kit é um framework (estrutura) de código aberto dentro kernel XNU que auxilia no gerenciamento dos dispositivos de drivers. O framework do I/O Kit foi originalmente introduzido como parte do sistema operacional Rhapsody da Apple que depois se tornou Mac OS X, e não compartilhava semelhanças nem com o framework de dispositivo de drivers do Mac OS 9 nem com o do BSD.

    O framework do I/O Kit é implementado em um subconjunto de C++ que omite características que a Apple sente como sendo inseguras para usar no kernel com suporte a multithreads.

    A integração de C++ foi escolhida em parte porque os desenvolvedores da Apple acreditavam que seria mais confortável ter drivers escritos em uma linguagem mais comumente usada do que o Objective-C, enquanto continua ainda a fornecer uma estrutura orientada a objetos permitindo que o desenvolvedor de drivers de dispositivo focasse na codificação de recursos específicos para o hardware em vez de re-implementar características comuns a qualquer dispositivo dado.

    Quando o NEXTSTEP foi portado para arquiteturas diferentes e foi renomeado para OpenStep ele adquiriu um novo modelo de drivers chamado DriverKit, que foi baseado na linguagem de programação Objective C e, portanto foi orientado a objetos.

    Como foi dito anteriormente, "I/O Kit" é a mais alta re-implementação de desempenho do DriverKit em um subconjunto de C++. I/O Kit suporta algumas classes de drivers no modo usuário. Esse framework orientado a objetos do kernel XNU é radicalmente diferente da dos tradicionais sistemas.

    Como dito, o I/O Kit usa um subconjunto restrito de C++ (baseado em C++ embarcado) como sua linguagem de programação. Tal sistema é implementado pela biblioteca LIBKERN. Algumas características do C++ que não são permitidas neste subconjunto incluem:

    · exceções

    · herança múltiplas

    · templates

    · RTTI (informações sobre tipos de dados em tempo de execução) apesar do I/O Kit ter seu próprio sistema de tipagem em tempo de execução

    Além de fornecer o código comum para os drivers de dispositivo, este framework fornece configuração automática. O modelo do dispositivo de drivers fornecido pelo I/O Kit tem muitas características úteis:

    · numerosas famílias de dispositivos (ATA/ATAPI, FireWire, Graphics, HID, Network, PCI, USB, HID,…)

    · abstrações de orientação a objetos de dispositivos que podem ser compartilhados

    · plug-and-play("ligar e usar") and hot-plugging("ligamento a quente")

    · gerenciamento de energia

    · multitarefa preemptiva, uso de thread, multiprocessamento simétrico, proteção de memória e gerenciamento de dados

    · carregamento e combinação dinâmica de drivers (múltiplos tipos de barramento)

    · um banco de dados para monitoramento e manutenção de informações detalhadas sobre objetos instanciados (o registro de I/O)

    · um banco de dados de todas as classes do I/O Kit avaliadas num sistema (o catálogo de I/O)

    · uma API extensa

    · interfaces para aplicações e drivers de espaço de usuário para comunicação com o I/O Kit

    · drivers de empilhamento

    Além da biblioteca libkern, a implementação do I/O Kit consiste de mais duas bibliotecas de C++ que estão presentes no kernel e disponíveis para drivers carregáveis: IOKit.framework e Kernel/IOKit.

    CONCLUSÃO

    O XNU é um Kernel composto de algumas componentes essências, como: Mach, BSD e I/O Kit, por isso o XNU não pode ser considerado um Mach nem um BSD.

    O Kernel do OS X não possui microkernel, apesar de o Mach ser utilizado em outros projetos com esta finalidade. XNU é um kernel monolítico muito tradicional com BSD e drivers em modo kernel.

    Parte do I/O Kit foi escrito em um subconjunto em C++ e o BSD e Mach foi escrito em C. Apesar de suportar aplicações de 64 bits em modo usuário o kernel roda em seu próprio modo em 32 bits.

    Autores

    1. Leandro Luiz
    2. Victor Guedes
    3. Júlio Holanda