Home
Hobby
Links
Email
Pictures
Hobby
Links
Email
Pictures
Home
Sistemas Operacionais
Programa da disciplina:




Carga Horária: 80 h/a

Bases Tecnológicas:
Linguagem de Comando.Noções de Sistemas de
Multiprogramas e Multiusuários. Organização Interna
e Externa de Sistemas de arquivos e Diretórios.
Programas de Sistema: Bibliotecas e utilitários.
Chamadas ao Sistema. Processos Concorrentes.
Gerenciamento de Memória. Tolerância à falhas.
Proteção e segurança. Sistemas operacionais multiprocessadores.

Competências:
Diagnosticar e mapear, com base científica, problemas e pontos e melhoria nas
organizações no que condiz a segurança de redes de computadores; Identificar as
características específicas de Sistemas Operacionais a fim de utilizar o produto em
função das necessidades do ambiente organizacional. Conhecer a metodologia de
gerenciamento dos processos, memória, arquivos e periféricos utilizada pelo Sistema
Operacional e identificar como se dá a comunicação entre os processos. Conhecer
arquitetura dos Sistemas Operacionais.

Habilidades:
Entender o que é e qual a função de um Sistema Operacional na gestão do ambiente
computacional.
Analisar funções, organização e atividades de Sistemas Operacionais. Analisar
soluções de utilização de Sistemas Operacionais. Interpretar as metodologias de
gerenciamento de memória, processos, arquivos e periféricos adotadas pelo Sistema
Operacional.

Conteúdo:
Histórico dos sistemas operacionais
Estrutura interna
Componentes básicos (tanto para Unix/Linux como para Windows)
Escalonador de Processos (comentar o Unix/Linux)
Gerenciamento de memória
Tipos de processamento
Sistemas de arquivos (Linux e Windows)
Tratamento de periféricos
Sistemas distribuídos.

Bibliografia Básica:
FLYNN, Ida M. McHOES, Ann McIver. Introdução aos sistemas operacionais. São
Paulo: Pioneira Thomson Learning, 2002.
MACHADO, Francis B. MAIA, Luiz Paulo. Arquitetura de sistemas operacionais. 3ed.
Rio de Janeiro: LTC, 2002.
TANENBAUM, A.S. Sistemas Operacionais Modernos. 2 ed. Rio de Janeiro:
Prentice-Hall do Brasil, 2003

Bibliografia Complementar:
MONTEIRO, Emiliano S. Utilizando Linux em português. São Paulo : Érica, 1999.
MONTEIRO, Emiliano S. Segurança em ambientes corporativos. Florianópolis : Visual
Books, 2003.
PETERSON, G.L.; SILBERCHATZ, A. Sistemas Operacionais conceitos. 5 ed. São
Paulo : Prentice Hall, 2000.
TANENBAUM, A.S. Sistemas Operacionais, Projeto e Implementação. Porto Alegre :
Bookman, 2000.


Avaliação do Semestre:
1º Bimestre: Uma avaliação valendo 2 pontos e a prova bimestral 8 pontos. A prova
poderá conter questões de múltipla escolha, objetivas ou descritivas. Prova de 2a.
chamada serão descritivas (canetão).
2º Bimestre: Uma avaliação (ou um trabalho interdisciplinar) valendo 2 pontos e a prova
bimestral 8 pontos. A prova poderá conter questões de múltipla escolha, objetivas ou
descritivas. Prova de 2a. chamada serão descritivas (canetão). Quem perder "testes"
terá um nova oportunidade dentro de uma semana as 18:00, provas "bimestrais" de 2a.
chamada são marcadas pela coordenação.
O Linux foi desenvolvido para ser compatível com o padrão IEEE 1003.1990 (POSIX).
Este padrão define as funções que aplicações escritas em C usam para acessar
serviços do sistema operacional, para diversas tarefas como: abrir um arquivo ou alocar
um arquivo em memória. Em 8 de março de 1996, o Computer Systems Laboratory do
National Institute of Standards and Technology (NIST) validou o Linux versão 1.2.13, da
distribuição Open Linux Ltd. como compatível com POSIX.

