Documente Academic
Documente Profesional
Documente Cultură
SISTEMAS OPERACIONAIS II
SERRA
2013
Governo Federal
Ministro de Educao
Aloizio Mercadante
Instituto Federal do Esprito Santo - Ifes
Reitor
Denio Rebello Arantes
Pr-Reitora de Ensino
Araceli Vernica Flores de Nardi Ribeiro
Diretor-geral do Campus Vitria
Ricardo Paiva
Diretora do Centro de Educao a Distncia - Cead
Yvina Pavan Baldo
Coordenadores da Universidade Aberta do Brasil - UAB
Marize Lyra Silva Passos
Jos Mario Costa Junior
Curso de Tecnologia em Anlise e Desenvolvimento de Sistemas
Coordenador de Curso
Jefferson Ribeiro Lima
Designer Instrucional
Geraldo Angelo Vassoler
Professor Formador/Autor
Srgio Nery Simes
Ficha Catalogrfica
DIREITOS RESERVADOS
Instituto Federal do Esprito Santo - Ifes
Av. Rio Branco, 50 Santa Lcia Vitria ES CEP 29.056-255 Telefone: (27) 3227-5564
Crditos de autoria da editorao
Capa: Juliana Cristina da Silva
Projeto grfico: Juliana Cristina da Silva e Nelson Torres
Iconografia: Nelson Torres
Editorao eletrnica: Mares Comunicao
Reviso de texto:
Esther Ortlieb Faria de Almeida
COPYRIGHT proibida a reproduo, mesmo que parcial, por qualquer meio, sem autorizao escrita dos
autores e do detentor dos direitos autorais.
Ol, Aluno(a)!
um prazer t-lo(a) conosco.
O Ifes oferece a voc, em parceria com as Prefeituras e com o Governo
Federal, o curso Tecnologia em Anlise e Desenvolvimento de Sistemas,
na modalidade a distncia. Apesar de este curso ser ofertado a distncia,
esperamos que haja proximidade entre ns, pois, hoje, graas aos recursos
da tecnologia da informao (e-mails, chat, webconferncia, etc.) podemos
manter uma comunicao efetiva.
importante que voc conhea toda a equipe envolvida neste curso:
coordenadores, professores especialistas, tutor, porque, quando precisar de
algum tipo de ajuda, saber a quem recorrer.
Na EaD Educao a Distncia, voc o grande responsvel pelo sucesso
da aprendizagem. Por isso, necessrio que se organize para os estudos
e para a realizao de todas as atividades, nos prazos estabelecidos,
conforme orientao dos professores especialistas e do tutor.
Fique atento s orientaes de estudo que se encontram no Manual do Aluno!
A EaD, pela sua caracterstica de amplitude e pelo uso de tecnologias
modernas, representa uma nova forma de aprender, respeitando, sempre,
o seu tempo.
Desejamos a voc sucesso.
Equipe do Ifes
ICONOGRAFIA
Veja, abaixo, alguns smbolos utilizados neste material para gui-lo em seus estudos.
Fala do Professor.
rEFERNCIAS 121
aNEXOS 123
APRESENTAO
Ol!
Meu nome Srgio Nery Simes, responsvel pela disciplina Sistemas
Operacionais II. Atuo como professor do Ifes h cinco anos e j lecionei
em outras instituies de ensino superior (UFES, FAVI e Salesiano). Sou
graduado em Engenharia de Computao (2000) e Mestre em Informtica
(2004), ambos pela UFES. Minhas reas de interesse so: Processamento de
Alto Desempenho, Arquiteturas Avanadas de Computador, Arquitetura
de Sistemas Operacionais e Sistemas Distribudos.
Com este material, voc conhecer um pouco da aplicao prtica dos
conceitos de Sistemas Operacionais. O Sistema Operacional escolhido
para isso foi o GNU/Linux, principalmente por ser compatvel com o
padro POSIX, o que possibilita aplicar os conhecimentos obtidos nesta
disciplina em vrios sistemas operacionais.
O objetivo deste material prover uma viso geral da utilizao prtica de
sistemas operacionais, comeando pela linha de comando com comandos
bsicos, passando por edio e compilao de programas e chegando
utilizao de processos e threads em C, e entender como o Sistema
Operacional realiza o escalonamento desses processos. Lembre-se, sempre,
de que tudo que aprender aqui poder ser utilizado em diversos outros
sistemas operacionais Unix-like.
Em geral, para ser bem sucedido neste curso importante que o aluno
faa os exerccios e estude regularmente, evitando-se, dessa forma, o
acmulo de contedo.
Assim, desejo a voc bastante sucesso!!!
Prof. Srgio Nery Simes
Ol!
Meu nome Celio Maioli, atuo como professor de educao superior desde
2006; no Ifes, desde 2009. Graduei-me em Engenharia de Computao em
2002 e recebi o ttulo de mestre em Automao em 2007, ambos os cursos
pela Ufes; iniciei os estudos em informtica no curso tcnico em 1990.
Colaborar para o desenvolvimento deste material, que agora voc tem em
mos, foi um grande prazer, pois sempre tive afinidade com sistemas de
cdigo aberto e softwares livres, em geral. Acredito que a possibilidade
Introduo ao GNU/Linux
Prezado(a) aluno(a),
Comearemos o primeiro captulo com alguns conceitos importantes
sobre o Sistema Operacional GNU/Linux. Em seguida, veremos duas
ferramentas para gerenciar graficamente a instalao e remoo de
aplicativos ao sistema: a primeira, mais simples e intuitiva; a segunda,
mais sofisticada e flexvel.
Bom estudo!
Segundo Tanenbaum [5], os primeiros softwares capazes de intermediar
o acesso aos recursos de hardware dos computadores surgiram entre
1955 e 1965. A inteno dos projetistas era criar sistemas que pudessem
(1) ler os programas de usurio, (2) armazen-los sequencialmente em
fitas magnticas, (3) execut-los e (4) armazenar a sada em outras fitas
para impresso. Como os equipamentos eram muito caros, estas tarefas
poderiam ser feitas em mquinas diferentes para diminuir o tempo de
ociosidade dos hardwares de ento. Estes softwares foram os primeiros
Sistemas Operacionais (SOs).
Com a evoluo do hardware dos computadores, os Sistemas
Operacionais agregaram caractersticas como a interface grfica, a
multiprogramao, o multiprocessamento, a habilidade de atribuir
permisses de acesso a mltiplos usurios e o suporte comunicao
em redes. Alm dos sistemas de uso geral, surgiram os sistemas mais
adequados a determinados domnios computacionais como os sistemas
de tempo real, sistemas multimdia e sistemas mveis.
Dentre os Sistemas Operacionais de uso geral, destacam-se o MacOs,
da Apple, o Windows, da Microsoft e o GNU/Linux. Estudaremos este
ltimo pois, alm de ser um sistema cujo uso crescente, ele ainda serve
de base para sistemas mveis, como o Android, da Google, e facilita o
aprendizado de conceitos relacionados a Sistemas Operacionais.
10
Sistemas Operacionais II
11
12
Fonte:
Sistemas Operacionais II
13
14
Fonte:
Sistemas Operacionais II
15
16
Fonte:
Atividades
1. Como podem ser classificados os Sistemas Operacionais?
2. O que so distribuies GNU/Linux?
3. O que kernel?
4. O que um software privativo?
5. Quais so as quatro liberdades do software defendidas pela FSF?
6. O que so repositrios?
7. O que so pacotes?
8. Qual o tipo de pacote associado a distribuies Debian-like?
9. Qual o tipo de pacote associado a distribuies RedHat-like?
10. Utilizando o gerenciador de pacotes Synaptic, instale os
aplicativos/utilitrios abaixo:
a. glibc-doc documentao para a biblioteca de desenvolvimento
b. manpages (manual pages) documentao dos sistemas GNU/
Linux
c. manpages-dev documentao para desenvolvimento nos
sistemas GNU/Linux
d. manpages-posix documentao do padro POSIX
e. manpages-posix-dev documentao para desenvolvimento
no padro POSIX
Sistemas Operacionais II
17
18
Prezado(a) aluno(a),
Terminamos o primeiro captulo. Nossa jornada est apenas
comeando, mas agora voc j sabe como instalar programas e
pacotes no GNU/Linux de duas formas distintas.
A seguir, estudaremos a rvore de diretrios do GNU/Linux e sua
organizao.
Bom estudo!
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
rvore de Diretrios do
GNU/Linux
Prezado(a) aluno(a),
Agora que voc j sabe como instalar aplicativos em seu sistema
utilizando a interface grfica, vamos verificar como funciona a
estrutura de diretrio, ou seja, onde cada componente dos pacotes
pode ser instalado e onde encontram-se elementos fundamentais
para o funcionamento do sistema.
Bom estudo!
20
Fonte:
Sistemas Operacionais II
21
22
Sistemas Operacionais II
Fonte:
23
24
Fonte:
25
Sistemas Operacionais II
Diretrio
Descrio
bin
include
lib
local
sbin
share
Arquivos independentes de
arquitetura como imagens, udios, etc.
Fonte:
26
Diretrio
Descrio resumida
/bin
/boot
/dev
/etc
/home
/lib
/media
/mnt
/opt
/proc
/root
/sbin
/tmp
/usr
/var
Fonte:
Sistemas Operacionais II
27
28
Fonte:
Figura 8: Configuraes avanadas do usurio - aba Avanado.
Fonte:
Sistemas Operacionais II
29
30
Prezado(a) aluno(a),
Chegamos ao final do segundo captulo. Nele foi possvel conhecer os
diretrios do GNU/Linux e suas funes. Espero que esteja gostando!
No prximo captulo, veremos alguns comandos bsicos para
manipulao de arquivos e diretrios.
Bom estudo!
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
Prezado(a) aluno(a),
Aps aprender um pouco sobre a estrutura bsica de diretrios no
GNU/Linux e descobrir que o diretrio pessoal do usurio comum
(onde os arquivos so armazenados) fica em /home/<usuario>,
aprenderemos alguns comandos de modo texto que tornaro a
experincia com o GNU/Linux mais tranquila.
Bom estudo!
O uso adequado de comandos de modo texto importante em qualquer
Sistema Operacional, pois, mesmo aqueles que apostaram fortemente
na interface grfica, mantiveram o terminal para a emisso de comandos
locais ou remotos. Isso ocorre, pois os comandos textuais do mais
flexibilidade e so mais poderosos que a interface grfica e, algumas
vezes, podem ser executados mais rapidamente, pois no exigem
processamento grfico nem memria para armazenar e exibir janelas.
Em sistemas GNU/Linux, o conhecimento dos principais comandos
garante que o usurio poder executar tarefas administrativas em qualquer
distribuio, desde que tenha prerrogativas para isso. bom lembrar que
as aplicaes grficas so, na verdade, interfaces para a edio de arquivos
de configurao e execuo de alguns comandos textuais.
Para usar a linha de comando, basta abrir um terminal, que um sinal de
prontido (prompt) ser exibido, conforme indicado abaixo:
aluno@casa:~$_
O sinal de prontido do Bash possui informaes teis de localizao
para o usurio graas ao seu formato estendido. O exemplo acima indica
que o login do usurio aluno e que ele emite comandos no terminal
da mquina casa, mas o formato geral prompt exibido abaixo:
login do usurio@nome da mquina:diretrio corrente$
ou
login do usurio@nome da mquina:diretrio corrente#
32
Smbolo
Significado
Fonte:
Sistemas Operacionais II
O GNU/Linux case sensitive, ou seja, faz distino entre maisculas e minsculas, por isso tenha ateno ao digitar os comandos
no terminal, pois, via de regra, so escritos com letras minsculas.
H uma grande quantidade de comandos GNU/Linux que so
instalados por padro, porm, vamos tratar dos mais importantes para
a administrao bsica do sistema. Para maiores informaes, a internet
uma boa fonte de pesquisas.
help comando
Exemplo
$help echo
33
34
man pgina
Exemplo
$ man ls
Comando info
O comando info semelhante ao man, porm traz informaes mais
detalhadas sobre cada comando.
Sintaxe
info pgina
Exemplo
$info ls
ls [opes] [arquivo]
$ls -la
Descrio
-l
-h
-a
-d
35
Sistemas Operacionais II
0
1
2
-rw-r--r--
aluno grpaluno
532
2012-03-02
10:57
livros.txt
drw-r--r--
jose
4096
2010-01-02
23:26
apostilas
-rwxr--r--
2012-03-02
10:57
script1
grpaluno
Fonte:
36
Caracter
Significado
Arquivo regular
Diretrio
Link
Dispositivo de bloco
Canal, pipe
Socket
Fonte:
Sistemas Operacionais II
Por outro lado, suponha que no se deseja mais que o arquivo script1
possa ser executado pelo usurio. O comando seria:
chmod u-x script1
Exemplo
2
pwd [opes]
Exemplo
$pwd
37
38
cd [dir]
Exemplo
$cd /home/aluno/Download
Sistemas Operacionais II
aluno@ifes:~/teste$ pwd
/home/aluno/teste
aluno@ifes:~/teste$ cd ..
aluno@ifes:~$ pwd
/home/aluno
Diretrio
Descrio
..
Fonte:
Exemplo
39
40
Exemplo
Sistemas Operacionais II
Comando cp (copy)
O comando cp serve para copiar arquivos e/ou diretrios. Sua sintaxe :
Sintaxe
Exemplo
rm [opes] arq1...
41
42
Descrio
Solicita confirmao antes de remover o arquivo.
Remove diretrios e seus contedos recursivamente.
Ignora arquivos no existentes e nunca pede confirmao
Tome muito cuidado antes de apagar um arquivo para evitar apaglo acidentalmente, pois este comando no envia o arquivo para uma
lixeira, em vez disso ele simplesmente o apaga.
Como vimos anteriormente, a opo -r serve para apagar diretrios, e
ela os apaga mesmo que esses no estejam vazios. Lembre-se de que o
comando rmdir, visto anteriormente, apagava apenas diretrios vazios.
Assim, uma forma de apagar um diretrio (vazio ou no) chamado dir1
seria:
rm -r dir1
Sistemas Operacionais II
Em que arq1 o nome do arquivo vazio a ser criado. Voc pode criar
vrios arquivos ao mesmo tempo. Para isso, basta digitar seus nomes em
sequncia.
O comando do exemplo 1 poder criar os arquivos, desde que eles no
existam, ou atualizar suas datas de modificao, mantendo inalterados
os contedos originais. Este comando mais utilizado na criao de
Shell Scripts.
Observao importante: em sistemas GNU/Linux possvel ter arquivos
cujo nome comea por nmero, desde a sua criao.
Voc pode utilizar esse comando para criar vrios arquivos vazios e
testar os comandos de manipulao de arquivos neles. Experimente
criar um diretrio e popul-lo com o comando touch para, em seguida,
utilizar os comandos de copiar, mover e remover arquivos e diretrios.
Outra observao importante: em ambientes UNIX, para um
arquivo ser oculto deve comear com . (ponto). Experimente
criar alguns arquivos ocultos (por exemplo: .abc, .arq1 e .oculto)
e tente list-los com o comando ls l e com o comando ls la.
Observe a diferena.
Descrio
Descrio
cp teste1/* teste2/
cp /tmp/so*.txt .
43
44
Comando
Descrio
cp /dir2/???? ../
cp A??? ~/
cp ../a??*z
Esse comando realiza uma busca pela palavra IFES em todos os arquivos
txt do diretrio corrente. Caso queira que o comando informe
tambm em que linha est a ocorrncia, digite a opo -n ao final da
linha. Se a expresso possui vrias palavras com espao entre elas, voc
dever digitar a expresso inteira entre aspas, para evitar que somente
a primeira palavra seja entendida como expresso e as demais como
nomes de arquivos.
grep Instituto Federal do Esprito Santo *.txt -n
Sistemas Operacionais II
Descrio
Inverte o resultado da ordenao (decrescente).
-n
-c
Comando head
O comando head exibe o incio as primeiras linhas de um arquivo
ou da entrada padro. Tambm possvel especificar qual a quantidade
de linhas a ser exibida.
Sintaxe
Exemplo
45
46
Sistemas Operacionais II
ps [opcoes]
$ ps x
Descrio
Exibe os processos criados por usurios do sistema.
Mostra processos que no so controlados pelo terminal.
Para obter mais informaes sobre o comando ps, digite man ps.
47
48
Comando top
Este comando mostra os processos ativos ou parados, taxa de utilizao
da CPU, quantidade de memria, tempo de CPU, e detalhes sobre o uso
da memria RAM, swap, disponibilidade para execuo de programas
no sistema, etc.
Os processos so ordenados pelo comando top dos mais pesados
para os mais leves, ou seja, quanto maior a utilizao de CPU
e de memria, maior a chance do processo ser exibido entre os
primeiros. Para execut-lo, basta digitar top.
Ao contrrio do ps que mostra apenas um retrato dos processos em
execuo, o programa top fica continuamente em execuo, exibindo os
processos que esto sendo executados em seu computador e os recursos
utilizados por eles. Se quiser atualizar imediatamente a tela, pressione
a barra de espao. Para obter ajuda, pressione h. Para sair do top,
pressione a tecla q.
Como se pode observar na Figura 9, h um total de 116 processos (tasks)
no sistema, e desses, 2 esto em execuo (running), 114 dormindo
(sleeping), nenhum parado e nenhum processo no estado zumbi.
Observa-se tambm que 46,2% da CPU est ocupado por processos de
usurio (us user) e 8,6% ocupada pelo sistema (sy system). O top
tambm apresenta a quantidade de memria total (514332KB), usada
(468296KB) e livre (46036KB), bem como a quantidade de memria
utilizada para buffers e swap. Neste exemplo, o processo com maior
ocupao o firefox, com 29.3% de utilizao da CPU e 21.3% de
ocupao da memria, seu PID 6315, sua prioridade 20 e o login do
usurio dono do processo sergio. Existem outras informaes que
no destaquei aqui, mas as mais importantes so essas.
Sistemas Operacionais II
Figura 9: Utilizando o comando top para visualizar os processos.
Fonte:
49
50
Note que as teclas de atalho devem ser emitidas com o foco de execuo
no terminal, ou seja, o terminal deve estar completamente visvel para
voc. claro que as instrues dadas aqui servem para qualquer processo
e o editor grfico foi utilizado apenas para fins didticos.
Observe que o processo permanece na memria no ponto em que
parou quando foi interrompido. Voc pode usar outros comandos
ou rodar outros programas enquanto o programa atual est
interrompido.
3.4.2 Enviando sinais com o comando kill
O comando kill, apesar do nome, serve para enviar sinais para
processos. E, dentre esses sinais, existem alguns para finalizar a execuo
de processos.
Sintaxe
Exemplo
$ kill -l
1)SIGHUP
5)SIGTRAP
9)SIGKILL
13)SIGPIPE
17)SIGCHLD
2)SIGINT
6)SIGABRT
10)SIGUSR1
14)SIGALRM
18)SIGCONT
3)SIGQUIT
7)SIGBUS
11)SIGSEGV
15)SIGTERM
19)SIGSTOP
4)SIGILL
8)SIGFPE
12)SIGUSR2
16)SIGSTKFLT
20)SIGTSTP
25)SIGXFSZ
29)SIGIO
35)SIGRTMIN+1
39)SIGRTMIN+5
26)SIGVTALRM
30)SIGPWR
36)SIGRTMIN+2
40)SIGRTMIN+6
27)SIGPROF
31)SIGSYS
37)SIGRTMIN+3
41)SIGRTMIN+7
28)SIGWINCH
34)SIGRTMIN
38)SIGRTMIN+4
42)SIGRTMIN+8
21)SIGTTIN
43)SIGRTMIN+9
22)SIGTTOU
44)SIGRTMIN+10
23)SIGURG
45)SIGRTMIN+11
24)SIGXCPU
46)SIGRTMIN+12
51
Sistemas Operacionais II
Quadro 8: Relao de sinais que podem ser enviados com comando kill. (Parte 2)
47)SIGRTMIN+13
51)SIGRTMAX-13
55)SIGRTMAX-9
48)SIGRTMIN+14
52)SIGRTMAX-12
56)SIGRTMAX-8
63)SIGRTMAX-1
64)SIGRTMAX
59)SIGRTMAX-5
60)SIGRTMAX-4
49)SIGRTMIN+15
53)SIGRTMAX-11
57)SIGRTMAX-7
61)SIGRTMAX-3
50)SIGRTMAX-14
54)SIGRTMAX-10
58)SIGRTMAX-6
62)SIGRTMAX-2
Fonte:
52
PID
%CPU %MEM
VSZ
RSS
TTY
STAT
START
TIME
COMMAND
aluno
16785
0.0
4704
1980
pts/1
Ss
23:21
0:00
bash
0.3
aluno
16808
0.0
0.3
4716
1996
pts/0
Ss
23:22
0:00
bash
aluno
16899
0.0
0.1
300
596
pts/1
S+
23:29
0:00
cat
aluno
16903
0.0
0.1
2744
1008
pts/0
R+
23:29
0:00
ps u
Este comando informa que tenho dois terminais bash abertos (em
pts/0 e pts/1, que so cdigos que identificam a que terminal o processo
pertence) e um processo cat cujo PID de 16899, no meu caso,
mas que, em seu computador, provavelmente ter cdigos diferentes.
Vamos matar este processo com o cdigo -15 ou SIGTERM. Ainda
no segundo terminal, digite o comando a seguir e observe (obviamente,
troque o PID 16899 pelo PID do processo cat apresentado em seu
computador):
$ kill -15
16899
Sistemas Operacionais II
Sintaxe
echo string
Exemplo
Comando printenv
Este comando imprime o valor das variveis de ambiente do sistema.
Variveis de ambiente definem uma srie de parmetros necessrios
ao bom funcionamento de um Sistema Operacional. Por exemplo,
podemos citar as variveis:
1. SHELL que define o nome do software interpretador de comandos
padro para o usurio.
53
54
printenv
Comando expr
Avalia expresses aritmticas.
Sintaxe
expr expresso
Exemplo
expr 1 + 2
Arg1 - arg2
Arg1 \* arg2
Arg1 / arg2
Arg1 % arg2
Comando time
Executa comandos e resume o uso de recursos do sistema. Muito usado
para medir o tempo de execuo de um programa.
Sintaxe
time [comando]
Exemplo
time ls
Sistemas Operacionais II
55
56
Antes de us-lo pela primeira vez ser preciso criar uma base de dados
com o comando
$ apt-file update
Ento, pode-se pesquisar em qual pacote determinado arquivo est
inserido com o comando
$ apt-file search <arquivo>
Mesmo que este comando retorne mais de um pacote, a lista j ajuda
bastante na instalao das dependncias.
Sistemas Operacionais II
57
58
Sistemas Operacionais II
59
60
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
Configurao de
interfaces de rede e
clientes DNS
Prezado(a) aluno(a),
As operaes realizadas at agora foram, predominantemente, locais,
ou seja, fora de uma rede de dados, mas a maioria das atividades
que so feitas com computadores necessitam do compartilhamento
de informaes. Agora que conhecemos a estrutura padro de
diretrios e alguns comandos importantes, precisamos estudar como
se configuram as principais funes de uma rede. Para isso, usaremos
o contedo acumulado e, certamente, o GNU/Linux ser menos
misterioso para voc daqui para frente.
Bom estudo!
As distribuies GNU/Linux costumam ser instaladas j com o acesso
completo rede, porm, quando surge algum problema de conexo,
fundamental saber quais so os principais arquivos que devem ser
checados, quais so as principais configuraes e como testar se as
alteraes surtiram efeito.
Para isso, discutiremos ao longo do captulo alguns conceitos sobre
redes de computadores pertinentes a sistemas GNU/Linux, porm no
objetivo defini-los detalhadamente.
Como as configuraes de rede podem alterar o comportamento do
computador, necessrio possuir credenciais de administrador para
editar a maioria dos arquivos e emitir a maioria dos comandos.
62
Interface
Nome
Auto retorno
lo
Ethernet
Wi-fi
Token ring
ppp
Fonte:
ifconfig [interface]
ifconfig interface [opes | endereos]
63
Sistemas Operacionais II
Quadro 10 - Exemplo de retorno do comando ifconfig.
eth0
lo
wlan0
Fonte:
Comando
Ao
ifup <interface>
ifdown <interface>
Fonte:
64
Sistemas Operacionais II
65
66
Fonte:
Sistemas Operacionais II
67
68
Comando ping
Use o comando ping para verificar se Host1 e Host2 esto se comunicando
adequadamente, mas lembre-se de que Host2 pode ser uma mquina da
sua rede local, uma mquina localizada na internet ou uma mquina
que tenha apenas o IP conhecido. Nestas trs situaes, pode-se usar
a sintaxe do comando com <nome do host>, <fully qualified domain
name fqdn> ou <IP>, respectivamente. A partir do Host1, digite:
Sintaxe
Exemplo 1
$ping 192.168.10.2
Exemplo 2
$ping www.ifes.edu.br
Exemplo 3
$ping laptop_casa
tracepath <destino>
Exemplo
$tracepath www.ifes.edu.br
69
Sistemas Operacionais II
1: 192.168.1.1 (192.168.1.1)
1: no reply
2: 192.168.1.1 (192.168.1.1)
17.170ms
3: 200.217.72.64 (200.217.72.64)
50.764ms
4: 200.199.62.53 (200.199.62.53)
46.166ms asymm 5
5: 200.223.50.13 (200.223.50.13)
88.254ms asymm 6
70.439ms
8: as1916.rj.ptt.br (200.219.138.101)
63.177ms asymm 9
9: rj-es-10g-oi.bkb.rnp.br (200.143.252.86)
78.219ms
6.929ms asymm 11
83.634ms asymm 12
Fonte:
Comando dhclient
Permite que a mquina cliente pea ao servidor DHCP uma concesso
IP. A concesso IP um conjunto de atributos que sero oferecidos pelo
servidor que incluem IP e mscara de rede, endereos de servidores
DNS, gateway padro, entre outros.
Esta concesso permanecer com o cliente por um intervalo de tempo prdeterminado no servidor, chamado perodo de concesso. Este aplicativo
possui um arquivo de configurao em /etc/dhcp3/dhclient.conf.
Atividades
1. Quais so os tipos de interface que voc possui em sua mquina?
2. Descubra o(s) servidores DNS configurados no Host1 (dica:
liste o contedo do arquivo /etc/resolv.conf)
3. Altere o IP de Host2 para 172.16.96.2 e teste a conectividade
entre eles usando o comando ping. O que ocorre? Por qu?
4. Altere a configurao da interface esttica para que ela receba o
IP a partir de um DHCP. O que ocorre? Por qu?
5. O que ocorre se o servidor DNS preferencial responder
negativamente a uma consulta?
6. O que ocorre se o servidor DNS no responder a uma consulta?
7. Envie 10 mensagens ICMP atravs do comando ping a um site
qualquer e calcule o tempo mdio entre envio e recepo do
70
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
Edio e Compilao de
Programas no GNU/Linux
Prezado(a) aluno(a),
Neste captulo voc aprender a editar e compilar programas em C,
que manipulem processos e threads a criar programas para configurar
rotinas de tratamento de sinais na linguagem C e a manipular
entradas e sadas de dados atravs de redirecionadores e pipes.
importante destacar que este captulo no ensina programao
bsica ou lgica de programao, e sim como utilizar as ferramentas
fornecidas pelo Sistema Operacional para editar e compilar seus
programas em C.
Assumo que voc j possui os conhecimentos necessrios de
programao da linguagem C como suas estruturas bsicas e
comandos obtidos nas disciplinas anteriores de programao.
Bom estudo!
A programao considerada por muitos mais uma arte que uma
cincia, pois exige dedicao e talento para que bons algoritmos
surjam e tornem-se programas eficientes e eficazes. Ao longo dos anos,
vrias tcnicas de programao foram desenvolvidas para aproximar
o desenvolvimento de software de uma cincia aplicvel, tambm, ao
mundo corporativo, e uma das tcnicas foi a programao distribuda.
Este captulo trata de fundamentos do tratamento de processos e threads
em C e mostra como processos podem comunicar-se por meio de pipes,
redirecionamentos e sinais. Nestes aspectos os sistemas GNU/Linux
oferecem ao programador uma vasta gama de ferramentas de edio,
compilao e debugao (ferramenta para a depurao de erros).
Antes de comearmos os trabalhos, verifique se o seu sistema possui
os pacotes gcc, libc e gedit instalados com o Gerenciador de
Pacotes Synaptic. O primeiro um compilador C bastante usado
profissionalmente e muito eficiente. O segundo a biblioteca de funes
que sero utilizadas pelos nossos programas e o terceiro o editor onde
o cdigo ser escrito.
Programadores mais experientes preferem editores em modo texto como
o vi ou emacs, e programas que automatizam a compilao como
o make, porm como este material abrange sistemas GNU/Linux no
nvel bsico, ser usado o editor gedit, por ser de utilizao mais simples.
72
Fonte:
Sistemas Operacionais II
Figura 12 -Configurando as preferncias do gedit - aba viso
Fonte:
73
74
Fonte:
Fonte:
Sistemas Operacionais II
75
76
Descrio
-o file
-c
-Wall
Fonte:
Sistemas Operacionais II
77
78
Sistemas Operacionais II
$ ./prog3_acessoilegal
vetor[0] = 0
vetor[1] = 1
vetor[2] = 2
vetor[3] = 3
vetor[4] = 4
vetor[5] = 5
vetor[6] = 6
vetor[7] = 7
vetor[8] = 8
vetor[9] = 9
Falha de segmentao
Fonte: Falta fonte do Quadro 18.
79
80
vetor comea do zero) esse acesso estar fora do seu segmento, por isso
ser gerada a exceo.
Lembre-se de que o sistema verifica apenas se voc no est tentando
acessar uma rea de memria fora de seu segmento. Dentro de seus
segmentos, no realizada nenhuma verificao.
Em outras palavras, se voc tivesse outras variveis declaradas aps
esta, provvel que o programa sobrescrevesse essas variveis antes
de ser gerada uma exceo. Ou seja, voc responsvel por acessar
as variveis dentro de seu prprio segmento e, se estiver cometendo
erros durante o acesso, o sistema no ir inform-lo.
Agora, vejamos um outro exemplo de exceo. Digite o programa abaixo
e salve-o com o nome prog4_estouropilha.c.
Sistemas Operacionais II
81
82
Sistemas Operacionais II
83
84
Sistemas Operacionais II
85
86
Prezado(a) aluno(a),
Chegamos ao fim do quinto captulo. Nele foi visto o processo de
construo (edio e compilao) de programas em C no GNU/
Linux. Para um bom aproveitamento, talvez tenha sido necessrio
revisar seus conhecimentos em programao, o que vai solidificar
ainda mais seu aprendizado.
No prximo captulo, estudaremos como manipular processos em
um ambiente GNU/Linux.
Bom estudo!
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
Automatizao de tarefas
administrativas
1.
2.
3.
4.
#!/bin/bash
#meu primeiro shell script
clear
echo Ol mundo
88
Agora tente executar novamente seu primeiro Shell Script. Conforme dito
acima, o esperado que a tela seja apagada e a mensagem seja escrita.
O script do Quadro 20 entra no diretrio /tmp (cd /tmp), procura
(find) pelos arquivos comuns (parmetro -type f) do diretrio corrente
(parmetro .), cuja ltima modificao tenha sido feita h mais de 30 dias
(parmetro -mtime +30) e os deleta (parmetro -delete). Como a deleo
irreversvel, preste ateno para no apagar contedo til do seu disco.
Quadro 20 - Exemplo 2 - Script que procura arquivos cuja ltima modificao tenha
sido a mais de 30 dias
1.
2.
3.
4.
#!/bin/bash
#segundo script
cd /tmp
find . -type f -mtime +30 -delete
Sistemas Operacionais II
Quadro 21 - Exemplo 3 - uso de variveis em Shell Scripts
#!/bin/bash
# terceiro script: Agora com o uso de variveis
mensagem=Ol Mundo!
clear
echo $mensagem
Fonte: Falta fonte do Quadro 21.
#!/bin/bash
#quarto script: aceitando variveis como entrada
do usurio
echo Eu, $1, estudo no $2.
Fonte: Falta fonte do Quadro 22.
Significado
S#
$*
$@
Fonte:
89
90
#!/bin/bash
touch teste1.teste
if [ -e teste1.teste ]
then
echo O arquivo foi criado com sucesso
else
echo O arquivo no foi criado
fi
#!/bin/bash
# Testa o nmero de parmetros digitados pelo
usurio e efetua a soma
if [ $# -ne 2 ]
then
echo Nmero invlido de parmetros
else
echo Os parmetros digitados foram $1 e $2
echo A soma de $1 e $2 igual a`expr $1 + $2`
fi
Fonte:
Sistemas Operacionais II
Operador
-eq
-ne
-gt
-lt
-o
-a
!
-d
-e
-z
-f
-r
-w
-x
Significado
Exemplo de utilizao
igual
n1 -eq n2
diferente
n1 -ne n2
maior
n1 -gt n2
menor
n1 -lt n2
ou
N1 -o n2
and
N1 -a n2
not
! n1
-d arquivo
Se o arquivo existir
-e arquivo
Se estiver vazio
-z arquivo
Se o arquivo comum
-f arquivo
-r arquivo
-w arquivo
-x arquivo
Fonte:
91
92
Letras
Definio
mm
HH
DD
MM
Minutos
Faixa de
valores
(0 a 59)
Hora
(0 a 23)
Dia do ms
(1 a 31)
Ms
(1 a 12)
SS
Dia da semana
(0 a 6, sendo 0
domingo)
script
Fonte:
30 21 31 7 2
script1
00 3,4,5 * * *
script2
00 23 1-15 * *
script3
Funo
-e
-l
-r
Remove os agendamentos.
-i
Sistemas Operacionais II
Observe que, ao usar o comando crontab -e pela primeira vez, serlhe- perguntado qual editor voc prefere. Preste bem ateno e escolha
apenas aquele que voc conhece.
Aps agendar a tarefa, reinicie o servio com um dos comandos abaixo;
/etc/init.d/cron restart
ou
service cron restart
93
94
Prezado(a) aluno(a),
Chegamos ao fim do quarto captulo. Nele foi visto o processo de
construo (edio e compilao) de programas em C no GNU/
Linux. Para um bom aproveitamento, talvez tenha sido necessrio
revisar seus conhecimentos em programao, o que vai solidificar
ainda mais seu aprendizado.
No prximo captulo, estudaremos como manipular processos em
um ambiente GNU/Linux.
Bom estudo!
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________
Manipulao de Processos
em C no GNU/Linux
Prezado(a) aluno(a),
neste captulo voc aprender como fazer programas que manipulam
processos no GNU/Linux. Comearemos por algumas revises
sobre o conceito de processos, veremos como um processo pode
descobrir seus prprios PID e GID, aprenderemos como criar um
novo processo utilizando a primitiva fork e, finalmente, teceremos
algumas consideraes relacionadas a esses conceitos. Procure fazer
todos os programas e test-los mais de uma vez e, se possvel, fazer
algumas alteraes e ver como eles se comportam.
Bom estudo!
A grande vantagem dos sistemas multiprogramveis que neles os
processos so executados concorrentemente, compartilhando, entre
outros recursos, a utilizao do processador, da memria principal
e dos dispositivos de E/S. Alm disso, em sistemas com mltiplos
processadores no s existe a concorrncia de processos pelo uso do
processador, como tambm a execuo simultnea de processos nos
diferentes processadores.
Recorde que processo um programa em execuo juntamente com
seu contexto e suas reas de dados, cdigo e pilha.
96
Sistemas Operacionais II
pid_t getppid()
Fonte:
97
98
TIME CMD
00:00:00 bash
00:00:00 ps
Sistemas Operacionais II
Fonte:
O processo criado (filho) uma cpia exata do processo pai, excetuandose informaes de identificao como PID e PPID (parent PID). Alm
disso, o valor retornado pela funo fork() 0 (zero) para o processo
filho e o PID do filho para o processo pai. Por meio desse valor de
retorno, possvel diferenciar se o processo o pai ou o filho e selecionar
cdigos diferentes para eles executarem.
Cada processo tem o seu prprio espao de endereamento, com
cpias de todas as variveis, que so independentes em relao s
variveis de outro processo. Aps a criao, ambos os processos
(pai e filho) executam a instruo seguinte primitiva fork.
A sincronizao entre os processos pai e filho feita com a primitiva
wait(), que bloqueia o processo pai, que a executa, at que um processo
filho termine. Em seguida, a primitiva wait responsvel por desalocar
os recursos alocados para o filho, como rea de dados, cdigo, pilha e
PCB. A sinopse da primitiva wait dada a seguir:
#include <sys/types.h>
#include <sys/wait.h>
pid_t wait(int *status);
99
100
Sistemas Operacionais II
O filho termina, mas o pai no. Devido ao loop infinito nas linhas 19, o
pai nunca executar o wait da linha 22, que liberaria os recursos alocados
pelo filho. Assim, o processo filho chamado de zumbi, pois j terminou,
mas continua ocupando recursos do sistema. Para confirmar isso, abra
um novo terminal e digite o comando em negrito (ps u) a seguir:
101
102
$ ps u
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME
COMMAND
aluno 7937 0.0 0.3 4724 2048 pts/0 Ss+ 03:48 0:00
bash
aluno 9640 66.2 0.0 1628 376 pts/0 R 05:18 0:15 ./
zumbi
aluno 9641 0.0 0.0 0 0 pts/0 Z 05:18 0:00 [zum]
<defunct>
aluno 9647 0.0 0.3 4716 1996 pts/1 Rs 05:18 0:00
bash
aluno 9650 0.0 0.1 2744 1004 pts/1 R+ 05:18 0:00
ps u
Fonte:
Sistemas Operacionais II
encerrado.
Agora, vejamos outro exemplo, no qual o processo pai finalizado, mas
o filho continua sendo executado. Digite o programa que segue e salve-o
com o nome orfao.c.
TTY
pts/0
pts/0
pts/0
TIME
00:00:00
00:02:52
00:00:00
CMD
bash
orfao
ps
103
104
Prezado(a) aluno(a),
Espero que os ensinamentos desse captulo tenham sido aprendidos
de maneira clara, pois formam a base para o prximo e derradeiro
captulo de nossa jornada. Nele, iremos aprender conceitos avanados
de programao e manipulao de threads no GNU/Linux.
Bom estudo!
Manipulao de Threads em
C no GNU/Linux
Prezado(a) aluno(a),
Neste captulo, voc aprender como fazer programas que manipulam
threads no GNU/Linux. Comearemos por algumas revises sobre o
conceito de threads, nas quais veremos que a principal caracterstica
das threads que elas compartilham a rea de dados e cdigo.
Em seguida, veremos como criar threads na linguagem C usando
o padro POSIX e veremos alguns exemplos de programao de
threads. Ao final do captulo, veremos os problemas que podem
ser causados quando compartilhamos recursos. Aconselho que
voc faa todos os programas deste captulo para obter um melhor
entendimento das informaes aqui apresentadas.
Bom estudo!
Vimos na disciplina Sistemas Operacionais I que, a partir do conceito
de mltiplas threads (multithread), foi possvel projetar e implementar
aplicaes concorrentes de forma eficiente, pois um processo pode ter
partes diferentes do seu cdigo sendo executadas em paralelo com um
overhead (sobrecarga) menor que ao utilizar mltiplos processos.
Como as threads de um mesmo processo compartilham o mesmo
espao de endereamento, a comunicao entre threads no envolve
mecanismos lentos de intercomunicao entre processos, aumentando,
consequentemente, o desempenho da aplicao.
O desenvolvimento de programas que exploram os benefcios da
programao multithread no simples. A presena do paralelismo
introduz um novo conjunto de problemas, como a comunicao
e sincronizao de threads. Existem diferentes modelos para a
implementao de threads em um Sistema Operacional, em que
desempenho, flexibilidade e custo devem ser avaliados.
Vimos tambm que um programa uma sequncia de instrues,
composta por desvios, repeties e chamadas a procedimentos e
funes. Quando um programa est sendo executado, h um registrador
chamado PC (Program Counter) ou IP (Instruction Pointer) que
aponta para o endereo da prxima instruo a ser executada. Ao longo
106
Sistemas Operacionais II
107
108
Sistemas Operacionais II
em que:
identificador
atributo
funcao
argumentos
109
110
em que:
thread
valor
Sistemas Operacionais II
111
112
Sistemas Operacionais II
113
114
Por razes bvias, no coloquei aqui as mais de 200 mil linhas de sada,
apenas um pequeno trecho para voc ter uma ideia. Esse programa
cria duas threads que ficam imprimindo sequncias diferentes na tela.
Observe que a sada da funo (funcao1) usada pela primeira thread
(linha 9) exibe uma sequncia de 1s precedido de uma tabulao. J a sada
da funo usada pela segunda thread (linha 16) imprime um sequncia
de 2s precedido de duas tabulaes para facilitar a visualizao.
possvel observar o escalonamento das sadas alternadamente.
8.1.4. Utilizao de threads para aumentar o
desempenho
As threads tambm podem ser utilizadas para aumentar o desempenho
de programas. Por exemplo: suponha que voc tenha um computador
com dois cores (ncleos) de processamento e queira us-lo para
calcular uma integral. (Calma, no precisa ficar com receio, no vou
ensinar clculo aqui, Ok?! Trata-se apenas de mostrar como as threads
podem ser usadas para aumentar o desempenho!). Na prtica, para
o computador, uma integral se resume apenas a uma sequncia de
somas. Assim, se voc fizer metade destas somas em um ncleo e a
outra metade em outro provavelmente o clculo ser feito na metade do
tempo aproximadamente.
Como exemplo, vou apresentar um programa que calcula o valor de PI
atravs de um integral com uma nica thread. Em seguida, apresentarei
o mesmo programa, porm utilizando duas threads. Espero que,
Sistemas Operacionais II
115
116
Agora, vamos criar o programa que utiliza as duas threads para realizar
o clculo. Para isso, as duas threads criadas devem executar a rotina de
clculo da rea em duas partes diferentes e, ao final, devemos juntar os
resultados de cada thread. Digite o programa que segue e, em seguida,
salve-o com o nome integral_thread.c.
#include
#include
#include
#include
<stdlib.h>
<stdio.h>
<pthread.h>
<unistd.h>
Sistemas Operacionais II
}
void *funcao2()
{
double area2 = CalculaArea (0.5, 1.0,
25000000);
integral += area2; /* pode haver condicao de
corrida aqui */
return NULL;
}
int main (int argc, char **argv)
{
pthread_t thread1, thread2;
pthread_create(&thread1, NULL, funcao1, NULL);
pthread_create(&thread2, NULL, funcao2, NULL);
pthread_join(thread1, NULL);
pthread_join(thread2, NULL);
printf (A rea da curva eh:\n%.12lf\n,
integral);
return 0;
}
Compile o programa:
$ gcc integral_thread.c -o integral_thread -Wall
-lpthread
117
118
Sistemas Operacionais II
925443770
801939410
836119155
949457405
823170301
119
120
Prezado(a) aluno(a),
Chegamos ao fim de nossa jornada. Espero que tenha sido proveitosa
e til.
A semente foi lanada. O GNU/Linux um sistema livre, aberto,
pronto para ser explorado. Agora, voc j tem as ferramentas
necessrias para essa explorao.
Mantenha a mente aberta e procure sempre estar preparado.
Sucesso sempre!
122
124