CENTRO FEDERAL DE ENSINO TECNOLÓGICO DA PARAÍBA Curso de Tecnologia em Telemática Disciplina: Sistemas Operacionais

O Sistema Operacional Linux

Herval Freire de Albuquerque Júnior
hervald@terra.com.br

Índice
Apresentação Histórico: O sistema Unix Características do Linux Arquitetura Arquivos e Diretórios Entrada e Saída Gerenciamento de Memória Manipulação de Processos Comparativo: Windows x Linux Conclusão Referências Bibliográficas 3 4 5 6 7 9 10 11 12 13 14

2

1. Apresentação
O Linux foi originalmente concebido por Linus Torvalds do Departamento de Ciência da Computação da Universidades de Helsinki, Finlândia, com a ajuda de vários programadores voluntários através da Internet. O projeto inicial consistia em uma modificação do Minix, um pequeno sistema operacional baseado no UNIX. Ele tentou criar, em suas próprias palavras, "um Minix melhor que o Minix" ("a better Minix than Minix"). Depois de algum tempo de projeto, Torvalds contatou programadores do mundo todo com uma mensagem de news convidativa: "Você suspira por melhores dias do Minix-1.1, quando homens serão homens e escreverão seus próprios "device drivers" ? Você está sem um bom projeto e esta morrendo por colocar as mãos em um S.O. no qual você possa modificar de acordo com suas necessidades ? Você está achando frustrante quando tudo trabalha em Minix ? Chega de atravessar noites para obter programas que trabalhem correto ? Então esta mensagem pode ser exatamente para você. Como eu mencionei a um mês atrás, estou trabalhando em uma versão independente de um S.O. similar ao Minix para computadores AT-386. Ele está, finalmente, próximo do estágio em que poderá ser utilizado (embora possa não ser o que você esteja esperando), e eu estou disposto a colocar os fontes para ampla distribuição. Ele está na versão 0.02... contudo eu tive sucesso rodando bash, gcc, gnu-make, gnu-sed, compressão, etc. nele." Em 5 de outubro de 1991 foi anunciada a primeira versão do Linux - a 0.02 - que desde então tem sofrido constantes modificações e melhoramentos. Hoje, existe um grande número de implementações de UNIX/LINUX - algumas ainda mantendo até mesmo partes de código do projeto original saído dos laboratórios da AT&T - e outras completamente reescritas. Toda esta variedade permite a execução do Linux em virtualmente qualquer ambiente - de handhelds a supercomputadores. O Linux, especificamente, é um sistema de distribuição livre preparado para PCs de arquitetura x86 com variantes para alguns outros sistemas - Sparcs, M68000 e PowerPC, por exemplo. Cultuado por muitos e odiado por outros, o fato é que o Linux é um Sistema Operacional que vem se popularizando a cada dia e ganhando mais e mais força e destaque no cenário da computação. Em uma época na qual "redes de computadores" e "sistemas distribuídos" são cada vez mais valorizadas, o Linux propoe-se como a solução. Em uma época de supervalorização do preço do software, a idéia subversiva de "software gratuito e para todos" impulsiona este cada vez mais popular sistema operacional.

3

2. Histórico: o sistema Unix
O Unix nasceu no início dos anos 60 - no princípio, a Bell Labs (uma divisão interna da AT&T, na época) estava envolviva em um projeto de sistemas operacionais com o MIT e a General Eletrics - o sistema foi chamado de Multics e englobava todas as idéias interessantes sobre sistemas operacionais que eles poderiam reunir. O Multics não deu certo - apesar de todas as boas idéias, a junção de tudo acabou por formar um pacote que não trabalhava bem. A Bell Labs decidiu desistir do projeto. Um dos cientistas envolvidos no projeto do Multics, Ken Thompson, começou então a buscar algum novo trabalho. Thompson achou um pequeno computador (um equipamento da Digital Corp. PDP-7), com o qual começou a desenvolver programas relacionados com a astronomia e astronáutica (calculadores de órbitas de satélites, calendários lunares, jogos de guerra espaciais, etc.), em um ambiente muito mais primitivo que o Multics. Para facilitar o trabalho, Thompson decidiu escrever um sistema operacional novo para o PDP-7 com base nas idéias do Multics - um sistema monousuário (o nome Unics é uma referência a este fato) de pequeno porte. A primeira versão do sistema operacional tinha restrições no tamanho do nome dos arquivos, o que forçou a encurtar o nome para 4 caracteres - o "UNIX" foi criado e evoluiu desde então.