O processo de construção do Kernel envolve os seguintes passos:
1. Configuração do Kernel
2. Compilação do Kernel
3. Compilação dos módulos
4. Instalação dos kernel e outros arquivos necessários Opção de Kernel "link in
support" ou Monolítico Nesta opção todos os drivers necessários para fazer o sistema
funcionar são compilados junto com o Kernel.

O tamanho final do Kernal aumenta conforme os drivers aumentam. O kernel que
possui todo o suporte necessário para funcionar é chamado de Monolítico. Os patches
são distribuídos comprimidos na forma de pacotes .gz ou .bz2. O usuário deverá usar
gunzip ou bzip2 para descomprimir os patches. Os pacthes devem ser copiados para a
pasta /usr/src, descomprimir o pacote e usar o comando patch para aplicar as
mudanças. Isto altera o código fonte do Kernel que esta localizado em /usr/src/linux.
Para atualizar o Kernel, o usuário deve ir para o diretório /usr/src/linux e usar o
comando make, na seguinte seqüência: make config; make dep; make clean; make
zImage (ou make bzImage). Use também make modules e make modules_install. Para
que o novo Kernel possa ser usado ele deve ser copiado para a pasta /boot e editar o
arquivo do LILO (/etc/lilo.conf), depois deve rodar o /sbin/lilo para atualizar o LILO.
Opção de Kernel "Modules" ou Modular: Os drivers necessários são criados na forma
de módulos. Um módulo é um bloco de código que o kernel carrega depois de estar
rodando. Um típico uso de módulos é adicionar suporte a um dispositivo sem ter que
reconstruir o kernel para cada dispositivo.

Módulos não necessitam ser drivers, eles também podem ser usados para adicionar
novas funcionalidades ao kernel. Esta forma também é chamada de kernel
"monolítico".

O termo "kernel" refere-se ao núcleo do sistema operacional. O kernel do Linux é
atualizado continuamente para que sejam implementadas melhorias e corrigidos erros.
As atualizações são distribuídas na forma de pacotes (patches) específicos. Os
usuários devem aplicar essas atualizações de tempos em tempos. Novas versões do
Kernel podem ser baixadas de www.kernel.org
O que são redirecionamentos no Linux?

Os comandos do Linux realizam operações de leitura e escrita no que é chamado
de entrada padrão e saída padrão. A entrada padrão também associada ao teclado
e a saída padrão ao monitor.
São chamadas de standard input para o teclado, standard output para o monitor e
as mensagens de erro são enviadas (geralmente) para a tela, standard error. Ou
stdout, stdin e stderr.

Exemplo de uso do redirecionamento:
Queremos procurar em uma pasta, todos os arquivos que começar com "I" e o
resultado de nossa busca deverá ir para o arquivo resultado.txt:
#grep I* /usr/* > resultado.txt
Alguns exemplos de redirecionamentos:
1. Envia o stdout para um arquivo:
#comando > arquivo
2. Envia stderr para um arquivo:
#comando 2> arquivo
3. Envia stdout e stderr para um arquivo:
#comando > arquivo 2>&1
4. Lê stdin a partir de um arquivo:
#comando < file
5. Envia stdout para o fim de um arquivo:
#comando > arquivo
6. Envia stderr para o final do arquivo:
#comando 2> arquivo
7. Envia stdout e stderr para o fim do arquivo:
#comando > arquivo 2>&1
8. Lê stdin do teclado até o caracter c:
#comando <<c
9. Pipe stdout para o comando2:
#comando1 | comando2
10. Pipe stdout e stderr para o comando2:
#comando1 2>&1 | comando2
O que é variável de ambiente?
São nada mais que uma associação de nomes com cadeias de caracteres.
Talvés a melhor forma seja a variável PATH, presente em vários sistemas
operacionais, incluindo o DOS, Netware, OS/2, etc...
Exemplo:
PATH=/usr/local/bin:/bin:/usr/bin:.:/usr/X11R6/bin

