O UNIX foi desenvolvido, nos anos 70, pelos laboratórios Bell, uma divisão da AT&T. Quase todo o trabalho foi realizado por duas pessoas, Ken Thompson e Dennis Ritchie. Como eles eram programadores, o principal objetivo do sistema operativo foi a obtenção de um ambiente satisfatório de trabalho para programadores. Geralmente usuários e programadores experimentados consideram o UNIX um sistema operativo simples, elegante e fácil de aprender, enquanto os iniciantes costumam considerá-lo resumido e não muito amistoso. Atualmente, o UNIX é um importante padrão que influenciou o projeto de muitos sistemas operativos modernos, como o próprio MS-DOS e o OS/2. Além disso, o UNIX é hoje o sistema operativo mais adequado e mais utilizado nos computadores que atuam como servidores na rede mundial de computadores Internet. Com a recente popularização da Internet, as vendas de sistemas baseados no sistema operativo UNIX têm crescido vertiginosamente. O sistema operativo UNIX é um sistema multi-usuário e multi-tarefa. Por multi-usuário entende-se um sistema no qual programas de mais de um usuário podem estar em execução. Em um sistema multi-usuário, algum tipo de conexão entre o sistema central e os diversos usuários deve existir, seja a conexão simples de terminais, ou uma rede local de computadores. Um sistema multi-tarefa é aquele capaz de executar vários programas simultaneamente, mesmo que a máquina possua somente um processador. Dessa forma, um sistema multi-tarefa não é necessariamente um sistema multi-usuário, mas um sistema multi-usuário precisa ser multi-tarefa para que os programas (ou processos) de cada usuário possam ser executados simultaneamente.
Shell
Os comandos do UNIX são processados por uma cápsula (shell), que consiste num programa situado entre o usuário e o sistema operativo . Ela é responsável por interpretar os comandos do usuário, convertendo-os em chamadas do sistema operativo . Seguindo a abordagem clássica de sistemas operativos, a cápsula não é realmente parte do sistema operativo e, portanto, pode ser modificada. Programadores profissionais podem escolher uma cápsula técnica que forneça maiores facilidades de programação de arquivos script (semelhantes a arquivos de lote no MS-DOS). Os iniciantes talvez prefiram escolher comandos, a partir de um menu, ou pela indicação de ícones na tela. De qualquer forma, a idéia de um interpretador de comandos independente do sistema operativo foi uma importante inovação do UNIX, adotada também por vários outros sistemas operativos. No mundo UNIX existem mais de uma cápsula de uso habitual. Cada fornecedor de UNIX escolhe aquela que julga ser melhor, ou fornece cápsulas alternativas, à escolha do usuário. A cápsula padrão, por ter sido desenvolvida nos Laboratórios Bell, é chamada de Bourne Shell (sh). Ela está presente em praticamente todos os sistemas UNIX. Uma segunda cápsula muito utilizada é a C Shell (csh), que possui semelhanças com a linguagem C, e é preferida por usuários avançados e programadores. Uma terceira cápsula bastante conhecida é a Korn Shell (ksh), utilizada por exemplo no UNIX da IBM, o AIX. De qualquer forma, os comandos básicos são os mesmos em todas as cápsulas, variando geralmente nos comandos usados para escrever programas de cápsula, os chamados shell scripts.
Kernel
Como o sistema recebe o Kernel ?
Os computadores recebem seu kernel durante o processo de boot. Quando uma máquina com disco está em seu processo de boot, ela lê seu kernel de um disco local. Quando uma nova versão do sistema operativo é instalada a partir de uma fita, o kermel é copiado para um único arquivo naquele disco chamado vmunix. Máquinas sem disco, diskless, recebem seu kernel através do servidor de arquivos na rede. Durante o processo de boot o kernel é carregado para a memória, onde ele reside até que o sistema seja interrompido. Embora o arquivo kernel seja por default vmunix, é possível ter kernels com outros nomes
O que o Kernel faz?
- Implementa o sistema de arquivos:
- Permite processos criar, ler, escrever e acessar estes arquivos
- Gerencia Deamons:
- Move páginas do disco para memória
- Prioridades
- Gerencia drivers de dispositivos
- Gerencia software de rede que implementa serviços de rede
- Gerencia facilidades de comunicação entre processos
- Provê facilidades para criar, examinar e modificar processos
- Provê funções de gerenciamento do sistema
- Provê funções miscelâneas que tornam os recursos do sistema disponíveis aos processos, como, por exemplo: memória
Sistema de arquivos outfilesystem: Hierarquia de diretórios e arquivos estruturada no formato de árvore no disco local ou acessada em um servidor remoto. Um processo é um programa em execução. Deamons são processos que são inicializados durante o processo de boot e devem executar constantemente até que o sistema seja interrompido. Mover páginas do disco para memória, por demanda, também é conhecido como virtual memory. Drivers de dispositivos são programas que controlam dispositivos físicos.
Modularidade
O UNIX é único em seu desenho modular, que permite usuários adicionar ou remover partes para adaptá-lo às suas necessidades específicas. Os módulos se encaixam com conexões-padrão. E possível tirar um módulo e substitui-lo por um outro ou expandir o sistema acrescentando vários módulos. De uma certa maneira, o sistema UNIX de cada pessoa é único. Muitos usuários acrescentam ou eliminam módulos sempre que precisam, adaptando suas implementações às suas necessidades. É geralmente possível remover um módulo, sem prejudicar a operação do resto do sistema. Esta característica é muito útil nas implementações em microcomputadores, onde as unidades de disco têm capacidade limitada. A remoção de arquivos desnecessários abre espaço para mais arquivos de dados.
MultiTaskink
A capacidade de multitasking do UNIX permite que mais de uma tarefa seja realizada simultaneamente. Esta é uma das principais características do UNIX. As tarefas que estão em execução concorrem pelos recursos da máquina que são controlados pelo sistema. É possível, portanto, que um programa que atualize um banco de dados esteja rodando ao mesmo tempo que a impressão de um relatório esteja sendo realizada e uma tela de terminal esteja sendo enviada. Em uma interface gráfica com um ambiente de janelas pode-se disparar cada tarefa em uma janela shell. Já em um ambiente não gráfico, as tarefas que podem ser executadas sem a intervenção do usuário são colocadas em background. Em foreground deixa-se as tarefas que necessitam da intervenção do usuário, como a edição de um arquivo.
Portabilidade
A portabilidade é a possibilidade dos softwares que operam em uma máquina operarem em uma outra diferente. Há dois tipos de portabilidade a serem considerados:
- Portabilidade do sistema operativo
- Portabilidade dos aplicativos
Mais de 90% do programa kernel está escrito em C e menos de 10% em linguagem de máquina. Assim, na pior das hipóteses, apenas 10% do programa kernel terá de ser reescrito ao se deslocar o kernel para uma máquina com arquitetura diferente. Os programas aplicativos escritos em linguagem de nível mais alto, como C, são facilmente portáveis para vários sistemas UNIX. Basta que sejam recompilados, exigindo, as vezes, poucas alterações. Entre outras vantagens do UNIX estão a sua portabilidade (facilidade de ser convertido para rodar em várias máquinas), padronização (cada fabricante segue um esquema pré-definido para comandos, etc.), sistema de arquivos hierárquico, e generalidade (pode ser utilizado para praticamente qualquer tipo de aplicação). Além disso, os sistemas UNIX mais modernos tendem a ser distribuídos (recursos espalhados entre várias máquinas), multi-processados (rodam em máquinas com mais de um processador), e suportam aplicações em tempo real.
Comunicações
No UNIX temos dois tipos de comunicações, quais sejam, comunicação entre programas e comunicação entre usuários. A comunicação entre programas é realizada através de mensagens, semáforos ou memória compartilhada. Estes mecanismos, também conhecidos por IPC, interprocess comunications, são extensões do System V. A comunicação entre usuários pode se realizar de diversas maneiras, entre elas há o mail, que é um programa para enviar e receber mensagens eletrônicas, o write, que escreve uma mensagem no terminal de outra pessoa logada no sistema, o wall, que escreve mensagens nos terminais de todas as pessoas logadas no sistema, o talk, que permite uma conversa em tempo real. Há também a comunicação entre os sistemas, tais como uucp (UNIX to UNIX Copy Protocol).
Estrutura de Arquivos
Arquivos são centrais para o UNIX de uma maneira não encontrada em outros sistemas operativos. Comandos são arquivos executáveis, usualmente encontráveis em locais previsíveis na árvore de diretórios. Privilégios do sistema e permissões são controlados em grande parte através de arquivos. Dispositivos de 1/O e arquivos de 1/O não são distinguidos nos níveis mais altos. Até mesmo a comunicação entre processos ocorre através de entidades similares a arquivos. O UNIX tem uma organização de diretórios hierárquica em formato de árvore conhecida como filesystem. A base desta árvore é um diretório chamado root directory. Em sistemas UNIX, todo espaço em disco disponível é combinado em uma única árvore de diretório abaixo do 1, sendo que o local físico onde um arquivo reside não faz parte da especificação do arquivo UNIX. O acesso a arquivos é organizado através de propriedades e proteções. Toda segurança do sistema depende, em grande parte, da combinação entre a propriedade e proteções setadas em seus arquivos e suas contas de usuários e grupos.
Enfatizando:
- Tudo em UNIX é um arquivo
- Unix tem uma organização hierárquica de arquivos chamada de filesystem
- Acesso aos arquivos é organizado através de propriedades e proteções
A arquitetura do sistema operativo segue um esquema onde o componente central do sistema (núcleo ou kernel) interage diretamente com o hardware, ao mesmo tempo que fornece serviços, através de chamadas de sistema, para o shell, utilitários do próprio UNIX e aplicações. O núcleo do sistema operativo é o coração de todo o sistema. Suas funções básicas são: interfaceamento direto com o hardware, fornecendo serviços de acesso ao hardware para o shell, utilitários do UNIX e aplicativos do usuário;
- gerenciamento de usuários;
- gerenciamento de arquivos e segurança;
- serviços de rede;
- contabilidade do sistema;
- gerenciamento de erros;
- gerenciamento de processos;
- controle de interrupções e erros;
- serviços de entrada e saída (E/S).
In/Link e Un/Link
Uma ligação de arquivos é criada através do comando ln do Unix ou chamada de sistema link. Uma ligação é um modo de criar novos nomes para arquivos do Unix. O resultado é um novo nome que, quando referenciado, afeta o arquivo real ao qual está ligado. E possível ligar diretórios, mas somente o superusuário pode fazer isso. E preciso tomar muito cuidado ao ligar diretórios, pois é possível criar ligações que criem um laço infinito. Se um arquivo tiver uma ligação para si, então qualquer alteração feita nele afetará igualmente aos usuários de outras ligações. Da mesma forma, se qualquer usuário modificar um nome de arquivo que seja uma ligação, o arquivo original será afetado, e o mesmo acontece com todos os outros usuários do arquivo e suas outras ligações. É possível remover uma ligação de um arquivo ou diretório usando o comando ou chamada do sistema unlink. Os comandos e chamadas de sistema ln/link/unlink são documentados no Unix System V User Reference e Unix System V Programmer's Reference. Lembre-se, é preciso muito cuidado ao acionar a chamada de sistema link (mudança do nome do arquivo).
Propriedades de Arquivos
Arquivos têm um usuário proprietário e um grupo proprietário. Estes proprietários, usuários e grupos, são totalmente independentes. O grupo proprietário de um arquivo é independente do usuário que é dono do arquivo. Embora muitas vezes o grupo do arquivo seja o grupo primário de seu usuário, o usuário do arquivo não precisa pertencer ao grupo proprietário do mesmo arquivo. Não há, necessariamente, nem uma conexão entre eles. Neste caso, quando acesso a um arquivo é especificado para o grupo proprietário do mesmo, é aplicado somente aos membros daquele grupo, e não aos membros do grupo primário do usuário do arquivo, que são tratados como "outros": o todo o resto. A motivação por trás desta propriedade de arquivos por grupos é permitir proteções e permissões de arquivos serem organizadas de acordo com necessidades locais. O ponto principal é flexibilidade. Como é permitido que usuários pertençam a mais de um grupo, há liberdade de projetá-los de acordo com as necessidades.
File System
O sistema de arquivos do Unix é um importante aspecto do sistema operativo . O sistema de arquivos é o local em que são armazenados os arquivos do sistema e dos usuários. Ele é organizado como uma estrutura de arquivo que se parece com uma árvore invertida, estando a raiz no topo e ramificando-se para baixo.
Sistema de Arquivamento do Unix
Um arquivo é uma unidade de dados que é armazenado em disco (ou fita) magnético. O nome do arquivo identifica-o de forma exclusiva. Uma coleção de arquivos em um disco é chama de sistema de arquivamento. O diretório é um tipo especial de arquivo que contém uma lista dos nomes dos arquivos. Todos os arquivos listados em um determinado diretório são agrupados em conjunto, para que o acesso seja mais convincente. O sistema UNIX de arquivamento permite uma estrutura hierárquica. Os programas e os dados podem ser organizados convincentemente, já que os arquivos podem ser agrupados de acordo com o uso. Você pode criar diretórios quando quiser, por isso pode agrupar seus programas e dados nos diretórios apropriados. Por exemplo, você pode ter um diretório para os dados da contabilidade financeira, um outro para documentos em forma de texto e assim por diante. O Sistema UNIX de arquivamento permite que você tenha controle flexível sobre o acesso a seus programas e dados. Seu acesso, o acesso a grupos definidos de usuários e o acesso para todos os usuários do sistema podem ser controlados independentemente para cada arquivo que você tiver criado. Por exemplo, você pode permitir que membros de um grupo de projeto tenham acesso a seus dados, mas impedir o acesso a usuários do sistema que não estejam em seu grupo de projeto. No início de sua vida o sistema UNIX ganhou a reputação de ser um destruidor de dados e programas. Geralmente esse problema ocorria quando o computador era desligado de maneira imprópria: por exemplo, em virtude de uma falha no fornecimento de energia elétrica. A razão dessa vulnerabilidade é que os dados destinados a um arquivo são mantidos na memória principal e só são gravados no disco quando o espaço de memória é necessário para outra coisa. O desempenho do sistema é melhor com esse método de "gravação atrasada", uma vez que os dados são gravados no disco toda a vez que a gravação é solicitada. No entanto, se a energia for interrompida, os dados na memória principal se perderão. Recentes melhorias ajudaram a tornar o sistema UNIX de arquivamento tão robusto quanto qualquer outro sistema de arquivamento: (1) O hardware do disco é mais seguro. (2) A execução periódica do programa sync força a gravação a gravação no disco de dados na memória principal. (3) O programa fsck, de verificação e reparo do sistema de arquivamento, muito fácil de ser usado, foi incorporado.
Verificando o sistema de Arquivamento
O Sistema de arquivamento UNIX é frágil e pode ser facilmente adulterado se o sistema não for parado de maneira adequada. Por essa razão, você deve verificar a condição do sistema de arquivamento toda a vez que inicializar o sistema UNIX. Se houver um erro no sistema de arquivamento, ele deve ser parado imediatamente, antes que o sistema seja usado; se isto não for feito, este se espalhará com um câncer, até que todo o sistema de arquivamento fique inutilizável.
NFS - Network File System
O Network File System (NFS - Sistema de Arquivos em Rede) foi originalmente implementado pela Sun Microsystems, mc., e foi endossado pela IBM, Hewlett-Packard, Apoilo Computer, Apple Computer, e muitos outros fornecedores de sistemas Unix, exceto a AT&T. Em resumo, a mais ampla implementação dos esquemas de compartilhamento de arquivos em rede é o NFS. O NFS é uni serviço independente de sistema operativo , que permite que todo um sistema de arquivo seja montado em redes. Assim, esses sistemas de arquivo podem ser tratados como parte do sistema de arquivos local. Parte importante do projeto do NFS foi remover todas as dependências do sistemas operativos, juntamente com todas as dependências de hardware. O NFS oferece também facilidades para recuperação em caso de queda, alto desempenho, e acesso transparente - independentemente de rede ou sistema operativo . Um exemplo disso é um produto disponível para Pc's baseados em DOS: PC-NFS. O PC-NFS comunica-se com instalações NFS baseadas em Unix. Para o PC, todas as partes do sistema de arquivos Unix aparecem como se fossem discos DOS locais. O PC-NFS ainda não oferece facilidades de servidor, somente serviços de cliente NFS. Em sistemas baseados em Uníx, o NFS é integrado ao núcleo por razões de eficiência, embora a integração não seja obrigatória. De importância para os desenvolvedores de aplicações é por que e como o NFS pode afetar suas aplicações, e como implementar esforços de programação para oferecer compatibilidade com o NFS. A primeira parte da questão pode ser respondida considerando-se como uma aplicação é projetada. As partes mais sujeitas a serem afetadas são, quase certamente, as funções de 1/O; mais provavelmente, 1/O baseada em um sistema de arquivos. Se uma aplicação for projetada para trabalhar com certas rotinas de 1/O de arquivo é possível que essas rotinas de 1/O possam fazer com que a aplicação se comporte de maneira imprópria quando executada usando um sistema de arquivos remoto.
Conclusão
Sistema operativo UNIX
O Sistema operativo UNIX se caracteriza por ser um sistema mais eficaz e mais seguro do que a maioria dos outros SOs, Porém essas características só conseguem ser notadas por programadores mais experientes pois se trata de Sistema que exige um alto nível de conhecimento de seus usuários. Ele não é um Sistema amigável, como um Sistema Gráfico e sim um sistema complexo com base em linhas de comandos via teclado.
FILE SYSTEM
O sistema de arquivos do Unix é um importante aspecto do sistema operativo . O sistema de arquivos é o local em que são armazenados os arquivos do sistema e dos usuários. Ele é organizado como uma estrutura de arquivo que se parece com uma árvore invertida, estando a raiz no topo e ramificando-se para baixo. Todo File System começa com um diretório chamado ROOT que serve como raiz para ramificação dos demais diretórios, esses diretórios são considerados sub-diretório do diretório ROOT, reciprocamente o diretório ROOT é considerado "pai" desses diretórios.