2.1. A evolução do UNIX
O UNIX desenvolveu-se e ganhou popularidade dentro do Bell Labs - foram desenvolvidos aplicativos e posteriormente criada uma linguagem especialmente para o ambiente, na qual o UNIX foi reescrito - a linguagem C. O UNIX já havia sido bastante melhorado e várias características foram adicionadas ao sistema original, que rapidamente evoluiu para um sistema multi-usuário. Na década de 70, muitos estudiosos já tinham ouvido falar do UNIX e receberam cópias para avaliação. O sistema se propagou no meio acadêmico e conquistou uma legião de projetistas e novos desenvolvedores. Era possível adicionar novas características ou mesmo portar o sistema para outras plataformas com relativa facilidade - e o UNIX se espalhou e se fragmentou. Daí nasceu o sistema Linux – uma remontagem de uma versão do UNIX conhecida como Posix.

4

3. Características do Linux
Por ser um sistema derivado do Unix, o Linux apresenta diversas características presentes nos sistemas Unix: • Multitarefa real: o Linux suporta múltiplos processadores e processamento em paralelo – além de dar suporte a multiprogramação e execuções “em paralelo” com um só processador (divisão de tempo entre os processos) • Memória virtual: O Linux suporta a expansão de memória para disco • Biblioteca compartilhada: as bibliotecas são utilizadas pelos diversos aplicativos/programas • "Demand loading": dados são colocados em memória à medida que for necessário • Gerenciamento de memória próprio: o Linux não necessita de outros gerenciadores de memória, cuidando da fragmentação por si só. • Rede TCP/IP (incluindo SLIP/PPP/ISDN): todas as diretivas de rede já estão prontas no próprio kernel • X Windows: o Linux incorpora, na maioria de suas implementações, interfaces gráficas para facilitar a vida do usuário. Vale ressaltar que esta interface não é incorporada ao Kernel, como em alguns outros sistemas operacionais A grande maioria dos programas do Linux são freewares – muitos provenientes do projeto GNU (uma tentativa de dar suporte ao software gratuito e prestar apoio legal aos programadores)

5

4. Arquitetura
O Linux é um sistema operacional dividido em camadas separadas - como todo sistema derivado da plataforma UNIX, o Linux é composto de um núcleo, uma camada de Programas de Sistema e uma camada superior, onde ficam todas as demais aplicações. As duas camadas superiores (aplicações e programas de sistema) se comunicam com o núcleo através das chamadas System Calls - rotinas de chamada ao núcleo do sistema. O Kernel (núcleo) é o responsável por controlar discos, iniciar programas e executálos corretamente, além de alocar recursos para os processos, prover o controle de rede e de dispositivos. Apesar de todas as suas funcionalidades, porém, o Kernel não executa nada sozinho, apenas fornecendo recursos para os programas de sistema. Outra função do núcleo é fornecer uma interface entre o hardware e o software, impedindo um acesso direto aos componentes físicos da máquina (controladoras, portas, etc). Esta interface é feita através dos drivers. Os Programas de Sistema utilizam os recursos do Kernel para implementar funcionalidades do sistema - eles utilizam o Kernel para gerenciar os recursos da máquina. Estes programas, que vêm juntamente com o próprio sistema, são responsáveis por diversas atividades de gerenciamento - como os programas de manutenção de discos, os serviços de rede e o telnet. O sistema virtual de arquivos (VFS) é outro programa de sistema bastante usado e será abordado no próximo tópico, Arquivos e Diretórios.

4.1. O Shell
O Shell ou “concha” é um programa especial do sistema que define a interface do mesmo com o usuário. O Shell define os comandos disponíveis ao usuário – assim sendo, o mesmo só tem acesso aos recursos do Shell. O Shell padrão do Linux possui incorporado a ele uma linguagem de script e funciona em modo texto, além de dar suporte a várias interfaces gráficas