Para ver as variáveis de ambiente:
#env

Para definir variáveis de ambiente:
export NomeDaVariável=NovoValor
Programação shell
O shell mais popular do Linux é o Bash
Ele é um interpretador de comandos que podem ser agrupados em arquivos de texto
também chamados de scripts, ou shell scripts.

Visão geral da programação Bash
Variáveis que armazenam diversos valores
Capacidade de avaliar expressões
Possui estruturas de controle (loop, if else, for, etc...)
Capacidade de definir funções que podem ser chamadas de qualquer lugar dos
scripts

Todo programa começa com:
#!/bin/bash
comandos
comandos
comandos

Para que o programa se torne executável digite:
#chmod +x NomeDoPrograma

Para executar o programa:
#./NomeDoPrograma

O "./" significa que você esta no diretório onde o programa esta localizado.

Como retirar os caracteres de retorno de carro de arquivos ASCII DOS para ASCII
Linux?
O comando tr realiza esta tarefa com a opção -d.
Assim converter arquivos DOS em arquivos linux pode ser realizado pelo seguinte
comando:
#tr -d '\105' < Arquivo.dos > Arquivo.linux

O parâmetro '\105' denota nos códigos ASCII retorno de carro na notação octal.

Como transformar o comando acima em um script executável?
#!/bin/bash
tr -d '\105' < $1 > $2

Para torná-lo executável:
#chmod +x NomeDoScript

Exemplo de shell script:
#!/bin/bash
echo "teste de shell script"

Exemplo de prompt para o usuário:
#!/bin/bash
echo -n "digite um valor: "
read value
echo "voce digitou: $valor"
Programação shell
Exemplo, teste para ver se o arquivo existe antes de tentar abrir com o edito vi:
#!/bin/bash
if test -f "$1"
then
vi "$1"
else
echo "arquivo não existe"
fi

#!/bin/bash
# isto é um comentário
vendas=/public/empresa/info #declara uma variável
echo "insira o nome do arquivo a copiar: " # prompt do usuário
read nomedoarquivo # le variável
cp $nomedoarquivo $vendas

#!/bin/bash
# uso de estruturas de controle
# exibe menu
echo "Escolha uma das opções P, D ou Q: "
echo "P- Print"
echo "D- Deleta"
echo "Q- Quit, encerra"
read resposta
case $resposta in
P|p) echo "digite o nome do arquivo para imprimir :"
read nomedoarquivo
lp $nomedoarquivo;;
D|d) echo "digite o nome do arquivo para deletar:"
read nomedoarquivo
rm $filename;;
*) echo "encerrando... ";;;
esac

#!/bin/bash
echo "O último comando executado retornou $?"
echo "O nome deste programa é $0"
echo "O PID deste processo é $$"
exit

#!/bin/bash
# pergunta-nome
echo -n "Entre seu nome:"
read NOME SOBRENOME
echo "Prazer em encontrá-lo $NOME!"
exit

#!/bin/bash
# sel-edit -- seleciona um arquivo
# fonte (*.c *.h) e edita
select FNAME in *.c *.h
do
vi $FNAME
done
exit

#!/bin/bash
# feriados -- mostra principais
# feriados nacionais

HOJE=`date +%d/%m`

case $HOJE in
01/01) echo Confraternização universal ;;
24/06) echo São João ;;
07/09) echo Independência ;;
15/11) echo Procl. República ;;
25/12) echo Natal ;;
*) echo Um dia como qualquer outro ;;
esac
exit
#!/bin/bash
Clear
Free
df

gcc com c
Exemplo de programa c:
#include <stdio.h>
main()
{
printf("teste\n");
}

Para compilar:
#gcc -o teste teste.c
Para executar:
#./teste

gcc com c++

Exemplo de programa c++:
#include <iostream.h>
void main(void)
{
cout << " teste " << endl;
}

