You are on page 1of 56

Sistemas Operacionais 

Linux

Prof. Dr. Erwin Doescher

2005
Sistemas Operacionais ­ Linux

Introdução

●Sistemas Operacionais

●Linux e Distribuições 
Sistemas Operacionais ­ Linux Introdução

Sistema Operacional
● Software (programa) que:
– Gerencia o hardware do computador
● Memória
● Dispositivos de Entrada/Saída
– Fornece um conjunto de ferramentas que facilitam:
● O uso do computador
● O desenvolvimento de outros softwares
– Gerencia a execução dos demais softwares
Sistemas Operacionais ­ Linux Introdução

Linux
● Motivo do Sucesso:
– Software Livre – Liberdade de:
● Executar o software para qualquer fim
● Estudar e Adaptar o código
● Redistribuir cópias do software e do código
● Redistribuir cópias alteradas do código
     garantidas pela Licença GPL
– Excelente estabilidade
– Segurança
Sistemas Operacionais ­ Linux Introdução

Linux
Estrutura do Sistema Operacional

OpenOffice, Gimp, 
Aplicativos Gráficos Blender, etc
Ambiente Gráfico
Servidor Gráfico Kde, Gnome, 
Ferramentas  do Sistema WindowMaker, etc
Kernel
Xfree86, XOrg
Aplicativos modo Texto Shells, utilitários 
(arquivos, processos) 
Núcleo do sistema
Apache, vi, emacs,
transcode, etc.
Sistemas Operacionais ­ Linux Introdução

Linux
Organização do Sistema de Arquivos
– É organizado a partir da raiz ( / )
– Caracter / é usado como separador de caminhos:
            /home/jose/programas/C/teste.c
– Cada componente de um caminho deve ter menos que 
255 caracteres
– O caminho completo não deve exceder 1023 
caracteres
– Caracteres não permitidos em nomes:  / e `\0` (nulo)
Sistemas Operacionais ­ Linux Introdução

Linux
Organização do Sistema de Arquivos
– Arquivos iniciados com . (ponto)  são ocultos
– Espaços devem ser especificados como : '\ '
          /home/jose/Um\ diretorio\ longo/texto.txt 