6

5. Arquivos e diretórios
5.1. Visão Geral
O sistema de arquivos do Linux é organizado em uma estrutura de árvore de diretórios - sendo o raiz (root) simbolizado por '/'. Abaixo do raíz, temos diversos outros diretórios, como /bin (executáveis), /lib (bibliotecas), /dev (dispositivos), /usr (programas), /home (arquivos pessoais de usuários), /var (arquivos temporários e de log), etc. Porém toda esta divisão não é obrigatória e pode não estar presente em todos os sistemas Linux. O Unix prevê uma divisão de acordo com o propósito - dispositivos são organizados em um diretório, arquivos de usuários em outro, e assim sucessivamente. A nomenclatura dos arquivos em Linux é livre - não há limite para o número de caracteres e os mesmos não apresentam necessariamente uma extensão.

5.2. O Sistema de Arquivos Virtual
O Linux define arquivos como um mecanismo de abstração conhecido como Virtual File System - todos os dispositivos do sistema operacional são tratados igualmente, como arquivos. Para que haja tal flexibilidade (uma impressora e um documento de texto são "vistos" da mesma maneira no sistema), a plataforma UNIX não interfere na estrutura dos arquivos, deixando esta tarefa por conta do usuário. Os arquivos suportados pelo Linux se classificam em arquivos de diretório, arquivos regulares, arquivos especiais de caracteres e arquivos especiais blocados, a saber: - Arquivos regulares: arquivos que contém informações de usuários - arquivos texto, por exemplo. Um arquivo regular pode ser ainda de um tipo especial chamado 'Link' - o arquivo é uma referência a outro arquivo do sistema, não "existindo" fisicamente. - Arquivos diretórios: arquivos usados na manutenção do sistema de arquivos - eles representam os diretórios da árvore de diretórios (i.e., têm a função das 'pastas' do Windows) - Arquivos especiais de caracteres e blocados: arquivos representativos de dispositivos - representam as portas seriais, impressoras, terminais e dispositivos de rede, por exemplo.

5.3. Contas
Cada usuário em um sistema Unix/Linux precisa de uma Conta para acessar os arquivos do sistema – cada conta tem uma senha e nível de acesso, o que garante que um usuário só terá acesso a determinados arquivos. As contas são classificadas em Grupos de usuários, nos quais todos possuem o mesmo nível de acesso. O administrador (root) do sistema possui a prioridade mais alta, tendo acesso a todos os arquivos da árvore de diretórios.

5.4. Atributos dos arquivos
Cada arquivo tem necessariamente um nome e um conjunto de dados. Além destes dados, cada arquivo armazena também atributos especiais de acesso: por ser um sistema multiusuário, o acesso a um arquivo no Linux é restrito a nível de Sistema Operacional e tem permissões de leitura, escrita e execução. Estas restrições se aplicam ao proprietário e ao grupo que ele pertence separadamente - assim, um mesmo arquivo pode ter permissão de

7

leitura/escrita/execução para seu proprietário e apenas leitura para todos os demais usuários do seu grupo, por exemplo. Outro atributo especial presente em todo arquivo é o seu tipo - um arquivo pode ser identificado como um Diretório, Arquivo ou Link).

5.5. O Sistema de Arquivos em Rede (NFS)
O Linux conta com outros sistemas de arquivos – um exemplo é o sistema de arquivos especial para rede NFS - Network File System. Desenvolvido pela Sun, é um sistema de compartilhamento de arquivos que deixa as aplicações distribuídas transparentes para o sistema - uma operação em uma máquina qualquer na rede é prontamente enviada para todas as demais, que atualizam seus sistemas de arquivos - o uso do NFS faz com que todos os arquivos pareçam estar na mesma máquina, mesmo que os mesmos encontrem-se em vários computadores diferentes.

8

