Computador

Um assistente pessoal digital Um computador pessoal Columbia, um supercomputador da NASA

Denomina-se computador uma máquina capaz de variados tipos de tratamento automático de informações ou processamento de dados. Exemplos de computadores incluem o ábaco, a calculadora, o computador analógico e o computador digital. Um computador pode prover-se de inúmeros atributos, dentre eles armazenamento de dados, processamento de dados, cálculo em grande escala, desenho industrial, tratamento de imagens gráficas, realidade virtual, entretenimento e cultura. No passado, o termo já foi aplicado a pessoas responsáveis por algum cálculo. Em geral, entende-se por computador um sistema físico que realiza algum tipo de computação. Existe ainda o conceito matemático rigoroso, utilizado na teoria da computação. Assumiu-se que os computadores pessoais e laptops são ícones da Era da Informação1; e isto é o que muitas pessoas consideram como "computador". Entretanto, atualmente as formas mais comuns de computador em uso são os sistemas embarcados, pequenos dispositivos usados para controlar outros dispositivos, como robôs, câmeras digitais ou brinquedos.

História dos computadores
As primeiras máquinas de computar
Pascaline, máquina calculadora feita por Blaise Pascal

John Napier (1550-1617), logaritmos, também inventou tabelas de multiplicação evitava a memorização da

escocês inventor dos os ossos de Napier, que eram gravadas em bastão, o que tabuada.

A primeira máquina de verdade foi construída por Wilhelm Schickard (15921635), sendo capaz de somar, subtrair, multiplicar e dividir. Essa máquina foi perdida durante a guerra dos trinta anos, sendo que recentemente foi encontrada alguma documentação sobre ela. Durante muitos anos nada se soube sobre essa máquina, por isso, atribuía-se a Blaise Pascal (1623-1662) a construção da primeira máquina calculadora, que fazia apenas somas e subtrações.

1SILVEIRA (2004) Inclusão Digital e Software Livre, p. 74.

A máquina Pascal foi criada com objetivo de ajudar seu pai a computar os impostos em Rouen, França. O projeto de Pascal foi bastante aprimorado pelo matemático alemão Gottfried Wilhelm Leibniz (1646-1726), que também inventou o cálculo, o qual sonhou que, um dia no futuro, todo o raciocínio pudesse ser substituído pelo girar de uma simples alavanca. Todas essas máquinas, porém, estavam longe de ser um computador de uso geral, pois não eram programáveis. Isto quer dizer que a entrada era feita apenas de números, mas não de instruções a respeito do que fazer com os números.

Babbage
Réplica (parte) do Calculador Babbage Diferencial criado por Charles

A origem da idéia de programar uma máquina vem da necessidade de que as máquinas de tecer produzissem padrões de cores diferentes. Assim, no século XVIII foi criada uma forma de representar os padrões em cartões de papel perfurado, que eram tratados manualmente. Em 1801, Joseph Marie Jacquard (1752-1834) inventa um tear mecânico, com uma leitora automática de cartões. A idéia de Jacquard atravessou o Canal da Mancha, onde inspirou Charles Babbage (1792-1871), um professor de matemática de Cambridge, a desenvolver uma máquina de “tecer números”, uma máquina de calcular onde a forma de calcular pudesse ser controlada por cartões. Tudo começou com a tentativa de desenvolver uma máquina capaz de calcular polinômios por meio de diferenças, o calculador diferencial. Enquanto projetava seu calculador diferencial, a idéia de Jacquard fez com que Babbage imaginasse uma nova e mais complexa máquina, o calculador analítico, extremamente semelhante ao computador atual. Sua parte principal seria um conjunto de rodas dentadas, o moinho, formando uma máquina de somar com precisão de cinquenta dígitos. As instruções seriam lidas de cartões perfurados. Os cartões seriam lidos em um dispositivo de entrada e armazenados, para futuras referências, em um banco de mil registradores. Cada um dos registradores seria capaz de armazenar um número de cinquenta dígitos, que poderiam ser colocados lá por meio de cartões a partir do resultado de um dos cálculos do moinho. Além disso tudo, Babbage imaginou a primeira máquina de impressão, que imprimiria os resultados dos cálculos, contidos nos registradores. Babbage conseguiu, durante algum tempo, fundos para sua pesquisa, porém não conseguiu completar sua máquina no tempo prometido e não recebeu mais dinheiro. Hoje, partes de sua máquina podem ser vistas no Museu Britânico, que também construiu uma versão completa, utilizando as técnicas disponíveis na época.

Junto com Babbage, trabalhou a jovem Ada Augusta, filha do poeta Lord Byron, conhecida como Lady Lovelace e Ada Lovelace. Ada foi a primeira programadora da história, projetando e explicando, a pedido de Babbage, programas para a máquina inexistente. Ada inventou os conceitos de subrotina, uma seqüência de instruções que pode ser usada várias vezes, loop, uma instrução que permite a repetição de uma seqüência de cartões, e do salto condicional, que permite saltar algum cartão caso uma condição seja satisfeita. Ada Lovelace e Charles Babbage estavam avançados demais para o seu tempo, tanto que até a década de 1940, nada se inventou parecido com seu computador analítico. Até essa época foram construídas muitas máquinas mecânicas de somar destinadas a controlar negócios (principalmente caixas registradoras) e algumas máquinas inspiradas na calculadora diferencial de Babbage, para realizar cálculos de engenharia (que não alcançaram grande sucesso).

A máquina de tabular
O próximo avanço dos computadores foi feito pelo americano Herman Hollerith (1860-1929), que inventou uma máquina capaz de processar dados baseada na separação de cartões perfurados (pelos seus furos). A máquina de Hollerith foi utilizada para auxiliar no censo de 1890, reduzindo o tempo de processamento de dados de sete anos, do censo anterior, para apenas dois anos e meio. Ela foi também pioneira ao utilizar a eletricidade na separação, contagem e tabulação dos cartões. A empresa fundada por Hollerith é hoje conhecida como International Business Machines, ou IBM.

Os primeiros computadores de uso geral
Z1, computador eletro-mecânico construído por Konrad Zuse

O primeiro computador eletro-mecânico foi construído por Konrad Zuse (1910–1995). Em 1936, esse engenheiro alemão construiu, a partir de relês que executavam os cálculos e dados lidos em fitas perfuradas, o Z1. Zuse tentou vender o computador ao governo alemão, que desprezou a oferta, já que não poderia auxiliar no esforço de guerra. Os projetos de Zuse ficariam parados durante a guerra, dando a chance aos americanos de desenvolver seus computadores. Foi na Segunda Guerra Mundial que realmente nasceram os computadores atuais. A Marinha americana, em conjunto com a Universidade de Harvard, desenvolveu o computador Harvard Mark I, projetado pelo professor Howard Aiken, com base no calculador analítico de Babbage. O Mark I ocupava 120m³ aproximadamente, conseguindo multiplicar dois números de dez dígitos em três segundos.

Simultaneamente, e em segredo, o Exército Americano desenvolvia um projeto semelhante, chefiado pelos engenheiros J. Presper Eckert e John Mauchy, cujo resultado foi o primeiro computador a válvulas, o Eletronic Numeric Integrator And Calculator (ENIAC)2, capaz de fazer quinhentas multiplicações por segundo. Tendo sido projetado para calcular trajetórias balísticas, o ENIAC foi mantido em segredo pelo governo americano até o final da guerra, quando foi anunciado ao mundo.
ENIAC, computador desenvolvido pelo Exército Americano

No ENIAC, o programa era em um painel. Nesse ponto idéia que transformou os “cérebros eletrônicos”: computador segundo o Para isso, eles teriam que

feito rearranjando a fiação John von Neumann propôs a calculadores eletrônicos em modelar a arquitetura do sistema nervoso central. ter três características:

1. Codificar as instruções de uma forma possível de ser armazenada na memória do computador. Von Neumann sugeriu que fossem usados uns e zeros. 2. Armazenar as instruções na memória, bem como toda e qualquer informação necessária a execução da tarefa, e 3. Quando processar o programa, buscar as instruções diretamente na memória, ao invés de lerem um novo cartão perfurado a cada passo.
Visão simplificada da arquitetura de Von Neumann

Este é o conceito de cujas principais versatilidade e o computador conhecemos hoje, onde estão armazenados na conhecido como Neumann.

programa armazenado, vantagens são: rapidez, automodificação. Assim, programável que o programa e os dados memória ficou Arquitetura de von

Para divulgar essa idéia, von Neumann publicou sozinho um artigo. Eckert e Mauchy não ficaram muito contentes com isso, pois teriam discutido muitas vezes com ele. O projeto ENIAC acabou se dissolvendo em uma chuva de processos, mas já estava criado o computador moderno.

Arquitetura de hardware
LEGENDA: 01- Monitor 02- Placa-Mãe 03- Processador 04- Memória RAM 05- Placas de Rede, Placas de Som, Vídeo, Fax... 06- Fonte de Energia 07- Leitor de CDs e/ou DVDs 08- Disco Rígido (HD) 09- Mouse (Rato) 10- Teclado

2(em inglês) Karl Kempf (1961) Historical Monograph: Electronic Computers Within the Ordnance Corps, cap. 2, pp. 19-39. (Exército dos Estados Unidos da América)

Mesmo que a tecnologia computadores digitais dramaticamente desde computadores da década hardware), quase todos ainda utilizam a Neumann proposta por Seguindo a arquitetura, possuem quatro sessões lógica e aritmética, a memória e os saída. Essas partes são barramentos. A unidade unidade de controle, os básica de entrada e como a CPU.