– Pode­se colocar o caminho entre aspas ("):
         "/home/jose/Um diretorio longo/texto.txt"
– Um arquivo pode ter múltiplas extensões 
– Extensões não são relevantes para a identificação do 
arquivo: o tipo é determinado pelo conteúdo 
Sistemas Operacionais ­ Linux Introdução

Linux
Sistema de Arquivos: Diretórios padrão
– /bin  ­ executáveis (para todos usuários)
– /sbin ­ executáveis(apenas superusuário)
– /etc ­ Arquivos de configuração e inicialização
– /dev ­ Dispositivos de Entrada/Saída
– /lib ­ Bibliotecas 
– /proc ­ Imagem dos processos em execução
Sistemas Operacionais ­ Linux Introdução

Linux
Sistema de Arquivos: Diretórios padrão
– /var ­ Log, contabilidade e spool
– /usr ­ Executáveis, bibliotecas, etc. (não do sistema)
– /home ­  Diretórios de usuários
– /root ­ Diretório do superusuário
– /boot ­ Diretório do kernel e boot
Sistemas Operacionais ­ Linux Introdução

Linux
● Distribuições
– Componentes do Sistema Operacional são mantidos 
por comunidades diferentes
– Distribuições agregam estes componentes em um 
único conjunto
– Diferem em:
● Componentes selecionados (depende da finalidade)
● Opções de compilação dos componentes
● Formas de empacotamento
● Estrutura de diretórios (em processo de padronização)
Sistemas Operacionais ­ Linux Introdução

Linux
● Distribuições ­ Exemplos
– Redhat
● Atualmente para área empresarial
● Nos desktop apoia o desenvolvimento do Fedora
– Mandrake
● Componentes compilados para Pentium
– Conectiva
● Primeira distribuição Brasileira 
● Empresa adquirida pela Mandrake, formando a Mandriva
Sistemas Operacionais ­ Linux Introdução

Linux
● Distribuições ­ Exemplos
– Debian
● Mantido por uma comunidade de usuários
● Prioriza a estabilidade do sistema
– Gentoo
● Componentes devem ser compilados na instalação
– Slackware
● Uma das pioneiras
Sistemas Operacionais ­ Linux

Conceitos Básicos

●Usuários e Grupos

● Arquivos, Diretórios e Links

● Shell
Sistemas Operacionais ­ Linux Conceitos Básicos

Usuários e Grupos
Usuário:
– Para acessar o sistema:
● O usuário deve estar cadastrado e logado
– O identificador do usuário (user) permite ao sistema:
● Determinar as operações permitidas para o usuário
● Determinar o acesso à diretórios (pastas) e arquivos
● Determinar o diretório de trabalho (HOME)
– O administrador: superusuário (superuser) ou root
Sistemas Operacionais ­ Linux Conceitos Básicos

Usuários e Grupos
Grupos
– Definem conjuntos de usuários 
– Um usuário pode pertencer a 1 ou mais grupos
– Usuários de um mesmo grupo tem os mesmos 
privilégios
– Determinam as operações que um usuário pode ter 
sobre o sistema
– Fundamental para sistemas multi­usuário
Sistemas Operacionais ­ Linux Conceitos Básicos

 Arquivos, Diretórios e Links
Arquivos
– Armazenam dados ou programas
– Cada arquivo tem permissões de leitura, escrita e 
execução
Diretórios
– Agrupam arquivos para facilitar localização
– Cada diretório tem permissões de leitura, escrita e 
execução
Sistemas Operacionais ­ Linux Conceitos Básicos

 Arquivos, Diretórios e Links
Links
– Identificam Arquivos ou Diretórios em locais 
distintos
● Alterar um, altera os demais

Links Simbólicos
– Não é criado um novo arquivo ou diretório
– O link redireciona para o local correto
Sistemas Operacionais ­ Linux Conceitos Básicos

 Arquivos, Diretórios e Links
Exemplos: (apenas nomes)

Link simbólico de diretório

Link simbólico de arquivo
Arquivo

Link simbólico 
perdido

Diretório Executável Arquivo de link


Sistemas Operacionais ­ Linux Conceitos Básicos

 Arquivos, Diretórios e Links
Exemplos: (saída detalhada)
Número de links

Nome arquivos

Tipo e Grupo Data/ Hora de acesso


Permissões Usuário Tamanho
Sistemas Operacionais ­ Linux Conceitos Básicos

 Arquivos, Diretórios e Links
Tipos e Permissões (10 campos)
             (tipo) (dono) (grupo) (outros)
– tipo ­ pode ser:
­     arquivo regular                   d    diretório
l      link simbólico                    c     dispositivo de caracter
b     dispositivo de bloco           s     soquete
p     pipe identificado
– (dono), (grupo) ou (outros) ­ blocos de três caracteres 
cada, na ordem:
r  permissão de leitura              w  permissão escrita 
x permissão de execução          ­   nega a permissão
Sistemas Operacionais ­ Linux Conceitos Básicos

Shell
– Um interpretador de comandos do sistema
– Funciona como uma interface entre o usuário e o 
Sistema Operacional
– Ao logar, o usuário inicia um shell (shell de login)
– O usuário escolhe o seu shell podendo ser:
● Shell Bourne (/bin/bash) ­ (Linux) 
● Shell C (/bin/csh)
● Shell Korn (/bin/ksh)
● Shell C avançado (/bin/tcsh)
● Shell Bourne (/bin/sh) ­ (não Linux) 
– Pode­se mudar o shell com o comando chsh
Sistemas Operacionais ­ Linux Conceitos Básicos

Curingas
– Permitem definir caminhos satisfazendo padrões
– No shell bash os seguintes curingas são válidos:
● * ­ substitue uma string qualquer (inclusive nula)
● ? ­ substitue um caracter (não nulo)
● [c1c2...cN] ­ qualquer dos caracteres c1,c2,..,cN
● ~ ­ diretório HOME do usuário
– Exemplos:
● ls ­l *.txt   =>  arquivos com extensão .txt
● ls ­l *.??  => arquivos com extensão de 2 letras
● ls ­l [aeiou]* => arquivos começados com vogal
● ls ­l x??[p97z].tar.* => ????
● ls ­l ~/.bash*   => ?????
Sistemas Operacionais ­ Linux

Processos

●Processos 

●Threads 
Sistemas Operacionais ­ Linux  Processos

Processos
– Um programa em execução
– Caracterizado por:
● Código executável
● Dados (variáveis do programa)
● Registradores da CPU
– Uso Geral
– Contador de Programa (PC)
– Apontador de Pilha (SP)
● Pilha de Execução
● Outras informações relevantes
– Arquivos abertos
Sistemas Operacionais ­ Linux  Processos

Sistema Operacional Multitarefa
– Executa vários processos “simultaneamente”
– Implementado por compartilhamento de tempo:
● A CPU é chaveada entre os diversos processos
● Um sinal de hardware interrompe periodicamente a CPU
● O processo em execução é paralisado
● Os valores dos registradores são salvos 
● Recupera­se os valores dos registradores de outro processo
● O outro processo é reiniciado no ponto em que foi 
paralisado
– A troca ocorre muito frequentemente, dando ilusão de 
execução simultânea
Sistemas Operacionais ­ Linux  Processos

Manipulação de Processos
– Processos podem criar novos processos (processos 
filhos)
– A execução do processo pai pode esperar ou não o 
término do processo filho.
– Cada processo possue um número de identificação, 
denominado de pid.
– Em sistemas multiusuário, os processos possuem dois 
outros números:
● uid – identifica o usuário dono do processo
● gid – identifica o grupo do usuário dono do processo
Sistemas Operacionais ­ Linux  Processos

Manipulação de Processos
– Processos comunicam­se entre si através de sinais
– O Sistema Operacional é responsável por encaminhar 
os sinais para os processos
– Ao receber um sinal para um processo:
● O SO verifica se o processo de origem tem uid ou gid 
compatível com o processo destino
● Se for compatível, o sinal é encaminhado
● Se não for compatível, uma mensagem de erro é gerada
Sistemas Operacionais ­ Linux  Processos

Estados dos Processos
– Rodando:
● O processo está usando o processador neste momento
● Um único processo por processador pode estar neste estado
– Pronto:
● São processos com plenas condições de execução
● Aguardam apenas a liberação do processador
– Bloqueado:
● Processos que dependem de um evento externo para 
prosseguir a execução
● Quando o evento ocorre, passam ao estado pronto.
Sistemas Operacionais ­ Linux  Processos

Estados dos Processos

Rodando

Bloqueado Pronto
Sistemas Operacionais ­ Linux  Processos

Processos no Linux
Comando ps
– Mostra os processos do sistema neste momento
– A relação de processos é uma visão estática 
– Opções:
● ­e  => mostra todos os processos 
● ­f   => mostra mais detalhes dos processos
● ­u user => mostra processos do usuário user
● ­w => mostra saída longas em duas linhas
Sistemas Operacionais ­ Linux  Processos

Processos no Linux
Saída do comando ps ­efw
Sistemas Operacionais ­ Linux  Processos

Processos no Linux
Saída do comando ps ­fwu erwin
Sistemas Operacionais ­ Linux  Processos

Processos no Linux
Comando top
– Mostra os processos do sistema dinamicamente
– comandos:
● h  => mostra ajuda com os comandos 
● u   => mostra os processos de um usuário apenas
● P => ordena os processos com maior uso de CPU
● M => ordena os processos com maior uso de memória
● R => mostra em ordem normal/invertida
● < ou > => anterior/próximo coluna para ordenação
● l,t, m => liga/desliga sumários de carga, tarefas e memória 
Sistemas Operacionais ­ Linux  Processos

Processos no Linux
Saída do comando top
Sistemas Operacionais ­ Linux  Processos

Processos no Linux
Comando kill ­s sin pid
– Envia o sinal sin ao processo pid
– kill ­l  mostra os sinais disponíveis, entre eles:
● SIGKILL   => o processo deve ser encerrado (9)
● SIGSTOP  => paralisa a execução do processo (19)
● SIGCONT => reinicia um processo parado (18)
– Cada sinal tem um inteiro associado
– São equivalentes:
● kill ­s SIGKILL pid
● kill ­KILL pid
● kill ­9 pid
Sistemas Operacionais ­ Linux  Processos

Processos no Linux
Processos em Foreground
– Processos disparados do prompt 
– Bloqueiam o prompt até o final do processo
– Podem ser interrompidos com ctrl+C
Processos em Background
– São disparados acrescentando um & no final do 
comando
– Não bloqueiam o prompt
– Após o comando é retornado o PID do processo
– Somente são interrompidos com kill
Sistemas Operacionais ­ Linux  Processos

Processos no Linux
Passando processos para Background
– Pressionando ctrl+z , interrompe­se o processo
– O comando bg , digitado em seguida, coloca o 
processo em background
Hierarquia de Processos 
– Processos disparados de um terminal são filhos do 
processo do terminal
– Terminar o processo pai encerra processo em 
foreground, mas não encerra processos em 
background
Sistemas Operacionais ­ Linux  Processos

Processos no Linux
Exemplo:

PROGRAMA IMPA PROGRAMA IMPB SCRIPT RODA1

#include <stdio.h> #include <stdio.h> ./IMPA


int main(void){ int main(void){ ./IMPB
    while (1) {     while (1) {
         printf(“A”);          printf(“B”); SCRIPT RODA2
     }      }
     return 0;      return 0; ./IMPA &
} } ./IMPB &
Sistemas Operacionais ­ Linux  Processos

Processos no Linux
Saída do Script Roda1:
Sistemas Operacionais ­ Linux  Processos

Processos no Linux
Saída do top rodando Script Roda1:
Sistemas Operacionais ­ Linux  Processos

Processos no Linux
Saída do Script Roda2:
Sistemas Operacionais ­ Linux  Processos

Processos no Linux
Saída do top rodando Script Roda2:
Sistemas Operacionais ­ Linux  Processos

Serviços ou daemons
– São processos disparados na inicialização do SO
– Os scripts dos serviços estão no diretório /etc/init.d/
● /etc/init.d/servico start    => inicia o serviço
● /etc/init.d/servico stop    => paralisa o serviço
● /etc/init.d/servico status  => informa o estado do serviço
– Nem todos os serviços precisam estar ativos
– O linux possue 6 níveis de inicialização
– Cada um deles pode ter serviços diferentes ativados
– O nível a ser usado por padrão está indicado no 
arquivo /etc/inittab
Sistemas Operacionais ­ Linux  Processos

Scripts de níveis
– Cada nível tem um diretório na forma
            /etc/rcN.d          onde N é o número do nível
– Cada diretório contém uma seqüência de links para  
scripts de serviços
– Os links são formados por:
● letra K (kill) ou S (start) 
● seguidos de um número de dois digítos 
● e o nome do script
– Serviços com K são mortos (ordem descendente)
– Serviços com S são iniciados (ordem ascendente)
Sistemas Operacionais ­ Linux  Processos

Scripts de níveis
Comando ntsysv N
– Interface amigável para ativar/desativar serviço no 
nível N
Comando chkconfig
– Permite configurar os links
– chkconfig  ­ ­ list   
● mostra todos os serviços e os níveis em que aparecem
– chkconfig  ­­ level N ­­add serv
● Adiciona serviço serv ao nível N
Sistemas Operacionais ­ Linux  Processos

Threads
– São fluxos de execução dentre de um processo
– Cada processo possui pelos menos uma thread
– Processos com mais de uma thread são denominados 
de multithread
– As threads de um processo são executadas 
alternadamente, aparentando execução simultânea
– As threads compartilham os seguintes recursos do 
processo a que pertencem:
● Espaço de memória
● Variáveis globais
● Arquivos
Sistemas Operacionais ­ Linux  Processos

Threads
– Cada thread possui um conjunto de registradores e 
pilha de execução própria.
– Existem dois tipos de threads:
● Threads de usuário: a troca das threads é implementada 
pelo próprio programa
● Threads de núcleo (kernel): a troca é implementada pelo 
sistema operacional
– O uso de threads:
● Simplifica a programação de tarefas paralelas
● Acelera a execução do programa em computadores com 
mais de um processador
Sistemas Operacionais ­ Linux  Processos

Escalonamento
– Escalonador
● Parte do SO responsável por escolher o processo/thread a 
ser executado
● Implementa o algorítmo de escalonamento
– O algorítmo de escalonamento busca satisfazer cinco 
objetivos:
● Justiça – Todos processos tem chances iguais
● Eficiência – Aproveitar ao máximo o processador
● Tempo de Resposta – Responder rápido aos usuários 
iterativos
● Turnaround – Minimizar o tempo de espera de usuários não 
iterativos
● Vazão – Executar o maior número de tarefas possíveis
Sistemas Operacionais ­ Linux  Processos

Escalonamento
– Estes objetivos são contraditórios
– Para SO de propósito geral, o algorítmo deve 
satisfazer parcialmente estes objetivos
Escalonamento Circular ou Round Robin
– Cada processo tem uma cota de tempo (quantum)
– Os processos estão em uma fila circular
– Após o seu quantum de tempo, o processo retorna ao 
final da fila
Sistemas Operacionais ­ Linux  Processos

Escalonamento
Escalonamento com Prioridade
– Existem processos mais importantes que outros, que 
devem executar mais rapidamente
– Cada processo recebe um valor numérico de 
prioridade
– Processos de maior prioridade recebem um quantum 
de tempo primeiro
– Após executar o quantum, a prioridade é diminuída
– Quando todos os processos tem a prioridade zerada, 
as mesmas são reiniciadas
Sistemas Operacionais ­ Linux  Processos

Escalonamento
Escalonamento Garantido
– Em alguns casos, um processo ganha mais um 
quantum de tempo, para encerrar tarefa que não pode 
ser interrompida
– Com isto, alguns processos tem mais tempo de 
execução do que outros da mesma prioridade
– O escalonamento garantido altera a prioridade 
dinamicamente, garantindo o mesmo tempo de 
execução
Sistemas Operacionais ­ Linux  Processos

Escalonamento no Linux
– Escalonamento de Threads
– Três classes de Threads:
● FIFO em Tempo real
– Primeiro a chegar tem preferência na execução
– Só é interrompido por um processo de maior prioridade na mesma 
classe
● Circular em Tempo real
– Os processos se alternam na execução
– Após o quantum de tempo, voltam ao fim da fila
● Tempo Compartilhado
– Como na classe anterior, mas com menor prioridade
Sistemas Operacionais ­ Linux  Processos

Escalonamento no Linux
– Cada thread tem prioridades base e de ajuste (nice)
– A prioridade total da thread é dada por:
● Prioridade =  base – nice
– Valor padrão
● base = 20
● nice = 0
● Portanto,  1 <= prioridade <= 40
– O quantum de tempo:
● É um valor inteiro
● Inicialmente igual a prioridade
● A cada interrupção este número é decrementado
Sistemas Operacionais ­ Linux  Processos

Escalonamento no Linux
– O escalonador calcula a bondade de uma thread:
– Em Tempo real:
● Bondade = 1000 + prioridade
– Em Tempo Compartilhado:
● Se (quantum > 0)  Bondade =  quantum + prioridade
● Se (quantum = = 0) Bondade =  0
– Assim:
● Tempo real tem prioridade sobre as demais
● Threads que gastaram toda a thread não rodam
Sistemas Operacionais ­ Linux  Processos

Escalonamento no Linux
– Quando todas as threads, não bloqueadas, zeraram o 
seu quantum
● O escalonador reinicializa o valor do quantum
● Todos os processos são afetados (prontos e bloqueados)
● Novo valor:  
                quantum = (quantum/2) + prioridade
● Os processos blooqueados que não gastaram todo o 
quantum, recebem um novo quantum maior
● Por isso, processos que fazem muito E/S tem maior 
preferência
Sistemas Operacionais ­ Linux  Processos

Escalonamento no Linux
Alterando a prioridade
– Pode­se alterar a prioridade através do valor nice:
– nice ­n valor  comando
● Inicia o processo para comando com nice alterado para 
valor, com ­20 <= valor <= 19
● Usuários comuns só podem usar  0 <= valor <= 19
– renice valor  pid
● Altera para valor o nice de um processo já iniciado
● ­20 <= valor <= 19
● usuários comuns só podem aumentar o valor atual do nice.

You might also like