6. Entrada e Saída
6.1. Visão Geral
Nos sistemas Linux em geral, existe uma grande preocupação pela uniformidade dos atendimentos - o sistema deve garantir o atendimento de um HD da mesma forma que atende uma impressora, por exemplo. Todos os tratamentos de E/S são feitos de maneira síncrona. Um processo que requisita uma E/S é suspenso pelo Sistema Operacional até que tenha sua solicitação atendida, quando então é liberado para prosseguir. Como em quase todos os Sistemas Operacionais, cada dispositivo do sistema precisa de um driver apropriado para funcionar. Os Drivers são adicionados ao Kernel sempre que se acrescenta um novo dispositivo ao sistema. Os dispositivos de E/S são integrados ao sistema de arquivos e são acessíveis da mesma forma que qualquer arquivo no Linux, com comandos de leitura e gravação - assim, gravar em um arquivo de texto e imprimir em uma impressora são ações idênticas ao usuário.

6.2. Drivers de dispositivo
Os drivers são a interface entre o hardware e o kernel. Os programas comunicam-se com o Kernel, que “conversa” com os dispositivos através do driver apropriado. No ambiente Linux, existem 2 tipos de drivers distintos – Os drivers de bloco, cuja transmissão é feita em blocos de dados são mais utilizados em dispositivos com altas taxas de transmissão entre eles e a memória; e os Drivers de terminal, cuja transmissão é feita caractere por caractere. Quando se utiliza o driver de bloco, sempre que é solicitada uma entrada ou saída de dados, o kernel verifica se o dado bloco já está preparado na memória e faz a devida transferência entre a memória e o dispositivo. O driver de terminal é utilizado sempre que não existe um drived de bloco específico para a comunicação e em situações especiais.

9

7. Gerenciamento de Memória
O Kernel do Linux é responsável pela gerência de todos os recursos do sistema, incluindo a memória – assim, ele deve gerenciar que partes da memória estão ou não disponíveis, alocar e desalocar processos e gerenciar a memória de forma a utilizar disco quando necessário. A liberação de memória é feita por uma técnica denominada Swapping – quando a memória se encontra cheia, o sistema trata de retirar algumas páginas da memória para o disco. O algoritmo utilizado é denominado de ‘procura circular’: todas as páginas são marcadas com um bit de acesso e um bit de alteração. Sempre que a página é referenciada, seu bit de acesso é setado como um – se a página for alterada, seu bit de alteração é setado. Quando o sistema precisa liberar páginas de memória, este coloca em disco primeiro as páginas que contenham os dois bits em zero – dando segunda prioridade às páginas nãoacessadas recentemete (isto é: bit de acesso = 0). Quando o processo vai para disco, o sistema checa o bit de alteração para determinar se é preciso uma atualização dos dados no disco, e então libera o espaço de memória. O Swapping é realizado periodicamente, para garantir uma presença satisfatória de memória livre no sistema. A área de disco utilizada é denominada ‘área de Swap’ ou ‘área de troca’. Além do Swapping, o Linux utiliza o gerenciamento de memória virtual “com paginação por demanda”: dessa forma, páginas de memória só são trazidas do disco para a memória quando são referenciadas.

10

8. Manipulação de Processos
8.1. Introdução
O Linux é um sistema com multiprogramação - cada usuário pode ter vários processos em atividade ao mesmo tempo, o que pode crescer exponencialmente com o aumento do número de usuários. O sistema classifica os processos com números - quando o sistema é ativado, chama-se o init (processo número 1), que é sempre o primeiro processo do sistema. Processos são gerenciados na estrutura "pai-filho": um processo pode criar vários processos-filhos, que por sua vez podem chamar outros processos-filhos. Cada processo tanto o pai quanto os filhos - tem seu próprio espaço de endereçamento de memória, o que impede que um processo invada uma área pertencente a outro. Os processos são identificados por um código dce identificação (pid), fornecido pelos processos-pai as processos-filhos. A comunicação entre processos é feita através dos pipes - canais de troca de mensagem: quando se utiliza um pipe, a saída de um processo é direcionada para a entrada de outro diretamente, sem o uso de arquivos temporários