Para compilar:
#gcc -o teste teste.c
Para executar:
#./teste
O intalador de pacotes rpm
Para instalar um pacote:
rpm -i NomeDoPacote.i386.rpm
Desinstalar pacotes:
rpm -e NomeDoPacote.i386.rpm
Informações sobre os pacotes:
rpm -qip NomeDoPacote.i386.rpm
Verificações de alterações em pacotes:
rpm -V NomeDoPacote
Força a instalação:
Rpm -i -h -percent -replacefiles -force NomeDoPacote
A essa altura do campeonato vocês já
devem ter percebido que vamos usar o
Linux em laboratório!
Prof. Msc. Emiliano S. Monteiro
1o. Diretor COOTRADE
Abaixo foto do Linux Russo...
A tecla - tab
É utilizada para completar comandos com arquivos ou pastas.
Ao pressionarmos a tecla tab duas vezes ele completa o comando com
o que for parecido, por exemplo:
Para não ter que digitar:
#ls /etc/X11/XF86Config
Basta apenas digitar:#ls /etc/X11/XF* e o shell Bash irá completar o
resto do nome do arquivo
Histórico de comandos
O shell Bash mantém um histórico de 500 a 1000 comandos digitados
no prompt. Inclusive os que foram digitados em logins anteriores.
Para ver os últimos 10 comandos:
#history 10
Para repetir o comando número 3, por exemplo:
#!3
No teclado, seta para cima, mostra os últimos comandos digitados
Alias
São caminhos alternativos para diretórios ou arquivos.
São utilizados como abreviações de caminhos.
Exemplo:
Ao invéz de utilizarmos constantemente:
cd /usr/src/linux/arch/i386/boot
Podemos usar:
alias boot=´cd /usr/src/linux/arch/i386/boot´
E utilizar apenas o comando boot
Outro exemplo:
alias dir=´ls -la´
Tipos de arquivos
Quando o comando ls é usado aparece um letra no resultado, estas
letras podem ser:
l é um link simbólico
d é um diretório
- é um arquivo normal
b é um dispositivo de bloco
c é um dispositivo caractere
Comando find
Vamos supor que você deseje achar um arquivo que começa com o nome
gnome
#find / -name gnome* -print
Gostaria de encontrar todos os arquivos que começem com a letra "z"
(minúscula) na pasta /usr/bin. O comando é:
#find /usr/bin -name "z*"
Comando egrep
Quero saber quem tem o primeiro nome root cadastrado nas contas
do sistema:
#egrep "root:" /etc/passwd
Quantos usuários tem o primeiro nome "root"
#egrep "root," /etc/passwd
Comando chfn
Para alterar informações ou cadastrar informações sobre uma
deterninada conta de usuário use o comando chfn
Comando cat
Verifique as mensagens gerados durante o boot com o seguinte
comando:
#cat /var/log/boot.log
Para ver outras mensagens geradas pelo Kernel:
#cat /var/log/messages
Se o root deseja ver quem dados sobre os últimos logins:
#cat /var/log/secure
Editor de texto vi
Para entrar com comandos use a tecla “esc”, isto lhe permitirá digitar
no rodapé da tela comandos para salva, sair, etc.
:w! NomeDoArquivo Salva o arquivo
:wq Salva e sai do arquivo atual
:q Sai do vi
:q! Sai do vi sem salvar as alterações
:!comando Executa um comando do shell especificado
Comando tar
Para criar um backup:
#tar -cfv /origem /destino
Para copiar arquivos de /home/user1 para um disquete:
#tar -cf /dev/fd0 /home/user1
Para criar um backup multivolume, comprimido, com verbose (listando
arquivos), e uma lista dos arquivos copiados para o disquete será
gerada em listagem.txt
#tar -cvfzM /dev/fd0 /home/user1 | tee listagem.txt
Para restaurar um arquivo:
#tar -zxvf arquivo
Para criar um backup do diretório de user1 no arquivo backup1.tar
#tar -cvf /home/backup1.tar /home/user1
O arquivo /etc/fstab
O arquivo /etc/fstab é um arquivo de configução, contendo informações
sobre os pontos de montagem para serem usados pelos comandos mount
e umount.
Cada linha do arquivo fstab provê informações sobre o dispositivo.