utilizada nos tenha mudado os primeiros de 1940 (veja história do os computadores atuais arquitetura de von John von Neumann. os computadores principais, a unidade unidade de controle, a dispositivos de entrada e interconectadas por lógica e aritmética, a registradores e a parte saída são conhecidos

Alguns computadores maiores diferem do modelo acima em um aspecto principal - eles têm múltiplas CPUs trabalhando simultaneamente. Adicionalmente, poucos computadores, utilizados principalmente para pesquisa e computação científica, têm diferenças significativas do modelo acima, mas eles não tem grande aplicação comercial.

Processamento
O processador (ou CPU) é uma das partes principais do hardware do computador e é responsável pelos cálculos, execução de tarefas e processamento de dados. A velocidade com que o computador executa as tarefas ou processa dados está diretamente ligada à velocidade do processador. As primeiras CPUs eram constituídas de vários componentes separados, mas desde meados da década de 1970 as CPUs vêm sendo manufaturadas em um único circuito integrado, sendo então chamadas microprocessadores. A unidade lógica e aritmética (ULA) é a unidade central do processador, que realmente executa as operações aritméticas e lógicas entre dois números. Seus parâmetros incluem, além dos números operandos, um resultado, um comando da unidade de controle, e o estado do comando após a operação. O conjunto de operações aritméticas de uma ULA pode ser limitado a adição e subtração, mas também pode incluir multiplicação, divisão, funções trigonométricas e raízes quadradas. Algumas podem operar somente com números inteiros, enquanto outras suportam o uso de ponto flutuante para representar números reais (apesar de possuirem precisão limitada).

A unidade de controle é a unidade do processador que armazena a posição de memória que contém a instrução corrente que o computador está executando, informando à ULA qual operação a executar, buscando a informação (da memória) que a ULA precisa para executá-la e transferindo o resultado de volta para o local apropriado da memória. Feito isto, a unidade de controle vai para a próxima instrução (tipicamente localizada na próxima posição da memória, a menos que a instrução seja uma instrução de desvio informando que a próxima instrução está em outra posição. A CPU também contém um conjunto restrito de células de memória chamados registradores que podem ser lidos e escritos muito mais rapidamente que em outros dispositivos de memória. São usados frequentemente para evitar o acesso contínuo à memória principal cada vez que um dado é requisitado.

Memória
A memória é um dispositivo que permite ao computador armazenar dados por certo tempo. Atualmente o termo é geralmente usado para definir as memórias voláteis, como a RAM, mas seu conceito primordial também aborda memórias não voláteis, como o disco rígido. Parte da memória do computador é feita no próprio processador; o resto é diluído em componentes como a memória RAM, memória cache, disco rígido e leitores de mídias removíveis, como disquete, CD e DVD. Nos computadores modernos, cada posição da memória é configurado para armazenar grupos de oito bits (chamado de um byte). Cada byte consegue representar 256 números diferentes; de 0 a 255 ou de -128 a +127. Para armazenar números maiores pode-se usar diversos bytes consecutivos (geralmente dois, quatro ou oito). Quando números negativos são armazenados, é utilizada a notação de complemento para dois. A memória do computador é normalmente dividida entre primária e secundária, sendo possível também falar de uma memória "terciária".

Memória primária
A memória primária é aquela acessada diretamente pela Unidade Lógica e Aritmética. Tradicionalmente essa memória pode ser de leitura e escrita (RAM) ou só de leitura (ROM). Atualmente existem memórias que podem ser classificadas como preferencialmente de leitura, isso é, variações da memória ROM que podem ser regravadas, porém com um número limitado de ciclos e um tempo muito mais alto.

Normalmente a memória primária se comunica com a ULA por meio de um barramento ou canal de dados. A velocidade de acesso a memória é um fator importante de custo de um computador, por isso a memória primária é normalmente construída de forma hierárquica em um projeto de computador. Parte da memória, conhecida como cache fica muito próxima à ULA, com acesso muito rápido. A maior parte da memória é acessada por meio de vias auxiliares. Normalmente a memória é nitidamente separada da ULA em uma arquitetura de computador. Porém, os microprocessadores atuais possuem memória cache incorporada, o que aumenta em muito sua velocidade. Memória RAM
Memória RAM de um PC

A memória RAM (Random Access Memory) é uma sequência de células numeradas, cada uma contendo uma pequena quantidade de informação. A informação pode ser uma instrução para dizer ao computador o que fazer. As células podem conter também dados que o computador precisa para realizar uma instrução. Qualquer célula pode conter instrução ou dado, assim o que em algum momento armazenava dados pode armazenar instruções em outro momento. Em geral, o conteúdo de uma célula de memória pode ser alterado a qualquer momento, a memória RAM é um rascunho e não um bloco de pedra. As memórias RAM são denominadas genericamente de DRAM (RAM dinâmica), pelo fato de possuírem uma característica chamada refrescamento de memória, que tem a finalidade de regravar os dados armazenados em intervalos regulares de tempo,o que é necessário para a manutenção de seu conteúdo. O tamanho de cada célula, e o número de células, varia de computador para computador, e as tecnologias utilizadas para implementar a memória RAM variam bastante. Atualmente o mais comum é a implementação em circuitos integrados. Memória ROM
Memória ROM de um PC

A memória ROM (Read-Only Memory) é uma memória que só pode ser lida e os dados não são perdidos com o desligamento do computador. A diferença entre a memória RAM e a ROM é que a RAM aceita gravação, regravação e perda de dados. Mesmo se for enviada uma informação para ser gravada na memória ROM, o procedimento não é executado (esta característica praticamente elimina a criação de vírus que afetam a ROM). Um software gravado na ROM recebe o nome de firmware. Em computadores da linha IBM-PC eles são basicamente três, que são acessados toda vez que ligamos o computador, a saber: BIOS, POST e SETUP.

Existe uma variação da ROM chamada memória preferencialmente de leitura que permite a re-gravação de dados. São as chamadas EPROM (Erasable Programmable Read Only Memory) ou EEPROM (Electrically Erasable Programmable Read-Only Memory).

Memória secundária
A memória secundária ou memória de massa é usada para gravar grande quantidade de dados, que não são perdidos com o desligamento do computador, por um período longo de tempo. Exemplos de memória de massa incluem o disco rígido e mídias removíveis como o CD-ROM, o DVD, o disquete e o pen drive. Normalmente a memória secundária não é acessada diretamente pela ULA, mas sim por meio dos dispositivos de entrada e saída. Isso faz com que o acesso a essa memória seja muito mais lento do que o acesso a memória primária. Para isso cada dispositivo encontra-se com um buffer de escrita e leitura para melhoramento de desempenho. Supostamente, consideramos que a memória terciária está permanentemente ligada ao computador.

Memória terciária
Fita magnética para gravação de dados

Sistemas mais complexos de terceiro nível de memória, com da memória secundária. Um automatizado de fitas contendo memória terciária não é nada memória secundária ou para servir um dispositivo de

computação podem incluir um acesso ainda mais lento que o exemplo seria um sistema a informação necessária. A mais que um dispositivo de memória de massa colocado memória secundária.

As tecnologias de memória usam materiais e processos bastante variados. Na informática, elas têm evoluído sempre em direção de uma maior capacidade de armazenamento, maior miniaturização, maior rapidez de acesso e confiabilidade, enquanto seu custo cai constantemente. Entretanto, a memória de um computador não se limita a sua memoria individual e física, ela se apresenta de maneira mais ampla, e sem lugar definido (desterritorializada). Temos possibilidades de armazenar em diversos lugares na rede, podemos estar em Cairo e acessar arquivos que foram armazenados em sítios no Brasil. É crescente a tendência para o armazenamento das informações na memória do espaço virtual, ou o chamado ciberespaço, através de discos virtuais e anexos de e-mails. Isto torna possível o acesso a informação a partir de qualquer dispositivo conectado à Internet.

Entrada e saída
Mouse

Os dispositivos de entrada e usados para a interação computadores pessoais de entrada incluem o mouse digitalizador e a webcam. incluem a caixa de som, o

saída (E/S) são periféricos homem-computador. Nos modernos, dispositivos comuns (ou rato), o teclado, o Dispositivos comuns de saída monitor3 e a impressora.

O que todos os dispositivos de entrada têm em comum é que eles precisam codificar (converter) a informação de algum tipo em dados que podem ser processados pelo sistema digital do computador. Dispositivos de saída por outro lado, descodificam os dados em informação que é entendida pelo usuário do computador. Neste sentido, um sistema de computadores digital é um exemplo de um sistema de processamento de dados. Podemos ter dispositivos que funcionam tanto para entrada como para saída de dados, como o modem e o drive de disquete. Atualmente, outro dispositivo de híbrido de dados é a rede de computadores.
Blocos funcionais de um computador

Barramentos
Para interligar todos uma placa de suporte que através de soquetes conecta todos função inclui também a auxiliares que subde entrada e saída, (conecta-se com a caixa vídeo (conecta-se com o (conecta-se com a LAN) se com a linha esses dispositivos existe especial, a placa-mãe, barramentos, fios e os dispositivos. Sua conexão de placas controlam os periféricos como a placa de som de som), a placa de monitor), placa de rede e o fax-modem (conectatelefônica).

Nota-se que o barramento entre os componentes não constitui uma conexão ponto-a-ponto; ele pode conectar logicamente diversos componentes utilizando o mesmo conjunto de fios. O barramento pode utilizar uma interface serial ou uma interface paralela.

3Alguns computadores, em especial PDAs, consideram a tela (considerada um monitor), também um dispositivo de entrada, sob forma de ecrã táctil.

Outros equipamentos adicionais usados em conjunto com a placa-mãe são o dissipador, um pequeno ventilador para resfriar o processador, e a fonte de energia, responsável pela alimentação de energia de todos os componentes do computador.

Arquitetura de software
Instruções
A principal característica dos computadores modernos, o que o distingue de outras máquinas, é que pode ser programado. Isto significa que uma lista de instruções pode ser armazenada na memória e executa posteriormente.
Diagrama de linguagem de linguagem de máquina programação compilada em

As instruções executadas na ULA discutidas acima não são um rico conjunto de instruções como a linguagem humana. O computador tem apenas um limitado número de instruções bem definidas. Um exemplo típico de uma instrução existente na maioria dos computadores é "copie o conteúdo da posição de memória 123 para a posição de memória 456", "adicione o conteúdo da posição de memória 510 ao conteúdo da posição 511 e coloque o resultado na posição 507" e "se o conteúdo da posição 012 é igual a 0, a próxima instrução está na posição 678". Instruções são representadas no computador como números - o código para "copiar" poderia ser 007, por exemplo. O conjunto particular de instruções que um computador possui é conhecido como a linguagem de máquina do computador. Na prática, as pessoas não escrevem instruções diretamente na linguagem de máquina mas em uma linguagem de programação, que é posteriormente traduzida na linguagem de máquina através de programas especiais, como interpretadores e compiladores. Algumas linguagens de programação se aproximam bastante da linguagem de máquina, como o assembly (linguagem de baixo nível); por outro lado linguagens como o Prolog são baseadas em princípios abstratos e se distanciam bastante dos detalhes da operação da máquina (linguagens de alto nível). A execução das instruções é tal como ler um livro. Apesar da pessoa normalmente ler cada palavra e linha em sequência, é possível que algumas vezes ela volte para pontos anteriores do texto de interesse ou passe sessões não interessantes. Da mesma forma, um computador que segue a arquitetura de von Neumann executa cada instrução de forma sequencial, da maneira como foram armazenadas na memória. Mas, através de instruções especiais, o computador pode repetir instruções ou avançá-las até que alguma condição seja satisfeita. Isso é chamado controle do fluxo e é o que permite que o computador realize tarefas repetitivamente sem intervenção humana.

Uma pessoa usando uma calculadora pode realizar operações aritméticas como somar número apertando poucos botões. Mas somar sequencialmente os números de um a mil iria requerer apertar milhares de vezes os botões, com uma alta probabilidade de erro em alguma iteração. Por outro lado, computadores podem ser programados para realizar tal tarefa com poucas instruções, e a execução e extremamente rápida. Mas os computadores não conseguem pensar, eles somente executam as instruções que fornecemos. Um humano instruído, ao enfrentar o problema da adição explicado anteriormente, perceberia em algum momento que pode reduzir o problema usando a seguinte equação: e chegar na mesma resposta correta com pouco trabalho. Alguns computadores modernos conseguem tomar algumas decisões para acelerar a execução dos programas ao prever instruções futuras e reorganizar a ordem de instruções sem modificar seu significado. Entretanto, os computadores ainda não conseguem determinar instintivamente uma maneira mais eficiente de realizar sua tarefa, pois não possuem conhecimento para tal 4.

Programas
Programas são simplesmente grandes listas de instruções para o computador executar, tais com tabelas de dados. Muitos programas de computador contêm milhões de instruções, e muitas destas instruções são executadas repetidamente. Um computador pessoal típico (no ano de 2003) podia executar cerca de dois a três bilhões de instruções por segundo. Os computadores não têm a sua extraordinária capacidade devido a um conjunto de instruções complexo. Apesar de existirem diferenças de projeto com CPU com um maior número de instruções e mais complexas, os computadores executam milhões de instruções simples combinadas, escritas por bons "programadores". Estas instruções combinadas são escritas para realizar tarefas comuns como, por exemplo, desenhar um ponto na tela. Tais instruções podem então ser utilizadas por outros programadores. Hoje em dia, muitos computadores aparentam executar vários programas ao mesmo tempo, o que é normalmente conhecido como multitarefa. Na realidade, a CPU executa as instruções de um programa por um curto período de tempo e, em seguida, troca para um outro programa e executa algumas de suas instruções. Isto cria a ilusão de vários programas sendo executados simultaneamente através do compartilhamento do tempo da CPU entre os programas. Este compartilhamento de tempo é normalmente controlado pelo sistema operacional.

4Existem tentativas para resolver essa limitação, e o campo de atuação de aprendizagem de máquina é conhecido na Ciência da Computação como Inteligência Artifical.

Sistema operacional
Um computador sempre precisa de no mínimo um programa em execução por todo o tempo para operar. Tipicamente este programa é o sistema operacional (ou sistema operativo), que determina quais programas vão executar, quando, e que recursos (como memória e E / S) ele poderá utilizar. O sistema operacional também fornece uma camada de abstração sobre o hardware, e dá acesso aos outros programas fornecendo serviços, como programas gerenciadores de dispositivos ("drivers") que permitem aos programadores escreverem programas para diferentes máquinas sem a necessidade de conhecer especificidades de todos os dispositivos eletrônicos de cada uma delas.

Impactos do computador na sociedade
Segundo Pierre Lévy, no livro "Cibercultura", O computador não é mais um centro, e sim um nó, um terminal, um componente da rede universal calculante. Em certo sentido, há apenas um único computador, mas é impossível traçar seus limites, definir seu contorno. É um computador cujo centro está em toda parte e a circunferência em lugar algum, um computador hipertextual, disperso, vivo, fervilhante, inacabado: o ciberespaço em si. O computador evoluiu em sua capacidade de armazenamento de informações, que é cada vez maior, o que possibilita a todos um acesso cada vez maior a informação. Isto significa que o computador agora representa apenas um ponto de um novo espaço, o ciberespaço. Essas informações contidas em computadores de todo mundo e presentes no ciberespaço, possibilitam aos usuários um acesso a novos mundos, novas culturas, sem a locomoção física. Com todo este armazenamento de textos, imagens, dados, etc. Houve também uma grande mudança no comportamento empresarial, com uma forte redução de custo e uma descompartimentalização das mesmas. Antes o que era obstante agora é próximo, as máquinas, componentes do ciberespaço, com seus compartimentos de saída, otimizaram o tempo e os custos.

Ver também
•Commons •Wikiquote •Wikcionário •Computador doméstico •Computador pessoal •Mainframe

•Notebook •Servidor •Sistema operacional •Supercomputador •Teoria da computação •Reciclagem de computadores

Ligações externas
•História dos computadores (em português) •Museu do Computador (em português) •O que é um computador? (em português) •Fotos e história de alguns modelos de computadores (em inglês)

Arquitetura de von Neumann
Diagrama da arquitectura de von Neumann.

A Arquitetura de von Neumann), é uma computador que se possibilidade de uma armazenar seus espaço de memória que manipular tais

Neumann (de John von arquitetura de caracteriza pela máquina digital programas no mesmo os dados, podendo assim programas.

A máquina proposta por Von Neumann reúne os seguintes componentes: (i) uma memória, (ii) uma unidade aritmética e lógica (ALU), (iii) uma unidade central de processamento (CPU), composta por diversos registradores, e (iv) uma Unidade de Controle (CU), cuja função é a mesma da tabela de controle da Máquina de Turing universal: buscar um programa na memória, instrução por instrução, e executá-lo sobre os dados de entrada. Cada um dos elementos apresentados é realizado à custa de componentes físicos independentes, cuja implementação tem variado ao longo do tempo, consoante a evolução das tecnologias de fabricação, desde os relés electromagnéticos, os tubos de vácuo (ou válvulas), até aos semicondutores, abrangendo os transistores e os circuitos electrónicos integrados, com média, alta ou muito alta densidade de integração (MSI - medium scale, LSI - large scale, ou VLSI - very large scale integration), medida em termos de milhões transistores por pastilha de silício.

As interacções entre os elementos exibem tempos típicos que também têm variado ao longo do tempo, consoante as tecnologias de fabricação. Actualmente, as CPUs processam instruções sob controlo de relógios cujos períodos típicos são da ordem de 1 nanosegundo, ou seja, segundos. As memórias centrais têm tempos típicos de acesso da ordem da dezena de nanosegundos. As unidades de entrada e saída exibem tempos típicos extremamente variáveis, mas que são tipicamente muito superiores à escala do nanosegundo. Por exemplo, os discos duros exibem tempos da ordem do milisegundos (milésimo de segundo, ). Outros dispositivos periféricos são inertes, a não ser que sejam activados por utilizadores humanos. Por exemplo, ao se fazer "copy and paste" nao se-percebe nada do que foi descrito acima, pois um teclado só envia informação para o computador após serem pressionada as devidas teclas. Assim, este dispositivo se comunica com a CPU eventualmente e, portanto, exibe tempos indeterminadoss.

Ver também
•Arquitetura Harvard

ENIAC
Duas mulheres operando o pertencente ao Exército dos ENIAC (fotografia E.U.A. (U.S. Army)

O ENIAC (Electrical and Calculator) foi o digital eletrônico de em fevereiro de 1946 americanos John Eckert Electronic Control

Numerical Integrator primeiro computador grande escala. Criado pelos cientistas nortee John Mauchly, da Company.

O ENIAC começou a ser desenvolvido em 1943 durante a II Guerra Mundial para computar trajetórias táticas que exigissem conhecimento substancial em matemática, mas só se tornou operacional após o final da guerra. O computador pesava 30 toneladas, media 5,50 m de altura e 25 m de comprimento e ocupava 180 m² de área construída. Foi construído sobre estruturas metálicas com 2,75 m de altura e contava com 70 mil resistores e entre 17.468 e 18.000 válvulas a vácuo ocupando a área de um ginásio desportivo. Segundo Tom Forester, quando acionado pela primeira vez, o ENIAC consumiu tanta energia que as luzes de Filadélfia piscaram.

Esta máquina não tinha sistema operacional e seu funcionamento era parecido com uma calculadora simples de hoje. O ENIAC, assim como uma calculadora, tinha de ser operado manualmente. A calculadora efetua os cálculos a partir das teclas pressionadas, fazendo interação direta com o hardware, como no ENIAC, no qual era preciso conectar fios, relês e seqüências de chaves para que se determinasse a tarefa a ser executada. A cada tarefa diferente o processo deveria ser refeito. A resposta era dada por uma seqüencia de lâmpadas. O segundo computador do mundo foi o ENIAC (Electronic Numerical Integrator and Computer), uma concepçao do Professor John Mauchly, conjuntamente com o professor J. Presper Eckert. Mauchly e o Eckert propuseram em 1943 ao exército norte-americano, em plena II Guerra Mundial, a construçao deste primeiro computador, tendo como objectivo o auxilio nos cálculos de precisao necessários para a balística. Foi anunciada a sua conclusao em 14 de Fevereiro de 1946 e foi patenteado em 26 de Junho de 1947 com o registo n.o 3,120,606. Diposiçao em U da sala do ENIAC O ENIAC (Electronic Numerical Integrator and Computer) preenchia esta sala, incomparável com os miniaturizados e mais potentes computadores actuais. Equipa que construiu o ENIAC J. Presper Eckert, Jr.; Professor J. G. Brainerd; Sam Feltman; Captain H. H. Goldstine; Dr. J. W. Mauchly; Dean Harold Pender; General G. M. Barnes; Colonel Paul N. Gillon. O ENIAC era uma grande máquina para efectuar cálculos e baseava a sua estrutura nos avanços científicos já anteriormente desenvolvidos, como as sofisticadas máquinas de cálculos matemáticos de Charles Babage, as calculadoras mecânicas de Blaise Pascal, Leibniz e Charles Xavier Thomas, nas relés electromagnéticas, nas válvulas e nas máquinas perfuradoras de cartoes. Uma válvula é, de forma simples, um tubo metálico de meia polegada, selado em vácuo dentro de um tubo de vidro, onde uma corrente de electroes pode passar entre os eléctrodos. Os tubos de vácuo foram fundamentais para o desenvolvimento da rádio, televisao e gravaçao de sons. Eram também peças grandes e muito frágeis que tinham uma grande perda de energia por calor. Pormenor do ENIAC - o primeiro computador O ENIAC foi construído com 17 468 tubos de vácuo, 70 000 resistencias, 10 000 condensadores, 1 500 relés e 6 000 interruptores. O ENIAC pesava 30 toneladas, consumia 200 000 watts de potencia e ocupava várias salas. Quando em operaçao produzia tanto calor que necessitava de um sistema de ar forçado para arrefecimento. Era tao grande que tinha de ser disposto em U com tres painéis sobre rodas, para que os operadores se pudessem mover a volta dele. Um dos gigantes paíneis laterais do ENIAC Quando em operaçao, os complexos cálculos de balística passaram a realizar–se nuns alucinantes 30 segundos, quando com as calculadoras manuais que até aí se usavam demorava 12 horas até se obter o mesmo resultado.

O centro de processamento tinha uma estrutura muito simular a dos processadores mais básicos que actualmente utilizamos nas nossas calculadoras de bolso. Tinha 20 registos de dez dígitos cada, onde se podiam efectuar somas, subtracçoes, multiplicaçoes, divisoes e raízes quadradas. As programadoras do ENIAC O ENIAC era programado através de milhares de interruptores, podendo cada um dele assumir o valor 1 ou 0 consoante o interruptor estava ligado ou desligado. Para o programar era necessário uma grande quantidade de pessoas que percorriam as longas filas de interruptores dando ao ENIAC as instruçoes necessárias para computar, ou seja, calcular. Existia uma equipa de 80 mulheres na Universidade da Pensilvânia cuja funçao era calcular manualmente as equaçoes diferenciais necessárias para os cálculos de balística. O exército chamava a funçao destas pessoas: computadores. Quando o ENIAC ficou pronto 6 mulheres computador foram escolhidas para testarem a nova máquina. Pormenor da sala do ENIAC Versao modernizada do ENIAC Curiosamente, o termo deixou de estar associado as pessoas que operavam a máquina para dar nome a máquina propriamente dita, uma vez que de facto a máquina passou a realizar as contas que antes eram realizadas por essas pessoas. O ENIAC torna-se obsoleto e economicamente inviável de manter após 10 anos de operaçao, tendo sido desmontado. Hoje encontram-se peças do ENIAC por muitos museus do mundo, incluindo o Smithsonian em Washington D.C. e no local preciso onde foi construído, na Moore School for Electrical Engineering da Universidade da Pensilvânia. O ENIAC serviu de inspiraçao para muitos outros computadores que se seguiram como: o EDVAC (Electronic Discrete Variable Computer); o ORDVAC (Ordnance Variable Automatic Computer; SEAC (Standards Automatic Computer) e o UNIVAC, este último também construído por Eckert e Mauchly para o processamento dos dados dos censos da populaçao americana. Em 1955, um computador já só pesava 3 toneladas e consumia 50 kwatts de potencia, tendo um custo de $200 000. Uma máquina destas podia realizar 50 multiplicaçoes por segundo. Assim, os primeiros computadores eram também eles máquinas que só estavam ao alcance de grandes empresas ou instituiçoes que tinham necessidades de cálculo muito exigentes e que possuíam as condiçoes económicas para tao grande investimento. Com o rápido desenvolvimento dos transístores entre 1952 e 1960, os tubos de vácuo tornaram-se obsoletos e foi este avanço tecnológico que permitiu a criaçao de máquinas muito mais rápidas, mais pequenas e mais baratas.

Com o tempo, os transístores passaram a ser a base da electrónica, seguindo-se a VLSI (Very Large Scale Integration), ou seja, a construçao de circuitos cada vez mais pequenos por forma a que possam ser mais leves e dispender menos energia, por terem menos superfície para a dissipaçao de energia por calor. Esta miniaturizaçao permitiu que se tivesse a mesma capacidade de cálculo de um ENIAC na palma de uma mao. A diminuiçao do tamanho fez também diminuir a quantidade de energia necessária e o custo caiu com a produçao em série dos novos processadores. Em 1977 uma calculadora manual pesava menos de meio quilo e consumia meio watt e podia realizar 250 multiplicaçoes por segundo, custando $300. Hoje uma calculadora pesa poucos gramas podendo ser incorporada em réguas ou agendas, funciona até a energia solar e custa menos de $5. Um Pentium a 150Mhz é capaz de realizar 300 milhoes de somas por segundo, enquanto o ENIAC apenas conseguia realizar 5 000. A memória do ENIAC apenas permitia guardar 200 bits, enquanto qualquer computador tem pelo menos 128 Mbytes, ou seja, 1 073 741 824 bits. Nos meados da década de 70 os computadores começaram a ter preços cada vez mais acessíveis. Em 1981 a IBM lançou no mercado o PC (Personal Computer). O PC distinguia-se das máquinas existentes até entao por estar dirigido a utilizadores individuais que poderiam passar a ter na sua secretária uma máquina para uso exclusivo, quando até aí esse conceito nao existia... Os computadores eram mainframe, centralizados, e os utilizadores tinham apenas um monitor e um teclado sendo todo o processamento realizado no servidor. O PC tinha ainda outra característica que o tornou revolucionário que era o facto de ter uma arquitectura aberta, ou seja, qualquer fabricante poderia criar peças adaptáveis aquela máquina dando-lhe uma funcionalidade mais especializada, o que até aí era sempre privilégio reservado para o fabricante do computador. Assim o PC passou a ser o standard de facto na indústria. Uma regra estatística que se tem verificado desde a invençao do primeiro computador é a Lei de Moore que diz: “A cada 18 a 24 meses é lançada uma nova tecnologia que permite que os computadores dupliquem o desempenho”. IIsto estava errado pois em 2004 os melhores computadores funcionavam 3.2 Ghz e agora (Outubro/2009)os melhores computadores ainda só funcionam a 5 Ghz

Sistema operativo
Estimativa do uso atual de sistemas operativos segundo uma amostra de computadores com acceso a Internet (Fonte: W3counter).

(português europeu) Um sistema operativo ou sistema brasileiro) operacional (português é um programa ou um conjunto de programas cuja função é gerenciar os recursos do sistema (definir qual programa recebe atenção do processador, gerenciar memória, criar um sistema de arquivos, etc.), além de fornecer uma interface entre o computador e o usuário. É o primeiro programa que a máquina executa no momento em que é ligada (num processo chamado de bootstrapping) e, a partir de então, não deixa de funcionar até que o computador seja desligado. O sistema operacional reveza sua execução com a de outros programas, como se estivesse vigiando, controlando e orquestrando todo o processo computacional.

Segundo alguns autores (Silberschatz et al, 2005; Stallings, 2004; Tanenbaum, 1999), existem dois modos distintos de conceituar um sistema operacional: •pela perspectiva do usuário ou programador (visão top-down): é uma abstração do hardware, fazendo o papel de intermediário entre o aplicativo (programa) e os componentes físicos do computador (hardware); ou •numa visão bottom-up, de baixo para cima: é um gerenciador de recursos, i.e., controla quais aplicações (processos) podem ser executadas, quando, que recursos (memória, disco, periféricos) podem ser utilizados. A sigla usual para designar esta classe de programas é SO (em português) ou OS (do inglês Operating System).

História
Na primeira geração de computadores (aproximadamente 1945-1955), os computadores eram tão grandes que ocupavam salas imensas. Foram basicamente construídos com válvulas e painéis, os sistemas operacionais "não existiam". Os programadores, que também eram os operadores, controlavam o computador por meio de chaves , fios e luzes de aviso. Nomes como Howard Aiken (Harvard), John von Neumann (Instituto de Estudos Avançados de Princeton), John Adam Presper Eckert Jr e William Mauchley (Universidade da Pennsylvania) e Konrad Zuse (Alemanha) formaram, com suas contribuições, a base humana para o sucesso na construção dos computadores primitivos.

Na geração seguinte (aproximadamente 1955-1965), foram criados os sistemas em lote (batch systems), que permitiram melhor uso dos recursos computacionais. A base do sistema operacional era um programa monitor, usado para enfileirar tarefas (jobs). O usuário foi afastado do computador; cada programa era escrito em cartões perfurados, que por sua vez eram carregados, juntamente com o respectivo compilador (normalmente Fortran ou Cobol), por um operador, que por sua vez usava uma linguagem de controle chamada JCL (job control language). No início da computação os primeiros sistemas operacionais eram únicos, pois cada mainframe vendido necessitava de um sistema operacional específico. Esse problema era resultado de arquiteturas diferentes e da linguagem de máquina utilizada. Após essa fase, iniciou-se a pesquisa de sistemas operacionais que automatizassem a troca de tarefas (jobs), pois os sistemas eram monousuários e tinham cartões perfurados como entrada (eliminando, assim, o trabalho de pessoas que eram contratadas apenas para trocar os cartões perfurados). Um dos primeiros sistemas operacionais de propósito geral foi o CTSS, desenvolvido no MIT. Após o CTSS, o MIT, os laboratórios Bell da AT&T e a General Eletric desenvolveram o Multics, cujo objetivo era suportar centenas de usuários. Apesar do fracasso comercial, o Multics serviu como base para o estudo e desenvolvimento de sistemas operacionais. Um dos desenvolvedores do Multics, que trabalhava para a Bell, Ken Thompson, começou a reescrever o Multics num conceito menos ambicioso, criando o Unics (em 1969), que mais tarde passou a chamar-se Unix. Os sistemas operacionais eram geralmente programandos em assembly, até mesmo o Unix em seu início. Então, Dennis Ritchie (também da Bell) criou a linguagem C a partir da linguagem B, que havia sido criada por Thompson. Finalmente, Thompson e Ritchie reescreveram o Unix em C. O Unix criou um ecossistema de versões, onde destacam-se: System V e derivados (HP-UX, AIX); família BSD (FreeBSD, NetBSD, OpenBSD, etc.), Linux e até o Mac OS X (que deriva do Mach e FreeBSD). Na década de 1970, quando começaram a aparecer os computadores pessoais, houve a necessidade de um sistema operacional de utilização mais fácil. Em 1980, William (Bill) Gates e seu colega de faculdade, Paul Allen, fundadores da Microsoft, compram o sistema QDOS ("Quick and Dirty Operating System") de Tim Paterson por $50.000, batizam-no de DOS (Disk Operating System) e vendem licenças à IBM. O DOS vendeu muitas cópias, como o sistema operacional padrão para os computadores pessoais desenvolvidos pela IBM. IBM e Microsoft fariam, ainda, uma parceria para o desenvolvimento de um sistema operacional multitarefa chamado OS/2. Após o fim da breve parceria a IBM seguiu sozinha no desenvolvimento do OS/2. No começo da década de 1990, um estudante de computação finlandês postou um comentário numa lista de discussão da Usenet dizendo que estava desenvolvendo um kernel de sistema operacional e perguntou se alguém gostaria de auxiliá-lo na tarefa. Este estudante chamava-se Linus Torvalds e o primeiro passo em direção ao tão conhecido Linux foi dado naquele momento.

Visão geral
Um sistema operativo pode ser visto como um programa de grande complexidade que é responsável por todo o funcionamento de uma máquina desde o software a todo hardware instalado na máquina. Todos os processos de um computador estão por de trás de uma programação complexa que comanda todas a funções que um utilizador impõe à máquina. Existem vários sistemas operativos; entre eles, os mais utilizados no dia a dia, normalmente utilizados em computadores domésticos, são o Windows, Linux e Mac OS X. Um computador com o sistema operativo instalado poderá não dar acesso a todo o seu conteúdo dependendo do utilizador. Com um sistema operativo, podemos estabelecer permissões a vários utilizadores que trabalham com este. Existem dois tipos de contas que podem ser criadas num sistema operativo, as contas de Administrador e as contas limitadas. A conta Administrador é uma conta que oferece todo o acesso à máquina, desde a gestão de pastas, ficheiros e software de trabalho ou entretenimento ao controlo de todo o seu Hardware instalado. A conta Limitada é uma conta que não tem permissões para aceder a algumas pastas ou instalar software que seja instalado na raiz do sistema ou então que tenha ligação com algum Hardware que altere o seu funcionamento normal ou personalizado pelo Administrador. Para que este tipo de conta possa ter acesso a outros conteúdos do disco ou de software, o administrador poderá personalizar a conta oferecendo permissões a algumas funções do sistema como também poderá retirar acessos a certas áreas do sistema. O sistema operativo funciona com a iniciação de processos que este irá precisar para funcionar correctamente. Esses processos poderão ser ficheiros que necessitam de ser frequentemente actualizados, ou ficheiros que processam dados úteis para o sistema. Poderemos ter acesso a vários processos do sistema operativo a partir do gestor de tarefas, onde se encontram todos os processos que estão em funcionamento desde o arranque do sistema operativo até a sua utilização actual. Pode-se também visualizar a utilização da memória por cada processo, no caso de o sistema operativo começar a mostrar erros ou falhas de acesso a programas tornando-se lento, pode-se verificar no gestor de tarefas qual dos processos estará bloqueado ou com elevado número de processamento que está a afectar o funcionamento normal da memória.

Funcionamento
Um sistema operacional possui as seguintes funções: 1. gerenciamento de processos; 2. gerenciamento de memória; 3. sistema de arquivos; 4. entrada e saída de dados.

Gerenciamento de processos
O sistema operacional multitarefa é preparado para dar ao usuário a ilusão que o número de processos em execução simultânea no computador é maior que o número de processadores instalados. Cada processo recebe uma fatia do tempo e a alternância entre vários processos é tão rápida que o usuário pensa que sua execução é simultânea. São utilizados algoritmos para determinar qual processo será executado em determinado momento e por quanto tempo. Os processos podem comunicar-se, isto é conhecido como IPC (Inter-Process Communication). Os mecanismos geralmente utilizados são: •sinais; •pipes; •named pipes; •memória compartilhada; •soquetes (sockets); •trocas de mensagens. O sistema operacional, normalmente, deve possibilitar o multiprocessamento (SMP ou NUMA). Neste caso, processos diferentes e threads podem ser executados em diferentes processadores. Para essa tarefa, ele deve ser reentrante e interrompível, o que significa que pode ser interrompido no meio da execução de uma tarefa.

Gerenciamento de memória
O sistema operacional tem acesso completo à memória do sistema e deve permitir que os processos dos usuários tenham acesso seguro à memória quando o requisitam. Vários sistemas operacionais usam memória virtual, que possui 3 funções básicas: 1. assegurar que cada processo tenha seu próprio espaço de endereçamento, começando em zero, para evitar ou resolver o problema de relocação (Tanenbaum, 1999); 2. prover proteção da memória para impedir que um processo utilize um endereço de memória que não lhe pertença; 3. possibilitar que uma aplicação utilize mais memória do que a fisicamente existente.

Sistema de arquivos
A memória principal do computador é volátil, e seu tamanho é limitado pelo custo do hardware. Assim, os usuários necessitam de algum método para armazenar e recuperar informações de modo permanente. Um arquivo é um conjunto de bytes, normalmente armazenado em um dispositivo periférico não volátil (p.ex., disco), que pode ser lido e gravado por um ou mais processos.

Interface de uso
Sistema operacional com Debian com blackbox. interface gráfica, no caso, o

Os sistemas operacionais fornecem abstração de hardware para que seus recursos possam ser usados de maneira correta e padronizada, mas para ser possível operar um computador, é necessário fornecer também uma interface para que o usuário possa desfrutar dos recursos do sistema. Atualmente existem dois tipos de interface: o GUI (graphical user interface), conhecida também por interface gráfica, e o CUI (command-line interface), sendo essa mais conhecida como interface de linha de comando.

GUI (Graphical user interface)
Nesse tipo de interface, o usuário tem a disposição um ambiente de trabalho composto por menus, ícones, janelas e outros itens disponíveis. O usuário interage com esse tipo de interface usando o mouse, podendo também usar o teclado e teclas de atalho. É possível fazer todo tipo de tarefa usando interface gráfica, como edição de vídeos e imagens, sendo somente alguns tipos muito específicos de tarefas que se saem melhor em linha de comando. Acrescentar facilidade de uso e agilidade é o objetivo da GUI, tendo a desvantagem de consumir muito mais memória que interfaces de linha de comando. Em sistemas unix-likes, existe a possibilidade de escolher o gerenciador de janelas a utilizar, aumentando em muito a liberdade de escolha do ambiente. .
Sistema operacional em linha de comando.

CUI line user

(Commandinterface)

Além da interface gráfica, existe a interface de linha de comando, que funciona basicamente com a digitação de comandos, sendo nesse relativamente pouco interativa. Os comandos digitados são interpretados por um interpretador de comandos, conhecidos também por shells, bastante comuns em sistemas unix-likes. Um exemplo de interpretador de comandos seria o Bash. Usada geralmente por usuários avançados e em atividades específicas, como gerenciamento remoto, utiliza poucos recursos de hardware em comparação a interface gráfica. Nesse tipo de ambiente, raramente se usa o mouse, embora seja possível através do uso da biblioteca ncurses no desenvolvimento dos softwares.

Classificações
Em relação ao seu projeto (arquitetura), segundo Tanenbaum (1999): •Kernel monolítico ou monobloco: o kernel consiste em um único processo executando numa memória protegida (espaço do kernel) executando as principais funções. Ex.: MAC OS X, OS/2, Windows, Linux, FreeBSD. •Micronúcleo ou modelo cliente-servidor: o kernel consiste de funções mínimas (comunicação e gerenciamento de processos), e outras funções, como sistemas de arquivos e gerenciamento de memória, são executadas no espaço do usuário como serviços; as aplicações (programas) são os clientes. Ex.: GNU Hurd, Mach. •Sistema em camadas: funções do kernel irão executar em camadas distintas, de acordo com seu nível de privilégio. Ex.: Multics. •Monitor de máquinas virtuais: fornece uma abstração do hardware para vários sistemas operacionais. Ex.: VM/370, VMware, Xen. Quanto ao gerenciamento de processos, pode-se usar a seguinte classificação: •Monotarefa: pode-se executar apenas um processo de cada vez Ex.: MS-DOS. •Multitarefa: além do próprio SO, vários processos de utilizador (tarefas) estão carregados em memória, sendo que um pode estar ocupando o processador e outros ficam enfileirados, aguardando a sua vez. O compartilhamento de tempo no processador é distribuído de modo que o usuário tenha a impressão que vários processos estão sendo executados simultaneamente. Ex: OS/2, Windows, Linux, FreeBSD e o Mac OS X.

•Multiprocessamento: o SO distribui as tarefas entre dois ou mais processadores. •Multiprogramação: o SO divide o tempo de processamento entre vários processos mantendo o processador sempre ocupado. Quanto à quantidade de usuários que podem utilizar o sistema simultaneamente: •Monousuário: apenas um usuário por vez (apesar de poder suportar recursos como troca de usuário). Ex.: Windows. Esse também pode ser acesado por terminais e conexão remota. •Multiusuário: vários usuários usam o computador ao mesmo tempo, seja por diversos terminais, seja por conexão remota como o SSH. Ex.: Linux, Unix.

Exemplos de sistemas operacionais ativos
•Windows •Mac OS X •Linux •Solaris •FreeBSD •Haiku •eComStation •FreeDOS •Unix System V •AmigaOS •Minix

Exemplos de sistemas operacionais importantes que foram descontinuados
•MS-DOS •OS/2 •BeOS •NeXTStep •CP/M

Referências
•BACH, Maurice J. The design of the Unix operating system. Upper Saddle River: Prentice Hall. 1990. •BOVET Daniel P.; CESATI, Marco. Understanding de Linux kernel. 3.ed. Sebastopol: O'Reilly. 2005. •MCKUSICK, Marshall K.; NEVILLE-NEIL, George V. The design and implementation of the FreeBSD operating system. Upper Saddle River: Addison-Wesley. 2004. •RUSSINOVITCH, Mark E.; SOLOMON, David A. Microsoft Windows internals. 4.ed. Redmond: Microsoft Press. 2005. •SILBERSCHATZ, Avi; GALVIN, Peter B.; GAGNE, Greg. Operating system concepts. 7.ed. Hoboken: Wiley. 2005. •STALLINGS, William. Operating systems: internals and design principles. 5.ed. Upper Saddle River: Pearson Prentice Hall. 2004. •TANENBAUM, Andrew. Sistemas operacionais modernos. Rio de Janeiro: LTC. 1999.

Ver também
•Pseudo-Sistema Operacional •Sistema distribuído •Lista de sistemas operativos •Inter-Process Communication •Sistemas Operacionais On-line •Sistema operacional em disco

núcleo
Um núcleo de sistema conecta o de um computador. software aplicativo ao hardware

Em computação, o núcleo ou cerne (em inglês: kernel) é o componente central do sistema operativo da maioria dos computadores; ele serve de ponte entre aplicativos e o processamento real de dados feito a nível de hardware. As responsabilidades do núcleo incluem gerenciar os recursos do sistema (a comunicação entre 5 componentes de hardware e software). Geralmente como um componente básico do sistema operativo, um núcleo pode oferecer a camada de abstração de
5Wulf 74 pp.337-345

nível mais baixo para os recursos (especialmente processadores e dispositivos de entrada/saída) que softwares aplicativos devem controlar para realizar sua função. Ele tipicamente tornas estas facilidades disponíveis para os processos de aplicativos através de mecanismos de comunicação entre processos e chamadas de sistema. Tarefas de sistemas operativos são feitas de maneiras diferentes por núcleos diferentes, dependendo do seu desenho e abordagem. Enquanto núcleos monolíticos tentarão alcançar seus objetivos executando todos códigos de sistema no mesmo espaço de endereçamento para aumentar a performance do sistema, micronúcleos executam a maioria dos serviços do sistema no espaço de usuário como servidores, buscando melhorar a manutenção e a modularidade do sistema operativo.6 Uma gama de possibilidades existem entre estes extremos.

Visão geral
Uma visão típica de uma como séries de camadas de montador, núcleo, sistema também Organização Estruturada Tanenbaum.). arquitetura de computadores abstração: hardware, firmware, operativo e aplicativos (veja de Computadores, por Andrew S.

Na definição do 'núcleo', palavra é "tradicionalmente do sistema operativo que é software no sistema."7

Jochen Liedtke disse que a usada para definir a parte obrigatória e comum a todo

A maioria dos sistemas operativos depende do conceito de núcleo. A existência de um núcleo é uma consequência natural de projetar um sistema de computador como séries de camadas de abstração,8 cada uma das funções dependendo das funções das camadas abaixo de si. O núcleo deste ponto de vista, é simplesmente o nome dado ao nível mais inferior de abstração que é implementado em software. Para evitar ter um núcleo, teriase que projetar todo o software no sistema de modo a não utilizar abstração alguma; isto iria aumentar a complexidade e o projeto a tal ponto que apenas os sistemas mais simples seriam capazes de ser implementados.

6Roch 2004 7Liedtke 95 8Tanenbaum 79, chapter 1

Enquanto isto hoje é chamado núcleo, originalmente a mesma parte do sistema também foi chamado o nucleus ou caroço9101112 (Nota, no entanto, este termo caroço também foi usado para se referir a memória primordial de um sistema de computador, por que alguns dos primeiros computadores usaram uma forma de memória chamada memória de caroços magnéticos), e foi concebido originalmente como contendo apenas os recursos de suporte essenciais do sistema operativo. Na grande maioria dos casos, o processo de iniciação começa executando o núcleo no modo supervisor.13 O núcleo depois inicializa a si e depois o primeiro processo. Depois disto, tipicamente, o núcleo não executa diretamente, apenas em resposta para eventos externos (ex., através de chamadas de sistema usados pelos aplicativos para requisitar serviços do núcleo, ou via interrupções usadas pelo hardware para notificar o núcleo sobre eventos). Além disso, tipicamente o núcleo fornece um laço que é executado sempre que nenhum processo esta disponível para execução; geralmente chamado de processo desocupado. O desenvolvimento do núcleo é considerado uma das mais complexas e difíceis tarefas em programação.14 Sua posição central em um sistema operativo implica na necessidade de boa performance, que define o núcleo como peça de software crítica e torna seu desenvolvimento correto e implementação correta difícil. Devido a diversas razões, o núcleo pode até não ser capaz de utilizar mecanismos de abstração, que ele fornece a outro software. Tais razões incluem preocupações com o gerenciamento de memória (ex. uma função em modo de usuário pode depender de memória estando sujeita a paginação por demanda, mas como o próprio núcleo fornece esta facilidade, ele não pode utilizá-la, pois ele pode não permanecer na memória para fornecer esta facilidade) e a falta de reentrância, logo o seu desenvolvimento torna-se ainda mais difícil para engenheiros de software. Geralmente um núcleo vai fornecer recursos para escalonamento de processos de baixo nível15, comunicação entre processos, sincronização de processos, troca de contexto, manipulação de blocos de controle de processo, gerenciamento de interrupções, criação e destruição de processos, e suspensão e continuação de processos (veja estados de processos).1617

9 10Deitel 82, p.65-66 cap. 3.9 11Lorin 81 pp.161-186, Schroeder 77, Shaw 75 pp.245-267 12Brinch Hansen 70 pp.238-241 13O nível de privilégio mais alto possui vários nomes pelas diferentes arquiteturas, tais como modo supervisor, modo núcleo, CPL0, DPL0, Anel 0, etc. Veja [Anel (segurança)] para mais informações. 14Desenvolvimento do SO Bona Fide - Tutorial do Bran para Desenvolvimento de Núcleo, por Brandon Friesen 15Para escalonamento de processos de baixo nível veja Deitel 82, ch. 10, pp. 249–268. 16 17

Facilidades básicas do núcleo
O principal propósito do núcleo é gerenciar os recursos do computador e permitir que outros programas rodem e usem destes recursos.18 Tipicamente estes recursos consistem de: •A unidade de processamento central (CPU, p processador). Esta é a parte mais central de um sistema de computação, responsável por rodar ou executar programas nele. O núcleo têm a responsabilidade de decidir em qualquer momento qual dos programas em execução deve ser alocado para o processador ou processadores (cada um dos quais geralmente pode executar um programa por vez) •A memória. A memória é usada para armazenas ambos instruções do programa e dados. Tipicamente, ambos precisam estar presentes na memória de modo a tornar a execução do programa possível. Frequentemente múltiplos programas buscarão acesso à memória ao mesmo tempo, na maioria das vezes exigindo mais memória do que o computador pode disponibilizar. O núcleo é responsável pela decisão de que memória cada processo pode utilizar, e determinar o que fazer quando menos do suficiente está disponível. •Qualquer dispositivo de entrada/saída presente no computador, tais como teclado, rato, entradas de disquete, impressoras, telas, etc. O núcleo aloca pedidos de aplicativos para realizar entrada/saída para um dispositivo apropriado (ou subseção de um dispositivo, no caso de arquivos em um disco ou janelas em uma tela) e fornece métodos convenientes para o uso do dispositivo (tipicamente abstraído ao ponto onde o aplicativo não precisa mais conhecer os detalhes da implementação do dispositivo). Aspectos importantes no gerenciamento de recursos são a definição de um domínio de execução (espaço de endereçamento) e o mecanismo de proteção utilizado para mediar o acesso a recursos dentro de um domínio.19 Núcleos geralmente tão oferecem métodos para sincronização e comunicação entre processos (IPC (em inglês)). Um núcleo pode implementar estes recursos ele mesmo, ou depender de alguns processos que ele executa para fornecer estas facilidades a outros processos, no entanto neste caso ele deve oferecer algum modo do IPC permitir que processos acessem as facilidades fornecidas um pelo outro. Finalmente, um núcleo deve oferecer um método de acesso a estas facilidades para os programas em execução.

18 19

Gerenciamento de Processos
A principal tarefa de um núcleo é permitir a execução de aplicativos e ajudá-los com recursos como abstrações de hardware. Um processos define que porções da memória o aplicativo pode acessar.20 (Para esta introdução, processo, aplicativo e programa são usados como sinônimos.) O gerenciamento de processos do núcleo deve levar em conta o equipamento de hardware embarcado para proteção de memória.21 Para rodar um aplicativo, um núcleo geralmente cria um espaço de endereçamento para o aplicativo, carrega o arquivo contendo de instruções do programa na memória (talvez via paginação por demanda), cria uma pilha para o programa e ramos para uma dada localização dentro do programa, iniciando, portanto a sua execução.22 Núcleos multitarefa são capazes de dar ao usuário a ilusão de que um número de processos que esta rodando simultaneamente no sistema é maior do que o número de processos que aquele sistema é fisicamente capaz de rodar simultaneamente. Usualmente, o número de processos que um sistema pode rodar simultaneamente é igual o número de CPUs que ele possui instaladas (no entanto, isto pode não ser o caso de processadores que suportam múltiplas linhas de execução simultâneas). Em um sistema multitarefas preemptivo, o núcleo dará a todos programas uma parcela do tempo e vai alternar de processo a processo tão rapidamente que dará ao usuário a impressão de como se os processos estivessem sendo executados simultaneamente. O núcleo utiliza algoritmos de escalonamento para determinar qual processo será executado a seguir e quanto tempo lhe será dado. O algoritmo escolhido pode permitir que alguns processos tenham uma prioridade mais alta que muitos outros. O núcleo geralmente também provê a esses processos uma maneira de comunicarem-se; isto é chamado comunicação entre processos (IPC (em inglês)) e as principais implementações são memória compartilhada, troca de mensagens e chamadas de procedimento remoto (veja computação concorrente). Outros sistemas (particularmente em computadores menores, menos potentes) podem fornecer multitarefa de cooperação, em que cada processo é permitido rodar sem ininterruptamente até que ele faça uma requisição especial que avisa ao núcleo que ele pode alternar para outro processo. Tais requisições são conhecidos como "indulgências" (yielding(em inglês), e tipicamente ocorrem em resposta a um pedido para comunicação entre processos, ou para esperar até o acontecimento de um evento. Versões mais antigas de ambos Microsoft Windows e Mac OS utilizaram o conceito de multitarefa cooperativa, mas alternaram para esquemas preemptivos conforme a potência dos computadores alvo de seu mercado aumentava[carece de fontes?].

20Levy 1984, p.5 21Needham, R.M., Wilkes, M. V. Domínio de proteção e gerenciamento de processos, Computer Journal, vol. 17, no. 2 de maio de 1974, pp 117-120. 22Silberschatz 1990

O sistema operativo pode também suportar o multiprocessamento (multiprocessamento simétrico (SMP (em inglês)), ou, acesso não-uniforme a memória); neste caso, diferentes programas e linhas de execução podem rodar em diferentes processadores. Um núcleo para tal sistema deve ser projeto para ser reentrante, o que significa que ele pode rodar seguramente duas partes de seu código simultaneamente. Isto tipicamente significa oferecer mecanismos de sincronização (como trava-giros) para assegurar que dois processadores não tentarão modificar os mesmos dados ao mesmo tempo.

Gerenciamento de Memória
O núcleo possui acesso completo a memória do sistema e deve permitir que processos acessema memória com segurança conforme a sua necessidade. Frequentemente o primeiro passo para isso é o endereçamento virtual, geralmente alcançado através da paginação e/ou segmentação. Endereçamento virtual permite ao núcleo fazer com que um dado endereço físico pareça ser outro endereço, o endereço virtual. Espaços de endereço virtual podem ser diferentes para diferentes processos; a memória que um processos acessa em um endereço (virtual) particular pode ser diferente da que um outro processo acessa pelo mesmo endereço. Isto permite a todos programas funcionar como se ele fosse o único em execução, além do núcleo, e por isso evita que aplicativos travem uns aos outros.23 Em vários sistemas, o endereço virtual de um programa pode se referir a dados que não estão na memória atualmente. A cama de indireção oferecida pelo endereçamento virtual permite que o sistema utilize meios de armazenagem de dados, como um disco rígido, para armazenar o que de outro modo teria que permanecer na memória (RAM(em inglês)). Como resultado. sistemas operativos podem permitir que programas usem mais memória do que está fisicamente disponível. Quando um programa precisa de dados que não estão na RAM, a CPU avisa o núcleo que isto ocorre, e o núcleo responde escrevendo o conteúdo de um bloco de memória inativo para o disco (se necessário), e substituindo-o na memória com os dados requisitados pelo programa. O programa pode então continuar sua execução do ponto em que foi suspenso. Este esquema é geralmente conhecido como paginação por demanda. Endereçamento virtual também permite a criação de partições virtuais de memória em duas áreas separadas, uma sedo reservada para o núcleo (espaço de núcleo) e o outro para os aplicativos (espaço de usuário). Os aplicativos não tem permissão do processador para acessar a memória do núcleo, portanto prevenindo que um aplicativo possa danificar o núcleo em execução. Esta partição fundamental de espaço de memória contribuiu muito para os projetos de núcleos realmente de propósito geral e é quase universal em tais sistemas, embora algumas núcleos de pesquisa (ex. Singularity) usarem outros métodos.

23

Gerenciamento de dispositivos
Para realizar funções úteis, processos precisam acessar periféricos conectados ao computador, que são controlados pelo núcleo através do driver do dispositivo. Por exemplo, para mostrar ao usuário algo utilizando a tela, um aplicativo teria que fazer um requisição ao núcleo que encaminharia a requisição para o seu driver de tela, que é responsável por realmente tracejar os carácteres/pixeis.24 Um núcleo deve manter uma lista de dispositivos disponíveis. Esta lista pode ser conhecida de antemão (ex. em um sistema embarcado onde o núcleo será reescrito se o hardware disponível mudar), configurado pelo usuário (típico em computadores pessoais antigos e em sistemas projetados para uso pessoal) ou detectado pelo sistema durante a execução (normalmente chamado Ligar e Usar). Em um sistema "Ligar e Usar", um dispositivo realizar primeiro uma sondagem em nos diferentes barramentos de hardware, como Interconector de Componentes Periféricos (PCI(em inglês)) ou Barramento Serial Universal (USB(em inglês)), para detectar os dispositivos instalados, depois busca os drivers apropriados. Como o gerenciamento de dispositivos é um tópico muito especifico do SO, estes drivers são manipulados de modos diferentes por cada tipo de desenho de núcleo, mas em todos os casos, o núcleo tem que fornecer a entrada/saída para permitir que os drivers acessem fisicamente seus dispositivos através alguma porta ou localização da memória. Decisões muito importantes precisam ser feitas ao projetar o sistema de gerenciamento de dispositivos, já que em alguns projetos de acesso podem envolver trocas de contexto , tornando a operação custosa para o processador e causando um gasto excessivo de recursos.[carece de
fontes?]

Chamadas do Sistema
Para realmente realizar algo útil, um processo deve acessar os serviços oferecidos pelo núcleo. Isto é implementado por cada núcleo, mas a maioria oferece uma Biblioteca padrão do C ou uma Interface de programação de aplicativos, que envolve as funções relativas ao núcleo.25 O método de invocar as funções do núcleo varia de núcleo para núcleo. Se o isolamento de memória está sendo usado, é impossível para um processo de usuário chamar o núcleo diretamente, por que isso seria uma violão das regras de controle de acesso do processador. Algumas possibilidades são: •Usar uma interrupção de software simulada. Este método está disponível na maioria dos hardwares, e é, portanto, muito comum.

24 25Tanenbaum, Andrew S.. Modern Operating Systems. 3rd Edition.ed. pp. 50–51.

•Usando um portão de chamada. Um portão de chamada é um endereço especial armazenado pelo núcleo em uma lista na memória do núcleo em uma localização conhecida pelo processador. Quando o processador detecta uma chamada para este endereço, ele ao invés disso redireciona para a localização alvo sem causar nenhuma violação de acesso. Exige suporte no hardware, mas este tipo de hardware é muito comum. •Usando uma instrução de chamada de sistema especial. Esta técnica exige suporte especial no hardware, que em algumas arquiteturas habituais não possuem (notavelmente, x86). Instruções de chamadas de sistema foram adicionadas a modelos recentes do processadores x86, embora, poucos (mas não todos) sistemas operativos fazem uso destes quando disponíveis. •Usando uma fila baseada na memória. Um aplicativo que faz um grande número de requisições mas não precisa esperar o resultado de cada uma pode adicionar detalhes das requisições em uma área da memória que o núcleo sonda periodicamente para encontrar requisições.

Decisões de desenho do Núcleo
Problemas com o suporte do núcleo para proteção
Uma consideração importante no desenho do núcleo é o suporte que ele oferece para proteção contra faltas (tolerância a falhas) e de comportamentos # malintencionados (segurança). Estes dois aspectos geralmente não são claramente distinguidos, e a separação no desenho do núcleo leva a rejeição de uma estrutura hierárquica de proteção.26 Os mecanismos ou políticas oferecidos pelo núcleo podem ser classificados de acordo com vários critérios, como: estático (forçado durante o tempo de compilação) ou dinâmico (forçado durante o tempo de execução); preemptivo ou pós-detecção; de acordo com os princípios de proteção a que eles correspondem (ex. Denning2728); quer eles sejam suportados pelo hardware ou baseados em linguagem; quer eles sejam mais um mecanismo aberto ou ma política compulsiva; e muito mais.

26 27Denning 1976 28Swift 2005, p.29 quote: "isolação, controle de recursos, verificação de decisão (checagem), e recuperação de erros."

Tolerância a falhas
Uma medida útil para o nível de tolerância a falhas de um sistema é quão estrito ele é com relação ao princípio do menor privilégio.29 Em casos onde múltiplos programas estão rodando em um único computador, é importante prevenir falhas em um dos programas de afetar negativamente outro. Estendendo-se ao desenho com más-intenções mais do que a falha em si, isto também implica a segurança, quando é necessário impedir processos de acessar informações sem que lhes seja dada a devida permissão. As duas principais implementações via hardware30 para proteção (de informações sensíveis) são domínios hierárquicos de proteção (também chamadas arquiteturas anel, arquiteturas de segmento ou modo supervisor),31 e endereçamento baseado em capacidades.32
anéis de privilégio, como na habitual de domínios usados em muitos sistemas nível de tolerância a falhas. x86, são uma abordagem hierárquicos de proteção comerciais para obter algum

Domínios hierárquicos de proteção são muito menos flexíveis, como no caso de qualquer núcleo com uma estrutura hierárquica presumida como um critério de desenvolvimento global.33 No caso de proteção não é possível designar diferentes privilégios a processos que não estão no mesmo nível de privilégio, e por isso não é possível corresponder aos quatro princípios de Denning para a tolerância a falhas3435, particularmente o princípio do menor privilégio. Domínios hierárquicos de proteção também carregam uma enorme desvantagem na performance, já que a interação entre diferentes níveis de proteção, quando um processos tem que manipular uma estrutura de dados em ambos 'modo usuário' e 'modo supervisor', sempre exige cópia de mensagens (transmissão por valor).36 Um núcleo baseado em capacidades, no entanto, é mais flexível em designar privilégios, pode corresponder aos princípios de Denning para a tolerância a falhas37, e geralmente não sofrem de problemas de performance da cópia por valor.

29Cook, D.J. Medindo a proteção da memória, aceito na terceira Conferência Internacional da Engenharia de Software, Atlanta, Georgia, Maio de 1978. 30Swift 2005 p.26 31Intel Corporation 2002 32Houdek et al. 1981 33 34 35 36Hansen 73, Seção 7.3 p.233 "interações entre diferentes níveis de proteção exigem a transmissão de mensagens por valor" 37Linden 76

Ambas implementações tipicamente exigem algum suporte de hardware ou firmware para serem operáveis e eficientes. O suporte de hardware para domínios hierárquicos de proteção38 geralmente é de "modos de CPU." Um modo simples e eficiente de fornecer suporte a hardware é delegar à unidade de gerenciamento de memória a responsabilidade por checar as permissões de acesso para todos acessos a memória, um mecanismo chamado endereçamento baseado em capacidades.39 Falta na maioria das arquiteturas comerciais, o suporte a MMU para capacidades. Uma abordagem alternativa é simular capacidades usando domínios hierárquicos comumente suportados; nesta abordagem, cada objeto protegido deve residir num espaço de endereçamento ao qual o aplicativo não possui acesso; o núcleo também mantém uma lista de capacidades em tal memória. Quando um aplicativo precisa acessar um objeto protegido por uma capacidade, ele realiza uma chamada de sistema e o núcleo realiza o acesso a ele. O custo de performance de trocar de espaço de endereçamento limita a praticabilidade desta abordagem em sistemas com interações complexas entre objetos, mas é utilizado nos sistemas operativos atuais para objetos que não são acessados frequentemente ou que não devem ser feitos rapidamente.4041 Implementações onde os mecanismos de proteção não suportados pelo firmware, mas são, ao invés disso, simulados em níveos mais altos (ex. simulando capacidades ao manipular tabelas de páginas em hardware que não possui suporte direto), são possíveis, mas há implicações de performance.42 No entanto, falta de suporte no hardware pode não ser problema, para sistemas que escolhem usar uma proteção baseada em linguagem.43 Uma decisão importante no projeto do núcleo é a escolha dos níveis de abstração em que os mecanismos e políticas de segurança devem ser implementados. Os mecanismos de segurança do núcleo têm um papel crítico no suporte a segurança nos níveis superiores.4445464748
38Schroeder 72 39 40Stephane Eranian & David Mosberger, Memória Virtual no núcleo Linux IA-64, Prentice Hall PTR, 2002 41Silberschatz & Galvin, Conceitos de Ssistema Operativo, 4th ed, pp445 & 446 42Hoch, Charles; J. C. Browne (Universidade do Texas, Austin) (Julho 1980). " An implementation of capabilities on the PDP-11/45" (pdf). ACM SIGOPS Operating Systems Review 14 (3): 22–32. DOI: 10.1145/850697.850701. 43Uma Abordagem a Segurança Baseada em Linguagem, Schneider F., Morrissett G. (Universidade Cornell) e Harper R. (Universidade Carnegie Mellon) 44 45P. A. Loscocco, S. D. Smalley, P. A. Muckelbauer, R. C. Taylor, S. J. Turner, and J. F. Farrell. A Inevitabilidade do Futuro: A Presunção Falsa de Segurança no Ambiente de Computação Moderna. Em procedimentos da 21ª Conferência Nacional de Segurança de Sistemas de Informação, páginas 303–314, Out. de 1998. [0]. 46J. Lepreau e outros. A Relevância Persistente do Ssistema Operativo Local aos Aplicativos Globais. Procedimentos da 7ª ACM SIGOPS Eurcshelf/book001/book001.html Segurança da Informação: Uma Coleção Integrada de Dissertações], IEEE Comp. 1995. 47J. Anderson, Estudo de Planejamento de Segurança de Computadores, Air Force Elect. Systems Div., ESD-TR-73-51, Outubro de 1972. 48* Jerry H. Saltzer, Mike D. Schroeder (Setembro de 1975). " A proteção de informação em sistemas de computador". Proceedings of the IEEE 63 (9): 1278–1308. DOI:

Uma abordagem é utilizar suporte no núcleo e firmware para tolerância a falhas (ver acima), e montar as políticas de segurança para comportamento malicioso em cima disso (adicionando recursos como mecanismos de criptografia quando necessário), delegar mais responsabilidade para o compilador. Implementações que delegam a aplicação de políticas de segurança para o compilador e/ou nível do aplicativo são geralmente chamados segurança baseada em linguagem. A falta de muitos mecanismos críticos de segurança nos principais sistemas operativos impede a implementação adequada de políticas de segurança no nível de abstração do aplicativo.49 Na verdade, um engano muito comum na segurança de computadores é que qualquer política de segurança pode ser implementada no aplicativo, independentemente do suporte no núcleo.50

Proteção baseada em hardware ou linguagem
Hoje, típicos sistemas de computação usam regras aplicadas pelo hardware sobre quais programas têm permissão para acessar quais dados. O processador monitora a execução e desliga um programa que viole uma regra (ex., um processo de usuário que tenta ler ou escrever na memória do núcleo, e assim por diante). Em sistemas que não possuem suporte para capacidades, processos são isolados um do outro, utilizando-se espaços de endereçamento separados.51 Chamadas de um processo de usuário no núcleo são regidas pela exigência de que eles usem um dos métodos de chamada do sistema descritos acima. Uma abordagem alternativa é usar proteção baseada em linguagem. Em um sistema de proteção baseado em linguagem, o núcleo vai permitir a execução apenas de código produzido por um compilador em que ele confie. A linguagem pode então, ser projetada de modo tal que será impossível para o programador instruir algo que violaria os requisitos de segurança.52 Desvantagens incluem: •Demora maior para a inicialização efetiva do aplicativo. Aplicativos deve ser verificadas sempre que elas são iniciadas para garantir que eles foram compiladas utilizando um compilador "corret", ou podem necessitar de recompilação de ambos código fonte ou bytecode. •Sistema s de tipo inflexível. Em sistemas tradicionais, aplicativos realizam frequentemente operações que não são de tipagem forte. Tais operações não podem ser permitidas em um sistema de proteção baseado em linguagem, o que significa que aplicativos podem precisar ser reescritos e podem, em alguns casos, perder performance.

10.1109/PROC.1975.9939. 49 50 51Jonathan S. Shapiro; Jonathan M. Smith; David J. Farber. " EROS: um sistema de capacidades rápido". Procedimentos da 70º simpósio ACM sobre princípios de sistemas operativos. 52

Vantagens desta abordagem incluem: •Separação de espaços de endereçamento desnecessária. A troca de espaços de endereçamento é uma operação lenta que causa grande degradação na performance, e muito trabalho de otimização é feito atualmente para prevenir trocar desnecessárias nos sistemas operativos. Trocar é complemente desnecessário em um sistema de proteção baseada em linguagem, já que todo código opera no mesmo espaço de endereçamento. •Flexibilidade. Qualquer esquema de proteção que possa ser desenvolvida para ser expresso através de linguagem de programação pode ser implementada através deste método. Mudanças no esquema de proteção (ex. de um sistema hierárquico para um baseado em capacidades) não exigem novo hardware. Exemplos de sistemas com proteção baseada em linguagem incluem o JX e Singularity.

Cooperação de processos
Edsger Dijkstra provou que partindo de um ponto de vista lógico, operações atômicas de travamento e destravamento operando em semáforos binários são suficientemente primitivos para expressar a qualquer funcionalidade de cooperação entre processos.53 No entanto esta abordagem é geralmente tomada como deficiente em termos de segurança e eficiência, enquanto que uma abordagem via troca de mensagens é mais flexível.54

Gerenciamento de dispositivos de entrada/saída
A ideia de um núcleo onde dispositivos de entrada/saída são gerenciados uniformemente com outros processos, como processos paralelos em cooperação, foi proposta e implementada primeiramente por Brinch Hansen (embora ideias similares tenham sido sugeridas em 19675556). Na descrição de Hansen disto, os processos "comuns" são chamados processos internos, enquanto que os dispositivos de entrada/saída são chamados processos externos.57

53Dijkstra, E. W. Processos Sequenciais Cooperadores. Math. Dep., Technological U., Eindhoven, Set. 1965. 54 55SHARER, um sistema de compartilhamento de tempo para o CDC 6600. Página visitada em 2007-01-07. 56Supervisores Dinâmicos - seu projeto e construção. Página visitada em 2007-01-07. 57

Abordagens de desenvolvimento de todo o núcleo
Naturalmente, as tarefas e recursos listados acima podem ser fornecidas de vários modos que diferem entre si em projeto e implementação. O princípio da separação entre o mecanismo e a política é a diferença substancial entre a filosofia de micronúcleo e núcleo monolítico.5859 Aqui um mecanismo é o apoio que permite a implementação de várias políticas diferentes, enquanto uma política é um "modo de operação" particular. Por exemplo, uma mecanismo pode oferecer às tentativas de entrada de um usuário um método de chamar um servidor de autorização para determinar se um acesso deve ser dado; uma política pode ser para o servidor de autorização exigir uma senha e checá-la contra uma senha embaralhada armazenada numa base de dados. Devido ao fato do mecanismo ser genérico, a política pode ser alterada com mais facilidade (ex. ao exigir o uso de um passe) do que se um mecanismo e política fossem integrados no mesmo módulo. Em um micronúcleo mínimo algumas políticas básicas são incluídas,60 e seus mecanismos permite que o que está rodando sobre o núcleo (a parte remanescente do sistema operativo e outras aplicações) decida quais políticas adotar (como gerenciamento de memória, escalonamento de processo de alto nível, gerenciamento de sistema de arquivos, etc.).6162 Um núcleo monolítico ao invés disso, tende a incluir várias políticas, então restringindo o resto do sistema dependente delas.

58Baiardi 1988 59Levin 75 60 61 62

Per Brinch Hansen apresentou um argumento convincente a favor da separação do mecanismo e da política.6364 A falha em preencher completamente esta separação, é uma das maiores causas para a falta de inovação nos sistemas operativos existentes atualmente,65 um problema comum nas arquiteturas de computador.666768 O projeto monolítico é induzido pela abordagem de arquitetura "modo núcleo"/"modo usuário" para proteção (tecnicamente chamada de domínios hierárquicos de proteção), que é comum em sistemas comercias convencionais;69 na verdade, todo módulo que necessite de proteção é portanto preferivelmente incluído no núcleo.70 Esta ligação entre projeto e "modo privilegiado" pode ser reconduzida até o problema chave da separação do mecanismo e da política;71 de fato, a abordagem de arquitetura de "modo privilegiado" se funde ao mecanismo de proteção com as políticas de segurança, enquanto a principal abordagem de arquitetura alternativa , endereçamento baseado em capacidades, claramente distingue ambos, levando naturalmente ao desenvolvimento de um micronúcleo design72 (veja Separação entre proteção e segurança). Enquanto núcleos monolíticos executam todo seu código no mesmo espaço de endereçamento (espaço de núcleo) micronúcleos tentam executar a maior parte dos seus serviços no espaço de usuário, buscando aprimorar a manutenção e modulabilidade do código base.73 A maioria dos núcleos não se encaixa exatamente em uma destas categorias, sendo mais encontrados entre estes dois projetos. Os chamados núcleos híbridos. Projetos mais exóticos como nanonúcleos e exonúcleos estão disponíveis, mas são usados raramente utilizado para sistemas produtivos. O virtualizador Xen, por exemplo, é um exonúcleo.
Diagrama de núcleos monolíticos

63 64 65 66Denning 1980 67Jürgen Nehmer A Imoralidade dos sistemas operativos, ou: Pesquisa nos sistemas operativos ainda é Justificável? Notas em Ciência da Computação; Vol. 563. Processo da Oficina Internacional sobre sistemas operativos dos anos 90 em diante. pp. 77 - 83 (1991) ISBN 3-54054987-0 [1] citação: "Os últimos 25 anos mostraram que a pesquisa sobre arquiteturas de sistemas operativos teve pouco efeito nos principais sistemas operativos." [2] 68Levy 84, p.1 citação: "Embora a complexidade dos aplicativos de computador aumenta anualmente, a arquitetura de hardware subjacente para aplicativos se manteve intocada por décadas." 69Levy 84, p.1 citação: "Arquiteturas convencionais suportam um único modo privilegiado de operação. Esta estrutura leva a um desenvolvimento monolítico; qualquer módulo precisando de proteção deve ser parte do único núcleo do sistema operativo. Se, ao contrário, qualquer módulo pudesse executar em um domínio protegido, sistemas poderiam ser construídos como uma coleção de módulos independentes ampliáveis por qualquer usuário." 70 71 72 73

Núcleos

monolíticos

Em um núcleo monolítico, todos os serviços do sistema operativo rodam junto com a linha de execução principal do núcleo, portanto, também se encontram na mesma área de memória. Esta abordagem permite o acesso vasto e poderoso de hardwares. Alguns desenvolvedores, como desenvolvedor do UNIX Ken Thompson, defendem que é "mais fácil de implementar um núcleo monolítico" 74 que micronúcleos. As principais desvantagens de núcleos monolíticos são as dependências entre os componentes do sistema - um defeito em um driver de dispositivo pode paralisar todo o sistema - e o fato de núcleos grandes podem se tornar muito difíceis de manter.
Na abordagem do fornece apenas permite a execução de separados que assumem monolítico, como drivers de interface de usuário, etc. micronúcleo, o próprio núcleo funcionalidades básicas que servidores, programas funções que seriam do núcleo dispositivos, servidores de

•BSD •Linux •MS-DOS e derivados, Windows 98 e Windows •Solaris •Palm OS
Diagrama de interação de um micronúcleo.

incluindo Windows 95, ME

Micronúcleos
A abordagem de micronúcleo consiste em definir abstrações simples sobre o hardware, com um conjunto de primitivos ou chamadas de sistema para implementar serviços mínimos do sistema operativo como gerenciamento de memória, multitarefas, e comunicação entre processos. Outros serviços, incluindo aqueles normalmente fornecidos por um núcleo monolítico como rede, são implementados em programas de espaço de usuário, conhecidos como servidores. Micronúcleos são mais fáceis de manter do núcleos monolíticos, mas um grande número de chamadas de sistemas de trocas de contexto podem desacelerar o sistema por que eles geralmente geram mais degradação na performance do que simples chamadas de função.
74Códigos Abertos : Vozes da Revolução do Código Aberto

Um micronúcleo permite a implementação das partes restantes do sistema operativo como aplicativos normais escritos em linguagem de alto nível, e o uso de diferentes sistemas operativos sobre o mesmo núcleo não-modificado.75 Ele também torna possível alternar dinamicamente entre sistemas operativos e manter mais de um deles ativos simultaneamente.76 •Hurd •Minix •Mach

Núcleos monolíticos x micronúcleos
Conforme o núcleo do computador crescem, um número de problemas se tornam evidentes. Um dos mais óbvios é que o espaço de memória aumenta. Isto é mitigado de certo modo ao aperfeiçoar o sistema de memória virtual, mas nem todas arquitetura de computador suportam memórias virtuais.77 Para reduzir o espaço utilizado pelo núcleo, modificações extensivas precisam ser realizadas para remover cuidadosamente código inútil, que pode ser muito difícil devido a dependências pouco aparentes entre partes de um núcleo com milhões de linhas de código. Pelo começo dos anos 1990, devido a vários problemas de núcleos monolíticos em comparação a micronúcleos, núcleos monolíticos foram considerados obsoletos por virtualmente todos pesquisadores de sistemas operativos. Como resultado, o projeto do Linux, um núcleo monolítico mais do que um micronúcleo foi o tópico da famosa discussão inflamada entre Linus Torvalds e Andrew Tanenbaum.78 Há méritos em ambos argumentos presentes no debate Tanenbaum–Torvalds.

75 76 77Endereçamento virtual é comumente mais obtido através da unidade de gerenciamento de memória incorporado. 78Registros do debate entre Torvalds e Tanenbaum podem ser encontrados em dina.dk, groups.google.com, oreilly.com e Sítio do Andrew Tanenbaum

Performances
Núcleos monolíticos são projetados para que todo o seu código fique no mesmo espaço de endereçamento (espaço de núcleo), que alguns desenvolvedores argumentam ser necessário para aumentar a performance do sistema.79 Alguns desenvolvedores também sustentam a hipótese de que núcleos monolíticos são extremamente eficientes se forem bem escritos.80Wikipedia:Fontes fiáveis A performance de micronúcleos construídos nos anos 1980 e começos dos 1990 era terrível.8182 Estudos empíricos que mediram a performance destes micronúcleos não analisaram os motivos para tal ineficiência .83 As explicações para estes dados foram deixadas para o "folclore"[3], com a suposição de que eles eram devido ao aumento da frequência da troca de modo núcleo para modo usuário84, devido a maior frequência de comunicação entre processos85 e a maioria frequência de trocas de contexto.86 De fato, como foi conjeturado em 1995, os motivos para a terrível performance dos micronúcleos pode também ter sido: (1) uma real ineficiência na implementação de toda a abordagem de micronúcleo, (2) conceitos particulares implementados nesses micronúcleos, e (3) a implementação individual destes conceitos.87 Portanto ainda falta estudar se a solução para construir um micronúcleo eficiente foi, ao contrário de tentativas anteriores, a de aplicar as técnicas corretas de construção.88 No outro extremo, a arquitetura de domínios hierárquicos de proteção que leva a um projeto de núcleo monolítico89 gera impactos significativos na performance cada vez que há uma interação entre diferentes níveis de proteção (ex. quando um processo tem que manipular uma estrutura de dados em ambos 'modo usuário' e 'modo supervisor'), desde que isto exija cópia de mensagem por valor.90

79Matthew Russell. O que é Darwin (e como ele sustenta o Mac OS X). O'Reilly Media. citação: "A natureza fortemente unida do núcleo monolítico permite torná-lo eficiente no uso do hardware subjacente [...] Micronúcleos, por outro lado, rodam um número muito maior de processos no espaço de usuário. [...] Infelizmente, estes benefícios trazem o custo de micronúcleos terem a necessidade de passar informações dentro e fora do espaço do núcleo através de um processos chamado troca de contexto. Trocas de contexto trazem uma degradação de performance considerável." Estas afirmações não fazem parte de um artigo revisto por partes. 80 81 82Härtig 97 83 84 85 86 87 88 89 90

Em meados de 1990, a maioria dos pesquisadores abandonou a crença de que ajustes cuidadosos poderiam reduzir estes impactos dramaticamente,[carece de fontes?] mas recentemente, novos micronúcleos, otimizados para performance, tais como os L491 e K42 vêm trabalhando nestes problemas.Wikipedia:Verificabilidade
A abordagem de núcleo projetos mais simples de um modularidade e execução híbrido combina velocidade e núcleo monolítico com a segura de um micronúcleo.

Núcleos

híbridos

Núcleos híbridos são um acordo entre o desenvolvimento de micronúcleos e núcleos monolíticos. Isto implica em executar alguns serviços (como a pilha de rede ou o sistema de arquivos) no espaço do núcleo para reduzir o impacto na performance[carece de fontes?] de um micronúcleo tradicional, mas ainda executar o código no núcleo (como drivers de dispositivos) como servidores no espaço de usuário. •BeOS / Haiku •Microsoft Windows NT •XNU (núcleo do Darwin utilizado no Mac OS X)

Nanonúcleos
Um nanonúcleo delega virtualmente todos os serviços — incluindo até os mais básicos como controlador de interrupções ou o temporizador — para drivers de dispositivo para tornar o requerimento de memória do núcleo ainda menor do que o dos tradicionais micronúcleos.92 •Adeos •Dycos [4] •EROS •EKA2 •Jari Operating System [5] •JNode •KeyKOS •LSE/OS •Mac OS nanonúcleo •OZONE
91A família de núcleos L4 - Visão geral 92Arquitetura de nanonúcleo do KeyKOS

•Trion Operating System •XtratuM [6]
Diagrama de interação de um exonúcleo.

Exonúcleos
Um exonúcleo é um tipo de núcleo que não abstrai hardware in modelos teóricos. Ao invés disso ele aloca recursos físicos de hardware, como o tempo de um processador, páginas de memória, e blocos de disco, para diferentes programas. Um programa rodando em um exonúcleo pode ligar para uma biblioteca do sistema operativo que usa o exonúcleo para simular as astrações de um sistema operativo conhecido, ou ele pode desenvolver abstrações específicas para aquele aplicativo para ume performance superior.93

História do desenvolvimento do núcleo
Núcleos dos primeiros sistemas operativos
Falando estritamente, um sistema operativo (e, isto inclui um núcleo) não é obrigado a rodar um computador. Programas podem ser carregados diretamente e executados na máquina de "metal descoberto", desde que os autores destes programas estiverem dispostos a trabalhar sem nenuma abstração de hardware ou suporte a sistema operativo. Os primeiros computadores operaram deste maneira durante os anos de 1950, começo dos 1960, eram reiniciados e recarregados entre cada execução de diferentes programas. Eventualmente, pequenos programas auxiliares como carregadores de progrmas e depuradores foram mantidos na memória entre as execuções, ou carregados de memória somente de leitura . Conforme estas eram desenvolvidas, elas formaram a base do que depois se tornaria o núcleo dos sistemas operativos. A abordagem de "metal descoberto" ainda é usada hoje em alguns consoles de vídeo-jogo e sistemas embarcados, mas no geral, computadores novos usam sistemas operativos e núcleos modernos. Em 1969 o RC 4000 Multiprogramming System introduziu a filosofia de desenvolvimento de sistemas de pequeno nucleus "na qual sistemas operativos para diferentes propósitos poderiam ser criados de maneira metódica",94 algo que poderia ser chamado de abordagem de micronúcleo.

93Ssistema Operativo de Exonúcleo do MIT 94Hansen 2001 (os), pp.17-18

sistemas operativos de tempo compartilhado
Na década precedendo o fenômeno Unix, computadores aumentaram muito em poder de processamento — ao ponto onde operadores de computador estavam buscando novos modos de conseguir com que as pessoas usarem o tempo livre em seus computadores. Uma das maiores evoluções durantes esta era foi o tempo compartilhado, onde um número de usuários conseguiria pequenas parcelas do tempo do computador, em uma taxa que pareceria que eles estavam cada um conectado a sua própria máquina, embora mais lenta.95 O desenvolvimento dos sistemas de tempo compartilhado levou a inúmeros problemas. Um deles foi que usuários, particularmente em universidades, onde os sistemas estavam sendo desenvolvidos, pareciam tentar hackear o sistema para conseguir mais tempo de processamento. Por esta razão, segurança e controles de acesso se tornaram um foco principal do projeto Multics em 1965.96 Outro problema corrente era gerenciar apropriadamente os recursos do sistema: usuários gastavam a maior parte do tempo iniciando na tela e pensando ao invés de realmente utilizar os recursos do computador, e o sistema de tempo compartilhado deveria dar tempo de processamento para um usuário ativo durante estes períodos. Por fim, tipicamente os sistemas ofereciam uma hierarquia de memória de várias camadas de profundidade, e particionar este recurso caro levou a um grande desenvolvimento nos sistemas de memória virtual.

UNIX
Diagrama da relação de família de predecessor/sucessor para os sistemas tipo unix.

95Versão BSTJ do C.ACM Jornal Unix 96Introdução e Visão Geral do Sistema Multics, por F. J. Corbató e V. A. Vissotsky.

Durante a fase de projeto do Unix, os programadores decidiram modelar todo dispositivo de alto nível como um arquivo, por que eles acreditavam que o propósito da computação era a transformação de dados.97 Por exemplo, impressoras eram representadas como um "ficheiro" em uma localização conhecida — quando dados eram copiados para o arquivo, ela imprimia-os. Outros sistemas, para fornecer uma funcionalidade similar, possuem a tendência de virtualizar dispositivos em um nível mais baixo — ou seja, ambos dispositivos e ficheiros seriam instâncias de algum conceito de nível inferior. Virtualizar o sistema a nível de ficheiros permitiu aos usuários manipular todo o sistema usando seus conceitos e ferramentas de gerenciamento de ficheiros, simplificando a operação dramaticamente. Como uma extensão do mesmo paradigma, o Unix permite que programadores manipulem arquivos usando uma série de pequenos programas, usando o conceito de encadeamento, que permitir aos usuários completar operações em etapas, alimentando um ficheiro através de uma cadeia de ferramentas de propósito único. Embora o resultado final fosse o mesmo, usar programas menores deste modo aumentou drasticamente a flexibilidade, assim como o uso e desenvolvimento, permitindo que o usuário modificasse seu fluxo de trabalho ao adicionar ou remover um programa da cadeia. No modelo Unix, o sistema operativo consiste de duas partes; primeira, a enorme coleção de programas de utilidades que guiam a maioria das operações.98 No Unix, do ponto de vista da programação, a distinção entre os dois é extremamente tênue; o núcleo é um programa rodando no modo supervisor99 que age como um carregador de programas e supervisor para os pequenos programas de utilidade que integram o resto do sistema, e fornecem travas e serviços de entrada/saída para estes programas; além disso, o núcleo não intervém de modo algum no espaço de usuário.

97O Sistema UNIX — A Única Especificação do Unix 98 99

Ao longo dos anos o modelo de computação mudou, e o tratamento do Unix de tudo como um ficheiro ou fluxo de baites não era mais universalmente aplicável como antes. Embora um terminal pudesse ser tratado como um ficheiro ou fluxo de baites, de que se exibia ou lia, o mesmo não parecia ser verdade para a interface gráfica. Rede se tornou outro problema. Mesmo se a comunicação de rede pudesse ser comparada ao acesso de ficheiros, a arquitetura de baixo nícel orientada a pacotes lidava com pedaços discretos de dados e não com ficheiros completos. Conforme a capacidade dos computadores crescia, o Unix se tornava cada vez mais desorganizado com relação a código. Enquanto núcleos podiam ter 100.000 linhas de código nos anos 1970 e 1980, núcleos sucessores modernos do núcleo do Unix como o Linux possuem mais de 4.5 milhões de linhas.100 Derivados modernos do Unix são geralmente baseados um núcleos monolíticos que carregam módulos. Exemplos disto são o Linux, um núcleo monolítico com suporte a núcleos, e diversas distribuições que o incluem, assim como os núcleos das variantes do BSD como FreeBSD, DragonflyBSD, OpenBSD, NetBSD, etc. Além destas alternativas, desenvolvedores amadores mantém uma comunidade ativa de desenvolvimento de sistemas operativos, cheia de núcleos que são criados como passa-tempo que acabam compartilhando vários dos recursos com o Linux, e/ou os núcleos do FreeBSD, DragonflyBSD, OpenBSD e NetBSD e/ou sendo compatíveis com eles.101

Mac OS
A Apple lançou Mac OS pela primeira vez em Friday, 15 de January de 2010, empacotado com o seu computador pessoal Macintosh Apple. Pelos primeiros lançamento, o Mac OS (ou Sistema de Software, como ele foi chamado) #careceu de muitos recursos básicos, como multitarefas e um sistema hierárquico. Com o tempo, o sistema operativo evoluiu e se tornou o Mac OS 9 com alguns recursos adicionados, mas o núcleo se manteve basicamente o mesmo.[carece de fontes?] Em oposição a isto, o Mac OS X é baseado no Darwin, que utiliza um conceito de núcleo híbrido chamado XNU, criado combinando o núcleo do 4.3BSD e o Mach.102

100Linux 2.6: Ele Vale Mais!, por David A. Wheeler, 12 de outubro de 2004 101Esta comunidade se reúne em sua maioria no Desenvolvimento de SO Bona Fide, O Fórum de Mensagens Mega-Tokyo e outros sítios de entusiastas de sistemas operativos. 102XNU: O núcleo

Amiga
O Amiga da Commodore foi lançado em Friday, 15 de January de 2010, e estava dentre os primeiros (e certamente mais bem sucedidos) computadores domésticos a apresenter um sistema operativo com um micronúcleo. O núcleo do Amiga, a exec.library, era pequena mas capaz, oferecendo multitarefas rápidas e preemptivas em hardware similar ao do Apple Macintosh, e um sistema avançado de ligações dinâmicas que permitia uma expansão fácil.103

Microsoft Windows
O Microsoft Windows foi lançado em 1985 como uma extensão para o MS-DOS. Devido a sua dependência de outro sistema operativo, o microsoft windows até a versão microsoft windows 95, são consideradas um ambiente operacional (não confunda com sistema operativo). Esta linha de produtos continuou por 1980 e 1990, resultando nos lançamentos das séries Windows 9x, atualizando as capacidades do sistema para endereçamento de 32 bites e multitarefas preemptivo, através dos anos 1990, terminando com o lançamento do Windows Me em 2000. O lançamento do Windows XP em outubro de 2001 uniu as duas linhas de produto, com a intenção de combinar a estabilidade do núcleo NT com os recursos ao consumidor das séries 9x.104 A arquitetura do núcleo do windows nt é considerada híbrida pois o pŕoprio núcleo contém tarefas como o gerenciador de janelas e o gerenciador de comunicação entre processos, mas vários subsistemas são executados no modo de usuário.105 O ponto de quebra exato entre espaço de usuário e espaço de núcleo têm deslocado conforme a versão, mas a introdução do Arcabouço de driver de espaço de usuário no windows vista, e escalonamento de linha de execução no espaço de usuário no Windows 7,106 deslocou mais recursos do núcleo núcleo para processos no espaço de usuário.

103Sheldon Leemon. O que torna isso tão ótimo! (Amiga Commodore). Creative Computing. Página visitada em 2006-02-05. 104LinuxWorld IDC: Consolidação de Windows acontece 105Histórico do Windows: Histórico de Produtos de Mesa de Trabalho 106Holwerda, Thom (7 de fevereiro de 2009). Windows 7 ganha escalonamento de espaço de usuário. OSNews. Página visitada em 2009-02-28.

Desenvolvimento de micronúcleos
Embora o Mach, desenvolvido na Universidade Carnegie Mellon de Friday, 15 de January de 2010 a Friday, 15 de January de 2010, é o micronúcleo de propósito geral mais conhecido, outros micronúcleos foram desenvolvidos com objetivos mais específicos. Um família de micronúcleos L4 (principalmente o micronúcleo L3 e o L4) foi criada para demonstrar que micronúcleos não são necessariamente lentos.107 Implementações mais novas como Fiasco e Pistachio são capazes de executar o Linux junto com outros processo L4 em espaços de endereçamento separados.108109 QNX é um Ssistema Operativo de tempo-real com um projeto de micronúcleo minimalista que vem sendo desenvolvido deste Friday, 15 de January de 2010, sendo mais bem-sucedido do que o Mach em alcançar os objetivos do paradigma do micronúcleo.110 Ele é usado principalmente em sistemas embarcados e ẽm situações em que o software não pode falhar, como nos braços robóticos do ônibus espacial e máquinas que controlam a moeção de vidro a tolerâncias extremamente finas, onde um minúsculo erro poderia custar centenas de milhares de reais.

Ver também
A Wikiversidade possui materiais sobre Operating Systems/Kernel Models at: Modelos de Núcleo •Comparação entre núcleos •Compilador •Driver de dispositivo •Entrada/saída •Pedido de interrupção •Memória 1. Memória de acesso aleatório 2. Memória virtual 3. Paginação, Segmentação
107 108O micronúcleo Fiasco - Visão geral 109L4Ka - A família L4 de micronúcleos e amigos 110Visão Geral do Ssistema Operativo de Tempo-real

4. Espaço de troca 5. Espaço de usuário 6. Unidade de gerenciamento de memória •Multitarefa 1. Processo 2. Linha de execução 3. Escalonamento 4. Tempo compartilhado 5. Troca de contexto 6. Comunicação entre processos •Sistema operativo

Notas
Para notas referentes a fontes, veja a bibliografia abaixo.

Referências
•Roch, Benjamin (2004). Núcleo Monolítico x Micronúcleo (pdf). Página visitada em 2006-10-12. •Silberschatz, Abraham. Operating system concepts. Boston, Massachusetts: pp. 696. •Deitel, Harvey M.. An introduction to operating systems. revisited first edition.ed. pp. 673. •Denning, Peter J. (December 1976). " Fault tolerant operating systems". ACM Computing Surveys 8 (4): 359–389. DOI: 10.1145/356678.356680. ISSN 0360-0300. •Denning, Peter J. (April 1980). " Why not innovations in computer architecture?". ACM SIGARCH Computer Architecture News 8 (2): 4–7. DOI: 10.1145/859504.859506. ISSN 0163-5964. •Hansen, Per Brinch (April 1970). " The nucleus of a Multiprogramming System". Communications of the ACM 13 (4): 238–241. DOI: 10.1145/362258.362278. ISSN 0001-0782.

•Hansen, Per Brinch. Operating System Principles. Englewood Cliffs: pp. 496. •Hansen, Per Brinch (2001). " The evolution of operating systems" (pdf). Visitado em 2006-10-24.

incluído em livro: Classic operating systems: from batch processing to distributed systems. New York,: Per Brinch Hansen, . pp. 1–36.

•Hermann Härtig, Michael Hohmuth, Jochen Liedtke, Sebastian Schönberg, Jean Wolter A performance de sistemas baseados no núcleo μ [7] ACM SIGOPS Operating Systems Review, v.31 n.5, p. 66-77, Dec. 1997 •Houdek, M. E., Soltis, F. G., and Hoffman, R. L. 1981. IBM System/38 support for capability-based addressing. In Proceedings of the 8th ACM International Symposium on Computer Architecture. ACM/IEEE, pp. 341–348. •Intel Corporation (2002) The IA-32 Architecture Software Developer’s Manual, Volume 1: Basic Architecture •Levin, R.; E. Cohen, W. Corwin, F. Pollack, William Wulf (1975). " Policy/mechanism separation in Hydra". ACM Symposium on Operating Systems Principles / Proceedings of the fifth ACM symposium on Operating systems principles: 132–140. •Levy, Henry M.. Capability-based computer systems. Maynard, Mass: •Liedtke, Jochen. Sobre a construção do núcleo µ, Proc. 15th ACM Symposium on Operating System Principles (SOSP), December 1995 •Linden, Theodore A. (December 1976). " Operating System Structures to Support Security and Reliable Software". ACM Computing Surveys 8 (4): 409– 445. DOI: 10.1145/356678.356682. ISSN 0360-0300. [8] •Lorin, Harold. Operating systems. Boston, Massachusetts: pp. 161–186. •Schroeder, Michael D.; Jerome H. Saltzer (March 1972). " A hardware architecture for implementing protection rings". Communications of the ACM 15 (3): 157–170. DOI: 10.1145/361268.361275. ISSN 0001-0782. •Shaw, Alan C.. The logical design of Operating systems. pp. 304. •Tanenbaum, Andrew S.. Structured Computer Organization. Englewood Cliffs, New Jersey: •Wulf, W.; E. Cohen, W. Corwin, A. Jones, R. Levin, C. Pierson, F. Pollack (June 1974). " HYDRA: o núcleo do um sistema operativo multiprocessado". Communications of the ACM 17 (6): 337–345. DOI: 10.1145/355616.364017. ISSN 0001-0782. [9] •Baiardi, F.. Architettura dei Sistemi di Elaborazione, volume 1 (em Italian).

•Swift, Michael M; Brian N. Bershad , Henry M. Levy, Improving the reliability of commodity operating systems, [10] ACM Transactions on Computer Systems (TOCS), v.23 n.1, p. 77-110, February 2005

Leituras importantes
•Andrew Tanenbaum, Operating Systems - Design and Implementation (Third edition); •Andrew Tanenbaum, Modern Operating Systems (Second edition); •Daniel P. Bovet, Marco Cesati, The Linux Kernel; •David A. Peterson, Nitin Indurkhya, Patterson, Computer Organization and Design, Morgan Koffman (ISBN 1-55860-428-6); •B.S. Chalk, Computer Organisation and Architecture, Macmillan P.(ISBN 0-33364551-0).

Ligações externas
•KERNEL.ORG, sítio oficial do Linux.. •Núcleos de Sistemas Operativos no SourceForge. •Núcleos de Sistemas Operativos no Freshmeat. •MIT Sistemaoperacional de Exonúcleo. •Imagem de núcleo - Wiki Debian. •A arquitetura do nanonúcleo do KeyKOS, um artigo de 1992 por Norman Hardy e outros.. •Uma visão geral do Ssistema Operativo NetWare, um artigo de 1994 por Drew Major, Greg Minshall, e Kyle Powell (arquitetos pfincipais por trás do SO NetWare). •Kernelnewbies, uma comunidade para aprender a hackear o Linux. •Comparação detalhada entre os núcleos dos sistemas operativos mais populares.

Unix
Unix é um sistema operativo (ou sistema operacional) portátil (ou portável), multitarefa e multiutilizador (ou multiusuário) originalmente criado por Ken Thompson, que trabalhava nos Laboratórios Bell (Bell Labs) da AT&T. A marca UNIX é uma propriedade do The Open Group, um consórcio formados por empresas de informática.

História
Em 1965 formou-se um grupo de programadores, incluindo Ken Thompson, Dennis Ritchie, Douglas McIlroy e Peter Weiner, num esforço conjunto da AT&T (Laboratórios Bell), da General Electric (GE) e do MIT (Massachussets Institute of Technology) para o desenvolvimento de um sistema operacional chamado Multics. O Multics deveria ser um sistema de tempo compartilhado para uma grande comunidade de usuários. Entretanto, os recursos computacionais disponíveis à época, particularmente os do computador utilizado, um GE 645, revelaram-se insuficientes para as pretensões do projeto. Em 1969, a Bell retirou-se do projeto. Duas razões principais foram citadas para explicar a sua saída. Primeira: três instituições com objetivos díspares dificilmente alcançariam uma solução satisfatória para cada uma delas (o MIT fazia pesquisa, AT&T monopolizava os serviços de telefonia americanos e a GE queria vender computadores). A segunda razão é que os participantes sofriam da síndrome do segundo projeto e, por isso, queriam incluir no Multics tudo que tinha sido excluído dos sistemas experimentais até então desenvolvidos. Ainda em 1969, Ken Thompson, usando um ocioso computador PDP-7, começou a reescrever o Multics num conceito menos ambicioso, batizado de Unics, usando linguagem de montagem (assembly). Mais tarde, Brian Kernighan rebatizou o novo sistema de Unix. Um marco importante foi estabelecido em 1973, quando Dennis Ritchie e Ken Thompson reescreveram o Unix, usando a linguagem C, para um computador PDP-11. A linguagem C havia sido desenvolvida por Ritchie para substituir e superar as limitações da linguagem B, desenvolvida por Thompson. O seu uso é considerado uma das principais razões para a rápida difusão do Unix. Finalmente, ao longo dos anos 70 e 80 foram sendo desenvolvidas as primeiras distribuições de grande dimensão como os sistemas BSD (na Universidade de Berkeley na Califórnia) e os System III e System V (nos Bell Labs). Em 1977, a AT&T começou a fornecer o Unix para instituições comerciais. A abertura do mercado comercial para o Unix deve muito a Peter Weiner - cientista de Yale e fundador da Interactive System Corporation. Weiner conseguiu da AT&T, então já desnudada de seu monopólio nas comunições e liberada para atuação no mercado de software, licença para transportar e comercializar o Unix para o computador Interdata 8/32 para ambiente de automação de escritório. O Unix saía da linha das máquinas PDP, da Digital Equipament Corporation (DEC), demonstrando a relativa facilidade de migração (transporte) para outros computadores, e que, em parte, deveu-se ao uso da linguagem C. O sucesso da Interactive de Weiner com seu produto provou que o Unix era vendável e encorajou outros fabricantes a seguirem o mesmo curso. Iniciava-se a abertura do chamado mercado Unix.

Com a crescente oferta de microcomputadores, outras empresas transportaram o Unix para novas máquinas. Devido à disponibilidade dos fontes do Unix e à sua simplicidade, muitos fabricantes alteraram o sistema, gerando variantes personalizadas a partir do Unix básico licenciado pela AT&T. De 1977 a 1981, a AT&T integrou muitas variantes no primeiro sistema Unix comercial chamado de System III. Em 1983, após acrescentar vários melhoramentos ao System III, a AT&T apresentava o novo Unix comercial, agora chamado de System V. Hoje, o Unix System V é o padrão internacional de fato no mercado Unix, constando das licitações de compra de equipamentos de grandes clientes na América, Europa e Ásia. Atualmente, Unix (ou *nix) é o nome dado a uma grande família de Sistemas Operativos que partilham muitos dos conceitos dos Sistemas Unix originais, sendo todos eles desenvolvidos em torno de padrões como o POSIX (Portable Operating System Interface) e outros. Alguns dos Sistemas Operativos derivados do Unix são: BSD (FreeBSD, OpenBSD e NetBSD), Solaris (anteriormente conhecido por SunOS), IRIXG, AIX, HP-UX, Tru64, SCO, Linux (nas suas centenas de distribuições), e até o Mac OS X (baseado em um núcleo Mach BSD chamado Darwin). Existem mais de quarenta sistemas operacionais *nix, rodando desde celulares a supercomputadores, de relógios de pulso a sistemas de grande porte.

Características
Sistema operacional multitarefa
Multitarefa significa executar uma ou mais tarefas ou processos simultaneamente. Na verdade, em um sistema monoprocessado, os processos são executados seqüencialmente de forma tão rápida que parecem estar sendo executados simultaneamente. O Unix escalona sua execução e reserva-lhes recursos computacionais (intervalo de tempo de processamento, espaço em memória RAM, espaço no disco rígido, etc.). O Unix é um sistema operacional de multitarefa preemptiva. Isso significa que, quando esgota-se um determinado intervalo de tempo (chamado quantum), o Unix suspende a execução do processo, salva o seu contexto (informações necessárias para a execução do processo), para que ele possa ser retomado posteriormente, e coloca em execução o próximo processo da fila de espera. O Unix também determina quando cada processo será executado, a duração de sua execução e a sua prioridade sobre os outros. A multitarefa, além de fazer com que o conjunto de tarefas seja executado mais rapidamente, ainda permite que o usuário e o computador fiquem livres para realizarem outras tarefas com o tempo economizado.

Sistema operacional multiutilizador
Uma característica importante do Unix é ser multiusuário (multiutilizador). Bovet e Cesati [4] definem um sistema multiusuário como "aquele capaz de executar, concorrente e independentemente, várias aplicações pertencentes a dois ou mais usuários". O Unix possibilita que vários usuários usem um mesmo computador simultaneamente, geralmente por meio de terminais. Cada terminal é composto de um monitor, um teclado e, eventualmente, um mouse. Vários terminais podem ser conectados ao mesmo computador num sistema Unix. Há alguns anos eram usadas conexões seriais, mas atualmente é mais comum o uso de redes locais, principalmente para o uso de terminais gráficos (ou terminais X), usando o protocolo XDMCP. O Unix gerencia os pedidos que os usuários fazem, evitando que um interfira com outros. Cada usuário possui direitos de propriedade e permissões sobre arquivos. Quaisquer arquivos modificados pelo usuário conservarão esses direitos. Programas executados por um usuário comum estarão limitados em termos de quais arquivos poderão acessar. O sistema Unix possui dois tipos de usuários: o usuário root (também conhecido como superusuário), que possui a missão de administrar o sistema, podendo manipular todos os recursos do sistema operacional; e os usuários comuns, que possuem direitos limitados. Para que o sistema opere adequadamente em modo multiusuário, existem alguns mecanismos: (i) um sistema de autenticação para identificação de cada usuário (o programa login, p.ex., autentica o usuário verificando uma base de dados, normalmente armazenada no arquivo /etc/passwd); (ii) sistema de arquivos com permissões e propriedades sobre arquivos (os direitos anteriormente citados); (iii) proteção de memória, impedindo que um processo de usuário acesse dados ou interfira com outro processo. Esse último mecanismo é implementado com a ajuda do hardware, que consiste na divisão do ambiente de processamento e memória em modo supervisor (ou modo núcleo) e modo usuário.

Arquivos de dispositivo
Uma característica singular no Unix (e seus derivados) é a utilização intensiva do conceito de arquivo. Quase todos os dispositivos são tratados como arquivos e, como tais, seu acesso é obtido mediante a utilização das chamadas de sistema open, read, write e close. Os dispositivos de entrada e saída são classificados como sendo de bloco (disco, p.ex.) ou de caractere (impressora, modem, etc.) e são associados a arquivos mantidos no diretório /dev (v. detalhamento mais adiante).

Estrutura

A estrutura do sistema Unix.

Um sistema Unix de duas partes:

consiste, basicamente,

•núcleo - o núcleo do sistema operacional, a parte que relaciona-se diretamente com o hardware, e que executa num espaço de memória privilegiado. Agenda processos, gerencia a memória, controla o acesso a arquivos e a dispositivos de hardware (estes, por meio dos controladores de disposito - drivers - e interrupções). O acesso ao núcleo é feito por chamadas de sistema, que são funções fornecidas pelo núcleo; essas funções são disponibilizadas para as aplicações por bibliotecas de sistema C (libc). •programas de sistema - são aplicações, que executam em espaços de memória não privilegiados, e que fazem a interface entre o usuário e o núcleo. Consistem, principalmente, de: 1. 1. Conjunto de bibliotecas C (libc)

1. 1. Shell - um ambiente que permite que o usuário digite comandos.

1. 1. Programas utilitários diversos - são programas usados para manipular arquivos, controlar processos, etc.

1. 1. Ambiente gráfico (GUI) graphics user interface - eventualmente utiliza-se também um ambiente gráfico para facilitar a interação do usuário com o sistema.

Em um sistema Unix, o espaço de memória utilizado pelo núcleo é denominado espaço do núcleo ou supervisor (em inglês: kernel space); a área de memória para os outros programas é denominada espaço do usuário (user space). Essa separação é um mecanismo de proteção que impede que programas comuns interfiram com o sistema operacional.

Processos
Um processo, na visão mais simples, é uma instância de um programa em execução. Um programa, para ser executado, deve ser carregado em memória; a área de memória utilizada é dividida em três partes: código (text), dados inicializados (data) e pilha (stack). Por ser um sistema multitarefa, o Unix utiliza uma estrutura chamada tabela de processos, que contém informações sobre cada processo, tais como: identificação do processo (PID), dono, área de memória utilizada, estado (status). Apenas um processo pode ocupar o processador em cada instante - o processo encontra-se no estado "executando" (running). Os outros processos podem estar "prontos" (ready), aguardando na fila de processos, ou então estão "dormindo" (asleep), esperando alguma condição que permita sua execução. Um processo em execução pode ser retirado do processador por duas razões: (i) necessita acessar algum recurso, fazendo uma chamada de sistema - neste caso, após sua retirada do processador, seu estado será alterado para "dormindo", até que o recurso seja liberado pelo núcleo; (ii) o núcleo pode interromper o processo (preempção) - neste caso, o processo irá para a fila de processos (estado "pronto"), aguardando nova oportunidade para executar - ou porque a fatia de tempo esgotou-se, ou porque o núcleo necessita realizar alguma tarefa. Existem quatro chamadas de sistema principais associadas a processos: fork, exec, exit e wait. fork é usada para criar um novo processo, que irá executar o mesmo código (programa) do programa chamador (processo-pai); exec irá determinar o código a ser executado pelo processo chamado (processo-filho); exit termina o processo; wait faz a sincronização entre a finalização do processofilho e o processo-pai.

Sistema de arquivos
Sistema de arquivos é uma estrutura lógica que possibilita o armazenamento e recuperação de arquivos. No Unix, arquivos são contidos em diretórios (ou pastas), os quais são conectados em uma árvore que começa no diretório raiz (designado por /). Mesmo os arquivos que se encontram em dispositivos de armazenamento diferentes (discos rígidos, disquetes, CDs, DVDs, sistemas de arquivos em rede) precisam ser conectados à árvore para que seu conteúdo possa ser acessado. Cada dispositivo de armazenamento possui a sua própria árvore de diretórios. O processo de conectar a árvore de diretórios de um dispositivo de armazenamento à árvore de diretórios raiz é chamado de "montar dispositivo de armazenamento" (montagem) e é realizada por meio do comando mount. A montagem associa o dispositivo a um subdiretório.

Estrutura de diretórios
A árvore de diretórios do Unix é dividida em várias ramificações menores e pode variar de uma versão para outra. Os diretórios mais comuns são os seguintes: / — Diretório raiz - este é o diretório principal do sistema. Dentro dele estão todos os diretórios do sistema. /bin — Contém arquivos, programas do sistema, que são usados com freqüência pelos usuários. /boot — Contém arquivos necessários para a inicialização do sistema. /dev — Contém arquivos usados para acessar dispositivos (periféricos) existentes no computador. /etc — Arquivos de configuração de seu computador local. /home — Diretórios contendo os arquivos dos usuários. /lib — Bibliotecas compartilhadas pelos programas do sistema e módulos do núcleo. /mnt — Diretório de montagem de dispositivos. /mnt/cdrom — Subdiretório onde são montados os CDs. Após a montagem, o conteúdo do CD se encontrará dentro deste diretório. /mnt/floppy — Subdiretório onde são montados os disquetes. Após a montagem, o conteúdo do disquete se encontrará dentro deste diretório. /proc — Sistema de arquivos do núcleo. Este diretório não existe, ele é colocado lá pelo núcleo e usado por diversos programas. /root — Diretório do usuário root. /sbin — Diretório de programas usados pelo superusuário (root) para administração e controle do funcionamento do sistema.

/tmp — Diretório para armazenamento de arquivos temporários criados por programas. /usr — Contém maior parte de seus programas. Normalmente acessível somente como leitura. /var — Contém maior parte dos arquivos que são gravados com freqüência pelos programas do sistema.

Particularidades
Um sistema Unix é orientado a arquivos, quase tudo nele é arquivo. Seus comandos são na verdade arquivos executáveis, que são encontrados em lugares previsíveis em sua árvore de diretórios, e até mesmo a comunicação entre entidades e processos é feita por estruturas parecidas com arquivos. O acesso a arquivos é organizado através de propriedades e proteções. Toda a segurança do sistema depende, em grande parte, da combinação entre as propriedades e proteções definidas em seus arquivos e suas contas de usuários.

Aplicações
O Unix permite a execução de pacotes de softwares aplicativos para apoio às diversas atividades empresariais. Dentre estes pacotes destacam-se: •geradores gráficos •planilhas eletrônicas •processadores de textos •geradores de aplicações •linguagens de 4° geração •banco de dados O Unix possui recursos de apoio à comunicação de dados, que proporcionam sua integração com outros sistemas Unix, e até com outros sistemas operacionais distintos. A integração com sistemas heterogêneos permite as seguintes facilidades: •compartilhamento de recursos e informações •transferência de informações •comunicação entre usuários remotos •submissão de programas para serem executados em computadores remotos •utilização dos terminais de uma máquina Unix como terminais de outras máquinas remotas, mesmo com sistemas operacionais distintos.

Para última, o Unix oferece um ambiente integrado e amigável, voltado para a gestão automatizada de escritório, com serviços que atenderão às seguintes áreas: •arquivamento eletrônico de informações •processador de documentos •agenda e calendário •calculadora •correio eletrônico

Ambiente gráfico do Unix
X Window System
Além do shell, o Unix suporta interface gráfica para o usuário. Nas primeiras versões do Unix as interfaces do usuário eram baseadas apenas em caracteres (modo texto) e o sistema compunha-se apenas do núcleo, de bibliotecas de sistema, do shell e de alguns outros aplicativos. As versões mais recentes do Unix, além de manterem o shell e seus comandos, incluem o X Window System que, graças ao gerenciador de exibição e ao gerenciador de janelas, possui uma interface atraente e intuitiva que aumenta em muito a produtividade do usuário. Desenvolvido no MIT (Massachussets Institute of Technology), o X Window System (também pode ser chamado de Xwindow) tornou-se o sistema gráfico do Unix. O Xwindow funciona como gerenciador de exibição e por si só, não faz muita coisa. Para termos um ambiente gráfico produtivo e completo, precisamos também de um gerenciador de janelas. O gerenciador de janelas proporciona ao ambiente gráfico a aparência e as funcionalidades esperadas incluindo as bordas das janelas, botões, truques de mouse, menus etc. Como no sistema Unix o gerenciador de exibição (X Window System) é separado do gerenciador de janelas, dizemos que seu ambiente gráfico é do tipo cliente-servidor. O Xwindow funciona como servidor e interage diretamente com o mouse, o teclado e o vídeo. O gerenciador de janelas funciona como cliente e se aproveita dos recursos disponibilizados pelo Xwindow. O fato de o Unix possuir o gerenciador de exibição (Xwindow) separado do gerenciador de janelas tornou possível o surgimento de dezenas de gerenciadores de janelas diferentes. Os gerenciadores de janelas mais comuns no mundo Unix são o Motif, Open Look, e o CDE. Também existem outros gerenciadores de janelas que são bastante utilizados no Unix, principalmente nos sistemas Unix-Like (versões gratuitas e clones do Unix). São eles: KDE, Gnome, FVWM, BlackBox, Enlightenment, WindowMaker etc.
Gerenciador de janelas Window Maker.

Comandos
Esta é uma lista de programas de computador para o sistema operacional Unix e os sistemas compatíveis, como o Linux. Os comandos do Unix tornam-se acessíveis ao usuário a partir do momento em que ele realiza o login no sistema. Se o usuário utiliza tais comandos, então ele se encontra no modo shell, também chamado de modo texto (ou Unix tradicional). Quando estiver utilizando o modo gráfico, o usuário também poderá se utilizar de tais comandos desde que abra uma janela de terminal (Xterm). A linha de comando do sistema operacional Unix permite a realização de inúmeras tarefas através de seus comandos, de manipulação de arquivos a verificação do tráfego em rede. Para exibir uma descrição detalhada de cada comando abra uma console ou xterm e digite man comando, onde comando é o comando em questão.

Comandos de manipulação de diretório
mkdir cria um diretório vazio exemplo: mkdir docs
rmdir exclui um diretorio (se estiver vazio)rm -rf exclui um diretório e todo o seu conteúdo (cuidado com este comando)cd entra num diretório (exemplo: cd docs) ou retorna para HOMEcd / muda para o diretório raizcd ~ vai direto para o diretório home do usuário logado.cd volta ao último diretório acessadopwd exibe o local do diretório atualls lista o conteúdo do diretóriols -alh mostra o conteúdo detalhado do diretóriols -a Exibe os arquivos "ocultos" do determinado diretório.ls -ltr mostra os arquivos no formado longo(l) em ordem inversa(r) de data (t)df (Unix)df mostra a utilização dos sistemas de arquivos montadosdu (Unix)du -msh mostra o tamanho do diretório em Megabyteswhereis mostra onde se encontra determinado arquivo (binários) exemplo: whereis samba

Comandos para manipulação de arquivos
cat mostra o conteúdo de um arquivo binário ou texto
tac linhas semelhante ao cat mas inverte a ordemtail mostra as últimas

de um arquivo. Ex: tail -f <arquivo> útil para visualizar arquivos de log continuamente.
head mostra as primeiras linhas de um arquivo. Ex: head -100 visualiza as 100 primeiras linhas do arquivo.less mostra o conteúdo de um arquivo de texto com controlevi editor de ficheiros de textovim versão melhorada do editor supracitadorm remoção de arquivos (também remove diretórios, mas com o parâmetro -r, que significa recursividade)cp (Unix)cp copia diretórios 'cp -r' copia recursivamentemv move ou renomeia arquivos e diretórioschmod altera as permissões de arquivos ou directórioschown altera o dono de arquivos ou directórioscmd>txt cria um novo arquivo(txt) com o resultado do comando(cmd)cmd>>txt adiciona o resultado do comando(cmd) ao fim do arquivo(txt)touch touch foo.txt cria um arquivo foo.txt vazio; também altera data e hora de modificação para agora> arquivo.txt mais rápido que o touch para criação de arquivossplit divide um arquivorecode recodifica um arquivo ex: recode iso-8859-15..utf8 file_to_change.txt

Comandos para administração
man mostra o manual do comando.
adduser adiciona usuários. O useradd pode também ser usado.addgroup adiciona grupos. o group add pode também ser usado.apropos realiza pesquisa por palavra ou stringdmesg exibe as mensagens da inicialização(log)du (unix)du exibe estado de ocupação dos discos/partiçõesfind comando de busca ex: find ~/ -cmin -3userdel remove usuáriosusermod modifica informações de um determinado usuário.groupmod modifica informações de um determinado grupo.chfn altera informação relativa a um utilizadorwho informa quem está logado no sistema.em algumas versões do linux,

o comando w pode ser usado, e retorna informações mais detalhadas, como o shell do usuário.
whoami informa com qual usuário você está logadopasswd modifica senha (password) de usuáriosumask define padrões de criação de arquivos e diretóriosps (Unix)ps mostra os processos correntesps -aux mostra todos os processos correntes no sistemakill mata um processokillall mata todos os processos com o nome informadosu troca para o superusuário root (é exigida a senha)su user troca para o usuário especificado em 'user' (é exigida a senha)chown altera o proprietário de arquivos e pastas (dono)

Comandos para administração de rede
ifconfig mostra as interfaces de redes ativas e as informações relacionadas a cada uma delas
route mostra as informações referentes as rotasmtr mostra rota até determinado IPnmap lista as portas de sistemas remotos/locais atras de portas abertas. Pode verificar sistema operacional em execução no host remoto.netstat exibe as portas e protocolos abertos no sistema.iptraf analisador de trafego da rede com interface gráfica baseada em diálogostcpdump sniffer muito popular. Sniffer é uma ferramenta que "ouve" os pacotes que estão passando pela rede.traceroute traça uma rota do host local até o destino mostrando os roteadores intermediáriosnslookup consultas a serviços DNSdig consultas a serviços DNS

Referências gerais
•[1] BACH, Maurice J. The design of the Unix operating system. New Jersey: Prentice Hall, 1990. •[2] TANENBAUM, Andrew. Sistemas operacionais modernos. Rio de Janeiro: LTC, 1999. •[3] MCKUSICK, Marshall K.; NEVILLE-NEIL, George V. The design and implementation of the FreeBSD operating system. Boston: Addison-Wesley, 2004. •[4] BOVET, Daniel P.; CESATI, Marco. Understanding the Linux kernel. Sebastopol: O'Reilly, 2005.

Ver também
•ARX - SO da Acorn Computers baseado no Unix •Plan 9 - baseado em alguns conceitos do UNIX. Também desenvolvido pelo Bell Labs. Leva a filosofia de tudo é um arquivo mais a fundo. Onde até os servidores são arquivos. •Filosofia Unix •Era Unix

Ligações externas
•Foca GNU/Linux •UNIX ON-LINE Man Pages

Ken Thompson
Kenneth Thompson</font Ken Thompson (esquerda) e Dennis Ritchie

(direita) Nascimento Campo(s) Prêmio(s) 1943 Nova Orleães Engenharia, ciência da computação Prêmio Turing (1983)

Kenneth Thompson (Nova Orleães, 1943) é um cientista computacional, conhecido pela sua influência no sistema operacional UNIX. Bachelor e master, ambos em engenharia electrotécnica, na UC Berkeley. Em 1969, enquanto trabalhava nos laboratórios Bell, Thompson e Dennis Ritchie foram os principais criadores do sistema operacional UNIX. Thompson também criou a linguagem de programação B, uma precursora da linguagem C de Dennis Ritchie, uma das linguagens de programação mais utilizadas. Mais tarde, enquanto se encontrava ao serviço dos laboratórios Bell, ele e Rob Pike foram os principais criadores do sistema operacional Plan 9. Durante o seu trabalho, ele também criou a codificação de caracteres UTF-8 para uso no sistema operacional Plan 9. Ele também escreveu programas para a enumeração completa de finalizações de xadrez, para todas as finalizações de 4, 5 e 6 peças. Recorrendo a esse programa, um programa de jogo de xadrez tem a capacidade de jogar perfeitamente ao atingir-se uma das situações pré-definidas. Thompson e Ritchie receberam conjuntamente o Prémio Turing em 1983 "pelo seu desenvolvimento de teoria de sistemas operacionais genéricos e especialmente pela sua implementação do sistema operacional UNIX". Thompson reformou-se dos laboratórios Bell no dia 1 de Dezembro de 2000.

Ver também
•UNIX •Bell Labs •Linguagem B Precedido por Stephen Cook Prêmio Turing 1983 com Dennis Ritchie Sucedido por Niklaus Wirth

Dennis Ritchie
Dennis MacAlistair Ritchie

Dennis Ritchie (direita) e Ken Thompson, em 1984 Nascimento Campo(s) Prêmio(s) 9 de Setembro de 1941 Bronxville Física, matemática aplicada, ciência da computação Prêmio Turing (1983)

Dennis MacAlistair Ritchie (Bronxville, 9 de Setembro de 1941) é um cientista da computação estadunidense. Notável pela sua influência em ALTRAN, B, BCPL, C, Multics e UNIX. Nascido em Bronxville, Nova Iorque, Ritchie formou-se em física e matemática aplicada pela Universidade de Harvard. Em 1967, ele começou a trabalhar no Centro de Investigação de Ciências Computacionais dos laboratórios Bell. É actualmente o director do Departamento de Investigação de Software de Sistemas da Lucent Technologies. Em 1983, ele e Ken Thompson receberam o prémio Turing "pelo seu desenvolvimento de teoria de sistemas operativos genéricos e especialmente pela sua implementação do sistema operativo UNIX."

C e UNIX
Ao perguntarem-lhe sobre o que lhe influenciou a desenvolver a linguagem C da maneira que ele a fez, Ritchie terá respondido que "parecia a coisa certa a ser feita" e que qualquer pessoa que se encontrasse na mesma altura e no mesmo lugar que ele teria feito a mesma coisa. Um dos seus colegas dos laboratórios Bell, Bjarne Stroustrup, que desenvolveu e projectou a linguagem C++, uma versão da linguagem C mais vocacionada para a programação orientada por objectos, supostamente disse que "se o Dennis tivesse optado por dedicar-se naquela década à matemática esotérica, o UNIX teria sido um nado-morto." Certamente, sendo o inventor da linguagem de programação C e o co-inventor (juntamente com Ken Thompson) do sistema operativo UNIX, Ritchie ganhou um lugar importante na história da indústria informática. A linguagem C continua a ser largamente utilizada no desenvolvimento de aplicações e sistemas operativos e a sua influência pode ser vista em linguagens de programação mais recentes, tais como C++, Java, C# e JavaScript. No mundo dos sistemas operativos, o UNIX é também muito influente. Existem actualmente muitos "dialectos" dele disponíveis no mercado, tais como AIX, Solaris e Minix, e o popular GNU/Linux. Até a Microsoft, cujo sistema operativo Windows compete com o UNIX, desenvolveu ferramentas de compatibilidade de UNIX e compiladores de C para utilizadores e criadores dos seus produtos.

Alcunhas
Dennis Ritchie é frequentemente referido como "DMR" em vários grupos de discussão da Usenet (tais como comp.lang.c); ele é o "R" do K&R.

Publicações
•"The C Programming Language", Dennis Ritchie, Brian Kernighan, (1978) (No Brasil: C - A Linguagem de Programação - Ed. Campus, 1986) •"Unix Programmer's Manual", Dennis Ritchie (1971)

Ligações externas
•Página pessoal •Unix.se - Entrevista a Ritchie publicada a 7 de Fevereiro de 2003 •Ritchie e Thompson a receber a medalha nacional da tecnologia do Presidente Clinton •The future according to Dennis Ritchie - LinuxWorld.com 12/4/00

•Unix's founding fathers - Economist.com, July 12, 2004 Precedido por Stephen Cook Prêmio Turing 1983 com Ken Thompson Sucedido por Niklaus Wirth

C (linguagem de programação)
C
Paradigma Programação Programação Programação Programação 1972 C99
(1999)

estruturada imperativa procedural genérica

Surgido em Última versão Criado por Estilo de tipagem: Compiladores

Dennis Ritchie Estática, Fraco Borland C, GNU GCC, Microsoft Visual Studio, Turbo C, Watcom C, Tiny C Compiler ANSI C, C99, ISO C, K&R C ALGOL 68, Assembly, B, BCPL, CPL, Fortran, PL/I AWK, BitC, C++, C#, C Shell, D, Euphoria, Java, JavaScript, Limbo, Logic Basic, Objective-C, Perl, PHP Dependente de implementação

Dialetos: Influenciada por Influenciou

Licença:

C é uma linguagem de programação compilada de propósito geral, estruturada, imperativa, procedural, de alto nível, e padronizada, criada em 1972, por Dennis Ritchie, no AT&T Bell Labs, para desenvolver o sistema operacional UNIX (que foi originalmente escrito em Assembly).111 A linguagem C é classificada de alto nível pela própria definição desse tipo de linguagem. A programação em linguagens de alto nível tem como característica não ser necessário conhecer o processador, ao contrário das linguagens de baixo nível. As linguagens de baixo nível estão fortemente ligadas ao processador. A linguagem C permite acesso de baixo nível com a utilização de código Assembly no meio do código fonte. Assim, o baixo nível é realizado por Assembly e não C. Desde então, espalhou-se por muitos outros sistemas, e tornou-se uma das linguagens de programação mais usadas, e influenciou muitas outras linguagens, especialmente C++, que foi originalmente desenvolvida como uma extensão para C.

111History of the C Programming Language.

História
Ken Thompson e Dennis direita), os criadores das respectivamente. Ritchie (da esquerda para linguagens B e C,

O desenvolvimento AT&T Bell Labs, entre sabe se o nome "C" foi porque muitas de suas derivaram da linguagem conseguinte no alfabeto, segunda letra do nome qual derivou-se a linguagem B.

inicial de C, ocorreu no 1969 e 1973. Não se dado à linguagem características B e C é a letra ou porque "C" é a da linguagem BCPL, da

C foi originalmente desenvolvido, para a implementação do sistema UNIX (originalmente escrito em PDP-7 Assembly, por Dennis Ritchie e Ken Thompson). Em 1973, com a adição do tipo struct, C tornou-se poderoso o bastante para a maioria das partes do núcleo do UNIX, serem reescritas em C. Este foi um dos primeiros sistemas que foram implementados em uma linguagem, que não o Assembly, sendo exemplos anteriores, os sistemas: Multics (escrito em PL/I) e TRIPOS (escrito em BCPL). Segundo Ritchie, o período mais criativo ocorreu em 1972.

K&R C
Em 1978, Brian Kernighan e Dennis Ritchie publicaram a primeira edição do livro The C Programming Language. Esse livro, conhecido pelos programadores de C, como "K&R", serviu durante muitos anos como uma especificação informal da linguagem. A versão da linguagem C que ele descreve é usualmente referida como "K&R C". A segunda edição do livro, cobriu o padrão posterior, o ANSI C. K&R C introduziu as seguintes características na linguagem: •Biblioteca padrão de E/S; •Tipos de dado •Tipos de dado •Tipos de dado
struct; long int; unsigned int; -= (o analisador léxico do +10. O mesmo acontecia com =-).

•O operador =+ foi alterado para +=, e =- para compilador fazia confusão entre i =+ 10 e i =

K&R C é freqüentemente considerado a parte mais básica da linguagem, cujo suporte deve ser assegurado por um compilador C. Durante muitos anos, mesmo após a introdução do padrão ANSI C, K&R C foi considerado o "menor denominador comum", em que programadores de C se apoiavam quando uma portabilidade máxima era desejada, já que nem todos os compiladores eram actualizados o bastante para suportar o padrão ANSI C.

Nos anos que se seguiram à publicação do K&R C, algumas características "nãooficiais" foram adicionadas à linguagem, suportadas por compiladores da AT&T e de outros vendedores. Estas incluíam: •Funções
void

e tipos de dados
struct

void *;

•Funções que retornam tipos •Campos de nome •Qualificadores •Atribuição a tipos de dados
const

struct

ou

union; struct;

num espaço de nome separado para cada tipo
struct;

para criar um objecto só de leitura;

•Biblioteca padrão, que incorpora grande parte da funcionalidade implementada por vários vendedores; •Enumerações; •Cálculos de ponto-flutuante em precisão simples (no K&R C, os cálculos intermediários eram feitos sempre em double, porque era mais eficiente na máquina onde a primeira implementação do C foi feita).

ANSI C e ISO C
Durante os finais da década de 1970, a linguagem C começou a substituir a linguagem BASIC como a linguagem de programação de microcomputadores mais usada. Durante a década de 1980, foi adaptada para uso no PC IBM, e a sua popularidade começou a aumentar significativamente. Ao mesmo tempo, Bjarne Stroustrup, juntamente com outros nos laboratórios Bell, começou a trabalhar num projecto onde se adicionavam construções de linguagens de programação orientada por objectos à linguagem C. A linguagem que eles produziram, chamada C++, é nos dias de hoje a linguagem de programação de aplicações mais comum no sistema operativo Windows da companhia Microsoft; C permanece mais popular no mundo UNIX. Em 1983, o instituto norte-americano de padrões (ANSI) formou um comité, X3J11, para estabelecer uma especificação do padrão da linguagem C. Após um processo longo e árduo, o padrão foi completo em 1989 e ratificado como ANSI X3.159-1989 "Programming Language C". Esta versão da linguagem é freqüentemente referida como ANSI C. Em 1990, o padrão ANSI C, após sofrer umas modificações menores, foi adotado pela Organização Internacional de Padrões (ISO) como ISO/IEC 9899:1990, também conhecido como C89 ou C90. Um dos objetivos do processo de padronização ANSI C foi o de produzir um sobreconjunto do K&R C, incorporando muitas das características não-oficiais subseqüentemente introduzidas. Entretanto, muitos programas tinham sido escritos e que não compilavam em certas plataformas, ou com um certo compilador, devido ao uso de bibliotecas de funções não-padrão e ao fato de alguns compiladores não aderirem ao ANSI C.

C99
Após o processo da padronização ANSI, as especificações da linguagem C permaneceram relativamente estáticas por algum tempo, enquanto que a linguagem C++ continuou a evoluir. (em 1995, a Normative Amendment 1 criou uma versão nova da linguagem C mas esta versão raramente é tida em conta.) Contudo, o padrão foi submetido a uma revisão nos finais da década de 1990, levando à publicação da norma ISO 9899:1999 em 1999. Este padrão é geralmente referido como "C99". O padrão foi adoptado como um padrão ANSI em Março de 2000. As novas características do C99 incluem: •Funções em linha •Remoção de restrições sobre a localização da declaração de variáveis (como em C++) •Adição de vários tipos de dados novos, incluindo o long long int (para minimizar problemas na transição de 32-bits para 64-bits), um tipo de dados boolean explicito (chamado _Bool) e um tipo complex que representa números complexos •Vetores de dados de comprimento variável (o vetor pode ter um tamanho diferente a cada execução de uma função, mas não cresce depois de criado) •Suporte oficial para comentários de uma linha iniciados por linguagem C++ •Várias funções de biblioteca novas, tais como •Vários ficheiros-cabeçalho novos, tais como
snprintf() stdint.h //,

emprestados da

O interesse em suportar as características novas de C99 parece depender muito das entidades. Apesar do GCC e vários outros compiladores suportarem grande parte das novas características do C99, os compiladores mantidos pela Microsoft e pela Borland suportam pouquíssimos recursos do C99, e estas duas companhias não parecem estar muito interessadas em adicionar tais funcionalidades, ignorando por completo as normas internacionais. A Microsoft parece preferir dar mais ênfase ao C++.112

C1X
Em 2007, se iniciou o trabalho em antecipação de outra revisão do padrão de C, informalmente chamada "C1X". O comitê dos padrões de C adotaram regras para limitar a adoção dos novos recursos que não haviam sido testadas pelas implementações existentes.113

112[11] 113Grupo de trabalho do ISO C

Visão geral
C é uma linguagem imperativa e procedural, para implementação de sistemas. Seus pontos de design foram para ele ser compilado, fornecendo acesso de baixo nível à memória e baixos requerimentos do hardware. Também foi desenvolvido para ser uma linguagem de alto nível, para maior reaproveitamento do código. C foi útil para muitas aplicações que foram codificadas originalmente em Assembly. Essa propriedade não foi acidental; a linguagem C foi criada com o objectivo principal em mente: facilitar a criação de programas extensos com menos erros, recorrendo ao paradigma da programação algorítmica ou procedimental, mas sobrecarregando menos o autor do compilador, cujo trabalho complica-se ao ter de realizar as características complexas da linguagem. Para este fim, a linguagem C possui as seguintes características: •Uma linguagem nuclear extremamente simples, com funcionalidades nãoessenciais, tais como funções matemáticas ou manuseamento de ficheiros (arquivos), fornecida por um conjunto de bibliotecas de rotinas padronizada; •A focalização no paradigma de programação procedimental; •Um sistema de tipos simples que evita várias operações que não fazem sentido •Uso de uma linguagem de pré-processamento, o pré-processador de C, para tarefas tais como a definição de macros e a inclusão de múltiplos ficheiros de código fonte; •Ponteiros dão maior flexibilidade à linguagem; •Acesso de baixo-nível, através de inclusões de código Assembly no meio do programa C; •Parâmetros que são sempre passados por valor para as funções e nunca por referência (É possível simular a passagem por referência com o uso de ponteiros); •Definição do alcance lexical de variáveis; •Estruturas de variáveis, (structs), que permitem que dados relacionados sejam combinados e manipulados como um todo. Algumas características úteis, que faltam em C, podem ser encontradas em outras linguagens, que incluem: •Segurança de tipo; •Coletor de lixo (mais comum em linguagens interpretadas); •Vetores que crescem automaticamete; •Classes ou objectos com comportamento (ver orientação a objetos); •Closures; •Funções aninhadas;

•Programação genérica; •Sobrecarga de operadores; •Meta-programação; •Apoio nativo de multithreading e comunicação por rede. Apesar da lista de características úteis que C possui não ser longa, isso não tem sido um impedimento à sua aceitação, pois isso permite que novos compiladores de C sejam escritos rapidamente para novas plataformas, e também permite que o programador permaneça sempre em controle do que o programa está a fazer. Isto é o que por várias vezes permite o código de C correr de uma forma mais eficiente que muitas outras linguagens. Tipicamente, só código de assembly "afinado à mão" é que corre mais rapidamente, pois possui um controle completo da máquina, mas avanços na área de compiladores juntamente com uma nova complexidade nos processadores modernos permitiram que a diferença tenha sido rapidamente eliminada. Uma consequência da aceitação geral da linguagem C é que freqüentemente os compiladores, bibliotecas e até intérpretes de outras linguagens de nível maior sejam eles próprios implementados em C. C tem como ponto forte, a sua eficiência, e é a linguagem de programação preferida para o desenvolvimento de sistemas e softwares de base, apesar de também ser usada para desenvolver programas de computador. É também muito usada no ensino de ciência da computação, mesmo não tendo sido projetada para estudantes e apresentando algumas dificuldades no seu uso. Outra característica importante de C, é sua proximidade do código de máquina, que permite que um projetista seja capaz de fazer algumas previsões de como o software irá se comportar, ao ser executado. C tem como ponto fraco, a falta de proteção que dá ao programador. Praticamente tudo que se expressa em um programa em C, pode ser executado, como por exemplo, pedir o vigésimo membro de um vetor com apenas dez membros. Os resultados são muitas vezes totalmente inesperados, e os erros, difíceis de encontrar.

Tipos de dado
C tem um sistema de tipos semelhante ao de alguns descendentes da linguagem ALGOL, tais como Pascal. Possui tipos para números inteiros de vários tamanhos com e sem sinal, números de ponto flutuante, caracteres e estruturas (structs). C usa extensivamente ponteiros, um tipo muito simples de referência que guarda o endereço de memória da variável. O ponteiro pode ser desreferenciado, uma operação que busca o objecto que se encontra na morada da memória que o ponteiro possui, morada essa que pode ser manipulada através de aritmética de ponteiros. Durante o tempo de execução, o ponteiro é simplesmente uma morada de máquina tais como aquelas manipuladas em assembly, mas em tempo de compilação possui um tipo complexo que indica o tipo do objecto para onde ele aponta, permitindo que se verifique o tipo de expressões, incluindo ponteiros. Os ponteiros são usados extensivamente em C. O tipo linha de texto de C é simplesmente um ponteiro para um vetor de caracteres e alocação dinâmica de memória, descrita abaixo, é efectuada através de ponteiros. Os ponteiros em C possuem um valor reservado especial, NULL, que indica que não estão a apontar para uma morada. O uso desse valor como morada é muito útil na construção de várias estruturas de dados, mas causa comportamento nãodefinido (possivelmente uma falha de sistema) ao ser desreferenciado. Um ponteiro que possui o valor NULL é chamado ponteiro nulo. Os ponteiros são declarados (e desreferenciados) com um * (asterisco), portanto o tipo int* denota um ponteiro para número(s) inteiro(s). A linguagem C também fornece um tipo especial de ponteiros, o void*, que se traduz num ponteiro que aponta para um objecto de tipo desconhecido. A linguagem C também tem apoio a nível de linguagem para vetores estáticas (de dimensão fixa) de tipos. As disposições de tipos podem parecer ter mais que uma dimensão apesar de serem tecnicamente disposições de disposições de tipos. Em memória, tais estruturas são posicionadas com as linhas uma depois da outra (a alternativa seria armazenar os dados em colunas, usado em outras linguagens). O acesso a disposições de tipos é feito através de ponteiros e aritmética de ponteiros; o nome da disposição é tratado como se fosse um ponteiro que aponta para o início da disposição. Em certas aplicações não é razoável usarem-se disposições de tipos de dimensão fixa e por isso a alocação dinâmica de memória pode ser usada para criar disposições de tipos de dimensão variável. Como a linguagem C é regularmente usada em programação de baixo-nível de sistemas, há casos em que é necessário tratar um número inteiro como sendo um ponteiro, um número de ponto flutuante como sendo um número inteiro ou um tipo de ponteiro como sendo outro. Para estes casos, a linguagem C fornece a capacidade de "moldagem" (também denominado "conversão de tipo" ou casting), uma operação que, caso seja possível, força a conversão de um objecto de um tipo para outro. Apesar de ser por vezes necessário, o uso de conversões de tipo sacrifica alguma segurança oferecida pelo sistema de tipos. int

O tipo de dados int (inteiro) serve para armazenar valores numéricos inteiros. Existem vários tipos de inteiros, cada um de um tamanho diferente (dependendo do sistema operacional e/ou arquitetura do processador): •int, pode possuir 16 bits, 32 bits ou 64 bits •short
int int, int,

deve possuir tamanho de no mínimo 16 bits e não pode ser maior que

•long •long

deve possuir tamanho mínimo de 32 bits

long int, deve possuir tamanho mínimo de 64 bits

Todos estes tipos de inteiros podem ainda ser declarados precedidos da cláusula unsigned, o que faz com que só suporte números positivos. Isto faz com que, com o mesmo tamanho, uma variável suporte mais números positivos do que um signed (todos os inteiros são signed por omissão). char O tipo char ocupa 1 byte, e serve para armazenar caracteres ou inteiros. Isso significa que o programa reserva um espaço de 8 bits na memória RAM ou em registradores do processador para armazenar um valor (char de tamanho maior que 8 bits é permitido pela linguagem, mas os casos são raros). Com vetores do tipo char é possível armazenar strings, que são cadeias de caracteres. float O tipo de dados float serve para armazenar números de ponto flutuante, ou seja, com casas decimais. O padrão mais utilizado nos últimos 10 anos é o IEEE 7541985. double O tipo de dados double serve para armazenar números de ponto flutuante de dupla precisão, normalmente tem o dobro do tamanho do float e portanto o dobro da capacidade. O padrão mais adotado também é o IEEE 754-1985. struct Em C podem ser usadas estruturas (chamados de registos em outras linguagens de programação). As estruturas são grupos de variáveis organizadas arbitráriamente pelo programador. Uma estrutura pode criar um novo tipo de variável caso typedef seja usado em sua declaração. Exemplo:

#include <stdio.h> struct pessoa { unsigned short int idade; char nome[51]; /* vetor de 51 chars para o nome */ unsigned long int rg; }; /* estrutura declarada */ int main(void) { struct pessoa exemplo = {16, "Fulano", 123456789}; /* declaração de uma variável tipo struct pessoa */ printf("Idade: %hu\n", exemplo.idade); printf("Nome: %s\n", exemplo.nome); printf("RG: %lu\n", exemplo.rg); return 0; }

Esta estrutura é composta por 3 elementos de tipos diferentes. Depois de ser declarada uma variável do tipo struct x, onde x é o nome da estrutura, para se acessar os diversos elementos deve-se fazer x.elemento

Relações com C++
A linguagem de programação C++ foi originalmente derivada do C para suportar programação orientada a objetos. À medida que as linguagens C e C++ foram evoluindo independentemente, a divisão entre as duas veio a aumentar. O padrão C99 criou um número de características que entram em conflito. Hoje, as principais diferenças entre as duas linguagens são: •inline - em C++, funções em linha encontram-se no espaço global enquanto que em C encontram-se no espaço local. Por outras palavras, isso significa que, em C++, qualquer definição de qualquer função em linha (sem ser a respeito da sobrecarga de funções de C++) tem de estar em conformidade com a "regra de uma definição" da linguagem C++. Mas em C, a mesma função em linha pode ser definida de maneira diferente em diferentes arquivos (ou ficheiros). •A palavra-chave bool, igual à usada em C++, em C99 necessita que se inclua o ficheiro-cabeçalho <stdbool.h> (_Bool está sempre disponível). Padrões anteriores de C não definiam um tipo booleano e vários (e incompatíveis) métodos foram usados para simular um tipo booleano. Algumas características originalmente desenvolvidas em C++ também apareceram em C. Entre elas encontram-se: •protótipos de função (com declaração de tipos de parâmetros) e remoção do "int" implícito.

•comentários de linha, indicados por carácter de nova-linha •a palavra-chave
inline

//;

comentários de linha terminam com um

•tipagem mais forte.

Exemplos
"Olá, Mundo!"
A seguinte aplicação foi publicada na primeira edição de C de K&R, e tornou-se no programa de introdução padrão da maior parte dos livros sobre C. O programa envia o texto "Olá Mundo!" para a saída padrão, que é normalmente o ecrã (ou tela), mas que também pode ser um ficheiro (ou arquivo), um outro dispositivo qualquer, ou até mesmo um bit bucket, dependendo de como a saídapadrão é mapeada na altura em que o programa é executado.
int main() { printf("Olá, Mundo!\n"); }

Apesar do programa acima correr corretamente, atualmente origina algumas mensagens de aviso quando compilado com C ANSI. Essas mensagens podem ser eliminadas efectuando umas pequenas alterações no programa original:
#include <stdio.h> /* Pacotes com funções de entrada e saída */ #include <math.h> /* Este pacote é desnecessário, mas mostra que podem ser adicionados outros pacotes */ int main(void) { printf("Olá, Mundo!\n"); return 0; /* Retorna 0, pois main retorna um int */ } /* Nova linha após fechar a chave principal */

A primeira linha do programa é uma diretiva de pré-processamento #include, que causa com que o pré-processador substitua aquela linha pela totalidade do conteúdo do arquivo qual diretiva se refere. Neste caso o arquivo padrão stdio.h (que contém protótipos de funções para trabalho com entrada e saída) irá substituir a linha. Os caracteres < e > indicam que o arquivo stdio.h encontra-se no local em que, quando da configuração do compilador, se definiu como padrão para localização dos ficheiros de inclusão (header files, geralmente com a extensão .h).

A linha (não-vazia) seguinte indica que uma função denominada main será definida. A função main tem um significado especial nos programas de C, pois é a função que é inicialmente executada ou em inglês entry point. Os caracteres { e } delimitam a extensão da função. O termo int define a função main como sendo uma função que retorna um número inteiro. O termo void indica que a função não aceita parâmetros. A função main, normalmente aceita parâmetros, que são passado pela linha de comando. Os compiladores e sistemas operacionais atuais reconhecem as seguintes declarações de main:
int main (int argc, char ** argv) int main (int argc, char * argv[])

A linha seguinte "chama", ou executa uma função chamada printf; o arquivo incluído, stdio.h, contém a informação que descreve a forma como a função printf deve ser chamada. Nesta chamada, é passado à função printf um único argumento, a linha de texto constante "Olá Mundo!\n". A função printf retorna um valor, um int, mas como não é usado ela é descartada pelo compilador. O comando return retorna o valor 0 para o sistema, que é interpretado pelo mesmo como que a função main() foi executada e encerrada com sucesso (sem erros). Por fim, o caracter } indica o fim da função main. Note-se que texto rodeado por /* e */ (comentários de texto) é ignorado pelo compilador. Os compiladores que obedecem à norma C99 também aceitam como comentários as linhas de texto que são precedidos por //.

Soma simples
O seguinte código executa uma soma, de duas variáveis. Primeiro são definidas as variáveis a e b, do tipo inteiro. Em seguida é mostrado na tela, com o comando printf, o texto a + b = , e após o símbolo de igual o resultado da conta, que é 10. Portanto o resultado final seria: a + b = 10
#include <stdio.h> int main() { int a = 3, b = 7; printf("a + b = %d\n", a+b); return 0; }

Alterando esse código, pode-se interagir com o usuário. Dessa forma, o usuário digita dois valores e em seguida é mostrada a soma deles.

#include <stdio.h> int main() { int x, y; //define duas variáveis printf("x = "); scanf("%d", &x); //scanf atribui o valor digitado a x printf("y = "); scanf("%d", &y); //scanf atribui o valor digitado a y printf("x + y = %d\n", x+y); //printf mostra na tela o resultado. return 0; }

A execução desse programa seria a seguinte, se o usuário digitar 5 para x e 6 para y. x=5 y=6 x + y = 11

Ferramentas de programação
•Bloodshed Dev-C++ •Code::Blocks •GNU Compiler Collection •Make

Ver também
•Wikilivros •Linguagem compilada •Linguagem de programação •Linguagem de programação de alto nível •Lista de linguagens de programação •Unix

Ligações externas
•C: A Linguagem de Programação (em português) •Precedência entre operadores em C (em português) •C Programming (em inglês) •{{{3}}} (em inglês) •Curso de Linguagem C (em inglês) •The Unofficial C for Dummies FAQ Page (em inglês) •C optimisation tutorial (em inglês) •Apostila de C (em português) - Professor Adriano Cruz - Departamento de Ciência da Computação - IM/UFRJ •Compilador (em inglês) - Compilador de acesso Público Cross-Compiler

Minix
Minix

Desenvolvedor: Modelo do desenvolvimento: Versão estável: Família do SO: Núcleo: Estado do desenvolvimento: Website Portal Tecnologias de informação

Andrew Stuart Tanenbaum Software livre 3.1.4a UNIX Micronúcleol Estável Site Oficial www.minix3.org

O Minix é um sistema operacional Unix-like (semelhante ao UNIX), gratuito e com o código fonte disponível. •Multitarefa (múltiplos programas podem correr ao mesmo tempo ). •Roda em 286, 386, 486, Pentium. •Suporta memória estendida (16MB no 286 e 4GB no 386, 486 e Pentium ou superior).

•RS-232 serial line suporte com terminal emulation, kermit, zmodem, etc. •Máximo de três usuários simultaneamente na mesma máquina. •Chamadas de sistemas compatíveis com POSIX. •Inteiramente escrito em C (SO, utilitários, bibliotecas etc.). •Compilador ANSI C. •Shell funcionalmente idêntico ao Bourne shell. •Rede TCP/IP. •5 editores (emacs subset, vi clone, ex, ed, and simple screen editor). •Mais de 200 utilitários (cat, cp, ed, grep, kermit, ls, make, sort, etc.). •Mais de 300 bibliotecas (atoi, fork, malloc, read, stdio, etc.). Foi organizado em camadas, onde as duas primeiras formam o núcleo: •Captura interrupções e traps, salvar e restaurar registradores, agendar as demais funções •Processos de entrada/saída. •As tarefas de entrada/saída são chamadas drivers de dispositivos; •Contém processos que fornecem serviços úteis ao usuário; •Existem em um nível menos privilegiado que o núcleo; •Shell, editores, compiladores, etc. Processos são entidades independentes, cada um com suas permissões de acesso, e têm atribuídos propriedades como o id do usuário que o criou (UID) e do grupo (GID). Grande parte de sua execução se processa em user-mode, quando o processador não admite a execução de instruções privilegiadas, mas em certos instantes (durante uma chamada de sistema), ele executa em modo núcleo para conseguir o acesso a partes do hardware que de outra forma seriam inacessíveis. Cada processo é identificado pelo seu process id (PID), que é simplesmente um número inteiro. Mais especificamente, do ponto de vista do sistema operacional, é uma coleção de instruções (programa) mais os dados necessários à sua execução. Armazenados juntamente com o processo estão o seu contexto, ou seja, o contador de instruções, e o conjunto de todos os registradores da CPU. É responsabilidade do sistema operacional gerenciar os processos do sistema, de forma que, se um processo tenta ler ou escrever em um disco, por exemplo, este processo ficará em estado waiting (suspenso) até que a operação seja completada.

Nesse ínterim, outro processo será habilitado a correr, desperdiçando assim o mínimo do tempo da CPU, memória e demais periféricos. O Minix suporta inclusive um procedimento de "escrita retardada", quando escrevemos em algum arquivo. No momento da escrita, o buffer que contém estes dados é simplesmente marcado como "sujo" (dirty), e o sistema operacional escolhe o instante mais apropriado para descarregar esse buffer no disco físico. Isso explica a necessidade que temos de executar um procedimento de parada (shutdown ) antes de desligar a máquina, para evitar que fiquem dados a serem descarregados (escritos) no disco.

Ligações externas
•Site do Minix 3 •Site Minix 3 •Newsgroup de Minix

Micronúcleo
Micronúcleo é o nome que se dá, em biologia celular a dois tipos de formação intestina da célula:

Estruturas cromossômicas
Micronúcleo pode designar as estruturas celulares que resultam de cromossomos inteiros ou fragmentos destes, que resultam do processo de divisão celular e, assim, não são incluídos no núcleo da célula-filha, permanecendo entretanto no citoplasma das células interfásicas.114 No processo de telófase esses resquícios de cromossomo podem se fundir com o núcleo principal ou ainda formar núcleos "secundários".115

114Conceito, por: HEDDLE, J.A. A rapid in vitro test for chromosomal damage. Mut. Res., Amsterdam, v. 18, n. 2, p. 187-190, 1973 - in: Micronucleos em tetrades de Tradescantia pallida (Rose) Hunt. cv. purpurea Boom: alteracoes geneticas decorrentes de poluicao aerea urbana, por Sizenando José de Andrade Júnior, José Cleub Silva Santos Júnior, Jesiane da Luz Oliveira, Eneida de Moraes Marcílio Cerqueira e José Roberto Cardoso Meireles (página acessasda em 9 de dezembro de 2009) 115

Organelo
É, ainda, o nome que se dá, nos protozoários ciliados, como o paramécio, aos pequenos núcleos que, no processo de reprodução se dividem por mitose, e por conjugação fundem-se reciprocamente formando um núcleo zigoto, dando origem ao macronúcleo e aos micronúcleos dos indivíduos formados no próximo ciclo de fissão.

Andrew Stuart Tanenbaum
Andrew S. Tanenbaum

Andrew Stuart "Andy" 1944) é o chefe do sistemas de computação, Amsterdã nos Países Minix, um sistema Unix com propósito conhecido por seus computação.

Tanenbaum (nasceu em Departamento de na Universidade Vrije, Baixos. Ele é o autor do operacional baseado no educacional, e bastante livros sobre ciência da

Nasceu na cidade de Nova Iorque e cresceu em White Plains no estado de Nova Iorque. Recebeu o título de bacharelado pelo MIT e o doutorado pela UC Berkeley em 1971. Atualmente ministra aulas sobre Organização de computadores e Sistemas operacionais. Ficou conhecido internacionalmente pelos seus livros de Ciência da computação, particularmente: •Redes de computadores, ISBN 0-13-066102-3 •Sistemas operacionais: Design e implementação, ISBN 0-13-638677-6 •Sistemas operacionais modernos, ISBN 0-13-031358-0 Outras publicações: •Structured Computer Organization •Distributed Systems: Principles and Paradigms O núcleo Linux foi inspirado no Minix. Tanenbaum ficou envolvido com as discussões do Usenet durante 1992 com Linus Torvalds, criador do Linux, sobre os méritos básicos de Torvalds usando núcleo monolítico em vez de micronúcleo que Tanenbaum achou que era o meio do futuro. Ele também implementou o Sistema operacional distribuído Amoeba.

Na mídia
Andrew Tanenbaum foi apresentador da série de documentários Beyond 2000 (Para além do ano 2000), onde eram apresentadas várias inovações tecnológicas.

Publicações
•Computer Networks, ISBN 0-13-066102-3 •Operating Systems: Design and Implementation, (co-authored with Albert Woodhull), ISBN 0-13-142938-8 •Modern Operating Systems, ISBN 0-13-031358-0 •Structured Computer Organization, ISBN 0-13-148521-0 •Distributed Systems: Principles and Paradigms, (co-authored with Maarten van Steen), ISBN 0-13-239227-5

Ligações externas
•Site Pessoal •Departamento de Sistemas de Computação da VU •The Usenet discussion with Torvalds at Google Groups 1. 2004 view of the discussion with Torvalds

Projeto GNU
Logotipo GNU

Projeto GNU, em projeto iniciado por 1984, com o objetivo de operacional totalmente pessoa teria direito de redistribuir o programa desde que garantindo direitos.

computação, é um Richard Stallman em criar um sistema livre, que qualquer usar, modificar e e seu código fonte, para todos os mesmos

Este sistema operacional GNU deveria ser compatível com o sistema operacional UNIX, porém não deveria utilizar-se do código fonte do UNIX. Stallman escolheu o nome GNU porque este nome, além do significado original do mamífero Gnu, é um acrônimo recursivo de: GNU is Not Unix (em português: GNU não é Unix).

A partir de 1984 Stallman e vários programadores, que abraçaram a causa, vieram desenvolvendo as peças principais de um sistema operacional, como compilador de linguagem C, editores de texto, etc. Em 1991 o sistema operacional já estava quase pronto, mas faltava o principal, que é o núcleo do sistema operacional. O grupo liderado por Stallman estava desenvolvendo um kernel chamado Hurd. Porém, em 1991, um jovem finlandês chamado Linus Torvalds havia criado um kernel que poderia usar todas as peças do sistema operacional GNU. Este kernel ficou conhecido como Linux, contração de Linus e Unix. Atualmente, o sistema operacional GNU com o kernel Linux é conhecido como GNU/Linux, que é como o projeto solicita aos utilizadores que se refiram ao sistema completo, embora a maioria das pessoas se referem ao sistema apenas como Linux por uma questão de comodidade. Mas o próprio Linus Torvalds discorda da nomenclatura GNU/Linux, chamando seu Sistema Operacional apenas de Linux. A discussão e desentendimento entre Stallman e Torvalds prosseguem acerca da correta nomenclatura a respeito do Sistema, arrastando também as opiniões dos inúmeros usuários e desenvolvedores do Sistema GNU/Linux (ou apenas Linux).

Programas desenvolvidos pelo projeto GNU
O duo dinâmico: O Gnu e o Software Fundation, Inc Pinguim voando. (C) 1999, Free

Lista de alguns programas GNU: •Bison - gerador de parser yacc. •Bash - interpretador de •BFD - arquivos de •Binutils - montador, linker •Classpath - bibliotecas para Java. •DotGNU - substituto livre para o Microsoft .NET.

desenvolvidos pelo projeto desenhado para substituir o comandos. bibliotecas. e ferramentas relacionadas.

•Emacs - editor de texto extensível e auto-documentado. •GCC - compilador otimizado para várias linguagens de programação, particularmente linguagem C. •GDB - depurador de aplicações. •GIMP - programa de edição de imagens. •glibc - biblioteca para linguagem C. •GMP - programa para cálculos arbitrários.

•GNOME - ambiente de gráfico para sistemas do tipo Unix. •Autotools - Autoconf, Automake e Libtool. •GNUnet - rede descentralizada de comunicações pessoais, desenhada para resistir à censura. •GNUstep - implementação de conjunto de bibliotecas OpenStep, assim como ferramentas para programar aplicações gráficas. •GSL - biblioteca científica para GNU •Gzip - aplicações e bibliotecas para compressão de dados. •GNU Hurd - um micronúcleo e um conjunto de servidores que funcionam do mesmo modo que o núcleo Unix. •Maxima - um sistema para cálculos algébricos. •Octave – um programa para computador numérico similar a MATLAB. •GNU MDK - um conjunto de ferramentas para a programação em MIX. •Texinfo - sistema de documentação. •LilyPond - editor de partituras musicais. O projecto GNU também ajuda com o desenvolvimento de outros pacotes, como: •CVS - Sistema de controle de versões para código fonte. •DDD - Ferramentas gráficas para detecção e depuração de erros.

Ver também
•Free Software Foundation •Licença Pública GNU (GPL) •Gnu, o mamífero

Ligações externas
•(em português) O Sistema Operacional GNU •(em português) Filosofia do Projeto GNU •(em português) Introdução ao Projeto GNU •Uma bela charge

GNU Mach
GNU Mach é a implementação GNU do o micronúcleo Mach. Ele é a base de um servidor multi-funcional do sistema operacional, o Hurd. Atualmente é mantido pelos desenvolvedores Hurd do projeto GNU, e roda em máquinas IA32.

Vantagens
Como um microkernel, o GNU Mach não implementa uma série de características geralmente encontradas em um sistema operacional, apenas o mínimo necessário. Isto significa que uma grande parte do código do sistema operacional de código é mantido fora do GNU Mach, e, enquanto este código pode passar por uma completa remodelação, o código do microkernel pode permanecer relativamente estável. O GNU Mach é particularmente bem adaptado para o SMP e redes cluster técnicas. Threads são prestados ao nível do kernel, e o próprio kernel tira proveito disso. Transparência de rede no nível IPC.

Ligações externas
•GNU Mach (em inglês)

GNU Hurd
GNU Hurd

HURD Live CD

Desenvolvedor

Thomas Bushnell Roland McGrath Marcus Brinkmann Neal Walfield K16 / 30 de dezembro de 2007 GNU núcleo

Versão estável Sistema Op. Gênero

Licença Website Portal das Tecnologias de informação
Logo do GNU Hurd

GPL http://www.gnu.org/software/hurd/

GNU Hurd é o núcleo oficial do sistema operacional GNU. É composto de servidores (ou daemons, na terminologia de Unix) que utilizam o micronúcleo GNU Mach. Está em desenvolvimento desde 1990 pelo Projeto GNU e é distribuído como software livre sob a licença GPL. O Hurd almeja superar os núcleos tipo Unix em termos de funcionalidade, segurança e estabilidade, e ao mesmo tempo manter uma certa compatibilidade com o Unix. O nome "Hurd" é um acrônimo indiretamente recursivo: "HIRD of UnixReplacing Daemons", onde "HIRD" significa "HURD of Interfaces Representing Depth". Ainda em estágio de desenvolvimento, os próprios (e pouquíssimos) desenvolvedores pedem ajuda à pessoas conhecedoras da Linguagem C (tanto para o desenvolvimento do núcleo, quanto para o porte de aplicativos), assim como pessoas que tenham disponibilidade para efetuar testes e reportar bugs. •Richard Stallman Richard Stallman, fundador da Free Software Foundation, lançou o projeto GNU e subsequentemente começaram as pesquisas sobre um núcleo chamado TRIX, que funcionava com RPC (chamadas de procedimento remoto). Após estudos, descobriram muitas falhas, e então passaram a pensar no Mach 3.0 (micronúcleo), que foi desenvolvido com código aberto e integrado ao HURD; em 1994 o HURD inicia pela primeira vez, funcionando. O projeto HURD tem como finalidade, além de liberdade ao usuário, superar UNIX em termos de funcionalidade, segurança e manter uma certa compactibilidade com o mesmo.

Ligações externas
•GNU Hurd •The GNUFans Wiki - não oficial, mas a documentação do curso o Hurd •Towards a New Strategy of OS Design •Debian GNU/Hurd instalaçõ por CDs •Interview com Neal Walfield, Hurd e Hurd/L4 developer. (2001) •Interview com Marcus Brinkmann, Hurd e Hurd/L4 developer. (2005) •A GNU/Hurd on Mach Live CD, baseado no Debian GNU/Hurd •#hurd canal de IRC

Richard Matthew Stallman
Imagem do jovem Stallman, na in Freedom: Richard Stallman's Sam Williams (2002). capa do livro da O'Reilly Free as Crusade for Free Software, por

Richard Matthew Stallman, freqüentemente abreviado para "rms" (Manhattan, 16 de março de 1953) é um famoso hacker, fundador do movimento free software, do projeto GNU, e da Free Software Foundation(FSF) ("Fundação para o Software Livre"). Um aclamado programador, seus maiores feitos incluem Emacs (e o GNU Emacs, mais tarde), o GNU Compiler Collection e o GNU Debugger. É também autor da GNU General Public License (GNU GPL ou GPL), a licença livre mais usada no mundo, que consolidou o conceito de copyleft. Desde a metade dos anos 1990, Stallman tem dedicado a maior parte de seu tempo ao ativismo político, defendendo software livre e lutando contra a patente de softwares e a expansão da lei de copyright. O tempo que ainda devota à programação é gasto no GNU Emacs. Ele se sustenta com aproximadamente a metade do que recebe por suas palestras. Em 1971, ainda calouro na Universidade Harvard - onde se graduou em Física, em 1974 - Stallman era programador do laboratório de IA do MIT e tornou-se um líder na comunidade hacker.

Biografia
Richard Matthew Stallman nasceu em Nova Iorque, filho de Alice Lippman e Daniel Stallman. Seu primeiro acesso a um computador aconteceu em 1969, no seu primeiro ano do curso médio. Empregado pelo Centro Científico da IBM em Nova York, após concluir seu curso médio (High School) Stallman passou o verão escrevendo seu primeiro programa - um pré-processador para a linguagem de programação PL/I no IBM 360. "Eu o escrevi primeiro em PL/I, passando então para a linguagem de montagem quando o programa de PL/I se tornou grande demais para caber no computador", contou Stallman, anos depois (Williams 2002, capítulo 3). Stallman era simultaneamente assistente voluntário do laboratório do departamento de Biologia na Rockefeller University. Embora já se estivesse encaminhando para as áreas de Matemática e Física, sua mente analítica impressionou de tal modo o diretor do laboratório que, alguns anos depois de Stallman ter ido para a faculdade, sua mãe recebeu uma chamada de telefone: "Era o professor da Rockefeller", ela recordou, "quis saber o que Richard estava fazendo". Foi surpreendido ao saber que estava trabalhando em computadores. O professor imaginava que Richard teria tido um grande futuro como biólogo (Williams 2002, capítulo 3).

Durante estes anos tornou-se mais conhecido pelas iniciais de seu nome, rms. Na primeira edição do dicionário do hacker, ele escreveu, "Richard Stallman' é apenas meu nome mundano; você pode me chamar de 'rms'."

O declínio da cultura hacker
Nos anos 1980, a comunidade hacker, que até então dominara a vida de Stallman, começou a se dissolver. A emergência do "software portável" (software que poderia ser feito para funcionar em tipos diferentes de computadores) era então um problema para o modelo de negócio dos fabricantes de computador. Para impedir que seu software pudesse ser usado em computadores dos seus concorrentes, os fabricantes pararam de distribuir o código fonte e começaram a restringir a cópia e a redistribuição de seu software. O software restrito tinha existido antes, mas agora não havia nenhuma escapatória dele. Em 1980 Richard Greenblatt, um companheiro hacker do laboratório, fundou a Lisp Machines Incorporated para vender Máquinas Lisp, que ele e Tom Knight criaram no laboratório. Mas Greenblatt rejeitou o investimento exterior, acreditando que os rendimentos da construção e da venda de algumas máquinas poderiam ser reinvestidos no crescimento da companhia. No contraste Russ Noftsker e outros hackers sentiram que o capital providenciado por investidores externos era melhor. Sem um acordo, a maioria dos hackers restantes do laboratório fundaram o Symbolics. Symbolics recrutou a maioria dos hackers restantes e começou a fazer oposição ao laboratório de AI. Symbolics forçou Greenblatt a renunciar, citando políticas do MIT. Quando ambas as companhias entregaram o software proprietário, Richard Stallman sentiu que LMI, ao contrário de Symbolics, tinha tentado evitar de ferir o laboratório. Por dois anos, de 1982 ao fim de 1983, Stallman duplicou os esforços dos programadores do Symbolics para impedir que ganhassem um monopólio nos computadores do laboratório. Por esse tempo, entretanto, era o último de sua geração dos hackers no laboratório. Ele rejeitou um futuro onde tivesse que assinar acordos de não-divulgação, onde ele tivesse de concordar com não compartilhar o código fonte ou informações técnicas com outros desenvolvedores de software, e executar outras ações que considerou contrárias de seus princípios. Ele escolheu ao contrário compartilhar seu trabalho com os outros, o que considerou como um espírito clássico da colaboração científica. Stallman pregava que os usuários do software deveriam ter a liberdade de "compartilhar com seu vizinho" e poder estudar e fazer mudanças nos softwares que usam. Disse repetidamente que as tentativas de vendedores de software proprietário de proibir estes atos são "antissociais" e "antiéticas". A frase "software deve ser livre" é algumas vezes incorretamente atribuída a ele, mas Stallman diz que esta frase é a mola mestre da sua filosofia. Para Stallman a liberdade (de alterar e redistribuir software) é importante por causa dos usuários e da sociedade, não por quaisquer melhorias que traga ao software.

Conseqüentemente, em janeiro 1984, parou seu trabalho no MIT para trabalhar em tempo integral no projeto do GNU, anunciado em setembro 1983. Stallman jamais obteve o grau de Ph.D., embora tenha recebido vários títulos honoríficos de diferentes universidades do mundo, sendo Doctor honoris causa por pelo menos seis delas.

Fundação do projeto GNU
Stallman no Marlboro College, em Vermont, 2007.

Em 1985, Stallman GNU, que delineou sua sistema livre chamado compatível com Unix. fundação livre FSF Livre) para empregar software e para fornecer para a comunidade livre.

publicou o manifesto motivação para criar um GNU, que seria Logo após, incorporou a (Fundação do Software programadores livres do um infra-estrutura legal

Em 1985 Stallman popularizou o conceito do copyleft, um mecanismo legal para proteger a modificação e constituir directivas de redistribuição de software livre. Foi executado primeiramente na licença do GNU Emacs, e em 1989 a primeira licença "program-independent" do GPL (Licença pública geral) do GNU foi liberada. Neste momento, muito do sistema GNU estava completo com a notável exceção do núcleo Os membros do projecto de GNU começaram o desenvolvimento de um núcleo chamado GNU Hurd, em 1990, mas uma decisão arriscada de design foi escolhida, o que torna o Hurd extremamente complicado. Produzindo as ferramentas de software necessárias para escrever software, e publicando uma licença geral que poderia ser aplicada a todo o projeto do software (GPL), Stallman permitiu que outros escrevessem software livres, independente do projeto GNU. Em 1991, um projeto independente iniciado pelo estudante finlandês Linus Torvalds produziu o Linux. Fortuitamente o projeto podia ser combinado com os softwares existentes GNU para fazer um sistema operacional completo.

Ver também
•GPL •Software livre •Hacker

Ligações externas
•Site pessoal •Fundação GNU •Blog oficial •Textos sobre o Movimento Free Software e a filosofia do projeto GNU

Software livre
Ilustração freqüentemente usada como logo para o Projeto GNU

Software livre, segundo a Software Foundation é computador que pode ser redistribuído com algumas tais diretrizes é central ao conceito de software software que é vendido comercial). A maneira usual livre é anexar a este uma tornar o código fonte do programa disponível.

definição criada pela Free qualquer programa de usado, copiado, estudado e restrições. A liberdade de conceito, o qual se opõe ao proprietário, mas não ao almejando lucro (software de distribuição de software licença de software livre, e

Definição
Um software é considerado como livre quando atende aos quatro tipos de liberdade para os usuários do software definidas pela Free Software Foundation: •A liberdade para executar o programa, para qualquer propósito (liberdade nº 0); •A liberdade de estudar como o programa funciona, e adaptá-lo para as suas necessidades (liberdade nº 1). Acesso ao código-fonte é um pré-requisito para esta liberdade; •A liberdade de redistribuir, inclusive vender, cópias de modo que você possa ajudar ao seu próximo (liberdade nº 2); •A liberdade de modificar o programa, e liberar estas modificações, de modo que toda a comunidade se beneficie (liberdade nº 3). Acesso ao código-fonte é um pré-requisito para esta liberdade; A liberdade de executar o programa significa a liberdade para qualquer tipo de pessoa física ou jurídica utilizar o software em quantas máquinas quiser, em qualquer tipo de sistema computacional, para qualquer tipo de trabalho ou atividade, sem nenhuma restrição imposta pelo fornecedor.

A liberdade de redistribuir o programa compilado, isto é em formato binário, necessariamente inclui a obrigatoriedade de disponibilizar seus códigos-fonte. Caso o software venha a ser modificado e o autor da modificação queira distribuí-lo, gratuitamente ou não, será também obrigatória a distribuição do código fonte das modificações, desde que elas venham a integrar o programa. Não é necessária a autorização do autor ou do distribuidor do software para que ele possa ser redistribuído, já que as licenças de software livre assim o permitem. Para que seja possível estudar ou modificar o software (para uso particular ou para distribuir) é necessário ter acesso ao código-fonte. Por isso a disponibilidade desses arquivos é pré-requisito para a liberdade do software. Cada licença determina como será feito o fornecimento do código fonte para distribuições típicas, como é o caso de distribuições em mídia portátil somente com os códigos binários já finalizados (sem o fonte). No caso da licença GPL, a fonte deve ser disponibilizada em local de onde possa ser acessado, ou deve ser entregue ao usuário, se solicitado, sem custos adicionais (exceto transporte e mídia). Para que essas liberdades sejam reais, elas devem ser irrevogáveis. Caso o desenvolvedor do software tenha o poder de revogar a licença, o software não é livre. A maioria dos softwares livres é licenciada através de uma licença de software livre, como a GNU GPL, a mais conhecida.

Software Livre e Software em Domínio Público
Software livre é diferente de software em domínio público. O primeiro, quando utilizado em combinação com licenças típicas (como as licenças GPL e BSD), garante a autoria do desenvolvedor ou organização. O segundo caso acontece quando se passam os anos previsto nas leis de cada país de proteção dos direitos do autor e este se torna bem comum. Ainda assim, um software em domínio público pode ser considerado como um software livre.

Software Livre e Copyleft
Licenças como a GPL contêm um conceito adicional, conhecido como Copyleft, que se baseia na propagação dos direitos. Um software livre sem copyleft pode ser tornado não-livre por um usuário, caso assim o deseje. Já um software livre protegido por uma licença que ofereça copyleft, se distribuído, deverá ser sob a mesma licença, ou seja, repassando os direitos.

Associando os conceitos de copyleft e software livre, programas e serviços derivados de um código livre devem obrigatoriamente permanecer com uma licença livre (os detalhes de quais programas, quais serviços e quais licenças são definidos pela licença original do programa). O usuário, porém, permanece com a possibilidade de não distribuir o programa e manter as modificações ou serviços utilizados para si próprio.

Venda de Software Livre
As licenças de software livre permitem que eles sejam vendidos, mas estes em sua grande maioria estão disponíveis gratuitamente. Uma vez que o comprador do software livre tem direito às quatro liberdades listadas, ele poderia redistribuir este software gratuitamente ou por um preço menor do que aquele que foi pago. Como exemplo poderíamos citar o Red Hat Enterprise Linux que é comercializado pela Red Hat, a partir dele, foram criados diversos clones como o CentOS que pode ser baixado gratuitamente. Muitas empresas optam por distribuir o mesmo produto sobre duas ou mais licenças, geralmente uma sobre uma licença copyleft e gratuita como a GPL e outra sobre uma licença proprietária e paga. Outra diferença muito comum é que as versões pagas geralmente acompanham algum tipo de serviço adicional, como direito a suporte técnico, por exemplo.

Movimento Software Livre
Motivação
O logotipo da Free Software Foundation.

Os desenvolvedores de software na década de 70 frequentemente compartilhavam seus programas de uma maneira similar aos princípios do software livre. No final da mesma década, as empresas começaram a impor restrições aos usuários com o uso de contratos de licença de software. Em 1983, Richard Stallman iniciou o projeto GNU, e em outubro de 1985 fundou a Free Software Foundation (FSF). Stallman introduziu os conceitos de software livre e copyleft, os quais foram especificamente desenvolvidos para garantir que a liberdade dos usuários fosse preservada.

Ideologia: as diferenças entre Software Livre e Código Aberto
Muitos defensores do software livre argumentam que a liberdade é valiosa não só do ponto de vista técnico, mas também sob a ótica da moral e ética. É neste aspecto que o movimento de software livre (encabeçado pela FSF) se distingue do movimento de código aberto (encabeçado pela OSI), que enfatiza a superioridade técnica em relação a software proprietário, ao menos em potencial. Os defensores do código aberto (também conhecido como Open source em inglês) argumentam a respeito das virtudes pragmáticas do software livre ao invés das questões morais. A discordância básica dos movimentos está no discurso. Enquanto o foco do movimento encabeçado pela FSF chama a atenção para valores morais, éticos, direitos e liberdade, o movimento encabeçado pela OSI defende um discurso mais agradável às empresas. Com isso, o movimento de software livre condena o uso e desenvolvimento de software proprietário, enquanto o movimento de código aberto é conivente com o desenvolvimento de software proprietário. As definições oficiais de software livre e de código aberto são as mesmas, porém escritas de formas distintas. A OSI define o código aberto usando a definição Debian de software livre, que é apenas um detalhamento das 4 liberdades da FSF. Desta forma todo software de código aberto é também um software livre. O movimento software livre não costuma tomar uma posição sobre trabalhos que não sejam softwares e suas respectivas documentações, mas alguns defensores do software livre acreditam que outros trabalhos que servem a um propósito prático também devem ser livres (veja Free content). Para o Movimento do software livre, que é um movimento social, não é ético aprisionar conhecimento científico, que deve estar sempre disponível, para assim permitir a evolução da humanidade. Já o movimento pelo Código Aberto, que é um movimento mais voltado ao mercado, prega que o software desse tipo traz diversas vantagens técnicas e econômicas. O segundo surgiu para levar as empresas a adotarem o modelo de desenvolvimento de software livre. Como a diferença entre os movimentos "Software Livre" e "Código Aberto" está apenas na argumentação em prol dos mesmos softwares, é comum que esses grupos se unam em diversas situações ou que sejam citados de uma forma agregadora através da sigla "FLOSS" (Free/Libre and Open Source Software).

Movimentos Relacionados
Inspirados na GPL e nas propostas do movimento do software livre, foi criado um repositório de licenças públicas, chamado Creative Commons, cujos termos se aplicam a variados trabalhos criativos, como criações artísticas colaborativas, textos e software. Entretanto a maioria destas licenças não são reconhecidas como realmente livres pela FSF e pelo movimento de software livre. O software livre está inserido num contexto mais amplo onde a informação (de todos os tipos, não apenas software) é considerada um legado da humanidade e deve ser livre (visão esta que se choca diretamente ao conceito tradicional de propriedade intelectual). Coerentemente, muitas das pessoas que contribuem para os movimentos de Conhecimento Aberto — movimento do software livre, sites Wiki, Creative Commons, etc. — fazem parte da comunidade científica. Cientistas estão acostumados a trabalhar com processos de revisão mútua (ou por pares) e o conteúdo desenvolvido é agregado ao conhecimento científico global. Embora existam casos onde se aplicam as patentes de produtos relacionados ao trabalho científico, a ciência pura, em geral, é livre.

Software Freedom Day
No dia 20 de setembro comemora-se o Dia da Liberdade do Software (Software Freedom Day) com eventos envolvendo as comunidades de usuários e desenvolvedores de software livre em todo o mundo.116

Softwares Livres notáveis
Abaixo está uma lista com os softwares livres mais conhecidos e usados: •Sistemas operacionais: GNU/Hurd, GNU/Linux, BSDs. •Ferramentas de desenvolvimento: 1. Compilador C: GCC. 2. Compilador Pascal: Free Pascal. 3. Debugger GDB. 4. Biblioteca padrão da linguagem: C. 5. Editor de texto avançado: Emacs. 6. Ferramentas para desenvolvimento em Flash e ActionScript: SWFTools 7. Plataforma de desenvolvimento: Eclipse (programação em Java e PHP) e NetBeans (Programação em C, C++, Java, Python, UML e outras).
116http://softwarefreedomday.org/

•Linguagens de programação: Python,Java, Perl, PHP, Lua, Ruby, Gambas e Tcl. •Servidores: 1. Servidor de nomes: BIND. 2. Agente de transporte de mensagens (e-mail):Postfix sendmail. 3. Servidor web: Apache. 4. Servidor de arquivos: Samba. 5. Servidor e cliente de email: Evolution. 6. Servidor de aplicações: Zope e Apache Tomcat. •Bancos de dados relacionais: MySQL, Postgres. •Programas de interação gráfica: GNOME, KDE e Xorg. •Aplicativos: 1. Navegadores Web: Firefox,Konqueror e Google Chrome. 2. Pacote de escritório: OpenOffice.org. 3. Processadores de texto: OpenOffice.org Writer e AbiWord. 4. Editor de apresentação multimédia: OpenOffice.org Impress 5. Planilha eletrônica: OpenOffice.org Calc e GNumeric 6. Sistema de gerenciamento de banco de dados: OpenOffice.org Base 7. CAD, (computer aided design) QCad. 8. Desenho vetorial: Inkscape, Sodipodi e OpenOffice.org Draw. 9. Editoração eletrônica: Scribus e OpenOffice.org Draw. 10. 11. 12. Editor de imagens: Gimp. Editor web: Aptana. EaD, Educação a distância: Moodle

13. Gerenciador de Conteúdo (CMS): Opencms, Drupal, Plone, WordPress (CMS muito usado em blogs)e Joomla. 14. 15. 16. 17. 18. 19. 20. Modelagem Tridimensional Blender3d, Wings3d Renderização (imagem estática): Yafray, POV-Ray Acessibilidade: Virtual Magnifying Glass. Edição de áudio: Audacity, Ardour Edição de partituras musicais: Rosegarden Publicação na Internet: SPIP Players multimédia: VLC e Mplayer.

•Sistema matemático : Scilabe Maxima. •Sistemas de editoração: TeX, LaTeX e MiKTeX •Sistema wiki: MediaWiki (sistema de wiki da Wikipedia). •Telefonia: Asterisk. •Composição de video : Cinelerra, Kdenlive •Educacional: Gcompris [multidisciplinar], Tuxpaint, Tuxmath, etc. Veja listas maiores no diretório da Fundação do Software Livre e em diversos outros sites de projetos na Internet.

Ver também
•Wikilivros •GPL •Software Livre nos governos •GNU •Richard M. Stallman •Free Software Foundation •Free Software Foundation Europe •Free Software Foundation India •Free Software Foundation Latin America •Licença livre •Publicação Aberta •Fórum Internacional de Software Livre •Sérgio Amadeu •Lei de Linus •Livre associação

Ligações externas
•A identificação da ideologia através da análise do discurso (sobre Software Livre x Código Aberto) •Página oficial da Free Software Foundation (em inglês) •Free Software Foundation Latin America

•Associação Nacional para o Software Livre (Portugal) •LISA - Laboratório para a Iniciativa de Software Aberto (Organização Governamental de Portugal) •O que é o Software Livre? •Explicação sobre Tipos de Software

GNU General Public License
Logotipo GNU

GNU General Public Pública Geral), GNU GPL, é a designação da livre idealizada por final da década de 1980, GNU da Free Software A GPL é a licença com parte de projectos de grande parte devido à projeto GNU e o sistema O software utilizado conteúdo da Wikipédia é na sua versão 2.0 ou superiores.

License (Licença GPL ou simplesmente licença para software Richard Stallman no no âmbito do projecto Foundation (FSF). maior utilização por software livre, em sua adoção para o operacional GNU/Linux. para administrar o coberto por esta licença,

Conteúdo
Em termos gerais, a GPL baseia-se em 4 liberdades: 1. A liberdade de executar o programa, para qualquer propósito (liberdade nº 0) 2. A liberdade de estudar como o programa funciona e adaptá-lo para as suas necessidades (liberdade nº 1). O acesso ao código-fonte é um pré-requisito para esta liberdade. 3. A liberdade de redistribuir cópias de modo que você possa ajudar ao seu próximo (liberdade nº 2). 4. A liberdade de aperfeiçoar o programa, e liberar os seus aperfeiçoamentos, de modo que toda a comunidade se beneficie deles (liberdade nº 3). O acesso ao código-fonte é um pré-requisito para esta liberdade.

Com a garantia destas liberdades, a GPL permite que os programas sejam distribuídos e reaproveitados, mantendo, porém, os direitos do autor por forma a não permitir que essa informação seja usada de uma maneira que limite as liberdades originais. A licença não permite, por exemplo, que o código seja apoderado por outra pessoa, ou que sejam impostos sobre ele restrições que impeçam que seja distribuído da mesma maneira que foi adquirido. A GPL está redigida em inglês e actualmente nenhuma tradução é aceita como válida pela Free Software Foundation, com o argumento[12] de que há o risco de introdução de erros de tradução que poderiam deturpar o sentido da licença. Deste modo, qualquer tradução da GPL é não-oficial e meramente informativa, mantendo-se a obrigatoriedade de distribuir o texto oficial em inglês com os programas.

História
A licença GPL foi originalmente publicada em Janeiro de 1989. No entanto, passado pouco tempo, ficou claro que o texto da licença comportava vários problemas, pelo que em Junho de 1991 foi publicada a GPL versão 2, sendo ao mesmo tempo introduzida uma nova licença LGPL. Em 2005, Stallman anunciou que estava a preparar uma nova versão da licença em conjunto com Eben Moglen. Essa nova versão, foi chamada de GPLv3 e o primeiro esboço foi publicado em 16 de Janeiro de 2006, sendo a versão final lançada em 29 de Junho de 2007.

Crítica
Em 2001, Steve Ballmer, da Microsoft, se referiu ao Linux como "um câncer que se junta à propriedade intelectual e contamina tudo que toca".117 Porém, críticos alegam contra Microsoft que o verdadeiro motivo para a empresa atacar a GPL é o fato desta licença "resistir às tentativas dos direitos de propriedade intelectual convencionais se estenderem sobre todas as criações e inovações da área".118 Em resposta aos ataques da Microsoft à GPL, muitos desenvolvedores e defensores de Softwares Livres fizeram uma proclamação conjunta a favor da licença.119 Contudo, em julho de 2009, a própria Microsoft incluiu um bloco de aproximadamente 20.000 linhas, sob licensa GPL, ao conjunto de drivers do Linux.120 O código do Hyper-V que era parte do código submetido usou componentes open-source licenciados sob a GPL. Era originalmente linkado estaticamente a partes de binários pertencentes à propritários de direitos autorais, que são inadmissíveis em um software licenciado através da GPL.121 A GPL tem sido descrita como “viral” por muitos críticos122 porque ela apenas permite programas inteiros, o que significa que não é permitido aos programadores linkar seu projeto a bibliotecas sob licenças incompatíveis à GPL. O efeito “viral” ocorre nos casos em que os códigos não podem ser combinados a menos que a licença de um deles sofra alguma alteração. Embora teoricamente qualquer uma das licenças possa ser mudada, no contexto “viral” isso é mais difícil de ocorrer com a GPL (porque o software pode ter muitos contribuintes, dos quais alguns geralmente se recusam permitir mudanças nos termos de licença), ao passo que a licença dos outros softwares pode ser mudada. De acordo com Richard Stallman, a imagem de um “vírus” não é apenas ofensiva, como também errônea: Software sob licença GPL nunca ataca ou infecta outro software. Ela se comporta mais como uma planta. Se um pedaço é aproveitado como enxerto em outro lugar, ela cresce lá também. Há uma espécie de diferença filosófica entre GPL e licenças permissivas de software livre como as do estilo BSD, que não impõem restrições nas versões modificadas. Enquanto a GPL propõe que a liberdade dos softwares se preserve desde os desenvolvedores até o usuário final, outros acreditam que intermediários devam ter a liberdade de modificar e redistribuí-los comercialmente. Mais especificamente, a GPL exige redistribuição sujeita à GPL, embora outras mais “permissivas” permitam redistribuição sob forma mais restritiva que a original.
117Newbart, Dave. " Microsoft CEO takes launch break with the Sun-Times", Chicago Sun-Times, 2001-06-01.(Internet archive link) 118" Deadly embrace", The Economist, 2000-03-30. Página visitada em 2006-03-31. 119Free Software Leaders Stand Together 120Clarke, Gavin. " Microsoft embraces Linux cancer to sell Windows servers", The Register, 2009-07-20. 121Clarke, Gavin. " Microsoft opened Linux-driver code after 'violating' GPL", The Register, 2009-07-23. 122" Speech Transcript - Craig Mundie, The New York University Stern School of Business", Prepared Text of Remarks by Craig Mundie, Microsoft Senior Vice President, The Commercial Software Model The New York University Stern School of Business May 3, 2001

Em um mercado grande, códigos sob licença GPL tem preço praticamente nulo, pois cada usuário tem igual direito de revendê-lo. Isso pode inibir o interesse no seu uso ao comprometer os interesses econômicos do desenvolvedor. A Microsoft, por exemplo, inclui termos anti-GPL ao disponibilizar seus códigos.123 Porém essa crítica é rebatida na observação de que empresas que focam seus negócios em software livre, como a Red Hat e a IBM, trabalham na venda de serviços agregados como suporte e desenvolvimento de novas funcionalidades, ao invés da venda do software.124125 A GPL não tem cláusula de indenização explícita protegendo os desenvolvedores de contribuição inescrupulosa. Por exemplo, se um projeto GPL é acrescido de um trabalho patenteado ou sob copyright, violando os termos destes, todos os envolvidos neste projeto, não só a pessoa que se apossou indevidamente dos trabalhos alheios, serão processados por danos ao detentor da patente ou do direito de cópia. Este foi um problema que levou Mozilla a criar e usar a Mozilla Public License em vez da GPL ou LGPL.[carece de fontes?] Alguns desenvolvedores de software acabaram concluindo que o escopo extensivo da GPL é muito restritivo. Por exemplo, Bjorn Reese e Daniel Stenberg sentiram que sua escolha pela GPL criou um “quodque pro quo” (do latim, tudo em retorno de algo) aos outros desenvolvedores de softwares, quando estes tentavam linkar os projetos. Por essa razão, em 2001, eles abandonaram a GPLLv2 em favor de uma copyright menos restritiva.126

Ver também
•GNU FDL, a Licença de Documentação Livre GNU. •GNU LGPL, a Licença Pública Geral Menor GNU. •GNU AGPL, a Licença Pública Geral Affero GNU. •Licença livre •Copyleft

Ligações externas
•(em inglês) Texto oficial da GPL •(em português) Tradução da GPL para Português (não oficial) •(em português) Tradução da GPL para Português do Brasil (não oficial) •(em português) Licença Pública Geral do GNU (GPL) do Creative Commons (não oficial)
123Microsoft anti-GPL fine print threatens competition | The Register 124IBM's Linux revenue: Services to overtake servers 125Red Hat revenue surges 46 percent 126Bjørn Reese and Daniel Stenberg, Working Without Copyleft (December 19, 2001)

•(em português) Como usar a GPL em seus próprios programas •(em inglês) Como denunciar uma violação da GPL •(em inglês) Veja e participe na discussão da GPL v3

Free Software Foundation
logotipo da Free Software Foundation

A Free Software Foundation (FSF, Fundação para o Software Livre) é uma organização sem fins lucrativos, fundada em 1985 por Richard Stallman e que se dedica à eliminação de restrições sobre a cópia, redistribuição, entendimento e modificação de programas de computadores – bandeiras do movimento do software livre, em essência. Faz isso promovendo o desenvolvimento e o uso de software livre em todas as áreas da computação mas, particularmente, ajudando a desenvolver o sistema operacional GNU e suas ferramentas. Até meados da década de 1990 a fundação dedicava-se mais à escrita do software. Como hoje existem muitos projetos independentes de software livre, a FSF dedica-se mais aos aspectos legais e estruturais da comunidade do software livre. Entre suas atribuições atuais, encarrega-se de aperfeiçoar licenças de software e de documentação (como a GNU General Public License, GPL ou a GNU Free Documentation License, GFDL), de desenvolver um aparato legal acerca dos direitos autorais dos programas criados sob essas licenças, de catalogar e disponibilizar um serviço com os softwares livres desenvolvidos (o Free Software Directory), e de discutir e aperfeiçoar a própria definição de software livre..

Ver também
•GNU •GNU/Linux •Free Software Foundation Latin America •Free Software Foundation Europe •Free Software Foundation India •Richard M. Stallman •GNU General Public License •GNU Free Documentation License

Ligações externas
•FSF Página Principal

Linux
Linux

Modelo do desenvolvimento: Núcleo: Licença: Estado do desenvolvimento: Portal Tecnologias de informação

Open source Monolítico/Modular Várias Ativo

Linux é o termo geralmente usado para designar qualquer sistema operativo (português europeu) ou sistema operacional (português brasileiro) que utilize o núcleo Linux. Foi desenvolvido pelo finlandês Linus Torvalds, inspirado no sistema Minix. O seu código fonte está disponível sob licença GPL para qualquer pessoa que utilizar, estudar, modificar e distribuir de acordo com os termos da licença. Inicialmente desenvolvido e utilizado por grupos de entusiastas em computadores pessoais, o sistema Linux passou a ter a colaboração de grandes empresas, como a IBM, a Sun Microsystems, a Hewlett-Packard (HP), Red Hat, Novell, Google e a Canonical.127

História
Linus Torvalds, criador e principal mantenedor do núcleo Linux.

127http://www.linuxfoundation.org/about/members

O núcleo Linux foi, Linus Torvalds do Computação da Universidade ajuda de vários através da Usenet (uma de discussão existente desde Linus Torvalds começou o como um projeto particular, no Minix, um pequeno por Andrew S. Tanenbaum. suas próprias palavras, "um ("a better Minix than Minix"). trabalho no projecto, mensagem para

originalmente, escrito por Departamento de Ciência da de Helsinki, Finlândia, com a programadores voluntários espécie de sistema de listas os primórdios da Internet). desenvolvimento do núcleo inspirado pelo seu interesse sistema UNIX desenvolvido Ele limitou-se a criar, nas Minix melhor que o Minix" E depois de algum tempo de sozinho, enviou a seguinte comp.os.minix:

Você suspira pelos bons tempos do Minix-1.1, quando os homens eram homens e escreviam seus próprios "device drivers"?128 Você está sem um bom projecto em mãos e deseja trabalhar num S.O. que possa modificar de acordo com as suas necessidades? Acha frustrante quando tudo funciona no Minix? Chega de noite ao computador para conseguir que os programas funcionem? Então esta mensagem pode ser exactamente para você. Como eu mencionei há um mês atrás, estou trabalhando numa versão independente de um S.O. similar ao Minix para computadores AT-386. Ele está, finalmente, próximo do estado em que poderá ser utilizado (embora possa não ser o que você espera), e eu estou disposto a disponibilizar o
128Primeiro período do original, em inglês: Do you pine for the nice days of minix-1.1, when men were men and wrote their own device drivers?

código-fonte para ampla distribuição. Ele está na versão 0.02... contudo eu tive sucesso ao executar bash, gcc, gnu-make, gnused, compressão etc. nele. Curiosamente, o nome Linux foi criado por Ari Lemmke, administrador do site ftp.funet.fi que deu esse nome ao diretório FTP onde o núcleo Linux estava inicialmente disponível.129 (Linus tinha-o baptizado como "Freax", inicialmente)130 No dia 5 de outubro de 1991 Linus Torvalds anunciou a primeira versão "oficial" do núcleo Linux, versão 0.02. Desde então muitos programadores têm respondido ao seu chamado, e têm ajudado a fazer do Linux o sistema operacional que é hoje. No início era utilizado por programadores ou só por quem tinha conhecimentos, usavam linhas de comando. Hoje isso mudou, existem diversas empresas que criam os ambientes gráficos, as distribuições cada vez mais amigáveis de forma que uma pessoa com poucos conhecimentos consegue usar o Linux. Hoje o Linux é um sistema estável e consegue reconhecer todos os periféricos sem a necessidade de se instalar os drivers de som, vídeo, modem, rede, entre outros.

Núcleo
Interface padrão do gNewSense, uma das distribuições do Linux

O termo Linux refere-se ao "kernel") do sistema também é usado pelos usuários para referir-se baseados no núcleo Linux programas. Segundo um núcleo pode ser sistema operativo, quando gerenciador de recursos de hardware.

núcleo (em inglês: operativo. O termo meios de comunicação e aos sistemas operacionais agregado a outros Tanenbaum e Silberschatz, considerado o próprio este é definido como um

129Lars Wirzenius (27 de abril de 1998). Linux Anecdotes. Página visitada em 15 de junho de 2007. 130Carlos E. Morimoto. Linux, Ferramentas Técnicas 2ed (em Português). 2.ed. GDH Press e Sul Editores, 2006. pp. 312. ISBN 85-205-0401-9

Arquitetura
O Linux é um núcleo monolítico: as funções do núcleo (escalonamento de processos, gerenciamento de memória, operações de entrada/saída, acesso ao sistema de arquivos) são executadas no espaço de núcleo. Uma característica do núcleo Linux é que algumas das funções (drivers de dispositivos, suporte à rede, sistema de arquivos, por exemplo) podem ser compiladas e executadas como módulos (em inglês: LKM - loadable kernel modules), que são bibliotecas compiladas separadamente da parte principal do núcleo e podem ser carregadas e descarregadas após o núcleo estar em execução.

Portabilidade
Embora Linus Torvalds não tenha tido como objetivo inicial tornar o Linux um sistema portável, ele evoluiu nessa direção. Linux é hoje um dos núcleos de sistemas operativos mais portáveis, correndo em sistemas desde o iPaq (um computador portátil) até o IBM S/390 (um denso e altamente custoso mainframe). Os esforços de Linus foram também dirigidos a um diferente tipo de portabilidade. Portabilidade, de acordo com Linus, era a habilidade de facilmente compilar aplicações de uma variedade de código fonte no seu sistema; consequentemente, o Linux originalmente tornou-se popular em parte devido ao esforço para que os códigos-fonte GPL ou outros favoritos de todos corressem em Linux. O Linux hoje funciona em dezenas de plataformas, desde mainframes até um relógio de pulso, passando por várias arquitecturas: x86 (Intel, AMD), x86-64 (Intel EM64T, AMD64), ARM, PowerPC, Alpha, SPARC etc., com grande penetração também em sistemas embarcados, como handhelds, PVR, consola de videojogos e centros multimídia, entre outros.

Termos de Licenciamento
Inicialmente, Torvalds lançou o Linux sob uma licença de software que proibia qualquer uso comercial. Isso foi mudado de imediato para a GNU General Public License. Essa licença permite a distribuição e mesmo a venda de versões possivelmente modificadas do Linux mas requer que todas as cópias sejam lançadas dentro da mesma licença e acompanhadas do código fonte. Apesar de alguns dos programadores que contribuem para o núcleo permitirem que o seu código seja licenciado com GPL versão 2 ou posterior, grande parte do código (incluído as contribuições de Torvalds) menciona apenas a GPL versão 2. Isto faz com que o núcleo como um todo esteja sob a versão 2 exclusivamente, não sendo de prever a adopção da nova GPLv3.

Sistemas de arquivos suportados
O Linux possui suporte de leitura e escrita a vários sistema de arquivos, de diversos sistemas operacionais, além de alguns sistemas nativos. Por isso, quando o Linux é instalado em dual boot com outros sistemas (Windows, por exemplo) ou mesmo funcionando como Live CD, ele poderá ler e escrever nas partições formatadas em FAT e NTFS. Por isto, Live CDs Linux são muito utilizados na manutenção e recuperação de outros sistemas operacionais. Entre os sistemas de ficheiros suportados pelo Linux, podemos citar FAT, NTFS, JFS, XFS, HPFS, Minix e ISO 9660 (sistema de ficheiros usado em CD-ROMs). Alguns sistemas de ficheiros nativos são, dentre outros, Ext2, Ext3, Ext4, ReiserFS e Reiser4.131 Alguns sistemas de ficheiros com características especiais são SWAP, UnionFS, SquashFS, Tmpfs, Aufs e NFS, dentre outros.

Sistema Operacional
Richard Stallman, fundador do operacional livre. projeto GNU para um sistema

Logo que Linus Torvalds passou a disponibilizar o Linux, ou seja na sua versão 0.01, já havia suporte ao disco rígido, tela, teclado e portas seriais, o sistema de arquivos adotava o mesmo layout do Minix (embora não houvesse código do Minix no Linux), havia extensos trechos em assembly, e ela já era capaz de rodar o bash e o gcc. A linha guia quando implementei o Linux foi: fazê-lo funcionar rápido. Eu queria o núcleo simples, mas poderoso o suficiente para rodar a maioria dos aplicativos Unix.132 O próprio usuário deveria procurar os programas que dessem funcionalidade ao seu sistema, compilá-los e configurá-los. Talvez por isso, o Linux tenha carregado consigo a etiqueta de sistema operativo apenas para técnicos. Foi neste ambiente que surgiu a MCC Interim Linux, do Manchester Computer Centre, a primeira distribuição Linux, desenvolvida por Owen Le Blanc da Universidade de Manchester, capaz de ser instalada independentemente em um computador. Foi uma primeira tentativa de facilitar a instalação do Linux.

131Reiser4 ainda está em desenvolvimento. 132No original, em inglês: the guiding line when implementing linux was: get it working fast. I wanted the kernel simple, yet powerful enough to run most unix software.

Desde o começo, o núcleo Linux incluía um sistema básico para chamadas do sistema e acesso aos dispositivos do computador. O núcleo de um sistema operativo define entre várias operações, o gerenciamento da memória, de processos, dos dispositivos físicos no computador e é uma parte essencial de qualquer sistema operacional utilizável, contudo para um sistema operacional adquirir funcionalidade são necessários também vários outros aplicativos que determinam funções específicas que aquele sistema será capaz de desenvolver, os aplicativos existentes em um sistema operacional com a única exceção do núcleo são determinados pelo usuário do computador, como por exemplo: interpretadores de comandos, gerenciadores de janelas, que oferecem respectivamente uma interface para o usuário do computador, CLI ou GUI, e outros aplicativos como editores de texto, editores de imagem, tocadores de som, e, mas não necessariamente, compiladores. A maioria dos sistemas inclui ferramentas e utilitários baseados no BSD e tipicamente usam XFree86 ou X.Org para oferecer a funcionalidade do sistemas de janelas X — interface gráfica. Assim como também oferecem ferramentas desenvolvidas pelo projeto GNU. No momento do desenvolvimento do Linux, vários aplicativos já vinham sendo reunidos pelo Projeto GNU da Free Software Foundation (‘Fundação Software Livre’), que embarcara em um subprojeto que ainda continua para obter um núcleo, o GNU Hurd. Porém devido a várias complicações o projeto GNU e demora em desenvolver o Hurd, Stallman acabou adotando o núcleo Linux como base para distribuir os programas do projeto GNU , não obstante diversas pessoas e instituições tiveram a mesma idéia e assim várias distribuições começaram a surgir baseadas no núcleo desenvolvido inicialmente por Linus.

Distribuições
Atualmente, um Sistema Operacional (em Portugal Sistema Operativo) Linux ou GNU/Linux completo (uma "Lista de distribuições de Linux ou GNU/Linux") é uma coleção de software livre (e por vezes não-livres) criados por indivíduos, grupos e organizações de todo o mundo, incluindo o núcleo Linux. Companhias como a Red Hat, a SuSE, a Mandriva (união da Mandrake com a Conectiva) e a Canonical (desenvolvedora do Ubuntu Linux), bem como projetos de comunidades como o Debian ou o Gentoo, compilam o software e fornecem um sistema completo, pronto para instalação e uso. Patrick Volkerding também fornece uma distribuição Linux, o Slackware. As distribuições do Linux ou GNU/Linux começaram a receber uma popularidade limitada desde a segunda metade dos anos 90, como uma alternativa livre para os sistemas operacionais Microsoft Windows e Mac OS, principalmente por parte de pessoas acostumadas com o Unix na escola e no trabalho. O sistema tornou-se popular no mercado de Desktops e servidores, principalmente para a Web e servidores de bancos de dados.

No decorrer do tempo, várias distribuições surgiram e desapareceram, cada qual com sua característica. Algumas distribuições são maiores outras menores, dependendo do número de aplicações e sua finalidade. Algumas distribuições de tamanhos menores cabem num disquete com 1,44 MB, outras precisam de vários CDs, existindo até algumas versões em DVD. Todas elas tem o seu público e sua finalidade, as pequenas (que ocupam poucos disquetes) são usadas para recuperação de sistemas danificados ou em monitoramento de redes de computadores. De entre as maiores, distribuídas em CDs, podem-se citar: Slackware, Debian, Suse, e Conectiva. O que faz a diferença é como estão organizadas e préconfiguradas as aplicações. A distribuição Conectiva Linux, por exemplo, tinha as suas aplicações traduzidas em português, o que facilitou que usuários que falam a Língua Portuguesa tenham aderido melhor a esta distribuição. Hoje esta distribuição foi incorporada à Mandrake, o que resultou na Mandriva. Para o português, existe também a distribuição brasileira Kurumin, construída sobre Knoppix e Debian, e a Caixa Mágica, existente nas versões 32 bits, 64 bits, Live CD 32 bits e Live CD 64 bits, e com vários programas open source: OpenOffice.org, Mozilla Firefox, entre outros. Existem distribuições com ferramentas para configuração que facilitam a administração do sistema. As principais diferenças entre as distribuições estão nos seus sistemas de pacotes, nas estruturas dos diretórios e na sua biblioteca básica. Por mais que a estrutura dos diretórios siga o mesmo padrão, o FSSTND é um padrão muito relaxado, principalmente em arquivos onde as configurações são diferentes entre as distribuições. Então normalmente todos seguem o padrão FHS (File Hierarchy System), que é o padrão mais novo. Vale lembrar, entretanto, que qualquer aplicativo ou driver desenvolvido para Linux pode ser compilado em qualquer distribuição que vai funcionar da mesma maneira. Quanto à biblioteca, é usada a Biblioteca libc, contendo funções básicas para o sistema Operacional Linux. O problema está quando do lançamento de uma nova versão da Biblioteca libc, algumas das distribuições colocam logo a nova versão, enquanto outras aguardam um pouco. Por isso, alguns programas funcionam numa distribuição e noutras não. Existe um movimento LSB (Linux Standard Base) que proporciona uma maior padronização. Auxilia principalmente vendedores de software que não liberam para distribuição do código fonte, sem tirar características das distribuições. O sistemas de pacotes não é padronizado. ArchLinux, Debian, Fedora, Mandriva, Mint, Opensuse, PCLinuxOS, Puppy, Sabayon, Slackware e Ubuntu são algumas das distribuições mais utilizadas actualmente, listadas aqui por ordem alfabética. Um exemplo de distribuição que corre num CD é o Kurumin Linux, criado por Carlos E. Morimoto, baseada no Knoppix. De entre as distribuições consideradas mais difíceis de gerir (por preferirem assegurar a estabilidade tecnológica em detrimento da interface de utilizador), destacam-se a Debian, Gentoo e Slackware.

Código Aberto e Programas Livres
Um programa, assim como toda obra produzida atualmente, seja ela literária, artística ou tecnológica, possui um autor. Os Direitos sobre a idéia ou originalidade da obra do autor, que incluem essencialmente distribuição, reprodução e uso é feito no caso de um programa através de sua licença. Existem dois movimentos que regem o licenciamento de programas no mundo livre, os programas de código aberto e os programas livres. Os dois representados respectivamente pela OSI e pela FSF oferecem licenças para produção de software, sendo seus maiores representantes a licença BSD e a GPL. O Linux oferece muitos aplicativos de open source, contudo nem todos podem ser considerados programas livres, dependendo exclusivamente sob qual licença estes programas são distribuídos. Os programas distribuídos sob tais licenças possuem as mais diversas funcionalidades, como desktops, escritório, edição de imagem e inclusive de outros sistemas operacionais. Também existem organizações inclusive no mundo livre como a organização Linux Simples para o Usuário Final (SEUL) que tem como objetivo adotar a maior gama possível de aplicativos de alta qualidade produzidos sobre a GPL. É um projeto voluntário que atualmente se foca no aprendizado de Linux, seu uso na ciência e em documentos de advocacia, bem como gerenciar e coordenar projetos de desenvolvimento de aplicativos.

Controvérsias quanto ao nome
Linux foi o nome dado ao núcleo de sistema operacional criado por Linus Torvalds. Por extensão, sistemas operacionais que usam o núcleo Linux são chamados genericamente de Linux. Entretanto, a Free Software Foundation afirma tais sistemas operacionais são, na verdade, sistemas GNU, e o nome mais adequado para tais sistemas é GNU/Linux, uma vez que grande parte do códigofonte dos sistemas operacionais baseados em Linux são ferramentas do projeto GNU.133 Há muita controvérsia quanto ao nome. Eric Raymond afirma, no Jargon File, que a proposta da FSF só conseguiu a "aceitação de uma minoria" e é resultado de uma "disputa territorial".134 Linus Torvalds afirma que consideraria "justo" que tal nome fosse atribuído a uma distribuição do projeto GNU, mas que chamar os sistemas operacionais Linux como um todo de GNU/Linux seria "ridículo".135 Linus disse não se importar sobre qual o nome usado, considera a proposta da GNU como "válida" ("ok") mas prefere usar o termo "Linux".136
133Richard Stallman. Linux and the GNU Project (HTML) (em inglês). Página visitada em 7 de março de 2008. 134Eric Raymond. Linux (HTML) (em inglês). Página visitada em 7 de março de 2008. 135Revolution OS, documentário de 2001 sobre o Linux. Produzido, dirigido e escrito por J.T.S. Moore 136Linus Torvalds (3 de junho de 1996). Lignux, what's the matter with you people? (HTML) (em

Sobre o símbolo
O símbolo do software foi escolhido pelo seu criador, que achou a foto de um pinguim na internet. 137 Em 1996, muitos integrantes da lista de discussão "Linux-Kernel" estavam discutindo sobre a criação de um logotipo ou de um mascote que representasse o Linux. Muitas das sugestões eram paródias ao logotipo de um sistema operacional concorrente e muito conhecido. Outros eram monstros ou animais agressivos. Linus Torvalds acabou entrando nesse debate ao afirmar em uma mensagem que gostava muito de pingüins. Isso foi o suficiente para dar fim à discussão.
Tux.

Depois disso, várias tentativas foram feitas numa espécie de concurso para que a imagem de um pingüim servisse aos propósitos do Linux, até que alguém sugeriu a figura de um "pingüim sustentando o mundo". Em resposta, Linus Torvalds declarou que achava interessante que esse pingüim tivesse uma imagem simples: um pingüim "gordinho" e com expressão de satisfeito, como se tivesse acabado de comer uma porção de peixes. Torvalds também não achava atraente a idéia de algo agressivo, mas sim a idéia de um pingüim simpático, do tipo em que as crianças perguntam "mamãe, posso ter um desses também?". Ainda, Torvalds também frisou que trabalhando dessa forma, as pessoas poderiam criar várias modificações desse pingüim. Isso realmente acontece. Quando questionado sobre o porquê de pingüins, Linus Torvalds respondeu que não havia uma razão em especial, mas os achava engraçados e até citou que foi mordido por um "pingüim assassino" na Austrália e ficou impressionado como a mordida de um animal aparentemente tão inofensivo podia ser tão dolorosa.

Ver também
•Commons •Wikilivros •Lista de distribuições de Linux •Comparação entre distribuições Linux •LINUX Guia de Comandos •Installfest •Lei de Linus

inglês). Página visitada em 7 de março de 2008. 137Revista Superinteressante, O Mistério das Marcas, edição 261, janeiro de 2009, p. 34

Ligações externas
•Um guia completo sobre sistemas operacionais GNU/Linux •Controvérsia sobre o nome •O que é Linux •What is Linux (em inglês) •GNU/Linux distro timeline (em inglês) •Linux: The 0.01 Release (em inglês)

Linux (núcleo)
Linux

Mascote Linux

Desenvolvedor: Modelo do desenvolvimento: Versão estável: Família do SO: Núcleo: Licença: Estado do desenvolvimento: Website Portal Tecnologias de informação

Linus Torvalds, Andrew Morton e centenas de colaboradores Software Livre 2.6.32.3 / 6 de Janeiro de 2010 Tipo unix Monolítico GNU General Public License V.2 (GPL2) Ativo Kernel.org
138

138Sobre a última versão estável (em inglês).

O Linux é o núcleo de um sistema operativo compatível com UNIX. Segundo Bach,139 Tanenbaum140 e Silberschatz, Galvin e Gagne,141 sistema operacional (sistema operativo) e núcleo (quando monolítico) podem ser considerados sinônimos. Foi criado por Linus Torvalds, do Departamento de Ciência da Computação da Universidade de Helsinki (Finlândia), com a ajuda de vários programadores voluntários por meio da Usenet em 1991, e subseqüentemente desenvolvido com a ajuda de programadores de todo o mundo como software livre (SL).

História
O Linux foi originalmente escrito por Linus Torvalds, do Departamento de Ciência da Computação da Universidade de Helsinki, Finlândia, e posteriormente desenvolvido com a ajuda de vários programadores voluntários por meio da Usenet. Torvalds começou o desenvolvimento do núcleo como um projeto particular, inspirado pelo seu interesse no Minix, um pequeno sistema UNIX desenvolvido por Andrew S. Tanenbaum. Seus passos podem ser acompanhados pela lista de discussão comp.os.minix (cujas mensagens podem ser vistas em http://groups.google.com/group/comp.os.minix/topics). Em 3 de julho de 1991 ele tentou obter a especificação POSIX.142 Em 25 de agosto de 1991 anunciou que estava trabalhando num sistema operacional livre para plataformas Intel 386 e 486.143 Também informou que seu sistema não utilizava código do Minix, e que não seria portável. Finalmente, em 5 de outubro de 1991, Torvalds disponibilizou a versão 0.02 do núcleo Linux no servidor nic.funet.fi (endereço IP 128.214.6.100). Na mensagem que divulgou essa disponibilização aparece um período bastante conhecido da comunidade (veja o texto original, em inglês144):

139BACH, Maurice J. The design of the Unix operating system. New Jersey: Prentice Hall. 1990. 140TANENBAUM, Andrew. Sistemas operacionais modernos. Rio de Janeiro: LTC. 1999. 141SILBERSCHATZ, Avi; GALVIN, Peter B.; GAGNE, Greg. Operating system concepts. 7.ed. Hoboken: Wiley. 2005. 142TORVALDS, Linus. Gcc-1.40 and a posix-question. 03 de julho de 1991. Disponível em http://groups.google.com/group/comp.os.minix/msg/a4ea0f118ba82dd0. Acessado em 18 de janeiro de 2009. 143TORVALDS, Linus. What would you like to see most in minix?. 25 de agosto de 1991. Disponível em http://groups.google.com/group/comp.os.minix/msg/b813d52cbc5a044b. Acessado em 18 de janeiro de 2009. 144TORVALDS, Linus. Free minix-like kernel sources for 386-AT. 05 de outubro de 1991. Disponível em http://groups.google.com/group/comp.os.minix/msg/2194d253268b0a1b. Acessado em 18 de janeiro de 2009.

1. Você suspira pelos bons tempos do Minix-1.1, quando os homens eram homens e escreviam seus próprios controladores de dispositivos? Você está sem um bom projecto em mãos e deseja trabalhar num SO que possa modificar de acordo com as suas necessidades? Acha frustrante quando tudo funciona no Minix? Sem noites em claro para conseguir que um programa funcione? Então esta mensagem pode ser exactamente para você:-) E continua: 1. Como eu mencionei há um mês(?) atrás, estou trabalhando numa versão livre de um sistema similar ao Minix para computadores AT-386. Ele finalmente atingiu um estágio em que poderá ser utilizado (embora possa não o ser, dependendo do que você espera), e eu estou disposto a disponibilizar o código-fonte para ampla distribuição. Está apenas na versão 0.02 (…), contudo eu tive sucesso ao executar o bash, gcc, gnumake, gnu-sed, compress, etc. nele. Inicialmente, Torvalds disponibilizou o Linux sob uma licença que proibia qualquer uso comercial.145 Posteriormente foi adotada a Licença Pública Geral GNU.146 Apesar de alguns dos programadores que contribuem para o núcleo permitirem que o seu código seja licenciado com GPL versão 2 ou posterior, grande parte do código, incluídas as contribuições de Torvalds, menciona apenas a GPL versão 2. Isto faz com que o núcleo como um todo esteja sob a versão 2 exclusivamente, não havendo previsões sobre a adopção da nova GPL versão 3.

Versões
Este diagrama, criado com o Free Code Graphing Project, é uma representação artística do núcleo Linux, na sua versão 2.4.0

145TORVALDS, Linus. Notes for Linux release 0.01. Disponível em http://www.kernel.org/pub/linux/kernel/Historic/old-versions/RELNOTES-0.01. Acessado em 18 de janeiro de 2009. 146TORVALDS, Linus. Release notes for Linux v0.12. Disponível em http://www.kernel.org/pub/linux/kernel/Historic/old-versions/RELNOTES-0.12. Acessado em 18 de janeiro de 2009.

Torvalds e sua equipe têm continuado a lançar novas versões, consolidando contribuições de outros programadores e introduzindo alterações suas. Antes do lançamento da versão 2.6, o número de versão menor (o segundo componente) par indicavam uma série estável: 1.0.x, 1.2.x, 2.0.x, 2.2.x e 2.4.x; os lançamentos com um número de versão menor ímpar correspondiam a versões de desenvolvimento. O terceiro componente do número de versão correspondia a correções (releases) da versão. A partir da versão 2.6, Torvalds alterou esse padrão, criando um quarto dígito. Assim, a árvore estável e a de desenvolvimento confundem-se. Atualmente, considerase uma versão tanto mais estável quanto maior o quarto dígito. Enquanto que Torvalds continua a lançar as versões de desenvolvimento mais recentes, a manutenção das versões "estáveis" mais antigas é delegada a outros, incluindo David Weinehal (2.0), Alan Cox e mais tarde Marc-Christian Petersen (2.2), Marcelo Tosatti e depois Willy Tarreau (2.4) e o próprio Torvalds, Andrew Morton e Adrian Bunk (2.6). Para além dos núcleos "oficiais", "árvores" alternativas podem ser obtidas de outras fontes. Distribuidores de sistemas operativos completos mantêm as suas próprias versões do Linux, onde, por exemplo, incluem conrtoladores de dispositivos (drivers) que não se encontram incluídos na versão oficial.

Versões iniciais
•0.01 - Setembro de 1991 - primeira versão (10.239 linhas de código). •0.02 - Outubro de 1991 - primeira versão disponibilizada publicamente. •0.12 - Janeiro de 1992 - primeira versão sob GPL (19.258 linhas de código).

Versões estáveis
•1.0 - Março de 1994 - Suportava apenas máquinas monoprocessadoras i386 (176.250 linhas de código). •1.2 - Março de 1995 - Adicionado suporte para Alpha, SPARC e MIPS(310.950 linhas de código).

•2.0 - Junho de 1996 - Adicionado suporte para mais processadores e foi incluído suporte para SMP (777.956 linhas de código). •2.2 - Janeiro de 1999 (1.800.847 linhas de código). •2.4 - Janeiro de 2001 (3.377.902 linhas de código). •2.6 - Dezembro de 2003 (5.929.913 linhas de código).

Características técnicas
Um diagrama simplificado do componentes principais e as núcleo Linux, mostrando seus camadas que o cercam

As características particularmente as processos e sistemas de com mais detalhes por sobre gerenciamento de Gorman.148

analisadas nesta seção, partes referentes a arquivos, são descritas Bovet e Cesati;147 o texto memória baseia-se em

Arquitetura
O Linux é um núcleo monolítico. Isto significa que as funções do núcleo (escalonamento de processos, gerenciamento de memória, operações de entrada e saída, acesso ao sistema de arquivos) são executadas no espaço do núcleo, compiladas estaticamente ou usando módulos carregáveis. Herdou da linhagem UNIX a capacidade de multitarefa, multiprocessamento, uso de linhas de execução no núcleo (em inglês: kernel threading), preempção do núcleo, suporte a aplicações multi-encadeadas (multithreaded application support, por meio de processos leves—LWP), sistema de arquivos baseado em VFS (Virtual File System).149

147BOVET, Daniel P.; CESATI, Marco. Understanding the Linux kernel. 3.ed. Sebastopol: O'Reilly. 2005 148GORMAN, Mel. Understanding the Linux virtual memory manager. New Jersey: Prentice Hall. 2004. 149

Todo acesso ao núcleo por uma aplicação deve ser efetuado por meio de chamadas de sistema. Uma chamada de sistema é uma função que permite a criação de processos, solicitação de memória, operação com arquivos, etc. Já a comunicação do núcleo com o hardware ocorre, basicamente, de dois modos: (i) o núcleo reconhece e gerencia o hardware usando drivers de dispositivos; (ii) o hardware comunica-se com o núcleo por meio de interrupções. Os controladores (drivers) de dispositivos e extensões do núcleo correm tipicamente no espaço do núcleo, juntamente com o restante do núcleo, com acesso total ao hardware. Diferentemente dos núcleos monolíticos tradicionais, os controladores de dispositivos podem ser configurados como módulos (em inglês: loadable kernel modules), que são bibliotecas compiladas fora do núcleo propriamente dito, o que permite que sejam carregados e descarregados enquanto o sistema corre. Também podem ser interrompidos (preempted (em inglês)) sob certas condições. Esta característica foi adicionada para lidar com interrupções de hardware corretamente e para melhorar o suporte ao multiprocessamento. O facto do Linux não ser micronúcleo foi tema duma famosa discussão entre Linus Torvalds e Andy Tanenbaum no grupo de discussão comp.os.minix na Usenet em 1992. Esse debate foi descrito por DiBona, Ockman e Stone.150

Processos
Um processo é uma instância de um programa em execução.151 Todo processo no Linux tem um pai (processo criador) e um número identificador (PID). O pai de todos os processos num ambiente Linux é o init, cujo PID é 1. Este processo é criado pelo processo 0, que é um encadeamento (thread) do próprio núcleo. O processo init irá permanecer em execução até o desligamento do sistema, e sua função é monitorar e criar os processos que implementam as camadas exteriores do sistema operacional. Os processos são criados pela chamadas de sistema fork() (processos tradicionais ou heavy weight) e clone() (processos leves ou light weight). Para otimizar a criação de processos tradicionais, o Linux usa o recurso de copy-onwrite: quando um processo-filho é criado, ele compartilha as mesmas páginas de memória do pai. Quando um dos dois tenta escrever na memória, é gerada uma interrupção para o núcleo, que então copia o conteúdo das páginas de memória para novas molduras de páginas, e estas são atribuídas ao processo que efetuou a escrita.

150DiBONA, Chris; OCKMAN, Sam; STONE, Mark. Open sources: voices from the open source revolution. Sebastopol: O'Reilly. 1999. 151

Para manter um ambiente multitarefa e possibilitar o multiprocessamento, o Linux mantém algumas estruturas importantes, das quais podemos citar duas: (i) o descritor do processo (task_struct), que contém todas as informações relativas ao processo; (ii) uma fila (runqueue) de processos por processador. Quando o sistema possui mais de um processador, o agendador do Linux faz o balanceamento de carga entre as filas.

Agendamento
Para poder fazer um adequado compartilhamento de tempo do processador, o Linux usa duas classificações para avaliar qual a prioridade que um processo deve ter: (i) determina a responsividade do processo (tempo real, interativo, em segundo plano); (ii) verifica se o processo usa muito tempo de processador (CPUbound) ou faz muitas operações de entrada e saída (I/O-bound). Essas duas classes são razoavelmente independentes. Um processo pode executar em segundo plano (um daemon, por exemplo) e ser consumidor de recursos de entrada e saída (um servidor de banco de dados) ou usar muito tempo de processador (um compilador). Um processo que executa em tempo real foi assim definido pelo seu programador, mas o agendador do Linux necessita fazer uma análise heurística para saber se um processo é interativo ou está executando em segundo plano. O Linux utiliza um sistema de prioridades, onde um processo que possui prioridade maior tem precedência sobre um de prioridade menor para obter o processador. A identificação da prioridade de um processo pode ser estática ou dinâmica e varia de 1, a maior prioridade, a 139, a menor. Os números 1 a 99 são atribuídos a processos de tempo real e 100 a 139 são atribuídos a processos tradicionais (interativos e segundo plano). Um processo em tempo real é classificado em FIFO (first-in, first-out) ou RR (Round-Robin) e somente será retirado do processador nos seguintes casos: (i) fim de execução; (ii) para ser substituído por um processo de maior prioridade; (iii) executar uma operação de bloqueio; (iv) espontaneamente; (v) é RR e esgotou seu quantum de processamento. Um processo tradicional tem inicialmente atribuída uma prioridade estática (em geral 120) que determina o seu quantum de processamento, mas pode ter uma prioridade dinâmica, que é o valor analisado pelo agendador quando percorrer a lista de processos para determinar qual irá usar o processador. A prioridade dinâmica pode alterar o valor da prioridade estática em 5 pontos, para mais (penalidade) ou para menos (bônus), dependendo do passado do processo. O passado irá beneficiar o processo se o mesmo ficou muito tempo fora do processador (sleep time). Caso este tempo seja pequeno, o processo será penalizado. Obs.: essa estrutura acima pode ser modificada a partir da release 2.6.23 ou posterior, com a introdução do CFS (completely fair scheduler).

Gerenciamento de memória
O Linux utiliza memória virtual, que possui, pelo menos, 4 funções básicas: (i) assegurar que cada aplicação (processo) tenha seu próprio espaço de endereçamento, começando em zero-problema de relocação;152153 (ii) proteção de memória, para impedir que um processo utilize um endereço de memória que não lhe pertença;154 (iii) compartilhamento de memória—processos diferentes podem compartilhar código ou dados;155 (iv) possibilitar que uma aplicação utilize mais memória do que a fisicamente existente (essa é a função mais óbvia). Seu código divide-se em duas partes. Uma é dependente da arquitetura, onde são definidos o endereçamento — virtual e físico, o tamanho de página e o tratamento das tabelas de páginas. Na parte independente ficam o controle de alocação e liberação de memória e o esquema de substituição páginas. O Linux utiliza tamanhos de páginas de acordo com a arquitetura. Os processadores x86 utilizam páginas de 4 KiB (padrão), 2 MiB (caso seja utilizado o recurso de PAE – Page Address Extension – da Intel) ou de 4 MiB. Nas arquiteturas RISC o tamanho padrão é de 8 KiB, mas não é o único. O endereçamento virtual é dividido em espaço do usuário e espaço do núcleo. O primeiro é privativo de cada processo, com início no endereço lógico zero e terminando no endereço determinado pela macro PAGE_OFFSET (v. figura 1). O espaço do núcleo é único e começa depois do espaço do usuário. Na arquitetura x86 PAGE_OFFSET determina um valor de 3 GiB para o espaço do usuário e 1 GiB para o espaço do núcleo. (Figura 1: está faltando) O código do Linux é carregado no início do espaço do núcleo, sendo seguido pela área fisicamente mapeável (mem_map, estrutura que indexa as páginas físicas, e as páginas propriamente ditas). Na arquitetura x86, os últimos 128 MiB do espaço do núcleo são reservados para alocação de memória não contígua e memória alta, limitando a memória física endereçável pelo Linux, na compilação padrão, a 896 MiB. Um endereço virtual no Linux (v. figura 2), é dividido em 5 campos: diretório de páginas (PGD), diretório superior de páginas (PUD), diretório intermediário de páginas (PMD), tabela de páginas (PTE) e deslocamento (offset). A arquitetura x86 possui um espaço de endereçamento de 32 bits; quando são utilizadas páginas de 4 KiB (o padrão) o PUD e o PMD não são utilizados; o PGD e o PTE usam 10 bits cada, e o deslocamento usa 12 bits. (Figura 2: está faltando)

152 153STALLINGS, William. Operating systems: internals and design principles. 5.ed. Upper Saddle River: Pearson Prentice Hall. 2005. 154 155

O esquema de substituição de páginas no Linux usa o algoritmo LRU (por aproximação) mantendo duas listas de envelhecimento (aging). A primeira (active_list) contém as páginas atualmente em uso (as páginas mais recentemente referenciadas estarão mais próximas do início da lista) e a segunda (inactive_list) contém as candidatas a paginação (page out). A paginação para disco pode ocorrer sob demanda, quando algum processo solicitar página e não houver alguma disponível. Neste caso, a página no final da lista inactive_list é liberada. Entretanto, existe um processo chamado kswapd, inicializado pelo núcleo, que verifica, periodicamente, o número de páginas livres. Caso este número seja menor que pages_low, kswapd é acordado para liberar páginas. Se o valor chegar a pages_min, kswapd entra num regime síncrono para agilizar a liberação. Quando o valor de páginas livres atingir pages_high, kswapd vai dormir.

Sistema de arquivos
O gerenciamento de arquivos no Linux baseia-se num esquema de vários níveis, onde a camada principal é o VFS (Virtual File System), que esconde da aplicação as características dos diversos sistemas de arquivo reconhecidos pelo Linux. Quando uma aplicação solicita uma operação sobre algum arquivo, essa solicitação é encaminhada para o VFS, que reenvia a solicitação para um dos SA registrados. O VFS utiliza uma estrutura chamada superbloco para manter as informações referentes aos diversos sistemas de arquivos montados (tipo, ponto de montagem, dispositivo de bloco utilizado, arquivos abertos). Também utiliza nósi, semelhantes aos nós-i do EXT2, com as informações sobre os arquivos (permissões, blocos utilizados, dono, etc.). Os sistemas de arquivos registrados no VFS podem ser classificados em 3 grupos: (i) dispositivos de blocos (EXT2, EXT3, Reiserfs, XFS, VFAT); (ii) associados a rede (NFS, SMB); (iii) dispositivos especiais (procfs, tempfs). Todos esses sistemas podem ser carregados como módulos. O Ext2 está deixando de ser o padrão, particularmente por sua deficiência quando ocorre uma pane. Neste caso, o sistema operacional deve executar uma varredura completa para verificar o estado do sistema (fsck). Outros sistemas foram criados para sanar essa deficiência, utilizando um recurso chamado journaling, que é a utilização de um registro (log) de alterações (journal). Os sistemas de arquivos desse tipo mais importantes são: Ext3, Reiserfs, XFS e JFS.

Pânico do núcleo
Um pânico do núcleo (em inglês: kernel panic) é um erro de sistema nãorecuperável detectado pelo núcleo, ao contrário dos erros de impressão e utilização por código do espaço de utilizador. É possível que o código do núcleo indique essa condição ao invocar a função panic localizada no ficheiro-cabeçalho sys/system.h. No entanto, grande parte dos pânicos são o resultado de excepções do processador não-lidadas no código do núcleo, tal como referências a moradas de memória inválidas. São normalmente não indicativo de erros algures na cadeia de chamadas que levam ao pânico.

Portabilidade
Embora Linus Torvalds não tenha tido como objetivo inicial tornar o Linux um sistema portável, ele evoluiu nessa direção. O Linux é hoje, o núcleo de sistema operacional com maior portabilidade, correndo em sistemas desde o iPaq, um computador portátil, até o IBM S/390, um denso e altamente custoso mainframe. De qualquer modo, é importante notar que os esforços de Linus foram também dirigidos a um diferente tipo de portabilidade. Portabilidade, de acordo com Linus, era a habilidade de facilmente compilar aplicações de uma variedade de códigos fonte no seu sistema; portanto o Linux originalmente tornou-se popular em parte devido ao esforço para que os códigos fonte GPL ou outros favoritos de todos corressem em Linux. O Linux hoje funciona em dezenas de plataformas, desde mainframes até um relógio de pulso, passando por várias arquitecturas: x86 (Intel, AMD), x86-64 (Intel EM64T, AMD64), ARM, PowerPC, Alpha, SPARC etc., com grande penetração também em sistemas embarcados, como handhelds, PVR, vídeo-jogos e centros multimídia, entre outros.

Miscelânea
Mascote
Tux, mascote do projeto

O mascote do Linux (núcleo e pinguim chamado Tux, criado pelo qual a mascote é um disse, "O Linus gosta de Tux foi sugerido para ficou assim.

tudo que é relacionado) é um por Larry Ewing. O motivo pinguim é, como Torvalds pinguins. É isso." O nome representar Torvalds' Unix, e

Termos de

licenciamento

Inicialmente, Torvalds lançou o Linux sob uma licença que proibia qualquer exploração comercial, mas mais tarde adoptou a GPL (versão 2 exclusivamente). Esta licença permite a distribuição e até a venda de versões do Linux mas exige que todas essas cópias sejam lançadas sob a mesma licença e que sejam acompanhadas com o código-fonte. Torvalds descreveu o licenciamento do Linux sob a GPL como "a melhor coisa que fez desde sempre." Uma dúvida que é levantada na aplicação da GPL no Linux é a consideração sob a lei de direitos de autor de módulos carregáveis como sendo ou não "trabalho derivado" e, consequentemente, serem submetidos aos termos da GPL. Torvalds declarou que módulos que usam apenas um conjunto público e limitado do interface do núcleo podem, por vezes, ser trabalho não-derivado, assim permitindo alguns drivers distribuídos apenas em formato binário e outros módulos que não respeitem os termos da GPL. Contudo, nem todos os contribuintes do núcleo concordam com esta interpretação e até Torvalds concorda que muitos módulos do núcleo são claramente obras derivadas.

Ver também
•TORVALDS, Linus; DIAMOND, David (2001). Just For Fun: The story of an accidental revolutionary. HarperBusiness. ISBN 0-06-662072-4 (hardcover); HarperAudio ISBN 0-694-52539-1 (audio tape, abridged ed., read by David Diamond) - on the beginnings of the Linux kernel; No Brasil: Só por Prazer. Campus. ISBN 85-352-0801-1. •Lista de distribuições de Linux •Comparação entre distribuições Linux •LINUX Guia de Comandos •Installfest •Lei de Linus

Ligações externas
•www.kernel.org (em inglês) The Linux Kernel Archives, the official kernel repository, acessado pela última vez há 56 semanas e 6 dias •KernelTrap (em inglês), acessado pela última vez há 56 semanas e 6 dias •Cobertura sobre o kernel em LWN.net (em inglês), acessado pela última vez há 56 semanas e 6 dias •Linux Kernel Source Code Viewer (em inglês), acessado pela última vez há 56 semanas e 6 dias •Linux Kernel Janitor (em inglês), acessado pela última vez há 56 semanas e 6 dias •Linux Device Drivers, 3rd Edition (em inglês), acessado pela última vez há 56 semanas e 6 dias •Understanding the Linux Kernel, 2nd Edition (em inglês), acessado pela última vez há 56 semanas e 6 dias •LinkSys and binary modules] (em inglês) LWN.net Weekly Edition, October 16, 2003, acessado pela última vez há 56 semanas e 6 dias •The Wonderful World of Linux 2.6 (em inglês) Joseph Pranevich; December 2003, acessado pela última vez há 56 semanas e 6 dias •O Maravilhoso Mundo do Linux 2.6 (em português) tradução do artigo acima por Cesar A. K. Grossmann, acessado pela última vez há 56 semanas e 6 dias •Understanding the Linux 2.6.8.1 CPU Scheduler (em inglês) Josh Aas, 17th February 2005, acessado pela última vez há 56 semanas e 6 dias •Linux Online - Linux Kernel Information (em inglês), acessado pela última vez há 56 semanas e 6 dias •Open Directory - Linux: Kernel (em inglês), acessado pela última vez há 56 semanas e 6 dias •Google Directory - Linux > Kernel (em inglês), acessado pela última vez há 56 semanas e 6 dias •Linux Links - The Linux Portal: Kernel (em inglês), acessado pela última vez há 56 semanas e 6 dias •Loads of Linux Links (em inglês), acessado pela última vez há 56 semanas e 6 dias •VGER.KERNEL.ORG (em inglês) Linux Kernel Developers' email list, acessado pela última vez há 56 semanas e 6 dias •Linux Kernel Newbies.org (em inglês), acessado pela última vez há 56 semanas e 6 dias •linux kernel links (em inglês) linux kernel source and news, acessado pela última vez há 56 semanas e 6 dias

•Foca GNU/Linux: Página oficial: (em português) Um guia completo sobre sistemas operacionais GNU/Linux, acessado pela última vez há 56 semanas e 6 dias •What is Linux (em inglês), acessado pela última vez há 56 semanas e 6 dias •O que é Linux (em inglês), acessado pela última vez há 56 semanas e 6 dias •GNU/Linux distro timeline (em inglês), acessado pela última vez há 56 semanas e 6 dias •GNU/Linux naming controversy (em inglês), acessado pela última vez há 56 semanas e 6 dias •Linux: The 0.01 Release (em inglês), acessado pela última vez há 56 semanas e 6 dias

Linus Torvalds
Linus Torvalds
Linus Torvalds aos 35 anos de idade

Linus Benedict 28 de Dezembro de núcleo do sistema muitas vezes chamado "Linux". Linus Torvalds pertence Finlandssvensk, um representando 6% dos que falam sueco. Ele de Helsinki. Vive Clara, na Califórnia, com três filhas. Atualmente Development Labs

Torvalds (Helsínquia, 1969) é o criador do operacional GNU/Linux, simplesmente de à comunidade dos extrato da população habitantes da Finlândia, estudou na Universidade atualmente em Santa a sua mulher Tove e suas trabalha na Open Source (OSDL).

Biografia
Começou a lidar com a informática quando tinha 11 anos. O avô, Leo Waldemar Tornqvist, um matemático e estatístico da Universidade comprou um dos primeiros computadores Commodore em 1980 e pediu-lhe ajuda para usá-lo. Tornou-se tão interessado que passou um verão inteiro dentro de casa ou, melhor dizendo, no quarto em frente ao computador desenvolvendo o que restava do núcleo.

Em 1983 Richard Stallman criou a Free Software Foundation (GNU project). Em 1986 Marice J. Bach publicou Design of the Unix Operating System. Em 1988 Linus foi admitido na Universidade de Helsinki. No mesmo ano Andy Tanenbaum traz a público o Sistema Operacional Minix, um Unix para fins didáticos e que rodava em IBM/PC. Em 1990 Torvalds começa a aprender C em seus estudos. No fim dos anos 80 ele tomou contato com os computadores IBM/PC compatíveis e em 1991 comprou um 80386. Com 21 anos, 5 já de experiência programando (em C), ele tinha contato com o Sistema Unix da Universidade (SunOS, atualmente Solaris) e desejava rodar a versão de Tannenbaum (Minix) no seu recém adquirido 80386. Entretanto, descontente com os recursos do Minix, especialmente em relação ao emulador de terminal do Minix que ele utilizaria para acessar remotamente o Unix da Universidade, começa a desenvolver o seu próprio emulador de terminal que não rodaria sobre o Minix, mas diretamente no hardware do PC 386. Este projeto pessoal foi sendo modificado gradualmente e adquirindo características de um Sistema Operacional independente do Minix. Este é o início do desenvolvimento do núcleo Linux, relatado pelo próprio Linus Torvalds em seu livro Just for fun. O núcleo Linux foi inicialmente desenvolvido por Linus Torvalds numa tentativa de criar um sistema operacional similar ao Unix que rodava em processadores Intel 80386. O projeto foi lançado em 1991 em uma famosa mensagem para a Usenet em que ele divulgou que estava disposto a disponibilizar o código-fonte e contar com a colaboração de outros programadores. Desde os primeiros dias, ele recebeu ajuda de hackers do Minix, e hoje recebe contribuições de milhares de programadores dos mais diversos locais do mundo. Em 1997 Linus Torvalds recebeu os prêmios "1997 Nokia Foundation Award'y" e "Lifetime Achievement Award at Uniforum Pictures". No mesmo ano finaliza os estudos superiores (1988 - 1997) passou 10 anos como estudante e investigador na Universidade de Helsinki, coordenando o desenvolvimento do núcleo do S.O. desde 1992. Torvalds trabalhou na Transmeta (fabricante de processadores para portáteis) entre 1997 e 2003, e neste ano juntou-se à Open Source Development Labs (OSDL), uma fundação criada para ajudar no desenvolvimento do núcleo Linux, como OSDL fellow. Fazem parte dessa fundação várias grandes empresas do ramo da informática, como IBM, Sun, Nokia e outras. Torvalds possui a marca registrada "Linux" e supervisiona156 o uso (ou abuso) da marca através da organização sem fins lucrativos Linux International.

Curiosidades

156Título ainda não informado (favor adicionar).

•Uma vez, o seu avô comprou um veleiro montável com cerca de 1000 peças para ser montado com o neto, Linus e pudessem velejar juntos. Mas no dia em que o veleiro chegou já era tarde, o avô preferiu esperar até amanhã. Mas Linus não conseguiu aguentar tanto tempo e montou o veleiro sozinho. O seu avô ficou espantado pois, um veleiro destes é muito difícil de ser montado. •O nome do mascote Tux (o pingüim do Linux), foi escolhido por votação, pelo próprio Linus. Segundo ele "gostaria de um pingüim cheio, satisfeito por ter comido muitos peixes". Diz a lenda que o motivo por trás da escolha do Tux como mascote foi uma mordidela que Linus levou de um pinguim num jardim zoológico. •Ainda a cerca da mordidela, eis a lenda: Linus estava em um zoológico, parece que alimentando os pingüins, e eis que toma uma mordida em um dedo, que havia doído bastante. Ao perceber a dor que sentiu de um animal de pequeno porte como um pingüim, Linus pensa: "Se um animal tão pequeno consegue me machucar assim, porque meu pequeno S.O. não pode 'machucar' um maior?"

Ver também
•Commons •Wikiquote •Hacker •Linux •Free Software Foundation •Just for fun, livro de Torvalds.

Ligações externas
•Entrevista •Blog pessoal (em inglês)

Tux
Tux, o mascote GNU/Linux. Trata-se de um pingüim gordo e satisfeito.

O Tux é a mascote operativo GNU/Linux. O Ewing em 1996, é um tem um ar satisfeito e mascote do Linux ser Linus Torvalds, o criador É, por vezes, alegado Torvalds UniX, um nome Hughes, em vez da pinguins aparentam O Tux foi criado para logotipos para Linux. O criado por Larry Ewing pacote de software livre lançado por ele sob as

oficial do sistema Tux, criado por Larry pinguim gorducho que saciado. A ideia da um pinguim veio de do núcleo Linux. que o nome deriva de sugerido por James explicação que os vestir um smoking. um concurso de logotipo vencedor foi usando o GIMP (um de edição gráfica) e foi seguintes condições:

A autorização para o uso e/ou modificação desta imagem é concedida desde que me reconheça lewis@isc.tamu.edu e o GIMP, caso alguém pergunte [13] Segundo Jeff Ayers, Linus Torvalds tinha uma "fixação por aves marinhas gordas e desprovidas da capacidade de vôo!" e o Torvalds reivindica que contraiu uma "penguinite" após ter sido gentilmente mordiscado por um pinguim: "A penguinitie faz com que passemos as noites acordados só a pensar em pinguins e a sentir um grande amor por eles." A suposta doença de Torvalds é, pois claro, uma piada, mas ele foi mesmo mordido por um pequeno pinguim numa visita a Canberra. O Tux tornou-se num icone para a comunidade Linux e Open Source, com um grupo de utilizadores de linux britânico adoptando um pinguim no Jardim Zoológico de Bristol. Ele é muito mais famoso que o seu grande amigo, GNU, um pacífico e tímido gnu que representa o Projecto GNU. Ele é frequentemente vestido ou retratado de maneiras diferentes, dependendo do contexto; por exemplo, quando representando o algoritmo de segurança PaX, ele usa um capacete e enverga um machado e um escudo, e os seus olhos são vermelhos. O Tux é a estrela de um jogo para Linux chamado Tux Racer, em que o jogador guia o Tux abaixo duma variedade de montes gelados na sua barriga, tentando apanhar arenques e a bater o limite de tempo. Tux é também uma personagem do webcomics, User Friendly. Em algumas distribuições de Linux, caso o suporte a framebuffer esteja ativado, o Tux saúda o utilizador durante o processo de boot. Em sistemas com múltiplos processadores são exibidos vários Tuxes, sendo um para cada processador. Tux aparece também nos textos de Éder Luiz sendo um super herói nos textos Tux e a equipe fedora TUX é também o nome do servidor web baseado no núcleo de Linux, que é capaz de servir páginas de web estáticas muito mais rapidamente que servidores tradicionais, tais como o servidor Apache HTTP, software esse mantido pela Red Hat.

Tributos ao Tux
•O pinguim Ted é uma personagem no popular webcomic Ctrl Alt Del. Ted, sendo o animal de estimação do único guru de Linux na tira, é claramente um tributo ao Tux.

Alguns programas do Tux
Imagem do game Super Tux.

•Super Tux Milestone 1 •Tux Walk 1.0 2004 •Tux Racer 2002 •Super Tux Milestone 2 •Tux Paint •TuxGuitar

(0.1.2)2003

(1.234) 2005

Ver também
•Glenda - Mascote do Sistema Operacional Plan 9

Ligações externas
•Linux 2.0 Penguins (Larry Ewing) •A complete history of Tux •Wired News story on Tux •The Linux Logo Competition site •Desenhando o Tux no InkScape (em português)

Lei de Linus
Com um grande número de tendem a ser detectados e fotografia mostra entusiastas de sobre Linux. colaboradores, erros em sistemas corrigidos mais facilmente. A software livre em um encontro

A Lei de Linus (Linus's formulada pelo hacker Eric dela é o seguinte: "Dados olhos suficientes, (Given enough eyeballs, all bugs are shallow)

Law) é uma lei epigramática S. Raymond. O enunciado todos os erros são triviais"

A frase possui relação com o modo de funcionamento da base do código aberto (open source) e da internet, em que com um grande número de colaboradores ("olhos"), qualquer problema em um sistema pode ser detectado e corrigido. Na proporção em que os colaboradores aumentam, a facilidade com que as correções são feitas também aumenta, ou seja, o número de colaboradores é diretamente proporcional à facilidade de detecção e correção do erro.

Surgimento e uso
Eric S. Raymond

O adágio foi publicado por famoso hacker e ícone no e do software livre — em seu descrito no capítulo 10 ("O Aberto"). O nome da lei é Linus Torvalds, criador do um software livre. De certa forma, podemos semelhança com o ditado engorda o boi".

Eric S. Raymond — um movimento do código aberto ensaio A Catedral e o Bazar, Contexto Social do Código uma alusão ao finlandês sistema operacional Linux, dizer que tal lei possui popular "O olho do dono

Os conceitos expressados pela Lei de Linus são tão universais que a lei tem sido constantemente usada fora do contexto puramente informático. Um exemplo é a Wikipédia, que segue um modelo baseado na lei de Linus, já que, podendo ser editada por qualquer pessoa, muitos erros podem ser gerados, mas se houver um grande número de colaboradores para cuidar dos erros, eles podem ser facilmente contornados. Isso é bem conhecido pelos administradores (ou sysops) de cada Wikipédia, que cuidam da manutenção do projeto. Larry Sanger, co-fundador da Wikipédia, afirmou certa vez, sobre o fato de que qualquer pessoa pode criar e editar artigos na Wikipédia, que "dados olhos suficientes, todos os erros são triviais", em uma alusão direta à lei de Linus. Tom Arriola, o desenvolvedor do Crime Scene (Cena do Crime), um site que dá aos seus milhares de membros a tarefa de resolver coletivamente mistérios de assassinatos fictícios, chamou de "efeito ocular" uma versão que postulou da Lei de Linus: "Quanto mais olhos vêem algo, mais provável é que alguém veja alguma coisa que ninguém viu antes."157

A ética hacker
Linus Torvalds

157Terdiman, Daniel (2005-02-14). Brute Force for Brain Teasers. URL acessada em 16 de Abril de 2006.

A noção do próprio Linus conjunto com as definições registrada no prólogo do De acordo com essa pressiona os humanos pode categorias. O avanço bemoutra determina o processo categorias são, em ordem: a o entretenimento. A sobrevivência é a base da portanto um fator de sistema socio-econômico bem uma preocupação cotidiana.

sobre a lei foi usada em filosóficas do hacker ativo, livro A Ética Hacker.158 definição, a atividade que ser dividida em três sucedido de uma fase para de evolução. Estas três sobrevivência, a vida social e própria existência. É motivação, mas em um desenvolvido, não passa de

A vida social é um fator de motivação muito forte. Em muitos casos, maior consideração é dada para os laços sociais do que para a "auto-pessoa". São tarefas semelhantes aos conceitos de "morrer por sua família/por religião/pelo país". O entretenimento é a última das três categorias. Esse "entretenimento" não está relacionado com ações como jogar jogos eletrônicos ou assistir a televisão, mas fazer algo interessante e estimulante, um estímulo positivo para a base de nossas ações. Linus Torvalds assim descreveu esta última fase: "É a ginástica mental necessária na tentativa de explicar o universo". Pode-se observar a aderência dessas três categorias com as cinco necessidades da conhecida Hierarquia de necessidades de Maslow: fisiologia, segurança, amor/relacionamento, estima e realização pessoal, amplamente conhecidas no terreno da Administração. Concluindo, o hacker portanto precisará fazer uso do computador para que sobreviva. O computador passa a ser o principal meio de obter relações sociais, mas acima de tudo, entretenimento. O desenvolvimento de um sistema opensource é realizada mais por causa da paixão dos desenvolvedores no seu próprio projeto, e não para meios puramente comerciais.

158Himanen, Pekka; Linus Torvalds, Manuel Castells (2001-01-30). The Hacker Ethic, Random House. ISBN 0375505660.

Críticas
Alguns estudos contestaram a Lei de Linus, citando o número relativamente pequeno de contribuições feitas para projetos open source por pessoas "de fora", isto é, pessoas que não pertencem a um pequeno grupo principal de colaboradores.159 Isso é, em grande parte, o resultado do investimento necessário que os colaboradores precisam realizar para manter positivamente os ajustes na interface do usuário e entender um pouco do código antes que possam efetivamente contribuir para o mesmo. Alguns projetos também não confiam em contribuições externas, temendo que eles possam criar bugs difíceis de serem encontrados ou brechas na segurança, e assim esses projetos criam um inconveniente processo de revisão que pode prejudicar desenvolvimento externo. Os defensores do código aberto argumentam, no entanto, que existem maneiras de se minimizar estes problemas e de se facilitar a integração de colaboradores externos. Seguindo práticas efetivas de engenharia de software, é possível produzir um código de fácil manutenção. Os exemplos podem incluir o uso de componentes modulares com acoplamento frouxo, ou um bom conjunto de testes para a verificação das contribuições externas, ou uma simples estratégia de desenvolvimento suportada por ferramentas como o autoconf. Também é considerado uma ajuda importante ter uma boa documentação, incluindo tanto uma visão geral quanto descrições detalhadas da interface, opcionalmente suportadas por ferramentas como o Javadoc e ferramentas de visualização de código. Porém nem todos os projetos open source implementam tais medidas. Outro argumento contra o código aberto é o de que falhas de segurança podem ser facilmente encontradas pelo exame do código fonte, destruindo efetivamente qualquer segurança por obscuridade (en:security through obscurity). Outros dizem que isso é um ponto forte: significa que não apenas usuários maliciosos, mas também desenvolvedores externos e usuários legítimos, podem encontrar tal falha de segurança mais facilmente e diagnosticar ataques mais rapidamente. Por serem expostos rapidamente e para mais pessoas, os problemas de segurança podem ser consertados antes que a aplicação esteja completamente desenvolvida e eles se tornem um problema mais sério.

Ver também
•Eric S. Raymond •A Catedral e o Bazar •Linus Torvalds •Software livre
159Obasanjo, Dare (2002). The Myth of Open Source Security Revisited. URL acessada em 16 de Abril de 2006

•Revisão por pares

Ligações externas
•Leis epigramáticas

Guia de comandos para Linux/Unix
Esta é uma lista de programas de computador para o sistema operacional Linux e sistemas compatíveis, como o Unix.

Comentários
A linha de comando do sistema operacional Linux permite a realização de inúmeras tarefas através de seus comandos, de manipulação de arquivos a verificação do tráfego em rede. Para exibir uma descrição detalhada de cada comando abra uma console ou xterm e digite man comando, onde comando é o comando em questão. Outro detalhe muito importante! pratique cada comando muitas vezes até que se torne algo natural.

Comandos de manipulação de diretório
mkdir cria um diretório exemplo: mkdir docsrmdir exclui um diretorio (se estiver vazio)rm -rf exclui um diretório e todo o seu conteúdocd entra num diretório (exemplo: cd docs) ou retorna para HOMEcd ~ vai direto para o diretório home do usuário logado.cd volta ao último diretório acessadopwd exibe o local do diretório atualls listar o conteúdo do diretóriols -alh mostra o conteúdo detalhado do diretóriols -ltr mostra os arquivos no formado longo(l) em ordem inversa(r) de data (t)du (Unix)du -msh mostra o tamanho do diretório em Megabyteswhereis mostra onde se encontra determinado arquivo (binários) exemplo: whereis sambawhich mostra qual arquivo binário está sendo chamado pelo shell quando chamado via linha de comando

Dicas úteis
Qual o maior diretório?
Para obter uma listagem de diretórios em sistemas GNU/Linux, ordenados do maior para o menor, use o comando:

du -Sk | sort -nr | more

ou
du -Sh | sort -nr | more

para exibir resultado em UNID (Kbytes,Mbytes ou Gbytes)

O tamanho de cada diretório ou subdiretório
du -ach --max-depth=1 /var/du -ach --max-depth=1 /var/ --max-depth=1 /var/ | sort -nr | more | sort -nrdu -ach

Criar diretórios dentro de diretorios
mkdir -p teste teste1 teste2 teste3

Criar uma árvore completa de diretórios
mkdir -p docs/{img/{fotos,icons,wallpapers,svg},textos/{artigos,man},tmp}

A regra aqui é a seguinte:
para cada pasta que conterá subpastas use "nome/{}"dentro das chaves coloque os nomes separados por vírgulae não esqueça de usar o parâmetro '-p' no começo do comando!

Comandos para manipulação de arquivos
cat (Unix)cat mostra o conteúdo de um arquivo binário ou textotac semelhante ao cat mas inverte a ordem tail mostra as últimas 10 linhas de um arquivo (util para ler logs)head mostra as primeiras 10 linhas de um arquivoless mostra o conteúdo de um arquivo de texto com controlevi editor de ficheiros de textovim versão melhorada do editor supracitadorm remoção de arquivos (também remove diretórios)cp (Unix)cp copia diretórios 'cp -r' copia recursivamentemv move ou renomeia arquivos e diretórioschmod altera as permissões de arquivos ou directórioschown altera o dono de arquivos ou diretórioscmd>txt cria um novo arquivo(txt) com o resultado do comando(cmd)cmd>>txt adiciona o resultado do comando(cmd) ao fim do arquivo(txt)touch touch foo.txt cria um arquivo foo.txt vazio; também altera data e hora de modificação para agora> arquivo.txt mais rápido que o touch para criação de arquivossplit divide um arquivorecode recodifica um arquivo ex: recode iso-8859-15..utf8 file_to_change.txt[mc] poderoso editor de texto

Comandos para administração
man mostra informações sobre um comando adduser adiciona usuáriosaddgroup adiciona gruposapropos realiza pesquisa por palavra ou stringdmesg exibe as mensagens da inicialização(log)du_(Unix)du exibe estado de ocupação dos discos/partiçõesfind comando de busca ex: find ~/ -cmin -3userdel remove usuárioschfn altera informação relativa a um utilizadorwho informa quem está logado no sistemawhoami informa com qual usuário você está logadopasswd modifica senha (password) de usuáriosumask define padrões de criação de arquivos e diretóriosps (Unix)ps mostra os processos correntesps -aux mostra todos os processos correntes no sistemakill manda um sinal para um processo. Os sinais SIGTERM e SIGKILL encerram o processo.killall manda um sinal para todos os processos.su troca para o super-usuário root (é exigida a senha)su user troca para o usuário especificado em 'user' (é exigida a senha)chown altera a propriedade de arquivos e pastas (dono)env mostra variaveis do sistema

Comandos para administração de rede
ifconfig mostra as interfaces de redes ativas e as informações relacionadas a cada uma delasroute mostra as informações referentes as rotasmtr mostra rota até determinado IPnmap lista as portas de sistemas remotos/locais atras de portas abertas. Pode verificar sistema operacional em execução no host remoto.netstat exibe as portas e protocolos abertos no sistema.iptraf analisador de trafego da rede com interface gráfica baseada em diálogostcpdump sniffer muito popular. Sniffer é uma ferramenta que "ouve" os pacotes que estão passando pela rede.traceroute traça uma rota do host local até o destino mostrando os roteadores intermediáriosnslookup consultas a serviços DNSdig consultas a serviços DNS

Referências
•Foca GNU/Linux •UNIX ON-LINE Man Pages

Anexo:Lista de distribuições de Linux
Distribuições de propósito geral
•ALT Linux •Arch Linux •Debian 1. BrDesktop 2. Damn Small Linux 3. Famelix 4. Freedows 5. Insigne GNU Linux 6. KeeP-OS 7. Knoppix 1. Kurumin 3. Big Linux NG 2. DreamLinux

8. Linex 9. Resulinux 10. 11. 12. 13. 1. Alinex 2. Fluxbuntu 3. gNewSense 4. Gobuntu 5. Goobuntu 6. Jolicloud 7. Kubuntu 1. Kubuntu Netbook Remix 2. Linux Educacional 8. Linux Mint 9. Ubuntu Netbook Remix 10. 11. 12. 13. 14. •Foresight Linux •Gentoo 1. Guaranix 2. Librix 3. Litrix Linux 4. Sabayon Linux 5. Tutoo Ubuntu Studio Ultimate Edition Xubuntu ZeVenOS Xandros 3.0 Rxart Satux Skolelinux Ubuntu

•GoboLinux •Linux From Scratch •Neo Dizinha •OpenSuSE •Puppy Linux •Red Hat Linux 1. Caixa Mágica 2. CentOS 3. Fedora 1. Ekaaty 2. Insigne GNU Linux 3. Libertas 4. Muriqui 5. Vixta 4. Mandriva 1. PCLinuxOS 5. Yellow Dog Linux •Resulinux •Slackware 1. GoblinX 2. Slax 3. Vector Linux - versão 3

Distribuições LiveCD
As distribuições em LiveCD rodam direto do cd-rom. •ALT Linux •Arch Linux •Arco-Debian Linux

•Big Linux •Caixa Mágica LiveCD •CentOS •CLive (baseada em Conectiva Linux) (baseada no Kurumin) •Damn Small Linux •Dizinha Linux •Dreamlinux •Famelix XP/Vista •Fedora •Fenix Linux •Gentoo •GoblinX •Gnoppix •Incognito •Insigne GNU Linux •Litrix Linux •Linux Mint •Linux Educacional •Kya Linux •Kanotix •KeeP-OS •Knoppix •Kubuntu •Kurumin •NUbuntu •LinuxFX •Mandriva •Mepis •Moblin (baseada em Knoppix) (Baseada no Kurumin) •Kurumin Games (baseada em Debian Linux) 3.0 •Linius (Basado em caixa mágica) (baseada em Slackware Linux) (baseada no Kurumin) (baseada em Knoppix) •Kalango Linux (baseada em Debian/Fedora) (baseada em Knoppix) (Baseada em Debian e Knoppix) Ambiente similar ao Windows

•Morphix •Neo Dizinha •NimbleX •openSUSE •Paipix •PCLinuxOS •PHLAK (Baseado no Morphix) (baseada no Ubuntu) (live-DVD) •Poseidon Linux •Puppy Linux •Quantix •Resulinux •Sabayon Linux •Sacix •Satux •Slax (Baseada em Debian ) (baseada em Slackware Linux)

•Super OS •Tatui x •Ubuntu •Vixta •Yoper (baseada em Debian Linux) (projeto baseado no Fedora com aparencia do Windows Vista)

Distribuições de propósito especial
•andLinux , versão do Ubuntu que roda integrada ao Windows junto com o Explorer. •Ångström •Android Google. - Desenvolvida para o console portatil Pandora. - Sistema operacional voltada para smartphones, desenvolvida pela

•Arm-Linux •BackTrack •BrazilFW •Coyote Linux •Cytrun Linux (Fusão do Whax com Auditor Security Collection) •Bootable Business Card

•Dyne:Bolic •Edubuntu •Embedded Debian •Endian Firewall •EOS Enhanced Operating System de produtos. •F.I.R.E •FREESCO •GeexBox •Indymix •IPCop •Linux Educacional - Voltados para uso de professores, gestores e alunos da rede pública de ensino brasileira. •Live Android PC's. •Mikrotik •Musix •Mythbuntu •Openfiler •Pentoo •Portable Ubuntu for Windows Windows junto com o Explorer. •Progeny Debian •Sentry Firewall •Skolelinux •Sysresccd - Distro com ferramentas essenciais para manutenção em geral •Terabeauts - Distro em disquete destinada a criação e manutenção de sistemas de arquivos •The Linux Router Project •Tupiserver •Ubuntu Studio •UcLinux - Outra versão do Ubuntu que roda integrada ao - É um projeto que visa a utilização do sistema Android para - Desenvolvida para automatizar instalação

Desktops

Desktop padrão KDE 4.3 Desktop Gnome 2.20 Desktop do Xfce - GoblinX

O sistema operacional de interfaces para que o com o sistema interfaces gráficas e a comando. As interfaces gráficas inicialmente por Douglas chamadas de ambientes GUI(Graphical User exemplos para o Linux são: •Kde •Gnome •LXDE •Xfce •Fluxbox •Blanes •Blackbox •Windowmaker •Afterstep •Enlightenment •IceWM •FVWM •Kahakai •ZappWM •dwm •SithWM •Whim •Karmen •Sawfish •XIGE •Framer •Mavosxwm •WindowLab •OpenBox

Linux possui dois tipos usuário possa interagir operacional. As interface de linha de foram desenvolvidas C. Engelbart e também gráficos, Desktop's ou Interfaces). Alguns

•xmonad

Desktops 3D
Os desktops 3D, são na verdade, Plugins para adicionar efeitos incríveis às outras interfaces: •AIGLX/Beryl •XGL/Compiz •Compiz Fusion160 •Metisse •KWin gerenciador de janelas do KDE com efeitos nativos.

Sistemas móveis (Mobile)
•Motomagx - sistema especialmente desenvolvido para celulares Motorola •LinuxMod - sistema baseado no Motomagx

Interpretadores de comandos
Usando o Bash - Framebuffer

Representando a modo texto, ou Interface) do Linux, eles controle remoto e sistema.Exemplos de comando, também interpretadores de •sh •ksh •pdksh •bash •csh •tcsh •zsh

interface de acesso no CLI(Command Line são a principal forma de gerenciamento do interfaces de linha chamados de Shell's ou comandos:

160Os programas Beryl e Compiz se uniram e deram origem ao programa Compiz Fusion.

•ash •dash •rc •rsh •ssh •screen (*) O screen é um gerenciador de sessões em modo texto

Sign up to vote on this title
UsefulNot useful