8.2. Escalonamento
O Kernel do Linux utiliza-se de semáforos e monitores para tratar a exclusão mútua. O escalonamento dos processos é feito com múltiplas filas de realimentação com níveis de prioridade - sendo os processos do kernel prioritários sobre os processos do usuário. Apenas processos em estados de “pronto” permanecem na fila de processos executáveis. Processos que solicitam E/S ou suspensos são retirados da fila – e readicionados na mesma quando voltarem ao estado de “pronto”. Na maioria dos sistemas Linux, o escalonamento é realizado de acordo com o tempo em execução total do processo em memória – processos com mais tempo de execução têm menos prioridade que processos ainda não executados – assim, um processo novo sempre ganha a prioridade sobre um processo que já acumulou muito tempo de execução. Porém isto não é uma regra – existem implementações do Linux que dão prioridade aos processos com mais tempo em memória (escalonamento FIFO), como é o exemplo do Solaris

11

9. Comparativo WINDOWS x LINUX
Muito se fala a respeito das diferenças entre os dois sistemas mais difundidos no mercado. Um comparativo entre os dois sistemas operacionais mostra toda a profundidade destas diferenças - e os prós e contras de cada sistema

9.1. Quadro comparativo
WINDOWS PRÓ
Amplamente utilizado e conhecido Muito voltado para o usuário leigo Existem dezenas de milhares de programas e jogos de todos os tipos Fácil de usar e configurar Interface simples e eficiente É Plug and Play É bem conhecido por qualquer programador

LINUX PRÓ
Quase tudo e de graça e nunca pirata Estável e robusto. O sistema ou alguns componentes dele é atualizado diariamente e novos programas famosos estão sendo preparados. Muito flexível, pode ser usado num palmtop ou num servidor. Há vários interfaces diferentes, independentes do núcleo. É o mesmo em vários computadores diferentes, como PC e Sun. Com o código fonte disponível, pode ser totalmente refeito se preciso.

CONTRA
Muito instável Usuários avançados se irritam com "automatismo" A maioria dos programas são comerciais e caros Pouco flexível, não permite muitas configurações diferentes Interface e parte do sistema e alterações não são bem vindas

CONTRA
Poucos programas são realmente bons e há poucos jogos. Herdou os vícios técnicos do Unix, scripts e vários níveis de acesso. Alguns modems, placas de som e vídeo podem não ser reconhecidos. O excesso de opções torna a configuração um tanto complexa. As interfaces são superficiais e dão pouco controle do sistema

12

10. Conclusão
O Linux é um sistema operacional do tipo Unix desenvolvido para a plataforma IBM-PC. Ele possui a robustez, segurança e flexibilidade do Unix. O Linux foi desenvolvido com uma arquitetura aberta (open source), o que dá mais liberdade para o desenvolvimento de software. Por outro lado, ainda não existe um grande mercado para o sistema - que por ter uma filosofia "freeware", não atraiu a atenção de gigantes do software, como Microsoft, Borland, Corel, etc. O Linux também é um sistema de difícil suporte técnico - quase tudo tem que ser resolvido através de manuais e 'howtos' conseguidos pela internet. A ampla utilização do Linux em ambiente acadêmico garante, contudo, o desenvolvimento constante e sólido do sistema - com milhões de acadêmicos trabalhando em seu desenvolvimento em todo o mundo, o Linux se destaca como um sistema seguro e bem organizado. Por sua imagem séria, pouco se aposta na popularização do sistema em computadores domésticos - o Linux é um sistema projetado por programadores para programadores, o que afasta o sistema do público geral e de uma consequente popularização. Entretanto, sua ótima performance em máquinas servidoras e em sistemas dedicados e de grande porte fazem do Linux uma alternativa barata, eficaz e confiável além de funcional em diversas plataformas.

13

11. Referências Bibliográficas
Livros: Lars Wirzenius, Guia do Administrador de sistema Conectiva Homepages: http://www.geocities.com/SiliconValley/Network/9035/intro.html http://www.equipejabu.hpg.com.br/solaris.htm http://www.geocities.com/Baja/Mesa/9474/ http://unix123.8m.com/menu.htm http://www.cade.com.br/infsofsounix.htm http://www.linuxhangar.hpg.com.br/ http://sites.uol.com.br/hypolito/

14

Sign up to vote on this title
UsefulNot useful