Exemplo de fstab
Device Moint point File Sistem Options

/dev/hda3 / ext3 defaults 1 1
/dev/hda1 /dosc vfat defaults 0 0
/dev/hda5 /dosd vfat defaults 0 0
/dev/hda4 /swap swap defaults 0 0
/dev/fd0 /mnt/floppy ext3 noauto 0 0
/dev/cdrom /mnt/cdrom iso9660 noauto,ro 0 0
none /proc proc defaults 0 0

Opções de /etc/fstab
A primeira coluna mostra o nome do dispositivo, como uma partição de
um hd.
O segundo campo mostra o ponto de montagem dentro da árvore do
sistema de arquivos.
O terceiro campo indica o tipo de sistema de arquivos para cada
dispositivo.
O quarto campo pode ter várias opções:
"noauto" - Não irá montar automaticamente no boot.
"user" - Permite qualquer usuário montar (mas não acessar).
"owner" - Apenas o root poderá montar.
"noexec" - É útil para partições VFAT/NTFS pois por padrão ele considera
todos os arquivos "como executáveis".
"ro" - Será montado como somente leitura.
"rw" - Será montado com suporte a leitura/gravação.
uid=VALOR - Defina o ID do usuário que também terá acesso (além do
root).
gid=VALOR - Defina o ID do grupo que todos os usuários terão acesso.
umask=VALOR - É um valor octeto e define como ficarão as permissões
dos arquivos dessa partição ao ser copiado para uma partição Linux por
exemplo, por padrão elas tem permissão total. Exemplo: 022 corresponde
ao chmod 755.
Os valores "0" mostrados no final do arquivo o programa fsck não realizar
checagens no arquivo ao inicializar o Linux.
Comando mount
Para montar uma partição DOS(FAT)
#mount -t vfat /dev/hda1 /dosc
No caso anterior sub-entende-se que você tem uma partição DOS em
hda1 e já criou a pasta dosc
Para montar um disquete DOS
#mount -t vfat /dev/fd0 /mnt/floppy
Para desmontar o disquete:
#umount /mnt/floppy
Para desmontar o cdrom:
#umount /mnt/cdrom
Para ejetar a bandeja do cdrom:
#eject
top
As colunas do comando top
Na tabela, geralmente aparece:
a primeira coluna (PID) é o número de identificação do processo;
Segunda coluna (USER) o nome do proprietário da tarefa;
terceira coluna (PRI) a prioridade da tarefa
quarta coluna (NI) o valor da prioridade
quinta coluna (SIZE) tamanho da tarefa mais espaço ocupado na pilha
sexta coluna (RSS) a quantidade de memória física usada pelo processo
sétima coluna (SHARE) memória compartilhada pelo processo
oitava coluna (STAT) o estado do processo (pode ser, dormindo,
executando, zumbis, etc)
nona coluna (LIB) tamanho das páginas de bibliotecas em uso pelo
processo
décima coluna (%CPU) percentual de CPU usado (quando top fez última
atualização)
décima primeira coluna (%MEM) memória física usada pela tarefa
décima segunda coluna (TIME) tempo decorrido desde que o processo foi
ativado e última coluna (COMMAND) o nome do processo.
Interface gráfica
Para chamar a interface gráfica digite na linha de prompt:
# startx
Caso a interface gráfica tenha inicializado a seguinte combinação de
teclas, pode ser útil:
ctrl+alt+TeclaDeFunção - Leva você para o prompt, mas ainda fica
rodando a GUI
ctrl+alt+backspace - Realiza um shutdown no servidor gráfico e retorna
você ao prompt
ctrl+alt+TeclaNumerica - Realiza troca de modos de vídeo
ctrl+alt+F7 - Retorna você do prompt para a GUI
Os arquivos do X
Toda a configuração da interface gráfica pode ser feita manualmente
editando um arquivo.
/usr/X11R6/lib/X11/XF86Config
Toda a configuração de mouse, vídeo, tamanho de tela, etc. é feita
neste arquivo. Para editar este arquivo manualmente, digite:
# joe /usr/X11R6/lib/X11/XF86Config
O serviço Samba
Samba é um Servidor de Arquivos Windows para Unix. Esse servidor
trabalha com o protocolo SMB (Server Message Block), que é
popularmente conhecido como LanManager ou NetBIOS. O Samba é um
serviço implemetado com diversos processos que ficam rodando em
background (segundo plano), esperando solicitações
Smbd e nmbd
daemon que permite o fornecimento de serviços de compartilhamento
de arquivos e impressão para máquinas clientes Windows 9x, NT e
LanManager (outros tipos de máquinas que usem esse protocolo
também podem acessar o servidor [OS/2, Mac]). Os clientes devem
usar o protocolo SMB para requisitar o início de uma sessão com este
daemon.
O daemon do servidor de nomes do serviço Samba

