Um sistema Unix consiste, basicamente, de duas partes:
- Kernel - o núcleo do sistema operacional, a parte que relaciona-se directamente 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. O acesso ao kernel é efectuado por chamadas de sistema, que são funções fornecidas pelo kernel. Essas funções são disponibilizadas para as aplicações pela biblioteca 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 utilizador e o kernel. Consistem, principalmente, de:
Conjunto de bibliotecas C (libc)
Shell - um ambiente que permite que o utilizador digite comandos.
Programas utilitários diversos - são programas usados para manipular arquivos, controlar processos, etc.
Ambiente gráfico (GUI) - eventualmente utiliza-se também um ambiente gráfico para facilitar a interação do utilizador com o sistema.
Num sistema Unix, o espaço de memória utilizado pelo kernel é denominado espaço do kernel ou supervisor (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.
ProcessosUm 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 "a dormir" (asleep), esperando alguma condição que permita sua execução.
Um processo em execução pode ser retirado do processador por duas razões:
- Necessita aceder a algum recurso, fazendo uma chamada de sistema - neste caso, após ser retirada do processador o seu estado será alterado para "a dormi", até que o recurso seja liberado pelo kernel;
- O kernel pode interromper o processo - 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 kernel 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 processo-filho e o processo-pai.
Sistema de arquivosSistema 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óriosA á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 kernel.
/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/floopy — Subdiretório onde são montados os disquetes. Após a montagem, o conteúdo do disquete encontrase-a dentro deste diretório.
/proc — Sistema de arquivos do kernel. Este diretório não existe, ele é colocado lá pelo kernel e usado por diversos programas.
/root — Diretório do usuário root.
/sbin — Diretório de programas usados pelo superutilizador (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 frequência pelos programas do sistema.