Para configurar manualmente:
# joe /etc/smb.conf
Para compartilhar uma pasta:
# ... public accessible directory ..
[public]
comment = PublicSpace
path = /net
public = yes
writable = yes
printable = yes

Para iniciar o servidor:
#cds
#./smb start
Para parar o servidor:
#./smb stop

Para acionar a unidade compartilha, digite:
# smbcliente \\\\workgroup\\discoTeste
Impressão
Os dispositivos de impressão são:
/dev/lp0 e /dev/lp1
Para imprimir um arquivo:
#lpr teste.txt
O arquivo acima é copiado para o spooler de impressão que fica na
pasta: /var/spool/lpd/lp e posteriormente o daemon lpd envia o job de
impressão para a impressora conectada em /dev/lp0

Impressão
Para verificar o status da fila de impressão:
#lpq
Para cancelar um job na fila:
#lprm 1
Verificando o status da impressora com lpc:
#/usr/sbin/lpc status
Exemplo de impressão bruta sem formatação:
#cat teste.txt > /dev/lp0
Controlando a impressão com lpc:
Para mover um job39 para o topo da fila:
#lpc topq 39
Para parar um job:
#lpc stop hplj
lpd esta rodando?
#ps –aux | grep lpd

O arquivo /etc/printcap
Exemplo de arquivo:
lp|Laser Jet:\
:lp=/dev/lp0:\
:sd=/var/spool/lpd/lp:\
:mx#0:\
:pl#64:pw#80
:if=/var/spóol/lpd/lp/hpjl-if.pl:\
:sh:

A primeira linha mostra a identificação da impressora.
A segunda linha mostra em qual dispositivo ela esta ligada.
A terceira linha indica para onde vão os jobs de impressão (sd).
A quarta linha não limita o tamanho do jobs de impressão
A quinta linha informa a quantidade de linhas por páginas e tamanho da
página em caracteres
A setxa linha passa a impressão por um filtro de formatação
A sétima linha significa que você irá suprimir cabeçalhos e irá imprimir
páginas separadoras entre impressões.
Linuxconf via rede
Passos para ativar o linuxconf via rede:
No servidor:
1. Usar o ntsysv para ativar os serviços: inetd, xinetd, httpd,
linuxconf-setup, linuxconf-web e linuxconf-https
2. Usar o cds para ir até a página de serviços
3. Parar os serviços (stop), iniciar os serviços (start)
4. No linuxconf ? Rede ? Acesso ao Linuxconf via rede ? Marcar uma (x) na
opção que habilita o acesso via rede e incluir o Num. IP da máquina cliente

No cliente:
Chamar um navegador e no campo URL escrever:
http://NumeroIPDoServidor:98/

Outras ferramentas de configuração:
O webmin pode ser acionado pela porta 10000
O swat pode ser acionado pela porta 901
Skype: prof_emiliano
Email: prof.emiliano@gmail.com