Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux...

78
Introduc ¸˜ ao ao Sistema Operativo Unix e Desenvolvimento de Programas em C Fernando Mira da Silva [email protected] Departamento de Engenharia Electrot´ ecnica Instituto Superior T´ ecnico Setembro de 2000

Transcript of Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux...

Page 1: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

Introducao ao Sistema Operativo Unixe Desenvolvimento de Programas em C

Fernando Mira da Silva

[email protected]

Departamento de Engenharia Electrotecnica

Instituto Superior Tecnico

Setembro de 2000

Page 2: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...
Page 3: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

Indice

1 Introducao 1

2 Unix, GNU/Linux e outros acronimos 3

2.1 Introducao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

2.2 Sistemas operativos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

2.3 Unix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

2.3.1 A genese do Unix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

2.3.2 Divulgacao do Unix . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

2.4 Computadores pessoais e estacoes de trabalho . . . . . . . . . . . . . . . . . . . 7

2.4.1 Microprocessadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

2.4.2 Microcomputadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

2.4.3 IBM-PC e compatıveis . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

2.4.4 Interfaces graficas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

2.4.5 Estacoes de trabalho . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

2.5 Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

2.6 Copia e distribuicao de software: aspectos legais e acronimos importantes . . . . 19

2.6.1 Introducao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

2.6.2 Codigo binario e codigo fonte . . . . . . . . . . . . . . . . . . . . . . . 19

2.6.3 Software proprietario . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

Page 4: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

II INDICE

2.6.4 Software livre, domınio publico e GPL . . . . . . . . . . . . . . . . . . 21

2.6.5 Freeware e shareware . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

2.7 O projecto GNU e o sistema GNU/Linux . . . . . . . . . . . . . . . . . . . . . . 23

3 Ambiente de trabalho em Unix 25

3.1 Introducao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

3.2 Acesso ao sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

3.2.1 Conta de utilizador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

3.2.2 Login e Shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

3.3 O sistema de janelas X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

3.4 Modo interactivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

3.4.1 Hierarquia de directorios . . . . . . . . . . . . . . . . . . . . . . . . . . 28

3.4.2 Pathnames Absolutos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

3.4.3 Pathnames relativos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

3.5 Comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

3.6 Dispositivos de entrada e saıda . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

3.7 Redireccionamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

3.8 Pipes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

4 Desenvolvimento de programas 37

4.1 Introducao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

4.2 Assembly e Linguagens de alto nıvel . . . . . . . . . . . . . . . . . . . . . . . . 37

4.3 Ciclo de desenvolvimento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

4.3.1 Compilacao e “linkagem” . . . . . . . . . . . . . . . . . . . . . . . . . 39

4.3.2 Erros sintaticos e semanticos . . . . . . . . . . . . . . . . . . . . . . . . 42

4.3.3 Depuracao: gdb e ddd . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

Page 5: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

INDICE III

4.4 Compilacao em modulos separados . . . . . . . . . . . . . . . . . . . . . . . . . 50

4.5 Bibliotecas estaticas e dinamicas . . . . . . . . . . . . . . . . . . . . . . . . . . 52

4.6 O utilitario make . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

5 Editores de texto 57

5.1 Introducao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

5.2 O editor emacs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

5.2.1 Introducao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

5.2.2 Modos de edicao e de comando . . . . . . . . . . . . . . . . . . . . . . 58

5.2.3 Leitura de ficheiros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

5.2.4 Formatacao automatica . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

5.2.5 Compilacao e localizacao de erros . . . . . . . . . . . . . . . . . . . . . 59

5.3 O editor vi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

5.3.1 Introducao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

5.3.2 Modo de edicao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

5.3.3 Movimentacao do cursor . . . . . . . . . . . . . . . . . . . . . . . . . . 60

5.3.4 Inserir texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

5.3.5 Apagar texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

5.3.6 Mudar texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

5.3.7 Procurar texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

5.3.8 Substituir texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

5.3.9 Cortar, copiar e mover texto . . . . . . . . . . . . . . . . . . . . . . . . 63

5.3.10 Outros comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

5.3.11 Saır . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

5.4 Os editores pico e joe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

Page 6: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

IV INDICE

6 Textos e manuais complementares 67

6.1 Sistema Operativo Unix e Linux . . . . . . . . . . . . . . . . . . . . . . . . . . 68

6.2 Ambiente de trabalho . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

6.3 Programacao e depuracao de programas em C . . . . . . . . . . . . . . . . . . . 69

Bibliografia 71

Page 7: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

Capıtulo 1

Introducao

Pretende-se com este texto introduzir alguns topicos que facilitem um primeiro contacto com osistema operativo Unix e ferramentas essenciais ao desenvolvivemento, teste e depuracao (debug)de programas em C. Pelo seu caracter introdutorio e sumario, este texto nao deve ser confundidocom um manual do sistema operativo Unix: para este efeito, remete-se o leitor para o capıtulo 6,onde sao listadas diversas referencias bibliograficas que aprofundam os topicos aqui abordados.

Para alem de funcionar como um manual introdutorio ao Unix, sao referidos neste texto aspec-tos historicos e funcionais deste sistema operativo que se espera que contribuam para uma melhorcompreensao do posicionamento do Unix no panorama informatico actual e, complementarmente,para a introducao de terminologia frequentemente utilizada informatica.

No capıtulo 2, apresenta-se uma breve historia do sistemas operativo Unix, articulando o seudesenvolvimento com diversos marcos relevantes da historia da informatica das ultimas decadas.No capıtulo 3 faz-se uma introducao ao ambiente de trabalho em Unix, descrevendo os mecanis-mos essenciais do sistema de ficheiros, execucao de comandos e redireccionamento. No capıtulo 4introduz-se a nocao de ciclo de desenvolvimento de programas em C e introduzem-se os comandosde compilacao em sistemas GNU/Linux. Sao ainda introduzidos os utilitarios gdb, ddd e make.No capıtulo 5 faz-se uma breve introducao de alguns dos editores de texto disponıveis em Unix.Finalmente, no capıtulo 6, sao listados textos e bibliografia que aprofundam cada um dos temasabordados.

Page 8: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...
Page 9: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

Capıtulo 2

Unix, GNU/Linux e outros acronimos

2.1 Introducao

Uma introducao ao Unix nao implica necessariamente conhecer todos os detalhes da historiadeste sistema operativo. Mas alguns destes detalhes, alem de informativos, sao importantes paracompreender o posicionamento actual deste sistema operativo. Assim, apresenta-se neste capıtulouma breve sıntese da evolucao do Unix e a sua articulacao com outros marcos relevantes da historiada informatica nas ultimas decadas. Esta exposicao permitira tambem introduzir, de uma formaprogressiva, conceitos, terminologia e acronimos frequentes em informatica mas cujo significadoe, muitas vezes, mal conhecido.

2.2 Sistemas operativos

Nao e facil definir sistema operativo de uma forma rigorosa e abrangente. Numa primeiraaproximacao, o sistema operativo de um computador pode ser definidido como o conjunto deprogramas responsaveis pela gestao dos dispositivos e recursos fısicos da maquina (hardware) epelo acesso das aplicacoes a esses recursos.

Considere-se, por exemplo, um programa de processamento de texto desenvolvido para osistema operativo Windows. Este programa funciona independentemente das caracterısticas es-pecıficas da maquina em que e executado: em particular, nao precisa de conhecer a memoriadisponıvel, o tipo especıfico dos discos utilizados ou o tipo e marca da placa grafica ligada ao mo-nitor. Com efeito, sempre que e preciso, por exemplo, guardar um ficheiro em disco, o processadorde texto limita-se a apresentar este pedido ao sistema operativo, o qual e responsavel por o tradu-zir na sequencia de comandos apropriada para o tipo de discos instalados. Complementarmente,e o sistema operativo que permite a execucao simultanea de varios programas (por exemplo, um

Page 10: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

4 UNIX, GNU/LINUX E OUTROS ACRONIMOS

processador de texto e uma folha de calculo), dividindo o tempo de processador disponıvel pelasduas aplicacoes.

Durante os ultimos 50 anos, a evolucao dos computadores e da informatica foi acompanhadapelo aperfeicoamento de diversas geracoes de sistemas operativos. Pela sua maior divulgacao, oMS-DOS, o Windows, o Unix e o Linux (a versao livre1 do Unix) sao provavelmente os nomesmais conhecidos de entre os muitos sistemas operativos existentes.

2.3 Unix

2.3.1 A genese do Unix

“...the number of Unix installations has grown to 10, with more expected...”

–Dennis Ritchie e Ken Thompson, autores do Unix, em Junho de 1972.

O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos 60 nos BellLabs da AT&T para desenvolver um sistema de operativo de tempo partilhado. Numa epocaem que os computadores eram maquinas de grande porte e extremamente caras, era da maiorimportancia desenvolver sistemas operativos que permitissem a diversos utilizadores acederemsimultaneamente a um mesmo computador e, desta forma, rentabilizar os elevados custos deexploracao.

Em 1965, os Bell Labs iniciaram um projecto conjunto com a General Electric e o MIT paradesenvolver um sistema operativo de tempo partilhado designado Multics. No entanto, pouco de-pois do seu inıcio, os Bell Labs consideraram que o projecto estava mal encaminhado e decidiramabandonar o consorcio. Dada a necessidade de ser encontrada uma alternativa ao Multics parauso interno, Kenneth Thompson, um dos investigadores dos Bell Labs, iniciou um projecto dedesenvolvimento proprio que conduziu, em 1969, a primeira versao do sistema operativo Unix.

Um das inovacoes do sistema Unix relativamente a outros sistemas operativos da epoca e oconceito de que muitos dos comandos associados a gestao da maquina devem ser executados porpequenos programas independentes, funcionando de forma cooperativa. Esta estrategia permitiusimplificar significativamente as tarefas associadas ao nucleo2 do sistema operativo, aumentandosimultaneamente a sua robustez e modularidade.

Uma outra caracterıstica inovadora do Unix e a sua portabilidade. Ate a decada de 70, a mai-oria dos sistemas operativos dependiam fortemente do hardware para que eram desenvolvidos. De

1Na seccao 2.6 discute-se o sentido que “livre” deve ter neste contexto2O bloco central do sistema operativo, responsavel pela gestao do tempo de processador e partilha de recursos

disponıveis, designado por kernel na terminologia anglo-saxonica.

Page 11: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

UNIX 5

um modo geral, cada fabricante desenvolvia um sistema operativo especıfico para os seus compu-tador, o qual era geralmente escrito em assembler (o codigo binario entendido pelo processador).Frequentemente, uma alteracao ou evolucao do processador implicava a re-escrita ou a revisaodo codigo de todo o sistema operativo. Ao contrario desta tendencia geral, nao sendo os BellLabs fabricantes de computadores, o Unix foi desenvolvido com base numa arquitectura de hard-ware muito generica, nao se baseando em hipoteses restritivas relativemnte ao tipo de processadorutilizado.

Assim, embora inicialmente escrito em assembler para um mini-computador PDP-11/20 daDigital, o desenvolvimento da linguagem de programacao C por Dennis Ritchie (Kernighan eRitchie, 1978) em 1973 permitiu a re-escrita de mais 90% do codigo do sistema operativo nestalinguagem de alto nıvel. A partir deste momento, a adaptacao do sistema operativo a novos pro-cessadores e substancialmente simplificada: em vez da re-escrita completa do codigo binario dosprogramas que formam o sistema operativo, e suficiente re-escrever o compilador (o programaresponsavel pela traducao da linguagem C para o codigo binario do processador), tarefa esta subs-tancialmente mais simples. Apos este passo, a adaptacao do sistema operativo ao novo processadorapenas exige a compilacao (traducao automatica) dos programas escritos em C.

Foram sobretudo as caracterısticas de modularidade e portabilidade, aliadas uma boaconcepcao de raız, que permitiram a evolucao contınua do Unix ao longo de trinta anos e a suapermanente adaptacao a multiplas geracoes de hardware e dispositivos perifericos. Neste sen-tido, o Unix e um caso unico de longevidade na area dos sistemas operativos mantendo, aindahoje, muitas caracterısticas avancadas relativamente a a sistemas operativos mais recentes. Poroutro lado, em consequencia da sua longevidade, e um sistema que ganhou uma fiabilidade ele-vada, sendo habitual um servidor de Unix estar operacional durante varios meses seguidos, semqualquer interrupcao ou falha do sistema.

2.3.2 Divulgacao do Unix

Ate 1975, o Unix estave confinado internamente aos Bell Labs e so a partir desta data edisponibilizado comercialmente para o exterior. Tendo sido inicialmente concebido para utilizacaoem ambientes relativamente abertos, onde a confidencialidade dos dados nao era crıtica, o sistemaUnix foi inicialmente adoptado, sobretudo, por universidades e instituicoes de investigacao. O seubaixo custo e o facto de ser disponibilizado com o codigo fonte (ou seja, o programa em formato detexto) era especialmente apelativo para as instituicoes de ensino, ja que permitia que os estudantese investigadores compreendessem e analizassem o seu modo de funcionamento e, adicionalmente,contribuissem com extensoes e modificacoes da versao original. Uma das contribuicoes maisimportantes durante a fase inicial do Unix foi o desenvolvimento, pela Universidade de Berkeley,

Page 12: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

6 UNIX, GNU/LINUX E OUTROS ACRONIMOS

de uma versao para maquinas Vax que incluia suporte para memoria virtual3.

Durante o final da decada de 70 e a primeira metade da decada de 80, a evolucao do Unixoriginou multiplas variantes. De entre estas, duas tiveram um impacto significativo na evolucaoseguinte do sistema operativo.

A primeira, resultante da investigacao e densenvolvimento dentro dos proprios laboratoriosBell, inclui ja em 1979 (Unix 7a edicao) um mecanismo eficiente de comunicacao entre computa-dores. Este mecanismo, designado UUCP, (Unix to Unix CoPy), sera amplamente utilizado ate aoaparecimento do protocolo TCP/IP (o principal protcolo actualmente utilizado na Internet). Estaevolucao da origem em 1983 ao designado Unix Sistema V. Em 1991 e formado o USL (UnixSystem Laboratory, uma companhia maioritariamente detida pela AT&T), que passa a deter osdireitos sobre o Unix. Em 1993 a USL e adquirida pela Novell, a qual, por sua vez, passara maistarde os direitos sobre a marca Unix para o consorcio X/Open.

Paralelamente, a Universidade de Berkeley desenvolve uma evolucao do sistema Unix querecebe a designacao BSD que inclui, como principal inovacao, um eficaz sistema de comunicacaoentre processos (programas), baseado na nocao de sockets. Este modelo e suficientemente genericopara permitir nao apenas a comunicacao entre programas residentes no mesmo computador, comotambem a comunicacao entre programas executados em computadores diferentes e ligados peloprotocolo TCP/IP. Este mecanismo, que vira mais tarde a ser adoptado tambem por outros sistemasoperativos, e ainda hoje a base da maioria das comunicacoes estabelecidas na internet, como sejaa ligacao entre um browser (como por exemplo o Netscape ou o Internet Explorer) e uma maquinaremota (server) que disponibiliza a informacao.

Durante a decada de 80 e inıcio da decada de 90, os principais fabricantes de computado-res apercebem-se da importancia crescente do Unix. De modo a adaptarem-se a esta realidade,diversos fabricantes licenciam o codigo fonte da AT&T e, com base neste, desenvolvem versoesproprietarias do Unix. E assim que a Digital lanca o Ultrix, a HP o HP-UX, a Sun o SunOS, e aIBM o AIX, entre outros. Trata-se de um perıodo de grande expansao e popularidade das diversasvariantes do sistema operativo Unix, sobretudo nos meios academicos.

Enquanto a divulgacao do Unix aumenta, um outro projecto que tera amplas repercussoes naarea da informatica conhece tambem avancos importantes. Em 1973, o departamento de DefesaAmericano tinha iniciado o Defense Advanced Research Projects Agency (DARPA). O objectivoera desenvolver uma arquitectura de rede com uma gestao distribuıda, tal que o funcionamento noseu conjunto nao fosse afectado pela inoperacionalidade de qualquer dos seus nos. Este objectivoera justificado pela Guerra Fria, entao no seu auge, e pelos cenarios estabelecidos pelos estrategas

3A possibilidade, hoje comum, de um sistema utilizar mais memoria do que a RAM efectivamente disponıvel atravesde um sistema de armazenamento e automatico em disco de zonas da memoria menos usadas, e a sua posterior leituraquando necessario.

Page 13: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

COMPUTADORES PESSOAIS E ESTACOES DE TRABALHO 7

militares em caso de guerra nuclear. O projecto incluıa o desenvolvimento de protocolos4 que per-mitissem uma comunicacao transparente entre dois computadores ligados em rede, mesmo quandouma mensagem tivesse que atravessar diversas maquinas entre a origem e o destino. Este projectofoi designado de Internetting, e o sistema de computadores interligado que emergiu deste trabalhofoi designado pelo entao obscuro nome de Internet. Os protocolos que foram desenvolvidos noambito deste projecto vieram a ser conhecidos por TCP/IP: Transmission Control Protocol (TCP)e Internet Protocol (IP). Em 1986 a National Science Foundation inicia o desenvolvimento daNFSNET, financiando a criacao de um amplo sistema de nos interligados no Estados Unidos queformam o esqueleto inicial da Internet.

Ate 1993, data de aparecimento dos primeiros broswer, a Internet e sobretudo utilizada pelosmeios academicos e de investigacao. No processo de crescimento da Internet, o sistema operativoUnix tem tambem um papel fundamental, pelas suas caracterısticas de interoperabilidade e pelosuporte principais protocolos de comunicacao baseados no TCP/IP entao usados na rede: o SMTP(Simple Mail Transfer Protocol), utilizado pelo correio electronico e o FTP (File Transfer Proto-col). O facto de muitos dos nos da rede serem baseados em maquinas Unix contribuıu tambemsignificativamente para o crescimento e popularidade de um sistema operativo que, progressiva-mente, extravasou os meios academicos e comecou a afirmar-se como uma alternativa viavel emcertos contextos empresariais.

Entratanto, no inıcio da decada de 80, tinham entrado em cena os chamados computadorespessoais. Originalmente muito limitados na sua capacidade computacional, concebidos comopostos de trabalho individuais e com sistemas operativos muito simples, era difıcil imaginar quealguma vez viessem a concorrer com os computadores de medio e grande porte, onde pontificavamos sistemas operativos multi-tarefa e multi-utilizador, entre os quais se encontrava o Unix. O tempoveio, no entanto, a provar o contrario.

2.4 Computadores pessoais e estacoes de trabalho

2.4.1 Microprocessadores

Ate a decada de 60, a unidade central de processamento de um computador ocupava diversasplacas electronicas, povoadas por transistores, condensadores e resistencias. Acomodar todo esteequipamento exigia um espaco fısico relativamente amplo. Embora com diversas variantes conso-ante a capacidade de calculo, os mais pequenos computadores desta geracao dificilmente podiamser arrumados no canto do escritorio.

O primeiro sinal de mudanca surge em 1971, quando a Intel anuncia o desenvolvimento do4A linguagem ou dialogos de entendimento utilizados na comunicacao entre computadores.

Page 14: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

8 UNIX, GNU/LINUX E OUTROS ACRONIMOS

primeiro microprocessador, um circuito integrado que inclui num unico chip a maioria dos compo-nentes normalmente encontrados na unidade central de processamento de um computador. Apesardo Intel 4004 ser um processador de apenas 4 bits, constitui um marco decisivo na historia dohardware. No ano seguinte, enquanto Nolan Bushnell, da Atari, cria o primeiro jogo de vıdeo, aIntel lanca o 8008, um microprocessador de 8 bits, cuja evolucao origina, em 1973, o 8080.

Inicialmente, os microprocessadores sao utilizados apenas como dispositivos de controlo in-dustrial. Em 1974, a Scelbi Computer Consulting utiliza o 8080 como base de um pequeno com-putador pessoal, de divulgacao muito restrita. Nascem assim os microcomputadores, designacaoque deriva da sua unidade central de processamento ser um microprocessador. No mesmo anosurge o Mark 8, um microcomputador em kit que so os entusiastas de electronica mais persistentesconseguem por a funcionar.

No entanto, estes primeiros microcomputadores tem uma divulgacao muito restrita. Para opublico em geral, o microprocessador e uma entidade desconhecida, e apenas o aparecimento erapida divulgacao das maquinas de calcular de bolso indicia que algo esta a mudar ao nıvel daminiaturizacao e integracao da electronica digital.

2.4.2 Microcomputadores

Em Dezembro de 1974, surge o primeiro computador pessoal com alguma divulgacao comer-cial: o Altair 8800, produzido pela MITS, que tinha tambem por base o microprocessador 8080,e que dispunha da uma descomunal memoria de 256 bytes (nao, nao falta o K, estamos a falar deduzentos e cinquenta e seis bytes, ou seja, 1/4 de Kbyte) e era vendido por cerca de 500 dolares.Quando o Altair foi pela primeira vez anunciado na revista Popular Electronics, os fabricantesreceberam 400 encomendas na primeira tarde.

Pelos parametros actuais, o Altair dificilmente poderia ser considerado um verdadeiro compu-tador: a introducao de dados era realizada em codigo binario por um conjunto de interruptores quesubstituia o teclado. Os resultados das operacoes eram apresentados, tambem em codigo binario,num conjunto de pequenas lampadas (leds) da caixa. Nesta versao inicial, o Altair nao era maisque um dispositivo onde se podiam programar, muito trabalhosamente, sequencias elaboradas deoperacoes logicas. Embora revolucionario para os interessados em electronica digital, o Altairoriginal tinha um interesse pratico limitado.

Entre os leitores do anuncio do Altair na Popular Electronics estavam dois estudantes deHarvard, com um forte interesse em informatica: Paul Allen e William Gates(Williams, 1993).Rapidamente os dois estudantes anteciparam o potencial do Altair, desde que dotado com softwareapropriado. Em particular tiveram a intuicao de que o hardware do Altair era suficiente parasuportar um interpretador de uma linguagem de alto nıvel, desde que fosse ligado a uma simples

Page 15: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

COMPUTADORES PESSOAIS E ESTACOES DE TRABALHO 9

teleimpressora5.

Nao e possıvel estabelecer com rigor os detalhes da historia que se segue, ja que o tempo levaa que a realidade e o mito por vezes se confundam. Consta que Bill Gates, entao com 19 anos,telefona a MITS e afirma dispor de um interpretador de Basic adequado ao Altair. A MITS mostra-se interessada em testar o interpretador. Aparentemente Bill Gates nao tinha uma unica linha deprograma escrita quando prometeu o Basic a MITS, o que faz deste um dos primeiros compo-nentes de vaporware6 do mercado informatico. Dado que Allen e Gates nao dispunham de umAltair para desenvolver o seu interpretador de Basic, Allen desenvolveu um simulador de um mi-croprocessador 8080 no PDP-10 de Harvard7 enquanto que Gates se dedicou ao desenvolvimentodo interpretador de Basic. Oito semanas depois, Allen deslocou-se a MITS com a missao de testaro interpretador. Foi o seu primeiro contacto real com o Altair e, aparentemente a demonstracaode Allen impressionou positivamente a MITS.8 Em 1976, apos um ano de comercializacao bemsucedida do Basic para o Altair, Bill Gates funda a Microsoft.

Praticamente ao mesmo tempo, tambem em 1975, um tecnico da HP em Palo Alto, SteveWozniak, fazia planos para construir o seu proprio computador pessoal. Em vez do microproces-sador 8080 da Intel, Wozniak preferiu adoptar o processador 6800 da Motorola, apenas por este sermais barato. Wozniak planeou de raız a sua maquina para incluir um teclado e uma interface paratelevisao (obviamente a preto e branco), de forma a ultrapassar as limitacoes iniciais do Altair. Ocomputador de Wozniak evoluiu com a colaboracao activa de um colega de 21 anos chamado SteveJobs. Ao fim de algum tempo, este sugeriu a Wozniak a comercializacao do sistema desenvolvido.Em Abril de 1976, Wozniak e Jobs fundam a Apple Computer Company.

Em Julho de 1976, e comercializado o Apple I. A primeira vez que o Apple I foi apresentadonuma reuniao da Association of Computer Machinery, muitos dos presentes pensaram que se tra-tava de um terminal ligado telefonicamente a um computador de grande porte, ja que era difıcil, naaltura, acreditar que as potencialidades demonstradas pela maquina tivessem origem na pequenacaixa visıvel ao publico. O Apple II, lancado em 1977, e o primeiro sucesso comercial da Apple.

5Maquina de escrever electromecanica com uma porta serie.6Na gıria informatica, vaporware designa um programa anunciado por um fabricante muito antes da sua producao

e, frequentemente, com especificacoes prometidas difıceis ou impossıveis de cumprir.7Anos mais tarde, o conhecimento da utilizacao dos recursos de Harvard para este efeito deu origem a alguma

polemica.8Segundo a versao oficial da Microsoft, o interpretador de Basic funcionou em pleno no primeiro teste real. Face

as difıceis condicoes de desenvolvimento, esta afirmacao deve ser encarada com algum cepticismo, sem que este factoretire qualquer merito ao excelente trabalho de Allen e Gates.

Page 16: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

10 UNIX, GNU/LINUX E OUTROS ACRONIMOS

2.4.3 IBM-PC e compatıveis

Nos anos seguintes, os modelos dos chamados computadores pessoais multiplicam-se, em-bora o seu preco confine a sua utilizacao as empresas.

A IBM, a data o maior fabricante mundial de computadores de grande porte, olhara inci-almente este mercado emergente com alguma sobranceria. O sucesso do Apple II leva a IBM aaperceber-se finalmente das potencialidades desta classe de produtos e a iniciar o desenvolvimentodo seu proprio modelo de computador pessoal, com o nome de codigo de Acorn. Trata-se de umprojecto que decorre em moldes pouco ortodoxos para os habitos da empresa. De forma a reduziro custo final da maquina, o projecto Acorn e baseado em componentes disponıveis no mercado, emvez de seguir a polıtica habitual na IBM de desenvolver componentes proprietarios. Em particular,e decidido adoptar o processador 8088 da Intel para unidade central de processamento (CPU) doAcorn. Como se vera, esta decisao tera amplas repercussoes no seguimento.

Entretanto, a Microsoft continuava a crescer, centrando a sua actividade no desenvolvimentode software, sobretudo interpretadores e compiladores. Em 1980, numa tentativa para diversifi-car a sua actividade, a Microsoft tenta entrar na area dos sistemas operativos e anuncia o inıciodo projecto Xenix, um sistema operativo baseado no Unix que seria suportado em diversos pro-cessadores. Aproximadamente nesta altura, a IBM necessita de dotar o Acorn com um sistemaoperativo simples e eficiente e, mais uma vez, resolve recorrer ao mercado em vez de utilizar osseus proprios recursos. E assim que tem inıcio os contactos entre a IBM e a Microsoft, dada aexperiencia desta ultima no desenvolvimento de software para os microprocessadores de 8 bits daIntel.

Apesar do anunico do projecto Xenix, este encontrava-se em fase embrionaria e a Microsoftnao dispunha de experiencia real em sistemas operativos. O melhor sistema operativo para micro-processadores disponıvel a epoca era o CP/M (Control Program for Minicomputers), desenvolvidopor Gary Kindall, da Digital Research. Tim Paterson, um programador da Seattle Computer Pro-ducts, tinha desenvolvido um prototipo de sistema operativo para um computador 8086 que retinhaalguns aspectos do funcionamento do CP/M, mas que era suficientemente diferente deste para naoinfringir as regras de copyright. Patterson designou o seu sistema operativo de QDOS, acronimode Quick Disk Operating System, mas que os mais crıticos nao hesitam a identificar como Quickand Dirty Operating System. A Microsoft, sem referir o acordo que tinha com a IBM, comprouos direitos do QDOS a Seattle Computer Products por uma importancia irrisoria e, apos algumasmodificacoes, surgia a primeira versao do MS-DOS, o sistema operativo de que a IBM necessi-tava. Bill Gates licencia o MS-DOS a IBM, mas consegue que a Microsoft retenha o direito decomercializacao do MS-DOS. Anos mais tarde, Tim Paterson ingressara na Microsoft.

Em Agosto de 1981 a IBM anuncia publicamente o resultado do projecto Acron sob adesignacao de IBM-PC, uma maquina baseado num processador 8088 a 4.77Mhz, uma memoria

Page 17: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

COMPUTADORES PESSOAIS E ESTACOES DE TRABALHO 11

de 16Kbytes, expansıvel ate 256Kb, e com uma ou duas unidades de diskettes. Este modelo, cujaevolucao deu origem aos actuais PCs9, tem um sucesso que ultrapassa largamente as expectati-vas da propria IBM. Alem da aura da marca, a arquitectura aberta do sistema permitia o facildesenvolvimento de software e hardware por parte de outras empresas. O modelo evolui e, em1983, quando a IBM lanca o IBM-XT, este lidera largamente o mercado dos computadores pesso-ais. A oferta de software para nova maquina cresce e a introducao da folha de calculo Lotus fazo interesse pela maquina por parte das empresas subir em flecha. Tambem fabricantes de hard-ware contribuem para este sucesso, com o desenvolvimento de placas graficas melhoradas e outrosperifericos.

A arquitectura aberta do IBM-PC, e o seu successo comercial, leva a que construtores inde-pendentes comecem a tentar desenvolver maquinas equivalentes. Rapidamente sao encontadoscircuitos de substituicao para os poucos componentes do IBM-PC que sao proprietarios da IBM.Surgem assim os chamados PC-compativeıs ou clones, maquinas de menor custo que as comercia-lizadas pela IBM, mas que sao capazes de correr o mesmo software. Esta possibilidade e facilitadapelo facto da IBM nao deter o exclusivo do sistema operativo MS-DOS, o qual e vendido pela Mi-crosoft a qualquer fabricante ou utilizador que o pretenda. Como e evidente, o aparecimento declones e mal recebida pela IBM, mas revela-se um negocio extremamente lucrativo para a Micro-soft, que ve as suas vendas aumentarem significativamente.

A decada de 80 e um perıodo de crescimento e grande divulgacao da microinformatica. En-quanto os IBM-PC e compatıveis10 se afirmam sobretudo como postos de trabalho individuais nasempresas, surge em 1982 o ZX-Spectrum, um pequeno computador baseado no processador Z80da Zilog, de custo muito reduzido (o Spectrum nao dispunha de diskettes mem de monitor, e o seufuncionamento exigia a ligacao de uma televisao e de um gravador de cassetes para a gravacao eleitura de dados), que dominara o mercado domestico e de jogos ate 1987. Outras marcas surgemna altura com os seus proprios modelos, alguns com grande sucesso no mercado, como a Com-modore Amiga e a Compaq. Mas o unico concorrente serio ao domınio absoluto dos IBM-PC ecompatıveis ira surgir da Apple, pela mao de Steve Jobs.

2.4.4 Interfaces graficas

Desde o aparecimento dos primeiros computadores na decada de 40 e ate meados da decada de80, a comunicacao com os computadores era fundamentalmente realizada em modo de texto, comosucede no modo MS-DOS do Windows. O utilizador digitava um comando escrito e o computadorexecutava-o, eventualmente enviando para o dispositivo de saıda uma resposta sob a forma de umasequencia de linhas de texto.

9De facto, qualquer PC actual e ainda capaz de executar o software desenvolvido para o IBM-PC original.10De aqui adiante, seguindo uma terminologia hoje muito generalizada, designar-se-a os IBM-PC e compatıveis

simplesmente por PCs, mantendo no entanto presente que a designacao e algo abusiva relativamente a outros fabricantes.

Page 18: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

12 UNIX, GNU/LINUX E OUTROS ACRONIMOS

No inıcio da decada de 60, Ivan Sutherland, entao um estudante de Doutoramento do MIT,tinha desenvolvido um sistema que permitia a elaboracao de desenhos em computador sobre umtubo de raios catodicos. Os desenhos assim desenvolvidos podiam ser escalados, apagados e copi-ados. Embora o sistema tivesse uma estrutura primitiva pelos parametros actuais, a tese de Douto-ramento de Sutherland, entitulada ”Sketchpad: A Man-machine Graphical Communications Sys-tem”, discutia pela primeira vez a importancia de sistemas graficos de interaccao homem-maquina,que virao mais tarde a ser conhecidos sob a sigla GUI, de Graphical User Interface. Durante adecada de 70, a Xerox cria um grupo de investigacao nos laboratorios PARC (Palo Alto ResearchCenter) dedicado a analise e estudo da interaccao homem-maquina. A equipa inclui nao apenasengenheiros, mas tambem psicologos que investigam mecanismos essenciais da aprendizagemhumana. O trabalho desenvolvido no Xerox PARC inventa ou aprofunda muitos conceitos hojecorrentes na interaccao com computadores: a representacao de ficheiros e comandos num ecransob a forma de ıcones, a utilizacao de dispositivos apontadores (ratos ou canetas) para manipularestes objectos, a co-existencia num mesmo ecran de diversas janelas com informacao referente aexecucao de diferentes programas. Em particular, e desenvolvido o conceito WYSIWYG (WhatYou See Is What You Get) em editores graficos e de texto, baseado no princıpio de visualizacaodirecta e interactiva no monitor do resultado final do processamento.

No inıcio da decada de 80, apesar do sucesso comercial dos Apple II e Apple III, a Apple ti-nha comecado a perder terreno devido ao recem chegado IBM-PC. Steve Jobs, que tinha visitado oXerox PARC e ficado impressionado com o trabalho ali desenvolvido, apercebe-se que as interfa-ces graficas podem ser a resposta adequada ao progressivo domınio da IBM no mercado. E assimque a Apple da inicio a um projecto de investigacao em interfaces graficas para o qual sao contra-tados muitos dos investigadores do Xerox PARC. A Apple aprofunda e melhora os conceitos alidesenvolvidos, os quais serao implementados numa versao primitiva no modelo Lisa da Apple, em1982. A evolucao deste modelo conduz a apresentacao em 1984 do Macintosh o qual, equipadocom o sistema operativo MacOS, e a primeira implementacao comercial de uma interface graficasimultaneamente eficiente e intuitiva.

A introducao do Macintosh traz uma revolucao a area dos computadores pessoais e o seu su-cesso comercial e enorme. No entanto, dois factores contribuem para a limitar este sucesso: opreco muito mais elevado dos Macintosh e a arquitectura aberta do IBM-PC. Esta ultima tinhapermitido o contınuo crescimento dos fabricantes de compatıveis, arrastando atras de si fornece-dores de hardware e software e, consequentemente, uma reducao contınua de precos. A Apple,em contrapartida, baseava-se num modelo de hardware e sistema operativo proprietarios, o que lhepermitia uma maior margem de manobra e o controlo do produto mas, simultaneamente colocavafortes limitacoes as contribuicoes externas.

Apesar de manter o domınio comercial, a IBM apercebe-se do potencial da interface graficado Macintosh. No entanto, por limitacoes do hardware, a implementacao de um sistema com-

Page 19: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

COMPUTADORES PESSOAIS E ESTACOES DE TRABALHO 13

paravel nos IBM-PC nao era viavel a curto prazo. O hardware do Macintosh tinha sido concebidode raız incluindo processadores de sinal e primitivas graficas sofisticados. Tambem o sistema ope-rativo MacOS era incomparavelmente mais sofisticado que o MS-DOS, o que dava a Apple umconfortavel avanco em materia de interfaces graficas e multimedia.

Em 1985, a IBM e a Microsoft dao origem a um projecto conjunto para desenvolvimento deum Sistema Operativo com interface grafica designado OS/2. Apesar deste projecto comum serpublicamente anunciado e conduzir, em 1987, a primeira versao do OS/2, a Microsoft continuaa dedicar recursos significativos ao desenvolvimento de um sistema grafico proprio, designadoWindows. Depois de duas versoes pouco apelativas, a Microsoft apresenta em 1990 o Windows3.0, o primeiro concorrente serio, pela qualidade da interface grafica, ao MacOS apresentado seisanos antes. A Apple abre um processo contra a Microsoft protestando pela copia da interface doMacOS e pela infraccao de direitos de autor. A Microsoft argumenta com a autoria original dasinterfaces graficas, que atribui ao trabalho desenvolvido no Xerox PARC, dando origem a um dosmais complexos processos judiciais da historia da informatica. Este so terminara em 1997, comum acordo entre as duas empresas conduzido respectivamente por Bill Gates e Steve Jobs.

Este acordo tem como pano de fundo o lancamento em 1995 do Windows 95, cujo domıniocomercial tinha colocado em fortes dificuldades a Apple. Outra vıtima do sucesso do Windows eda Microsoft foi o OS/2, cujo desenvolvimento nunca tinha sido abandonado pela IBM e que tinhaconduzido a um sistema operativo que, em meados da decada de 90, era amplamente reconhecidocomo superior ao Windows em termos de eficiencia e robustez. A falta de software que explorasseas suas caracterısticas e no entanto penalizador e nem o derradeiro esforco da IBM em 1995/96,perıodo em que procedeu uma distribuicao massiva e frequentemente gratuita do OS/2, permitiuque este obtivesse uma quota de mercado significativa.

2.4.5 Estacoes de trabalho

Durante a decada de 80, enquanto os microcomputadores marcavam a sua presenca no mer-cado das maquinas de gama baixa, os utilizadores especializados continuavam a necessitar demaquinas mais potentes, com sistemas operativos multi-tarefa e multi-utilizador. Os sistemas degrande porte (mainframes), normalmente associados so suporte de transaccoes em bases de dadosde grande dimensao, eram dominados por empresas como a IBM, Univac ou a Honeywell. Entreestas e os computadores pessoais situavam-se os chamados minicomputadores, maquinas muitomais pequenas do que as anteriores mas, ainda assim, consideravelmente mais potentes que osPCs. Os minicomputadores eram geralmente disponibilizados com sistemas operativos multita-refa e multiutilizador, e tinham a dimensao apropriada para suprir as necessidades de um grupo deinvestigacao ou de um departamento de uma empresas (por exemplo, uma agencia bancaria).

Originalmente, o acesso quer aos computadores de grande porte quer aos minicomputado-

Page 20: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

14 UNIX, GNU/LINUX E OUTROS ACRONIMOS

res era realizado apenas por meio de terminais alfanumericos, ligados por uma linha serie. Aligacao era lenta e, obviamente, so possıvel em modo de texto. Apesar de terem velocidades deprocessamento muito inferiores, os computadores pessoais tinham a vantagem de poder acederdirectamente a memoria de vıdeo da maquina, permitindo a manipulacao e alteracao das imagensno ecran de forma muito rapida. E por este motivo que aplicacoes como a folha de calculo11 ouos jogos, aplicacoes que exigem uma forte interaccao entre o software e a imagem grafica, surgemde facto primeiro nos computadores pessoais do que em maquinas mais potentes.

A associacao de minicomputadores a monitores graficos, permitindo a que os processado-res acedam directamente a memoria de vıdeo, deu origem as chamadas estacoes de trabalho ouworkstations. Inicialmente, as estacoes de trabalho tem um preco elevado, sendo apenas adopta-das em aplicacoes especializadas que requerem computacao grafica intensiva, sobretudo na areada engenharia. Em 1984, o MIT inicia o desenvolvimento do sistema de janelas X para estacoesde trabalho com sistemas operativos Unix. O X Windows e um sistema consideravelmente maiscomplexo que os sistemas graficos dos computadores pessoais. Nestes ultimos, a gestao do ecrane efectuada directamente pelos programas ou pelo sistema operativo. De acordo com a filosofiamodular do sistema Unix, o sistema grafico X Windows nao faz parte do sistema operativo, sendoconstituido por um conjunto de programas autonomos responsaveis apenas pela gestao do sistemagrafico. O modo de funcionamento do protocolo X segue o chamado modelo cliente-servidor.Assim, uma unica aplicacao (o servidor) e responsavel pela gestao directa do ecran e hardwaregrafico. As aplicacoes que necessitam de usar o ecran como, por exemplo, um browser de internetou um editor grafico, constituem os chamados programas clientes, que se limitam a enviar pedidosde manipulacao de imagens para o servidor. Uma das grandes vantagens deste modelo e o factode um programa cliente poder ser executado numa maquina diferente daquela em que se encon-tra fisicamente instalado o hardware grafico e o programa servidor, desde que as duas maquinasestejam ligadas em rede: como ja referido anteriormente, o modelo de comunicacao entre pro-gramas ou processos em Unix e identico quer estes se encontrem no mesmo computador ou emcomputadores diferentes ligados em rede.

A evolucao do X Windows, que conhece grande divulgacao sobretudo a partir da versao X11,aliada a progressiva reducao dos precos dos minicomputadores, permitiu que as estacoes de tra-balho, originalmente utilizadas apenas em ambientes que necessitavam de computacao graficaavancada, se generalizassem como a interface preferencial para maquinas Unix. As estacoes detrabalho baseadas em minicomputadores tiveram o seu perıodo de maior divulgacao no final dosanos 80 e inıcio dos anos 90. Durante este perıodo, o hardware dos minicomputadores sofreutambem uma evolucao significativa, com a generalizacao dos chamados processadores RISC (Re-duced Instruction Set Computers), com os quais se obtiveram aumentos significativos na veloci-dade de processamento.

11 A folha de calculo foi inventada por Dan Bricklin, tendo sido originalmente desenvolvida num Apple II e comer-cializada sob o nome de VisiCalc em 1979.

Page 21: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

LINUX 15

Apesar de serem adoptadas em multiplas areas da investigacao e da engenharia, as estacoesde trabalho ficaram sobretudo conhecidas pelo seu papel em trabalhos de animacao por compu-tador e na colorizacao e recuperacao de filmes, areas em que, ainda hoje, tem uma importanciasignificativa.

2.5 Linux

“Linux is obsolete. (...) Be thankful you are not my student. You would not get an high grade(...)”

E-mail do Prof. Tanenbaum a Linus Torvalds, em 1992, criticando a arquitecturamonolıtica do Linux e profetizando o seu desaparecimento a curto prazo.

No inıcio dos anos 90, o panorama da Informatica era dominado pelo crescimento da Internet,a qual, embora ainda estranha as empresas, conhecia progressiva divulgacao nos meios academicose de investigacao. Como ja se referiu, o mercado era dominado, nos postos de trabalho individuaispelos compatıveis dotados com o MS-DOS/Windows, embora o Macintosh tivessem uma fraccaoimportante do mercado, sobretudo em areas editorias. As estacoes de trabalho Unix com X11dominavam em ambientes especializados e, tipicamente, apresentavam velocidades de processa-mento dez vezes superiores as dos computadores pessoais, embora a custa de um preco tambemvarias vezes superior. Em redes locais de media dimensao, as maquinas Unix eram tambem fre-quentemente adoptadas como servidores de rede, gerindo servicos centralizados como o correioelectronico, sistemas de backup, impressoras, areas de disco partilhadas, servidores de web einterligacao a internet.12 No topo, os mainframes completavam o quadro, normalmente ao servicode grandes bases de dados.

Nesta altura, o hardware dos PCs tinha tambem ja conhecido uma evolucao significativa. Osprocessadores 386 e 486 da Intel, predecessores dos Pentium, tinham ja suporte para os mesmosmecanismos avancados de computacao disponıveis nos minicomputadores e, embora mais lentos,dispunham de uma arquitectura de 32 bits, suporte para memoria virtual e funcionamento emmodo protegido. Estas potencialidades constratavam com as arquitecturas muito simplificadasdo DOS/Windows, as quais so funcionavam modo de 16 bits e praticamente nao exploravam aspotencialidade dos novos processadores. Embora este facto fosse em parte ditado pela exigenciado mercado em manter a compatibilidade total dos PCs com a enorme quantodade de softwaredesenvolvido para o DOS original, tratava-se sem duvida de um subaproveitamento significativodo hardware disponıvel.

Para alem do DOS/Windows, praticamente nao existiam nesta altura sistemas operativos al-12Por oposicao a designacao de servidor (server), os postos de trabalho individuais sao frequentemente designados

por clientes, no sentido em que sao consumidores dos servicos disponibilizados pelo servidor.

Page 22: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

16 UNIX, GNU/LINUX E OUTROS ACRONIMOS

ternativos para os PC’s. O projecto OS/2 tinha pouca divulgacao. A Microsoft tinha ja iniciadointernamente o projecto do Windows NT, um sistema operativo com nucleo multitarefa que viriaa preencher a oferta da Microsoft no mercado de servidores, mas que so seria anunciado em 1993.

Nesta altura, muitos utilizadores de Unix em empresas e instituicoes de ensino dispunham dePC’s em casa com DOS/Windows. No entanto, a possibilidade de usar os PCs domesticos paradesenvolver software Unix era limitada. O Xenix, a variante de Unix da Microsoft, desenvolvidoa partir de codigo licenciado pela ATT, estava disponıvel desde meados dos anos 80. No entanto,o Xenix tinha tido a sua origem com os processadores Intel 80286, que nao dispunham ainda desuporte para memoria virtual. Tratava-se, portanto, de uma implementacao limitada de Unix epouco compatıvel com o software disponıvel nas estacoes de trabalho Unix de gama media.

Em 1987, Andrew S. Tanenbaum, um Professor de Sistemas Operativos em Berkeley, tinhadesenvolvido o Minix, um sistema operativo baseado numa arquitectura designada por micro-kernel. Relativamente ao modelo do Unix (designado monolıtico), as arquitecturas de microkernelsimplificam ainda mais as funcoes do nucleo, isolando as tarefas de gestao de memoria e de gestaode ficheiros do nucleo propriamente dito. O Minix tinha uma arquitectura elegante e avancada, eracompatıvel com diversas plataformas de hardware e, ao nıvel do utilizador, tinha uma interfacesimilar aos sistemas Unix.

Tanembaum tinha desenvolvido o Minix como um hobby e, sobretudo, como uma ferramentade ensino. O Minix teve um sucesso razoavel junto de estudantes e investigadores de sistemasoperativos, tendo dado origem a um grupo de discussao na internet com cerca de 40,000 pessoas.No entanto, apesar das suas potencialidades, a filosofia de microkernel do Minix tinha tambemvarias limitacoes de ordem pratica. Apesar da forte dinamica do grupo de discussao, com utiliza-dores constantemente a solicitar, sugerir ou a enviar alteracoes e adicoes, Tanenbaum mostrava-se,na maioria dos casos, extremamente relutante em incorporar estas contribuicoes no seu kernel.Na maioria dos casos, Tanenbaum considerava as alteracoes sugeridas como desnecessarias eameacadoras da simplicidade e caracterısticas pedagogicas do seu microkernel. Esta opcao li-mitava, no entanto, o nıvel de utilizacao do Minix. Adicionalmente, Tanenbaum tinha decididomanter o codigo propritetario, sendo a licenca comercializada, embora a preco reduzido, atravesda Prentice-Hall.

Da comunidade de utilizadores e estudantes de Minix fazia parte um estudante finlandes, de20 anos, da Universidade de Helsinquia chamado Linus Torvalds. Em 1991 Linus tinha adqui-rido um PC com um processador Intel 80386 e, tal como muitos outros elementos da comunidadeMinix, pretendia que este evoluisse de modo a poder executar o enorme manancial de softwaredisponıvel para sistemas Unix. Linus tinha apenas cerca de um ano de experiencia na linguagemde programacao C quando decidiu comecar a implementar um kernel proprio para teste de algunsaspectos do sistema Unix. A estrategia seguida por Linus partiu da modificacao e extensao doMinix de modo a este implementar o modelo Unix. E provavel que, para este processo, tenha

Page 23: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

LINUX 17

contribuıdo o recem publicado livro de M. Bach, Design of the Unix Operating System (Bach,1986), o qual descrevia de forma pedagogica e clara muitos detalhes do sistema Unix. Em 1991,Linus envia uma mensagem para o grupo de discussao de Minix na Internet anunciando que es-tava a desenvolver um pequeno kernel de Unix para PC’s gratuito e que aceitava sugestoes parae e colaboracao. Para muitos analistas, o inıcio do projecto so tera sido possıvel pela relativaingenuidade de Linus relativamente a complexidade que este apresentava.

Na especificacao inicial do Linux encontrava-se a adesao ao standard POSIX, que descreviaum conjunto de normas de comunicacao entre aplicacoes e o sistema operativo que facilitava aportabilidade de programas entre diferentes sistemas operativos. O POSIX, embora inspirado emmuitas interfaces de sistema do Unix, foi definido de forma a ser adoptado por outros sistemasoperativos. Este facto favorecia a compatibilidade do Linux com novas aplicacoes. Pouco tempodepois, a maioria da comunidade Minix aderia ao Linux,13 e comecaram a chegar a Linus inumerassugestoes, correccoes, contribuicoes e drivers para suporte de varios dispositivos.

Independentemente do inegavel merito pessoal do trabalho de Linus Torvalds, diversos facto-res contribuıram para o sucesso do Linux. O mais decisivo foi, sem duvida, a rapidez com que aprimeira versao utilizavel foi disponibilizada na internet, cobrindo uma lacuna existente na areados sistemas operativos para PCs e ultrapassando outros projectos entao em fase de preparacao.Com efeito, a GNU (ver seccao 2.7) tinha desde a sua criacao um projecto de desenvolvimentode um sistema operativo, mas este nunca ultrapassou a fase de especificacao. Tambem a Univer-sidade de Berkeley desenvolvia na altura o 386BSD, que evoluıu mais tarde para FreeBDS, umaversao de Unix por muitos considerada superior ao Linux,14 mas a sua divulgacao foi atrasada porproblemas legais derivados da reutilizacao de partes do codigo original do Unix da ATT, alem deBerkeley ter adoptado uma polıtica de distribuicao mais restritiva que a seguida por Linus.

Outro factor decisivo para o sucesso do Linux foi o seu aparecimento na altura em que ainternet interligava, pela primeira vez, as principais instituicoes universitarias e de investigacao detodo o mundo. Este facto foi fundamental para o desenvolvimento um projecto de programacaofundamentalmente cooperativo. De facto, embora o codigo de Linus tenha formado a base donucleo do Linux, foi a sua arquitectura aberta e as contribuicoes de centenas de programadoresque despoletaram o crescimento e divulgacao do Linux a partir de 1992. Destacam-se, entreoutros, Alan Cox, provavelmente o maior contribuidor individual para o nucleo do Linux e ateagora responsavel pela organizacao e distribuicao do codigo do nucleo.

Durante o final da decada de 90, o aumento da capacidade de processamento dos processa-13Facto que nao foi facilmente aceite por Tanenbaum, que considerava a arquitectura do Linux obsoleta e inaceitavel,

tendo dado origem a um hoje celebre debate na internet entre os defensores do Minix e Linux (Tanenbaum e outros,1993). Em defesa deste ultimo surgiu, entre muitos outros, Ken Thompson.

14Anos mais tarde, Linus afirmou que o projecto Linux nao teria tido inıcio caso o BSD tivesse surgido algum tempoantes.

Page 24: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

18 UNIX, GNU/LINUX E OUTROS ACRONIMOS

dores Intel conduziu a uma reducao significativa do fosso que separava os PCs das Workstationsbaseadas em processadores RISC em termos de desempenho. Equipados com Linux e podendoagora correr as mesmas aplicacoes anteriormente so disponıveis em maquinas de gama media,por uma fraccao do mesmo preco, os PCs ocuparam progressivamente o espaco das estacoes detrabalho Unix, as quais se viram progressivamente remetidas para nichos de mercado cada vezmais especializadas. Actualmente, a expressao estacao de trabalho perdeu o seu significado ori-ginal, sendo aplicada indistintamente a qualquer computador utilizado como posto de trabalhoindividual. A partir de 1996, marcas como a Intel, HP, IBM, Compaq e Novell compreendem asoportunidades oferecidas pelo Linux e investem no suporte deste sistema operativo, o que corres-ponde a uma certificacao implıcita da qualidade e fiabilidade atingidas pelo Linux.

Actualmente (Agosto 2000) o Linux e, depois do Windows, o sistema operativo com maiornumero de utilizadores a nıvel mundial e a mais forte alternativa aos sistemas operativos Windowse Windows NT, que dominam largamente o mercado. No entanto, apesar da sua maior fiabilidadee flexibilidade relativamente sistemas da Microsoft, e reconhecido que estes ultimos apresentamuma interface com o utilizador mais simples que a apresentada pelo Linux. Apesar do esforcoque tem sido feito para dotar o Linux de ferramentas semelhantes as existentes no Windows, a suapenetracao tem vindo a ter lugar sobretudo no mercado de servidores, onde a fiabilidade e essen-cial e onde o utilizador/configurador directo e habitualmente um especialista em informatica. Deacordo com um estudo da IDC(csn, 2000) o Linux representa (numeros de 1999) apenas cerca de2% a 4% do mercado dos postos de trabalho individuais, segmento de mercado que o Windowsdomina de forma esmagadora. A situacao e distinta no mercado dos servidores, onde o Linuxrepresentou, em 1999, cerca de 25% do mercado, contra 38% do Windows NT da Microsoft. Orestante mercado de servidores e repartido pelo NetWare da Novell (19%), outros Unix (15%) eoutros sistemas (3%). Os numeros revelam tambem que o Linux tem sido o sistema operativo commaior crescimento no mercado dos servidores nos ultimos anos, embora os ganhos observados setenham vindo a verificar sobretudo a custa dos servidores Novell e Unix, enquanto que o WindowsNT tem mantido uma fraccao constante do mercado. Adicionalmente, tem-se assistido nos ultimosanos a adopcao do Linux em segmentos menos habituais, incluindo em controladores e dispositi-vos integrados (por exemplo, gravadores digitais de vıdeo) em que o nucelo do Linux e adoptadocomo base do sofwtare do sistema, embora a sua presenca seja transparente para o utilizador.

Apesar de uma relativa euforia que rodeia o sucesso do Linux nos ultimos anos, poucos searriscam a fazer previsoes. Linus Torvalds mantem, ainda hoje, o controlo apertado do desen-volvimento do nucleo. Este e uma garantia de consistencia exigida pelo mercado, mas os maiscepticos apontam para a dificuldade de Linus compatibilizar o papel cada vez mais mediatico quetem vindo a assumir na divulgacao do Linux com o tempo requerido pela crescente complexi-dade e dimensao do kernel. Por outro lado, a medida que o mercado cresce, aumenta tambem apressao dos fabricantes para a adopcao de caracterısticas e facilidades especıficas. Esta pressaocomercial, alem de representar uma variavel nova no desenvolvimento do Linux, e olhada com

Page 25: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

COPIA E DISTRIBUICAO DE SOFTWARE: ASPECTOS LEGAIS E ACRONIMOS IMPORTANTES 19

desconfianca por parte da comunidade de “linuxiana” que, durante anos, contribuıu gratuitamentepara o desenvolvimento do sistema operativo, receando-se que possa desmotivar alguns dos pro-gramadores mais activos. A possibilidade de grandes distribuidores de software e fabricantes dehardware poderem vir a dominar o desenvolvimento de um produto Open Source (V. seccao 2.6)e um fenomeno novo e as suas consequencias dificilmente previsıveis.

2.6 Copia e distribuicao de software: aspectos legais eacronimos importantes

2.6.1 Introducao

Open source, free software, freeware, shareware, public domain e GPL sao designacoes eacronimos frequentes em informatica, mas frequentemente mal entendidos.

Nesta seccao, introduzem-se alguns conceitos relativos as condicoes de copia, distribuicao ecomercializacao de software. Sublinhe-se que o tratamento rigoroso deste tema envolve aspectoscomplexos do ponto de vista legal e, frequentemente, polemicos. A abordagem que aqui se faze meramente introdutoria e, por este motivo, as definicoes aqui apresentadas nao sao completasdo ponto de vista formal. Ao leitor mais interessado recomenda-se a consulta dos doscumentosdisponıveis sobre este tema http://www.gnu.org/.

2.6.2 Codigo binario e codigo fonte

O codigo de um programa designa o conjunto de instrucoes que definem a sequencia deoperacoes a realizar pelo programa. Para a sequencia, e no entanto importante entender a diferencaentre codigo fonte e codigo objecto.

O Codigo fonte de um programa designa o conjunto de ficheiros com instrucoes tal comoescritos originalmente pelo programador. Estes ficheiros, escritos numa dada linguagem deprogramacao, apresentam-se sob a forma de texto, de modo a que o seu conteudo seja huma-namente legıvel. Desejavelmente, o codigo fonte de um programa inclui nao apenas a sequenciaformal de instrucoes a executar, mas tambem anotacoes do programador (comentarios), escritasem linguagem natural, que, embora nao fazendo parte do programa, facilitam a sua compreensaoe explicam aspectos particulares do seu funcionamento.

O codigo fonte de um programa, embora sendo um formato conveniente para o programa-dor humano, nao e directamente executavel pelo processador. Este so entende o chamdo codigobinario, um formato codificado em que as instrucoes sao traduzidas em sequencias de bits co-

Page 26: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

20 UNIX, GNU/LINUX E OUTROS ACRONIMOS

nhecidas pelo processador e que, de um modo geral, diferem de fabricante para fabricante. Porexemplo, todos os ficheiros de DOS/Windows que contem as extensoes .com e .exe correspon-dem a programas em codigo binario, enquanto que ficheiros com a extensao .vbe correspondem aprogramas fonte escritos em Visual Basic.

A transformacao de codigo fonte para codigo binario e feita por um programa tradutor desig-nado compilador, interpretador ou assemblador, consoante o caso. Este topico sera aprofundadona seccao 4.2.

Um programa disponibilizado em codigo fonte pode ser facilmente modificado por outro pro-gramador. O mesmo nao sucede com o codigo binario, cuja alteracao e geralmente muito maiscomplexa.15

2.6.3 Software proprietario

Ate a decada de 1980, praticamente todo o software disponıvel era produzido por fabricantesde hardware e software com fins comerciais. Este software, designado como proprietario, implicao pagamento de uma licenca para ser utilizado e a copia so e permitida para a criacao de copias deseguranca (backup).

A maioria do software proprietario e distribuıda sob a forma closed source, ou seja, apenas emformato binario. Embora seja possıvel para alguem experiente entender o codigo binario de pro-gramas simples, a mesma tarefa afigura-se extremamente difıcil em programas de complexidadeelevada. Por este motivo, a maioria das empresas que vendem codigo proprietario disponibilizam-no em formato binario ou closed source, garantindo assim a exclusividade do domınio dos aspectostecnicos do programa. Deste modo, apenas a empresa vendedora do software detem a informacaonecessaria para o corrigir e alterar, caso tal seja necessario.

A maioria do software oriundo de companhias comerciais como a Microsoft, a Novell oufabricantes de jogos e proprietario e, quase sempre, distribuıdo sob a forma closed source. Aduplicacao e copia deste software sem autorizacao das empresas proprietarias dos dieitos e quasesempre ilegal, mesmo para uso domestico e particular. Exceptuam-se situacoes particulares pre-vistas nas proprias licencas, tal como a realizacao de copias para efeitos de seguranca (backup).Por outro lado, a aquisicao de uma licenca de um determinado programa apenas permite a suainstalacao num unico computador de cada vez. A instalacao num segundo computador e geral-mente legal desde que seja apagado do computador original.

No caso de grandes empresas ou instituicoes de ensino, existem por vezes as chamada licencasde rede ou colectivas. Consoante as clausulas particulares da licenca, o detentor de uma destas

15Embora tal nao seja impossıvel: a estrategia de propagacao de muitos vırus inclui frequentemente a modificacaode ficheiros binarios.

Page 27: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

COPIA E DISTRIBUICAO DE SOFTWARE: ASPECTOS LEGAIS E ACRONIMOS IMPORTANTES 21

licencas pode adquirir autorizacao para instalar um numero ilimitado de copias ou, alternativa-mente, para gerir de uma forma relativamente flexıvel as licencas e copias dentro da insituicao.Noutra variante das licencas de rede, a instituicao pode ter um numero ilimtado de copias insta-ladas, mas apenas um determinado numero maximo de programas pode ser executado simultane-amente. Neste ultimo caso, o numero maximo de copias em execucao simultanea e monitorizadoe autorizado por um programa especial, fornecida pelo fabricante, que supervisiona a rede decomputadores da instituicao.

2.6.4 Software livre, domınio publico e GPL

Em 1983, Richard Stallman, um investigador do MIT, inicia um movimento em defesa dofree software ou software livre. Este movimento e concretizado no projecto GNU (ver seccao2.7), o qual tinha por objectivo o desenvolvimento de um sistema operativo compatıvel com Unix,baseado exclusivamente em software livre. Por software livre entende-se software que se encontrapublicamente disponıvel em codigo fonte e que pode ser copiado, distribuıdo e alterado livremente.

Alem da defesa de um princıpio essencial que Stallman designa por liberdade deprogramacao16, a principal motivacao do projecto GNU foi a de fomentar a crıtica, cooperacaoe intercambio entre a comunidade de programadores como forma de estimular a criacao de maise melhor sofwtare. Mais, porque a possibilidade de reutilizar livremente parte de programas jadesenvolvidos e testados permite o densenvolvimento mais rapido de novas aplicacoes. Melhor,porque a possibilidade de qualquer programador consultar e modificar o codigo fonte permite queos erros detectados sejam mais rapidamente identificados e corrigidos.

Apesar do seu nome, sofwtare livre nao significa necessariamente software gratis. Uma em-presa pode cobrar uma dada quantia por organizar e distribuir um CD-ROM com software livre,prestando eventualmente servicos complementares de assistencia tecnica. E, por exemplo, o casoda RedHat, actualmente a maior companhia de distribuicao do sistema operativo Linux. O soft-ware distribuıdo nestas condicoes devera, no entanto, manter-se livre, no sentido em que qualquerutilizador tem o direito de duplicar o CD e de modificar o codigo ali incluıdo.

O conceito de software livre e frequentemente confundido com a nocao de software dedomınio publico ou (public domain). Os dois referem, no entanto, situacoes legais diferentes.

Quando alguem coloca um programa (ou produto) no domınio publico, nao retem qualquerdireito de autor (copyright) sobre o material publicado. Tal significa que qualquer indivıduo ouempresa tem o direito de modificar o software e eventualmente comercializa-lo sob a forma deprograma proprietario. O autor original do programa nada pode fazer porque, ao colocar o produto

16Richard Stallman produziu muitos artigos em que discute diversos aspectos da filosofia GNU, os quais podem serconsultados em http://www.gnu.org/.

Page 28: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

22 UNIX, GNU/LINUX E OUTROS ACRONIMOS

no domınio publico, prescindiu de todos os direitos legais que sobre ele poderia deter. Por estemotivo, esta forma de distribuicao nao e encorajada pelos defensores do free software.

Distribuir um programa como software livre nao significa que o programador prescinda ouceda os direitos de autor. Este facto permite que o autor, embora sem limitar o direito de copia emodificacao por terceiros, possa colocar limitacoes a forma como este programa e utilizado ou re-distribuıdo por terceiros. Para clarificar este aspecto, o conceito de software livre segundo a GNUfoi formalizado na chamda Gnu Public Licence (GPL), que define um conjunto de condicoes quedevem ser respeitadas por qualquer utilizador de software GNU. Basicamente, a GPL estabeleceque o autor original do software retem os seus direitos iniciais e que a redistribuicao de versoesoriginais ou modificadas so e permitida quando acompanhadas do codigo fonte correspondente esob as mesmas condicoes da distribuicao original. Quando uma versao modificada e distribuıda,deve estar explıcito no codigo fonte que se trata de uma versao alterada, devendo as modificacoesestar claramente identificadas. Quem modifica o software retem, por sua vez, o direito de autorsobre as partes que modificou ou acrescentou. A licenca GPL nao se destina a utilizacao internado projecto GNU, podendo ser adoptada por qualquer programador que deseje distribuir softwarenos termos definidos pela GPL.

Frequentemente a designacao open software e utilizada alternativamente a free software. Em-bora em muitas situacoes praticas estas duas designacoes sejam equivalentes, estritamente falandoopen source apenas identifica que o software e disponibilizado em codigo fonte. Embora nao sejafrequente, esta designacao pode abranger software que nao seja disponibilizado gratuitamente eque a sua duplicacao seja proıbida.

Alem da versao GPL, ha diversas variantes de licencas de distribuicao de software livre, cadauma com as suas subtilezas legais. No seus detalhes, a GPL e geralmente considerada a mais“fundamentalista” em termos de free software. Existem licencas de software livre que permitem,apesar de tudo, o desenvolvimento e a comercializacao de produtos ou versoes modificadas em for-mato closed-source, ou em que a redistribuicao da versao original e livre mas nao a redistribuicaode versoes modificadas.

2.6.5 Freeware e shareware

Freeware e shareware designam formas de distribuicao de software em formato closed sourcee, como tal nao modificaveis. O software e para, efeitos legais, proprietario do autor.

De um modo geral, designa-se por freeware software de copia e distribuicao gratuita, mas quee disponibilizado apenas em formato binario e, como tal, nao modificavel. Deste modo, o freewaree gratuito, mas nao e livre no sentido definido pela GNU e pela GPL.

Shareware e uma forma de distribuicao que foi popularizada pela internet e que surge como

Page 29: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

O PROJECTO GNU E O SISTEMA GNU/LINUX 23

forma de comercializacao alternativa de software proprietario por parte de programadores indivi-duais e pequenas empresas. De forma a evitar o recurso a canais de distribuicao comerciais con-vencionais, que implicam um esforco financeiro e de marketing adicionais, a distribuicao de sha-reware baseia-se na autorizacao de copia e distribuicao livre por parte dos utilizadores. Pretende-se, desta forma, facilitar tanto quanto possıvel a divulgacao do programa distribuıdo. No entanto,os utilizadores sao supostos procederem ao registo da sua copia e pagamento de uma licenca se,apos um perıodo de teste do programa, optarem pela sua utilizacao permanente. Frequentemente,os programas distribuıdos em shareware descrevem as condicoes e limitacoes da versao de teste e,por vezes, contem dispositivos que bloqueiam o seu funcionamento apos um detrminado perıodode tempo sem registo ou que limitam as sua funcionalidades. Embora as disposicoes legais do sha-reware sejam frequentemente ignoradas, do ponto de vista legal, a utilizacao de shareware apos operıodo experimental e equivalente a utilizacao ilegal de software proprietario.

2.7 O projecto GNU e o sistema GNU/Linux

Conforme se referiu anteriormente, em 1983 Richard Stallman deu inıcio ao projecto GNU,o qual tinha por objectivo o desenvolvimento de um sistema operativo compatıvel com Unix,que representasse eventualmente uma evolucao deste, baseado exclusivamente em software li-vre. A designacao GNU e um acronimo proposto por Stallman derivado de “GNU’s not Unix”,definicao em que a recursividade surge como um tributo a um conceito importante para a cienciada computacao.

O projecto GNU tinha como objectivo o desenvolvimento de um sistema operativo completo.Neste contexto, e importante detalhar o significado de completo: alem do nucleo, que gere adistribuicao de recursos fısicos pelos programas e a comunicacao entre estes, um sistema operativorequer um conjunto grande de programas utilitarios. Duplicar, apagar ou editar ficheiros, compilar,gerir contas de utilizadores e espaco em disco, estabelecer ligacoes com outros computadores,arquivar e ate dialogar com um utilizador atraves de uma linha de comando sao tarefas que naosao executadas directamente pelo nucleo, mas sim por um vasto conjunto de pequenas aplicacoesque sao geralmente fornecidas conjuntamente com o sistema operativo. Por exemplo, programascomo o “notepad” e o “explorer” sao essenciais numa distribuicao do Windows, mas do ponto devista funcional sao independentes do nucleo do Windows.

Face a complexidade do desenho do nucleo de um sistema operativo, durante varios anos oprojecto GNU dedicou-se apenas ao desenvolvimento de utilitarios que constituiam versoes me-lhoradas da maioria das ferramentas do Unix da ATT. Alem da contribuicao do proprio Stallman,que incluıu algumas componentes fundamentais como as versoes originais do compilador gcc, doeditor emacs, do gerador de parsers bison, participaram no projecto centenas de programadores.No inıcio da decada de 90, o projecto GNU ja incluıa versoes de praticamente todas as ferramentas

Page 30: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

24 UNIX, GNU/LINUX E OUTROS ACRONIMOS

do sistema Unix, faltando apenas o desenvolvimento do nucleo. Stallman pensava desenvolver onucleo do GNU baseado no Mach, um sistema operativo que, tal como o Minix de Tanenbaum, sebaseava numa arquitectura de microkernel, mas o projecto enfrentava dificuldades varias.

A decisao de Linus de desenvolver o Linux e o distribuir sob a licenca GPL so foi possıvelpela existencia previa de todos os utilitarios da GNU necessarios para preencher o espaco quemedeia entre o nucleo e o utilizador. Estritamente falando, Linux designa apenas o nucleo dosistema operativo. Se e verdade que o sucesso do Linux so e possıvel pela existencia previa doprojecto GNU, e tambem um facto que e o trabalho de Linus que permite dotar, pela primeira vez,o projecto GNU de um nucleo estavel e, assim, fechar o circulo iniciado e projectado por RichardStallman em 1983.

Num sistema Linux tal como distribuıdo actualmente por empresas como a RedHat ou a Deb-bian, cerca de 30% do codigo fonte e tem origem no projecto GNU e apenas 3% a 5% representao nucleo do sistema operativo17. Por este motivo, Richard Stallman defende que a designacaocorrecta para os sistemas Linux deveria ser sistema GNU/Linux e nao apenas Linux, de forma asubstanciar o papel que o projecto GNU teve e tem na genese e manutencao do Linux.

17O restante software e tambem gratuito, mas nem sempre distribuıdo sob a licenca GPL (e o caso, por exemplo daversao XFree86 do sistema X Windows).

Page 31: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

Capıtulo 3

Ambiente de trabalho em Unix

3.1 Introducao

Neste capıtulo faz-se uma sintese dos principais comandos do sistema Unix e de alguns as-pectos do seu funcionamento. Pretende-se aqui descrever apenas os comandos essenciais a umaprimeira interaccao com o sistema, sem aprofundar os seus detalhes de funcionamento. Supoe-seque aprendizagem do comando <man> e a consulta de outros elementos de estudo (ver capıtulo6) serao os complementos deste texto introdutorio.

Conforme se referiu no capıtulo 2, o GNU/Linux nao e mais do que uma implementacao deUnix em software livre. Deste modo, no seguimento utilizar-se-a a designacao “Unix” a propositode comandos e conceitos genericos, restringindo-se uso da designacao “Linux” a exemplos esituacoes que digam respeito esepcificamente a esta implementacao do Unix.

3.2 Acesso ao sistema

3.2.1 Conta de utilizador

O sistema UNIX e um sistema multi-utilizador, capaz de gerir o acesso simultaneo de diversosutilizadores e aplicacoes a uma mesma maquina.

Cada utilizador e identificado perante a maquina pela especificacao de um dado username,atribuıdo pelo gestor do sistema. O username permite a manutencao de um registo (account, ouconta de utilizador) individual das operacoes efectuadas e recursos utilizados. Cada utilizador eresponsavel perante o gestor da maquina por todas as utilizacoes indevidas ou ilegais dos recursosdisponibilizados que sejam registados na sua conta individual.

Page 32: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

26 AMBIENTE DE TRABALHO EM UNIX

De modo a garantir a confidencialidade e seguranca do acesso a cada conta de utilizador, acada username encontra-se associada uma password especıfica. A password e atribuıda inicial-mente pelo gestor do sistema, mas pode ser alterada em qualquer altura pelo proprio utilizador (ocomando a utilizar para este efeito e descrito numa seccao seguinte). A password tem uma di-mensao maxima de 8 caracteres podendo incluir a maioria dos caracteres disponıveis nos teclados.

Dada a existencia de programas capazes de descodificar passwords com estruturas simples, aescolha de uma password deve obedecer aos seguintes criterios:

• Ter uma dimensao mınima de 6 caracteres.

• Nao corresponder, em nenhum caso, a uma palavra simples ou nome proprio de qualquerlıngua.

• Incluir caracteres minusculos e maiusculos.

• Incluir alguns dıgitos e pelo menos 1 caracter nao alfanumerico (p. ex., &, *, !, etc.) na suacomposicao.

3.2.2 Login e Shell

O acesso a uma sessao de trabalho em UNIX efectua-se especificando o username (solicitadonormalmente pela indicacao login:) e password solicitados pelo sistema. A especificacao quer dousername quer da password deve ser seguida da tecla <return>. Por razoes de confidencialidade,a password nao surge no monitor quando e introduzida.

Apos a entrada em sessao, o utilizador passa a dialogar com um interpretador de comandos deUNIX, vulgarmente designado por shell. Existem diversos interpretadores de comandos de UNIXcom caracterısticas distintas (bash, cshell, tcshell, bourne, etc). A discussao das caracterısticasque distinguem as diversas shells encontra-se fora do ambito deste texto. No seguimento, assumir-se-a que o utilizador trabalha com a bash, a qual e a shell por omissao dos sistemas Linux. Note-se,no entanto, que os comandos mais correntes de UNIX correspondem a aplicacoes independentesdo interpretador de comandos, e como tal disponıveis em qualquer shell.

No final da sessao de trabalho, o utilizador devera desligar a sua sessao pela execucao docomando logout. A verificacao de que a sessao foi desligada e essencial para garantir a segurancado sistema e evitar a utilizacao indevida da sua conta de utilizador.

No sistema Unix, cada programa tem geralmente associado um conjunto de variaveis quecontem informacao sobre o ambiente e que podem ser consultadas em qualquer altura. Algumasdestas variaveis sao inicializadas pelo sistema, enquanto que outras podem ser definidas pelo utili-zador no ficheiro .bashrc do seu directorio principal, o qual e lido sempre se inicia o interpretador

Page 33: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

O SISTEMA DE JANELAS X 27

de comando bash. Por exemplo, a variavel PATH, especifica a lista de directorios consultados pelashell para procurar um programa que se pretenda executar, separados por doispontos. A consultadesta variavel pode ser feita pelo comando

$ echo $PATH

3.3 O sistema de janelas X

O sistema de janelas X e a interface grafica adoptada em maquinas com o sistema Unix.

Quando o utilizador efectua o login no sistema de janelas X, passa a poder abrir diversasjanelas simultaneamente no ecran. Assim, uma janela podera incluir um gestor de ficheiro, outrapode corresponder a um terminal virtual onde e executada uma shell e outra a um editor de texto.

Com o login, e normalmente executado automaticamente um programa designado gestor dejanelas (window manager), responsavel pelo controlo das diversas janelas e pela gestao dos menusde utilizador, geralmente acessıveis posicionando o rato em qualquer ponto do fundo do ecran ecarregando no botao do lado direito. No entanto, embora o sistema X seja o mesmo, existemhoje em dia diferentes gestores de janelas e interfaces de utilizador, com aspectos graficos muitodistintos e configuraveis atraves de temas, skins e outras opcoes do utilizador. Este facto gera umagrande variabilidade nas interfaces possıveis, fazendo a sua descricao cair fora do ambito destetexto.

Sublinhe-se apenas que existem varios programas que permitem abrir um terminal virtual nosistema de janelas X, entre os quais o xterm, o nxterm ou o gnome-terminal. Um terminal virtualexecuta uma shell, a qual funciona em modo de comando de forma identica ao que sucede emmodo de texto. Grande parte da descricao das proximas seccoes admitem que o utilizador dialogacom o sistema, atraves de uma shell, em modo de comando.

No sistema X, e possıvel executar um programa num computador e a janela grafica corres-pondente ser aberta no monitor ligado a outra maquina. Esta possibilidade e controlada, nosprogramas que usam X, atraves da variavel de ambiente DISPLAY. Uma inicializacao incorrectadesta variavel e suficiente para impedir o funcionamento correcto do sistema grafico. Emboraesta variavel seja inicializada automaticamente de forma a apontar para o ecran em que se esta atrabalhar, e possıvel altera-la com o comando

$ export DISPLAY=<nome>:0

onde <nome> e o nome do computador em cujo sistema grafico se pretende abrir a janela. Paraque isto seja possıvel e necessario que este ultimo autorize a ligacao. Esta autorizacao que pode

Page 34: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

28 AMBIENTE DE TRABALHO EM UNIX

ser dada atraves dos comandos xhost ou xauth.

3.4 Modo interactivo

3.4.1 Hierarquia de directorios

Um ficheiro corresponde a um conjunto estruturado de dados residente na memoria secundaria(disco) do sistema. O conteudo de um ficheiro pode ser texto (como o deste manual), um programaexecutavel, dados, etc.

Os ficheiros em UNIX encontram-se organizados por directorios (ou directorias). Um di-rectorio pode ser comparado a um arquivo em que sao guardados ficheiros relativos a um tema co-mum. No entanto, cada directorio pode incluir, alem de ficheiros, outros directorios, nao existindoum limite pre-estabelecido para o numero de nıveis que esta estrutura hierarquica pode suportar.Na figura 3.1 apresenta-se um exemplo tıpico de uma arvore de directorios em UNIX. Nesta figura,os rectangulos a cheio representam ficheiros e os restantes directorios.

Nos sistemas UNIX, um directorio nao e mais que um caso particular de um ficheiro comfuncionalidades especıficas. Frequentemente, um mesmo comando pode ser aplicado igualmentea um ficheiro ou a um directorio, embora o seu modo exacto de funcionamento possa ser ligeira-mente diferente num caso e outro.

Em geral, cada utilizador tem associado a sua conta um directorio de defeito (home directory)que pode gerir da maneira que considerar mais conveniente. A partir da sua home directory, outilizador pode criar um numero arbitrario de nıveis de directorios (em nıveis hierarquicamenteinferiores), sendo apenas limitado pelo espaco disponıvel em disco (ou pelo espaco em disco as-sociado a sua conta de utilizador). Como e evidente, e conveniente o utilizador definir os seusdirectorios de acordo com as diferentes trabalhos que realiza no sistema, embora este procedi-mento nao seja obrigatorio.

A cada ficheiro de UNIX encontra-se associado um nome (filename). O nome de um ficheiroe composto de 1 a 14 caracteres (embora muitas versoes de UNIX admitam nomes mais longos).Apesar de ser possıvel utilizar quase todos os caracteres disponıveis no nome de um ficheiro, epor diferentes motivos conveniente restringir os nomes de ficheiros a caracteres alfanumericos(numeros e letras) e aos caracteres ’.’ e ’ ’. Como e evidente, todos os ficheiros residentes nummesmo directorio tem um nomes distintos; no entanto, e possıvel haver ficheiros com nomesidenticos em directorios diferentes.

Todos os directorios do sistema UNIX sao definidos a partir de um directorio de nıvel superior.A unica excepcao a esta regra e o directorio raız do sistema (root directory) o qual e criado durante

Page 35: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

MODO INTERACTIVO 29

Figura 3.1: Exemplo de uma arvore de directorios em UNIX.

Page 36: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

30 AMBIENTE DE TRABALHO EM UNIX

o processo de instalacao do sistema na maquina. No caso do exemplo da figura 3.1, o directorioraız surge no topo da hierarquia, sendo referenciado pela barra (/). Todos os directorios existentesno sistema de ficheiros ”descendem”em ultima analise deste, embora seja variavel o numero denıveis da hierarquia existente entre ambos.

Cada ficheiro ou directorio e registado em nome de um dado utilizador. O sistema mantem,paralelamente, um mecanismo de controlo de acessos a cada ficheiro ou directorio. A permissaode acesso a um dado ficheiro pode ser definida em 3 nıveis distintos: utilizador proprietario doficheiro (owner), grupo (group) e todos os outros utilizadores (world). A definicao de gruposde utilizadores permite a que utilizadores de um mesmo grupo partilhem ficheiros de interessecomum. Para cada um deste nıveis, e possıvel definir o ficheiro como de leitura (r), escrita (w),execucao (x) ou qualquer combinacao dos tres modos anteriores. A permissao de acessos a dadoficheiro pode ser alterado em, qualquer altura pelo proprietario do ficheiro com o comando chmod.

3.4.2 Pathnames Absolutos

Durante a execucao de uma tarefa especıfica no sistema, o utilizador encontra-se localizadonum directorio bem determinado (directorio de trabalho). Quando um ficheiro e especificadopelo seu nome simples, admite-se que este directorio reside (ou deve ser criado, se for este ocaso) no directorio de trabalho. E no entanto possıvel especificar um ficheiro residente em outrodirectorio pela indicacao do pathname absoluto do ficheiro. O pathname absoluto de um ficheiroe constituıdo pelo seu nome precedido pelo nome de todos os directorios de que ele depende ateao directorio raız, separadas por uma ’/’1.

Considere-se por exemplo o ficheiro prog.c residente no nıvel mais baixo da hierarquia repre-sentada na fig. 3.1. O pathname absoluto deste ficheiro e

/home/user1/prog1/src/prog.c

Na definicao de um pathname absoluto pode ser usado o sımbolo˜ (til) para referenciar odirectorio de defeito de um dado utilizador. Por exemplo, <username> referencia o directoriode defeito do utilizador <username>. Caso o nome de utilizador seja omitido,˜referencia o di-rectorio de defeito do utilizador que usa o comando. Por exemplo, no caso da figura 3.1, admitindoque a area de defeito do utilizador user1 e

/home/user1

1Quem estiver familiarizado com o sistema MS-DOS, facilmente reconhecera a semelhanca entre a hierarquia deficheiros nos dois sistemas, substituindo a barra invertida (backslash) por /. E conveniente ainda notar a ausencia emUNIX do conceito de drive do MS-DOS.

Page 37: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

MODO INTERACTIVO 31

e do utilizador user2

/home/user2

o utilizador user2 pode aceder a prog.c (se tiver permissao de acesso a este ficheiro) explicitando

˜user1/prog1/src/prog.c

enquanto que utilizador user1 podera obter o mesmo resultado referenciando

˜/prog1/src/prog.c

3.4.3 Pathnames relativos

Conforme se viu na seccao anterior, a especificacao de um pathname absoluto comeca comuma ’/’, que indica o directorio raız do sistema. Se esta barra inicial for omitida na especifica-cao do pathname, este e considerado como relativo ao directorio de trabalho. Deste modo, se odirectorio de trabalho for

/home/user1

e possıvel aceder directamente a prog.c especificando

prog1/src/prog.c

Quando um directorio e criado, sao automaticamente criadas dois ficheiros que tem funcoesespecıficas. O primeiro destes ficheiros e identificado por um unico ponto (’.’) e identifica oproprio directorio. O segundo ficheiro e identificado por dois pontos (’..’) e identifica o directoriode nıvel hierarquico imediatamente superior, i.e., o directorio de que este descende. Este ultimoficheiro pode ser usado para especificar um pathname relativo de um ficheiro residente num nıvelsuperior da hierarquia ou num ramo diferente. Admita-se por exemplo que o directorio de trabalhoe

/home/user1/prog1/src/sub1

e possıvel aceder directamente a prog.c especificando

../prog.c

Page 38: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

32 AMBIENTE DE TRABALHO EM UNIX

De modo semelhante, caso o directorio de trabalho seja

/home/user2/prog/src

e possıvel aceder directamente a prog.c especificando

../../../user1/prog1/src/prog.c

3.5 Comandos

O utilizador dialoga com a shell pela introducao de comandos. Um comando e normalmenteespecificado por uma linha de texto seguida da tecla <return>2. Apos a execucao de cada co-mando, surge no monitor o prompt do interpretador, indicando que este esta pronto a receberuma nova linha de comando. O prompt de defeito da shell e o caracter $, embora este possa serredefinido pelo utilizador.

Um comando em UNIX tem habitualmente a forma3

$ <nome do comando> <flags> <argumentos>

As <flags> sao geralmente opcionais e especıficas de cada comando. Tem normalmente aforma de um hıfen ’-’ seguido de uma letra. Sao geralmente utilizadas para especificar determina-das funcionalidades nao disponıveis na versao base do comando.

Os <argumentos> sao igualmente depedentes do comando, e designam habitualmente enti-dades sobre as quais o comando opera.

Embora esteja fora do ambito deste texto uma descricao dos comandos disponıveis em UNIX,inclui-se aqui uma breve listagem dos utilizados mais frequentemente. A descricao apresentadae muito sumaria, devendo o utilizador usar o comando man para consulta a uma descricao maisdetalhada de cada comando.

• man <comando>

Lista a pagina de manual de <comando> e tem as funcionalidades associadas ao helpexistente em outros sistemas operativos. De um modo geral, a pagina de manual inclui

2E possıvel utilizar comandos com mais de uma linha de texto; no entanto este caso nao sera aqui considerado.3Nos exemplos de comandos incluıdos neste texto, faz-se preceder o comando do sımbolo $, caracterıstico do prompt

da shell. Convem notar no entanto que este sımbolo nao e introduzido pelo utilizador.

Page 39: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

COMANDOS 33

uma descricao sumaria das funcionalidades do comando e das suas opcoes. As paginas demanual de Unix sao, de um modo geral, sistematicas e sinteticas. Embora o seu formatotıpico possa parecer hermetico nas primeiras consultas, o mesmo revela-se extremamenteeficiente apos um primeiro perıodo de habituacao a terminologia utilizada.

• pwd

Indica o directorio de trabalho corrente.

• ls

Lista os ficheiros existentes no directorio de trabalho. E possıvel acrescentar argumentos deforma a selecionar apenas ficheiros com determinadas caracterısticas: por exmplo,

ls a*

lista todos os ficheiros comecados por a, enquanto que

ls a*f*b ghi*

lista todos os ficheiros cujo nomes tenha, inıcio em a, fim em b e apresentem um f pelomeio, alem de todos os ficheiros iniciados por ghi.

• cd <nome>

Muda o directorio de trabalho corrente para o directorio <nome>. Se <nome> nao forindicado, muda o directorio corrente para a home directory do utilizador.

• mkdir <nome>

Cria o directorio <nome>

• cp <origem> <destino>

Copia o ficheiro <origem> para <destino>. Se <destino> for um directorio, e criado umficheiro com o nome <origem> neste directorio.

• mv <origem> <destino>

Muda o nome do ficheiro ou directorio <origem> para <destino>. Se <destino> for umnome de um directorio ja existente, o ficheiro ou directorio <origem> e deslocado para odirectorio <destino>, mantendo o mesmo nome.

• rm <nome>

Apaga o ficheiro <nome>.

• rmdir <nome>

Apaga o directorio <nome>.

Page 40: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

34 AMBIENTE DE TRABALHO EM UNIX

• cat <nome>

Lista o ficheiro <nome>. Para visualizacao do conteudo de um ficheiro, este comando egeralmente substituido pelo comando <less>, descrito mais a frente.

• du -s <nome>

Indica o espaco em disco ocupado pelo ficheiro <nome>. Caso <nome> seja um di-rectorio, o espaco indicado inclui todos os seus ficheiros e sub-directorios. Para saber a areatotal ocupada pelo utilizador usar du -s .

• less <nome>

Lista o ficheiro <nome> pagina a pagina. O avanco de cada pagina e realizado pela utiliza-cao da tecla de espaco. O comando pode ser terminado em qualquer altura com a teclaq.

• chmod <modo> <nome>

Muda a permissao de acessos do ficheiro <nome> de acordo com <modo>.

• grep <sequencia><nome>

Lista todas as linhas do ficheiro <nome> que contenham a sequencia de caracteres<sequencia>.

• passwd

Altera a password do utilizador.

• logout

Sair de sessao.

Um comando pode ser interrompido premindo simultaneamente as teclas <ctrl> e c.

3.6 Dispositivos de entrada e saıda

Os dispositivos de entrada e saıda sao tratados no sistema UNIX como ficheiros de carac-terısticas especiais (special files). A cada dispositivo de entrada/saıda esta geralmente associadoum ficheiro do directorio /dev. Por exemplo, a escrita ou leitura do terminal de trabalho (seja elereal ou uma janela virtual) pode ser escrevendo ou lendo o ficheiro /dev/tty. Este tipo de organiza-cao permite uma flexibilidade muito grande no desenvolvimento e utilizacao de aplicacoes.

Page 41: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

REDIRECCIONAMENTO 35

3.7 Redireccionamento

A todas as aplicacoes de UNIX sao automaticamente associados dois dispositivos de saıda eum de entrada:

• standard output Dispositivo de defeito para saıda de mensagens. No caso de uma sessao noterminal, este dispositivo e, por defeito, o monitor do terminal

• standard error Dispositivo de defeito para saıda de mensagens de erro. No caso de umasessao no terminal, este dispositivo e, por defeito, o monitor do terminal.

• standard input Dispositivo de defeito de entrada de dados. No caso de uma sessao no termi-nal, este dispositivo e, por defeito, o teclado do terminal.

Em qualquer dos casos (teclado/monitor), estes dispositivos correspondem ao ficheiro especial/dev/tty.

Frequentemente, e conveniente alterar um ou mais dos dispositivo de defeito anteriormenteindicados. A especificacao de um dispositivo entrada/saıda alternativo pode ser efectuado na li-nha de comando. A especificacao de um dispositivo alternativa como standard output efectua-seadicionando a linha do comando o sımbolo > seguido do nome do dispositivo pretendido:

$ <comando> <flags e argumentos> > <dispositivo de saıda>

Considere-se, por exemplo, o caso do comando ls. Como descrito anteriormente, este co-mando lista os ficheiros de um dado directorio. Por defeito, este comando produz uma listagemno terminal (standard output). Se se pretendar criar um ficheiro de nome lista no directorio detrabalho com o resultado da listagem, o comando a utilizar e

$ ls > lista

Se pretender redireccionar conjuntamente o standard output e standard error para um mesmoficheiro, pode ser usada a seguinte linha de comando:

$ <comando> <flags e argumentos> >& <dispositivo de saıda>

De igual modo, e possıvel redireccionar o dispositivo de entrada standard input adicionandoa linha do comando o sımbolo < seguido do nome do dispositivo pretendido:

$ <comando> <flags e argumentos> < <dispositivo de entrada>

Page 42: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

36 AMBIENTE DE TRABALHO EM UNIX

3.8 Pipes

O UNIX possibilita que o dispositivo de standard output de uma aplicacao seja ligado direc-tamente ao dispositivo de standard input de uma segunda aplicacao pela utilizacao do mecanismode pipe. Este resultado e obtido indicando as duas aplicacoes em sequencia na mesma linha decomando, separados pelo caracter |. Este mecanismo e equivalente a redireccionar a saıda daprimeira aplicacao para um ficheiro, e utilizar o ficheiro assim criado como entrada da segundaaplicacao.

Recorrendo ao exemplo ja dado anteriormente, admita-se que se redirecciona a listagem dodirectorio corrente para um ficheiro lista, e posteriormente se pretende visualizar o conteudo doficheiro com o comando less. Este procedimento pode ser realizado pela sequencia de dois co-mandos:

$ ls > lista

$ less lista

Exactamente mesmo resultado pode ser obtido, sem a criacao do ficheiro lista, pela utilizacaode um pipe em que a saıda do comando ls e automaticamente utilizada como entrada do comandoless.

$ ls | less

Note-se que a utilizacao de pipes, alem de facilitar a especificacao de comandos estrutura-dos complexos, e extremamente eficiente dado nao implicar a criacao de ficheiros temporariosintermedios (toda a comunicacao entre aplicacoes e efectivamente realizada na memoria centralda maquina).

Page 43: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

Capıtulo 4

Desenvolvimento de programas

4.1 Introducao

O desenvolvimento de programas em linguagens de alto nıvel requer um processo de desen-volvimento, teste e aperfeicoamento que, na maioria dos casos, tem que ser repetido diversas vezesdiversas vezes ate se atingir uma versao funcional e estavel. Grande parte do software comerciale sujeito a revisoes, melhoramentos e correccoes de erros mesmo depois da primeira versao sercomercializada.

O processo iterativo de desenvolvimento e teste de um programa e designado por ciclo dedesenvolvimento de um programa, e o seu entendimento e fundamental para a compreensao dosdiversos componentes que envolvem od desenvolvimento de um programa numa linguagem dealto nıvel.

4.2 Assembly e Linguagens de alto nıvel

As instrucoes executaveis directamente por um dado processador tem uma estrutura relativa-mente simples e variam consoante o modelo e o fabricante. Estas instrucoes tem formatos rela-tivamente simples e uma ligacao proxima ao hardware, designando-se por isso codigo maquinado processador. Uma determinada instrucao em codigo maquina pode ter como significado “le oconteudo do endereco de memoria 1000 e coloca-o no registo A” ou “testa o conteudo do registoB e, se for zero, executa as intrucoes que se encontram a partir do endereco 21456”.

A linguagem de programacao Assembly permite programar em codigo fonte (ou seja, emformato de texto) mas usando uma linguagem muito semelhante a do processador. A traducao deAssembly para codigo binaria e feita por um programa designado Assemblador.

Page 44: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

38 DESENVOLVIMENTO DE PROGRAMAS

Dada a sua proximidade ao hardware, a linguagem Assembly e conveniente para explorar aspotencialidades do processador, mas muito pouco pratica para desenvolver estruturas logicas maiselaboradas1. Deste modo, os programas sao geralmente desenvolvidos numa linguagem de altonıvel, em que as instrucoes especificam operacoes entre entidades logicas e funcionais abstractase independentes do processador. Por exemplo, a sequencia de instrucoes em C

if ( a == b)

x += 5;

else

y = x + 3;

tem um significado proximo do que e de esperar da sua leitura em ingles natural: “compara ovalor das variaveis a e b e, se forem iguais, incrementa a variavel x de 5 unidades, senao atribui avariavel y o resultado da adicao de x com 5”.

Existem diversas linguagens de alto nıvel, como por exemplo o C, o C++, o Pascal, o Java,o Lisp, o Fortran e o Basic, entre outras. Alem da maior comodidade de programacao, o de-senvolvimento de programas em linguagens de alto nıvel garante que o codigo desenvolvido sejaindependente do processador. A traducao de um programa de alto nıvel para linguagem maquinae realizada por um programa designado por compilador. Assim, quando um fabricante desenvolveum novo processador, e suficiente escrever um compilador para uma dada linguagem de alto nıvel2

para que o software existente nessa linguagem possa ser executado no novo processador.

O C, o C++, o Pascal e o Fortran sao exemplo de linguagens de alto nıvel compiladas. Nes-tes casos, o programa e trazudido e so entao executado. Alternativamente, existem linguagensque interpretadas: o programa e lido por um interpretador, que le o codigo de alto nıvel e pro-cede simultaneamente a execucao das instrucoes correspondentes de baixo nıvel. Sao exemplo delinguagens interpretadas o Basic e certos formatos de Java e Lisp.

A execucao de um programa compilado e geralmente mais rapida do que a de um programainterpretado, ja que neste ultimo caso o interpretador procede simultaneamente a traducao e aexecucao do codigo fonte. Por outro lado, a inexistencia de um passo de compilacao explıcito naslinguagens interpretadas simplifica a fase de desenvolvimento e teste de um programa.

1No entanto, a utilizacao de Assembly foi uma pratica generalizada para a escrita de compiladores e sistemasoperativos ate a decada de 80.

2Na maioria dos casos, nao e necessario re-escrever a totalidade do compilador, sendo suficiente a adaptacao de umja existente.

Page 45: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

CICLO DE DESENVOLVIMENTO 39

4.3 Ciclo de desenvolvimento

4.3.1 Compilacao e “linkagem”

O ciclo de desenvolvimento de um programa numa linguagem de alto nıvel compiladaencontra-se esquematizado na figura 4.1, onde os sufixos dos ficheiros correspondem ao desen-volvimento de um programa C em Unix.

A primeira etapa do desenvolvimento envolve a escrita de um ficheiro de texto (ficheiro oucodigo fonte) com as instrucoes do programa, utilizando um determinado editor de texto. Exis-tem diversos editores de texto disponıveis em Linux, semdo todos eles adequados a escrita deprogramas (ver capıtulo 5).

O nome do ficheiro fonte e arbitrario, devendo ser escolhido pelo programador de modo a sersugestivo da funcao realizada pelo programa. Alem do nome do propriamente dito, o sufixo ouextensao do ficheiro deve especificar a linguagem de linguagem de programacao adoptada: xpto.cpara um programa desenvolvido em C, xpto.cc para o C++, xpto.f para o Fortran ou xpto.p parao Pascal.

Apos esta etapa, o ficheiro fonte e traduzido para o chamado codigo objecto atraves do com-pilador. Em Linux, a compilacao de um programa escrito em C e realizada pelo compilador gcc.Assim, admitindo que o codigo fonte reside no ficheiro xpto.c, a compilacao efectua-se executandoo comando

$ gcc -ansi -pedantic -Wall -c xpto.c

As opcoes “-ansi -pedantic” indicam ao compilador que so deve aceitar codigo C-ansi e a opcao“-Wall” que devera reportar todas as situacoes potencialmente incorrectas que sejam detectaveis.A opcao “-c” indica que se pretende apenas compilar o ficheiro fonte. Como resultado destecomando e criado um ficheiro xpto.o com o chamado codigo objecto. O sufixo dos ficheiros docodigo objecto e .o em Unix e .obj em DOS/Windows.

O codigo objecto e um formato binario, em que as instrucoes do ficheiro fonte se encontramja traduzidas em codigo maquina. No entanto, o ficheiro assim obtido nao e ainda um programaexecutavel porque se encontra geralmente incompleto: a criacao de um programa executavel exigenormalmente que sejam reunidos ao codigo objecto modulos pre-compilados no sistema sob aforma de bibliotecas, os quais sao responsaveis pela execucao de funcoes que sao identicas paravarios programas. E o caso, por exemplo, de modulos para a realizacao de operacoes de leitura eescrita de dados ou para o calculo de funcoes trigonometricas.

A geracao do programa executavel realiza-se atrave do chamado linker, designacao que nao

Page 46: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

40 DESENVOLVIMENTO DE PROGRAMAS

Figura 4.1: Ciclo de desenvolvimento de um programa.

Page 47: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

CICLO DE DESENVOLVIMENTO 41

tem ainda uma traducao bem aceite em Portugues. Por este motivo, e frequente designar por“linkagem” a operacao realizada pelo linker, embora se trate obviamente de um aportuguesamentoforcado3.

A “linkagem” de um programa em Unix pode ser realizada pelo comando

$ gcc xpto.o

operacao que da origem a um ficheiro designado a.out com o codigo executavel. Sublinhe-seque embora a compilacao e o “linker” sejam invocados pela execucao do mesmo comando (gcc),este verifica qual a operacao a realizar pela analise do sufixo dos ficheiros envolvidos e, caso setrate de um ficheiro objecto, este e automaticamente passado ao linker (programa ld em Unix). Avantagem de este ser invocado atraves do gcc e a juncao automatica ao processo de “linkagem”das bibliotecas pre-compiladas da linguagem C que, de outra forma, teriam que ser especificadaspelo utilizador.

No comando de “linkagem” simples e possıvel gerar um ficheiro executavel com um nomealternativo a a.out. Assim, o comando

$ gcc xpto.o -o xpto

especifica que o nome do executavel devera ser xpto. Por outro lado, as fases de compilacao e“linkagem” podem ser chamadas conjuntamente com o comando

$ gcc -ansi -pedantic -Wall xpto.c -o xpto

mas deve manter-se presente que este comando realiza as duas operacoes (compilacao e “linka-gem”) em sequencia.

A execucao do programa executavel tem lugar por um comando com o nome do ficheiroexecutavel ou seja

$ a.out

ou

$ xpto

consoante o caso.3As traducoes literais “ligador” e “ligacao”, apesar de serem termos sugestivos da operacao realizada, nao sao

correntes em Portugues.

Page 48: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

42 DESENVOLVIMENTO DE PROGRAMAS

4.3.2 Erros sintaticos e semanticos

Considere-se que se pretende escrever um programa em C para calculo do dobro do cosenode um numero e que, para este efeito, se cria um ficheiro “dobro.c” com o seguinte conteudo’:

/*

*FILE

* dobro.c

*

*CONTENTS

* Programa que calcula o dobro do coseno de um numero

*

*CREATOR/CONTACT

* Fernando Mira da Silva, IST ([email protected])

*

*/

#include <stdio.h>

#include <math.h>

int main(){

/* Declaracao de variaveis */

float x,y;

/* Bloco de instrucoes */

printf(" Introduza o argumento: ");

scanf("%f",&x);

y = 3.0 * cos(x0);

printf(" O dobro do coseno de %f e %f \n",x,y)

exit(0);

}

A primeira parte deste programa, demarcada pelos caracters /* e */, corresponde a zona decomentarios. A directiva “#include <stdio.h>” e necessaria porque o programa utiliza operacoesde entrada e saıda e “#include <math.h>” porque e utilizada uma funcao matematica (coseno). Ocorpo do programa encontra-se entre as chavetas que se seguem a main(). float x,y; indica que oprograma utiliza duas variaveis de tipo numerico real. As instrucoes printf e scanf sao utilizadaspara escrever mensagens e ler variaveis, respectivamente.

Page 49: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

CICLO DE DESENVOLVIMENTO 43

A compilacao deste ficheiro com o comando gcc, em vez de produzir o ficheiro objecto,origina um conjunto de mensagens de erro:

$ gcc -ansi -pedantic -Wall -c dobro.c

dobro.c: In function ‘main’:

dobro.c:23: ‘x0’ undeclared (first use in this function)

dobro.c:23: (Each undeclared identifier is reported only once

dobro.c:23: for each function it appears in.)

dobro.c:25: parse error before ‘exit’

dobro.c:26: warning: control reaches end of non-void function

Os erros reportados pelo compilador derivam dos chamados erros sintacticos, assim desig-nados por corresponderem a nao observacao de uma ou mais regras sintacticas impostas pelalinguagem. A interpretacao das mensagens de erro requer alguma habituacao, mas trata-se de umprocesso simples desde que seja feita uma leitura atenta do seu conteudo. Um dos problemas cor-rentes na interpretacao das mensagens de erro resulta de, com alguma frequencia, estes so seremdetectados depois do local exacto do erro.

As mensagens de erro geradas pelo gcc comecam sempre por especificar o nome do ficheiroe, seguidamente, o numero da linha em que o erro foi identificado. Neste caso, o primeiro erro edetectado na linha “y = 3.0 * cos(x0)”. A mensagem “‘x0’ undeclared” chama a atencao de quea variavel x0 nao existe, pelo que aquela linha devera ser corrigida para “y = 3.0 * cos(x)”. Umsegundo erro e identificado na linha 25 (exit(0);), sendo a mensagem “parse error before ‘exit”’.De facto, estritamente falando, o erro que existe e na linha anterior, ja que falta o “;” obrigatoriono final da instrucao “printf(...)”. No entanto, dado que os espacos em branco e mudancas delinha sao sintacticamente irrelevantes em C, o erro so e detectado no inıcio da instrucao seguinte.Finalmente, a ultima mensagem, na linha 26, e consequencia do erro anterior: a ausencia do “;”leva a que a instrucao “exit(0)” nao seja identificada e, como tal, o compilador avisa que chegouao fim do ficheiro sem ter encontrado esta instrucao.

Note-se que a ultima mensagem surge reportada como aviso (warning) e nao como erro. En-quanto que os erros propriamente ditos impedem o programa de ser compilado e executado, osavios limitam-se a chamar a atencao para potenciais falhas do programa, mas nao impedem a suacompilacao e execucao. No entanto, salvo em casos excepcionais, os warning correspondem defacto a erros do programador, devendo ser corrigidos antes da execucao do programa.

Apos a correccao dos erros sintaticos, a compilacao do programa nao origina qualquer men-sagem, mas o mesmo nao sucede com a “linkagem”:

$ gcc -Wall -ansi -pedantic -c dobro.c

$ gcc dobro.o -o dobro

Page 50: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

44 DESENVOLVIMENTO DE PROGRAMAS

dobro.o: In function ‘main’:

dobro.o(.text+0x2e): undefined reference to ‘cos’

collect2: ld returned 1 exit status

Neste caso, existe um erro durante a “linkagem” do programa, indentificavel pela mensagem “ldreturned 1 exit status”, e que surge por o linker ld nao ter encontrado um componente necessarioao programa. A mensagem “undefined reference to ‘cos”’ esclarece que o problema resulta dainexistencia do codigo necessario para o calculo da funcao coseno. Este codigo esta disponıvel,conjuntamente com outras funcoes matematicas e trigonometricas, na biblioteca pre-compiladalibm.a (em Unix, o nome das bibliotecas pre-compiladas tem o prefixo lib e a extensao .a). Noentanto, o uso desta biblioteca deve ser explicitado no comando de linkagem. Assim, por exemplo,a inclusao de um biblioteca com o nome libxpto.a e feita especificando no comando de “linkagem”a opcao -lxpto. No caso do programa dobro, a inclusao da biblioteca “libm.a” implica a adicao daopcao -lm no comando, de modo a obter-se uma “linkagem” sem erros.

$ gcc -lm dobro.o -o dobro

A execucao do programa dobro conduz ao seguinte dialogo com o utilzador

$ dobro

Introduza o argumento: 0.1

O dobro do coseno de 0.100000 e 2.985013

$ dobro

Introduza o argumento: 3.1416

O dobro do coseno de 3.141600 e -3.000000

$

Agora, o programa e executado aparentemente sem erros. No entanto, os mais atentos notaraoque o dobro do coseno de 3.1416 deveria ser proximo de 2 e nao 3. Uma rapida analise do codigofonte revela que se definiu “y = 3.0 * cos(x)” em vez de “y = 2.0 * cos(x)”. Este tipo de erros,obviamente nao detectaveis pelo compilador, designam-se por erros semanticos.

Os erros semanticos sao incomparavelmente mais difıceis de corrigir do que os errossintacticos, ja que derivam de erros na construcao do programa e, como tal, nao sao automati-camente detectaveis.

A deteccao e correccao de erros semanticos e geralmente efectuada durante a fase de testeou depuracao (debug), em que o programador simula situacoes de funcionamento tıpicas do pro-grama e analisa o seu comportamento. No entanto, em programas de complexidade elevada, aidentificacao de erros com base apenas na analise do resultado final do processamento e uma ta-refa difıcil. Em muitos casos, torna-se necessario analisar etapas intermedias do funcionamento

Page 51: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

CICLO DE DESENVOLVIMENTO 45

interno do programa, observando os valores de variaveis e seguindo o fluxo de execucao do pro-grama. Os chamados “debuggers” sao programas de teste que facilitam significativamente o pro-cesso de depuracao e de identificacao de erros durante o ciclo de desenvolvimento.

4.3.3 Depuracao: gdb e ddd

De modo poder ser testado com um debugger, o codigo fonte deve ser compilado com umaopcao especial (-g), que permite que o ficheiro executavel contenha “marcas” legıveis pelo de-bugger que permitam fazer uma correspondencia entre as instrucoes do ficheiro executavel e docodigo fonte. A opcao -g, embora seja conveniente durante a fase de teste, gera um programaexecutavel mais lento e de maior dimensao e, como tal, nao deve ser utilziada depois do processode depuracao ter sido concluıdo. No caso do programa “dobro”, a compilacao e “linkagem” comopcao de debug pode ser efectuada com o comando

gcc -g -Wall -ansi -pedantic dobro.c -lm -o dobro

O gdb e o debugger standard da gnu. Para executar o programa “dobro” com o auxılio do gdbdeve ser usado o comando

$ gdb dobro

GNU gdb 19991004

Copyright 1998 Free Software Foundation, Inc.

GDB is free software, covered by the GNU General Public License, and you are

welcome to change it and/or distribute copies of it under certain conditions.

Type "show copying" to see the conditions.

There is absolutely no warranty for GDB. Type "show warranty" for details.

This GDB was configured as "i386-redhat-linux"...

(gdb)

Neste ponto, o programa “dobro” nao foi ainda executado, ja que o debugger requer um comandoespecıfico para esse efeito.

Antes de iniciar a execucao do programa, o codigo fonte pode ser consultado com o comandol (list) do gdb:

(gdb) l 20

15 int main(){

16

17 /* Declaracao de variaveis */

Page 52: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

46 DESENVOLVIMENTO DE PROGRAMAS

18 float x,y;

19

20 /* Bloco de instrucoes */

21 printf(" Introduza o argumento: ");

22 scanf("%f",&x);

23 y = 3.0 * cos(x);

24 printf(" O dobro do coseno de %f e %f \n",x,y);

Note-se que cada linha de programa e precedida do numero da linha no ficheiro. O argumento 20especifica que devem ser listada as 5 linhas antes e depois da linha 20 do ficheiro.

Uma das principais vantagens do debuger e permitir a execucao de um programa linha a linhaou, alternativamente, ate a um determinado ponto especificado por um breakpoint. O comando

(gdb) br 21

Breakpoint 1 at 0x80484b6: file dobro.c, line 21.

indica que ao debugger que deve ser introduzido um breakpoint imediatamente antes da linha 21de dobro.c. Se, depois deste comando, for dado o comando de execucao do programa r (run), oprograma so sera executado ate a linha 21, parando em seguida:

(gdb) r

Starting program: /ldisks/r015a/fcr/ist/manuais/intprog/dobro

Breakpoint 1, main () at dobro.c:21

21 printf(" Introduza o argumento: ");

Neste ponto, e possıvel continuar a execucao normal do programa, com o comando c (continue),ou executar o programa linha a linha, com o comando n (next). Neste ultimo caso, ter-se-a, porexemplo

(gdb) n

22 scanf("%f",&x);

(gdb) n

Introduza o argumento: 0.1

23 y = 3.0 * cos(x);

(gdb) n

24 printf(" O dobro do coseno de %f e %f \n",x,y);

(gdb)

Page 53: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

CICLO DE DESENVOLVIMENTO 47

O conteudo das variaveis x e y pode ser analisado com o comando p (print). Assim,

(gdb) p x

$8 = 0.100000001

(gdb) p y

$9 = 2.98501253

(gdb)

A continuacao do programa ate ao final pode ser obtida pelo comando c (continue):

(gdb) c

Continuing.

O dobro do coseno de 0.100000 e 2.985013

Program exited normally.

(gdb)

Embora a utilizacao de um debugger nao permita so por si identificar os erros semanticos deum programa, a possibilidade de analise das variaveis internas e de execucao parcelar do programafaz desta ferramenta um importante auxiliar ao desenvolvimento e teste de programas.

Se o terminal Unix utilizado tiver disponıvel o sistema grafico X, a utilizacao do gdb pode sersimplificada pela utilizacao da interface grafica ddd. No caso do programa dobro, a execucao dodebugger tem lugar pelo comando

$ ddd dobro

dando origem a janela apresentada na figura 4.2.

A janela inicial do ddd encontra-se dividida em duas partes. A parte inferior desta janelaalem de permitir interactuar directamente com o gdb, usando os comandos descritos anterior-mente, deve ser utilizada para a introducao de dados no programa. Na janela superior, alem davisualizacao do codigo fonte, e possıvel definir breakpoints com o auxılio do botao do lado direitodo rato. A execucao do programa com os comandos c (continue), r (run), n (next) e s (step) efacilitada usando a janela auxiliar com os botoes de comando.

Durante a execucao do programa, o valor das variaveis do programa pode ser consultadopassando simplesmente o rato sobre o nome da variavel na janela superior. Caso se pretendauma visualizacao permanente de uma ou mais variaveis, devera ser aberto um segmento de dados,seleccionando a opcao do menu “View/Data Window”. Apos este passo, e suficiente apontar a

Page 54: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

48 DESENVOLVIMENTO DE PROGRAMAS

Figura 4.2: A interface grafica ddd

Page 55: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

CICLO DE DESENVOLVIMENTO 49

Figura 4.3: A interface grafica ddd, com o segmento de dados visıvel

Page 56: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

50 DESENVOLVIMENTO DE PROGRAMAS

variavel que se pretende visualizar no segmento do codigo fonte e, com o botao do lado direito dorato, seleccionar a opcao Display. O valor da variavel seleccionada surgira no segmento superior(V. figura 4.3).

Para mais informacao relativamente a utilizacao do ddd para depuracao de programas, deveraser consultado o manual (Foundation, 2000).

4.4 Compilacao em modulos separados

Mesmo em programas de de complexidade reduzida, o codigo fonte pode atingir alguns mi-lhares de linhas. Com o aumento da dimensao do programa, a manipulacao do ficheiro com umeditor torna-se progressivamente mais difıcil, sobretudo quando e necessario localizar determina-dos blocos ou identificar segmentos em que sao utilizadas determinadas variaveis.

De modo a evitar a utilizacao de ficheiros de dimensao excessiva, a maioria das linguagensde alto nıvel permite que o programa seja dividido por diversos ficheiros fonte, os quais sao com-pilados individualmente. A juncao dos varios ficheiros objecto e relizada durante o processo de“linkagem”.

Nao existem regras formais para realizar esta divisao, a qual depende em grande parte dametodologia do programador. No entanto, a divisao do programa nao deve ser feita de formaarbitraria, devendo obedecer a criterios funcionais claros. Uma estrategia possıvel para planearesta divisao baseia-se no agrupamento de conjuntos de funcoes e operacoes que dizem respeitoa um mesmo tipo de dados. Com esta metodologia, e geralmente possıvel chegar a conjunto demodulos que, embora com funcoes complementares no conjunto do programa, sao funcionalmenteindependentes entre si.

A correcta identificacao dos blocos ou modulos funcionais do programa desde o inıcio daanalise do problema que se pretende resolver, permite, de um modo geral, simplificar significa-tivamente o processo de teste e desenvolvimento. Com efeito, a identificacao de modulos rela-tivamente autonomos permite desenvolver e testar os diversos blocos constituintes do programaseparadamente. Um erro frequente em programadores inexperientes e a estrategia de resolucaohorizontal do problema, tentando abordar todos os seus detalhes simultaneamente. Esta metodo-logia, alem de originar programas com uma estrutura logica e funcional muito mais intrincada,dificulta significativamente a identificacao e correccao de erros.

Page 57: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

COMPILACAO EM MODULOS SEPARADOS 51

Figura 4.4: Compilacao e “linkagem” de um programa.

Page 58: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

52 DESENVOLVIMENTO DE PROGRAMAS

4.5 Bibliotecas estaticas e dinamicas

Ja se referiu anteriomente que o processo de “linkagem” envolve a juncao ao codigo objectode blocos de instrucoes pre-compilados, disponıveis no sistema sob a forma de bibliotecas. Asbibliotecas podem ser estaticas ou dinamicas. Embora o seu funcionamento, para o utilizador,seja semelhante na maioria das situacoes, e importante distinguir os dois tipos.

Tanto as bibliotecas estaticas como as dinamicas sao consultadas durante o processo de “lin-kagem”, sendo identificados os blocos de instrucOes necessarios a execucao do programa. Noentanto, enquanto que nas bibliotecas estaticas os blocos assim identificados sao incluıdos deimediato no ficheiro executavel, no caso das bibliotecas dinamicas esta operacao e adiada ate aexecucao efectiva do programa.

As bibliotecas dinamicas4 permitem que o codigo executavel tenha menor dimensao e, que oinıcio da execucao do programa seja, em geral, mais rapido. Este ultimo facto e, aparentemente,contraditorio com a necessidade de completar a “linkagem” no inıcio da execucao. No entanto,as bibliotecas dinamicas, sendo identicas para varios programas, encontram-se ja frequentementena memoria central quando e dado o comando de execucao do programa, o que permite que estetenha inıcio mais rapidamente.

A maior desvantagem das bibliotecas dinamicas reside na reducao de portabilidade do pro-grama executavel entre maquinas distintas. Com efeito, quando um programa executavel utilizabibliotecas dinamicas e e copiado de uma maquina para outra e necessario garantir que as mes-mas bibliotecas estejam disponıveis na maquina de destino para que a execucao seja possıvel. Omesmo nao sucede num programa que so utilize bibliotecas estaticas (“linkagem” estatica), ja quetodo o codigo se encontra incluıdo no executavel.

Na figura 4.4 representa-se graficamente o processo de compilacao, linkagem e execucao deum programa constituıdo por diversos ficheiros fontes e envolvendo bibliotecas estaticas (libs1.a,libs2.a e libs3.a) e dinamicas (libd1.so e libc.so). Neste exemplo, os comandos de compilacao e“linkagem” poderiam ser, por exmplo,

$ gcc -Wall -ansi -pedantic -c main.c

$ gcc -Wall -ansi -pedantic -c modulo1.c

$ gcc -Wall -ansi -pedantic -c modulo2.c

$ gcc -ls1 -ls2 -ls3 -ld1 main.o modulo1.o modulo2.o

No comando de “linkagem” nao se especifica a biblioteca libc.so porque esta e uma biblioteca“standard” incluıda automaticamente na chamdada ao “linker” pelo comando gcc.

4Em Windows, as bibliotecas dinamicas sao conhecidas pelo nome e sufico dll, proveniente de dynamic loadablelibrary

Page 59: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

O UTILITARIO make 53

Geralmente, todas as bibliotecas dinamicas tem uma versao estatica equivalente. No caso dafigura 4.4 e provavel que o sistema disponha tambem das bibliotecas estaticas libd1.a e libc.a.Por omissao, o linker utiliza preferencialmente as versoes dinamicas das bibliotecas. No entanto,caso se pretenda uma “linkagem” estatica, esta e pode ser obtida especificando a opcao -static nalinkagem:

$ gcc -static -ls1 -ls2 -ls3 -ld1 main.o modulo1.o modulo2.o

4.6 O utilitario make

Em programas complexos, e frequente o programa fonte ser constituıdo por dezenas de fi-cheiros. Durante a fase de desenvolvimento, o programador edita estes ficheiros com frequencia,sendo facil perder o controlo de quais os que foram modificados e que devem ser recompilados, eos que nao foram alteradas e que, como tal, nao necessitam deste processo.

Uma primeira solucao para este problema e escrever um ficheiro com comandos (designadopor script) de forma a que os comandos de compilacao e “linkagem” fossem sempre executadosem sequencia para todos os ficheiros. Esta solucao, embora razoavel em programas de pequenadimensao, tem o inconveniente de poder ser muito demorada em caso de programas complexos.Assim, por exemplo, no caso de um programa com 50 ficheiros fonte, nao e eficente recompilar 50ficheiros apenas porque se modificou 2 ou 3. No entanto, chamar o compilador manualmente paraos dois ou tres ficheiros modificados, alem de ser pouco pratico, conduz facilmente a situacoes emque um ou mais ficheiros nao sao actualizados, originando programas executaveis inconsistentescom o porgrama fonte.

O utilitario make permite ultrapassar esta dificuldade atraves de um sistema de regras, es-pecificadas pelo utilziador, combinadas com a comparacao das horas de modificacao dos variosficheiros. Assim, por exemplo, o utilizador pode especificar uma regra que o ficheiro xpto.o derivado ficheiro xpto.c por um comando de compilacao. Sempre que o comando make e executado,sao comparadas as datas dos ficheiros xpto.o e xpto.c e o compilador sera chamado sempre que adata de alteracao deste ultimo for mais recente que a do primeiro.

As regras do utilitario make sao escritas num ficheiro especial com o nome makefile. A ma-kefile pode incluir um numero ilimitado de regras e pode atingir uma complexidade elevada emprojectos de programacao de dimensao elevada. Embora o utilitario make possa ter regras extre-mamente elaboradas, na sua versao basica cada regra tem uma estrutura simples. Cada regra econstituıda por duas linhas. A primeira linha indica a estrutura de depencias de um dado ficheiro ea segunda linha especifica o comando que permite gerar o ficheiro a partir das suas dependencias.A segunda linha da regra distingue-se da primeira por conter obrigatoriamente um caracter de

Page 60: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

54 DESENVOLVIMENTO DE PROGRAMAS

tabulacao na primeira posicao. Note-se que este caracter e uma fonte frequente de mal entendi-dos na makefile, ja que nao e possıvel distinguir visualmente um caracter de tabulacao de umasequencia de oito espacos em brancos, mas so o primeiro e correcto na segunda linha da regra.

No caso do ficheiro xpto.o referido anteriomente, a correspondente regra da Makefile teria aestrutura

xpto.o: xpto.c

gcc -Wall -ansi -pedantic -c xpto.c

Basicamente, esta regra especifica que o ficheiro xpto.o depende de xpto.c, enquanto que a segundalinha especifica o comando que permite gerar o ficheiro xpto.o a partir de xpto.c.

No caso de um programa utilizado como exemplo na seccao 4.4, a estrutura completa damakefile poderia ser a seguinte:

#

#FILE

# makefile

#

#CONTENTS

# Makefile para geracao do programa de exemplo

# da seccao 4.4

#

#CREATOR/CONTACT

# Fernando Mira da Silva, IST ([email protected])

#

#

a.out: main.o modulo1.o modulo2.o

gcc -ls1 -ls2 -ld1 main.o modulo1.o modulo2.o

main.o: main.c

gcc -c -Wall -ansi -pedantic main.o

modulo1.o: modulo1.c

gcc -c -Wall -ansi -pedantic modulo1.o

modulo2.o: modulo2.c

gcc -c -Wall -ansi -pedantic modulo2.o

Page 61: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

O UTILITARIO make 55

Apos a preparacao da makefile, a actualizacao do ficheiro executavel apenas requer a execucaodo comando make. Este comeca por ler a makefile e, seguidamente, executara a sequencia deoperacoes necessarias para gerar ou actualizar o ficheiro especificado na primeira regra da makefile(neste caso, a.out). Com excepcao da primeira regra, que deve especificar o ficheiro a actualizarpelo comando make, as regras seguintes tem uma ordem arbitraria.

De forma a simplificar a construcao da makefile, algumas regras sao automaticas e nao preci-sam de ser explicitadas na makefile. De facto, o utilitario make dispoe de uma regra implıcita queindica que um ficheiro com a extensao .o pode ser gerado a partir de um ficheiro com extensao .catraves do gcc. Assim, a makefile do exemplo anterior poderia ser simplificada como se segue:

#

#FILE

# makefile

#

#CONTENTS

# Makefile para geracao do programa de exemplo

# da seccao 4.4 (versao simplificada)

#

#CREATOR/CONTACT

# Fernando Mira da Silva, IST ([email protected])

#

#

CFLAGS=-Wall -ansi -pedantic

a.out: main.o modulo1.o modulo2.o

gcc -ls1 -ls2 -ld1 main.o modulo1.o modulo2.o

Neste exemplo, embora se tenham omitido as regras implıcitas de compilacao, foi necessario espe-cificar atraves de uma variavel (CFLAGS) quais as opcao de compilacao que devem ser adoptadaspela regra implıcita (por omissao, o compilador e chamado apenas com a flag “-c”, modo que edesaconselhavel em programas novos).

Page 62: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...
Page 63: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

Capıtulo 5

Editores de texto

5.1 Introducao

Sendo relativamente simples o desenvolvimento de um editor de texto, e sendo este uma fer-ramenta de uso frequente em Unix, os editores de texto multiplicaram-se de modo a satisfazer osgostos de varios tipos de utilizadores. emacs, vi, pico e joe sao alguns destes editores. Dado que ocodigo fonte nao e mais que um ficheiro de texto, qualquer destes editores pode ser utilizado parao desenvolvimento de programas em C.

A escolha do editor de texto e uma opcao pessoal de cada utilizador. Normalmente, editoresmais sofisticados tendem a requerer uma fase de habituacao mais prolongada, mas o investimentoinicial e normalmente recompensado pela maior flexibilidade e facilidades disponıveis. Para aprogramacao em codigo fonte, os modos formatacao automatica do emacs fazem deste um doseditores preferidos de muitos programadores.

5.2 O editor emacs

5.2.1 Introducao

O editor emacs foi escrito por Richard Stallman no inıcio do projecto GNU e tem sido objectode um desenvolvimento contınuo desde entao. Actualmente, e considerado o mais completo econfiguravel dos editores de texto disponıveis em Unix.

Duas caracterısticas fazem do editor emacs particularmente atractivo em ambientes deprogramacao. Por um lado, o emacs dispoe de um sistema de formatacao automatica para variaslinguagens de programacao (entre as quais, o C). A formatacao automatica e particularmente util

Page 64: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

58 EDITORES DE TEXTO

para identificar alguns erros simples que sao correntes em C: parenteses e chavetas nao equilibra-dos, ciclos mal delimitados, etc. Por outro lado, o editor emacs permite chamar directamente umcomando compilacao e, caso existam erros, posicionar o cursor no ficheiro fonte proximo do localonde foi detectado o erro.

5.2.2 Modos de edicao e de comando

O emacs e chamado simplesmente com o comando emacs. Se o terminal do utilizador dis-puser do sistema X, o emacs e aberto numa janela grafica, sendo possıvel utilizar o rato paraposicionar o cursor, seleccionar texto, e aceder aos menus que se encontram no topo superior dajanela.

Apos o seu inıcio, o emacs apresenta uma janela ao utilizador constituıda por duas partes. Asuperior, que ocupa a quase totalidade do espaco visıvel, corresponde ao buffer de edicao propri-amente dito. A parte inferior da janela e constituıda porm uma unica linha, onde sao introduzidosos comandos do editor, designado por minibuffer.

Durante a edicao, o texto e introduzido da forma habitual no buffer de edicao. O acesso aomodo de comando tem geralmente lugar atraves de caracteres especiais, atraves de combinacoesespeciais de teclas. No seguimento, utiliza-se a notacao C- para indicar que a tecla <control>(ou <ctrl> deve ser premida simultaneamente com o caracter seguinte. Assim, por exemplo, C-cindica que devem ser premidas simultaneamente as teclas <ctrl> e c. Adicionalmente, o emacspreve a existencia de uma tecla especial adicional, designada por meta, que permite o acesso aum segundo conjunto de funcoes especiais. Assim, varios comandos do emacs sao descritos pelanotacao M- para indicar que a tecla meta deve ser premida simultaneamente com o caracter se-guinte. Assim, por exemplo, M-x indica que devem ser premidas simultaneamente as teclas metae c. Em terminais graficos ou terminais de PC, a tecla meta corresponde as teclas Alt. Em termi-nais que nao tenham disponıvel a tecla Meta, esta pode ser substituıda premindo em sequencia atecla escape (Esc) e a tecla especificada seguinte.

O acesso ao minibuffer pode ser conseguido atraves da tecla M-x. Na maioria dos comandos,o emacs regressa automaticamente ao buffer de edicao apos este ser finalizado. No entanto, casoseja necessario, o cancelamento do modo de comando e possıvel com o comando C-G.

5.2.3 Leitura de ficheiros

A leitura de um ficheiro tem lugar com o comando C-X C-F, o qual solicita a indicacao donome do ficheiro a editar no minibuffer. O comando C-X C-S grava o ficheiro em edicao.

O emacs permite a edicao simultanea de diversos ficheiros, colocando cada um num buffer de

Page 65: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

O EDITOR VI 59

edicao separado. O comando C-X C-B lista todos os buffers correntes, enquanto que o comandoC-X B permite mudar o buffer em edicao.

5.2.4 Formatacao automatica

Ao editar um ficheiro com extensao .c, o emacs entra automaticamente no modo C, realizandouma formatacao (indentacao) automatica do codigo fonte. Para posicionar o cursor no local cor-recto ou indentar uma dada linha no modo C basta em qualquer altura de introducao de uma linhapremir a tecla <Tab>.

5.2.5 Compilacao e localizacao de erros

O comando de compilacao e chamado com o comando M-C-G, seguido da tecla de <Enter>.Por omissao, o comando de compilacao e make -k, mas pode ser editado em qualquer altura deforma a adpata-lo a outra situacao.

Quando o comando de compilacao e executado dentro do emacs, as mensagens resultantes docomando surgem dentro de um “buffer” designado compilation. Caso tenha havido erros, o co-mando “M-x compile-goto-error” posiciona o cursor no codigo fonte, proximo do erro detectado.

5.3 O editor vi

5.3.1 Introducao

O editor de texto vi e uma aplicacao standard do sistema Unix. Embora existam actual-mente editores mais sofisticados, o editor vi e ainda extremamente popular devido sobretudo a suaeficiencia e facilidade de manuseamento. No entanto, este editor apresenta algumas caracterısticasdistintas das encontradas em editores de texto de outros sistemas, sendo por vezes necessario al-guma habituacao ao seu modo particular de funcionamento.

O editor vi pode ser invocado pela linha de comando

$ vi <nome do ficheiro a editar ou criar>

Na altura em que e invocado, o vi copia o ficheiro a editar para uma zona de memoria desig-nada por buffer de trabalho. Todas as alteracoes ao ficheiro sao efectuadas primeiro nesta zona detrabalho e so posteriormente copiadas em definitivo para o disco. Este processo ocorre no final da

Page 66: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

60 EDITORES DE TEXTO

sessao de edicao ou quando explicitamente indicado pelo utilizador, evitando-se assim que errosgraves na edicao se traduzam numa alteracao irrecuperavel do ficheiro em disco.

O editor vi tem dois modos de funcionamento distintos: modo de comando e modo de edi-cao. No modo de comando, o vi aceita sequencias de teclas como comandos, executando cadacomando a medida que estes sao introduzidos no teclado. No modo de edicao, as teclas premidascorrespondem a texto que se pretende inserir no ficheiro, surgindo no monitor os caracteres amedida que sao introduzidos.

A descricao que se segue, embora nao exaustiva, descreve a maioria dos comandos necessariosa uma sessao de edicao com o vi .

5.3.2 Modo de edicao

No inicio de uma sessao de edicao, o vi encontra-se no modo de comando. A passagem aomodo de edicao efectua-se pela indicacao de um comando especıfico para este efeito. A passagemdo modo de edicao ao modo de comando faz-se premindo a tecla escape em qualquer altura doprocesso de edicao.

Quando o editor se encontra no modo de comando, a insercao de texto pode efectuar-se, porexemplo, deslocando o cursor para a zona onde se pretende inserir texto, e premindo a tecla i. Apartir deste momento, o editor entra no modo de insercao, surgindo o texto no monitor a medidaque for sendo introduzido. Note-se que existem outros comandos que permitem passar do modode comando ao modo edicao (V. seccoes 5.3.4 e 5.3.6).

Tal como e habitual, a tecla <del> ou <backspace> pode ser usada para corrigir o ultimocaracter introduzido. No entanto, os caracteres apagados permanecem normalmente no monitorate serem corrigidos ou se carregar na tecla de <return>. Este modo de funcionamento, emborapouco usual, minimiza os acessos ao monitor, reduzindo o overhead do processo.

5.3.3 Movimentacao do cursor

A movimentacao do cursor pode ser realizada no modo de comando pela utilizacao das teclasdescritas no seguimento. Note que a movimentacao do cursor de uma posicao em qualquer dasdirecoes efectua-se pelas teclas h, j, k e l as quais se encontram em sequencia no teclado.

• h Move o cursor um caracter para a esquerda.

• l Move o cursor um caracter para a direita.

• j Move o cursor um caracter para baixo.

Page 67: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

O EDITOR VI 61

• k Move o cursor um caracter para cima.

• k Move o cursor um caracter para cima.

• H Move o cursor para o inicio do monitor.

• M Move o cursor para a linha central do monitor.

• L Move o cursor para a ultima linha.

• C-D Avanca meio ecran de texto.

• C-U Recua meio ecran de texto.

• C-F Avanca um ecran de texto.

• C-B Recua um ecran de texto.

5.3.4 Inserir texto

Quando se encontra no modo de comando, o vi pode ser colocado no modo de edicao utili-zando os seguintes comandos:

• i Insere texto antes da posicao actual do cursor.

• a Insere texto apos a posicao actual do cursor.

• o Insere uma linha a seguir a linha corrente.

• O Insere uma linha antes da linha corrente.

• r Substitui o caracter existente na posicao do cursor.

• R Substitui caracteres a partir da posicao actual do cursor.

5.3.5 Apagar texto

Quando se encontra no modo de comando, o vi pode apagar texto ja introduzido com osseguintes comandos:

• x Apaga o caracter corrente.

• dd Apaga a linha corrente.

• 5dd Apaga 5 linhas, com inıcio na linha corrente.

Page 68: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

62 EDITORES DE TEXTO

• d0 Apaga desde o inıcio da linha ate a posicao do cursor.

• dw Apaga desde a posicao actual ate ao fim da palavra.

• db Apaga desde a posicao actual ate ao inıcio da palavra.

• d<ret> Apaga 2 linhas de texto.

O comando u pode ser usado para desfazer (undo) a ultima operacao de apagar texto.

5.3.6 Mudar texto

Os seguintes comandos podem ser usados para substitui texto:

• cw Mudar o texto desde a posicao actual do cursor ate ao fim da palavra.

• c4w Mudar o texto desde a posicao actual do cursor ate ao fim da terceira palavra seguinte.

• cb Mudar o texto desde a posicao actual do cursor ate ao inıcio da palavra.

• cc Mudar toda a linha corrente.

Ao utilizar os comandos de mudar texto, a linha so e actualizada totalmente apos a passa-gem novamente ao modo de comando. Assim, os caracteres que surgem no ecran podem naocorresponder directamente ao estado actual do ficheiro. Por exemplo, se uma palavra pequena forsubstituida por outra com maior numero de caracteres, os ultimos caracteres introduzidos podemsurgir por cima de texto que nao se pretende alterar. Ao passar ao modo de comando verifica-seno entanto que o efeito obtido e o desejado.

5.3.7 Procurar texto

Para procurar um dada sequencia de texto no ficheiro, passar ao modo de comando e usar ocomando / seguido da sequencia de texto que se pretende procurar e da tecla <return>.

Alem deste, os seguintes comandos podem ser usados para procurar texto:

• n Repete a ultima operacao de procura (i. e., usando a mesma sequencia de caracteres).

• N Repete a ultima operacao de procura, mas recuando no ficheiro.

Page 69: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

O EDITOR VI 63

5.3.8 Substituir texto

Para substituir uma sequencia de caracteres por outra podem ser usados os comandos de subs-tituicao de texto. Nos exemplos seguintes, admite-se que se pretende substituir a sequencia decaracteres xpto por abdefg. Admite-se que se esta inicialmente no modo de comando.

• :s/xpto/abdefg/g Substitui a sequencia de caracteres em todo o ficheiro.

• :<enderecos>s/xpto/abdefg/g Substitui a sequencia de caracteres nas linhas especificadasdo endereco. O endereco pode ser o numero de uma linha, aplicando-se neste caso o co-mando apenas a essa linha, ou dois numeros de linha separados por um ,. Neste ultimocaso, a substituicao processa-se na gama de linhas especificadas. Como numero de linhapodem ser usados, alem do valor numerico, os sımbolos . (linha corrente) e $ (ultima linhado ficheiro). Sao exemplos da utilizacao de enderecos no comando de substituicao:

– :2,.s/xpto/abdefg/g Substitui a sequencia de caracteres desde a linha 2 ate a linhaactual.

– :.,100s/xpto/abdefg/g Substitui a sequencia de caracteres desde a linha actual ate alinha 100.

– :20,$s/xpto/abdefg/g Substitui a sequencia de caracteres desde a linha actual ate aofim do ficheiro.

– :.,.+4/xpto/abdefg/g Substitui a sequencia de caracteres desde a linha actual ate aquarta linha seguinte.

– :7s/xpto/abdefg/g Substitui a sequencia de caracteres na linha corrente.

5.3.9 Cortar, copiar e mover texto

Sempre que um comando de apagar e usado, o material retirado e colocado numa zona especialde memoria designada por buffer temporario. E a existencia deste buffer que possibilita a utiliza-cao do comando u (undo), descrito anteriormente.

E possıvel colocar o texto apagado numa zona alternativa do ficheiro usando o comando put:

• p Insere o texto existente no buffer temporario na posicao a seguir ao cursor.

• P Insere o texto existente no buffer temporario na posicao anterior ao cursor.

O editor vi permite utilizar 26 buffers alternativos que tambem podem ser usadas para guardartexto temporariamente numa sessao de edicao. Ao apagar texto, ou ao usar o comando de put, e

Page 70: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

64 EDITORES DE TEXTO

possıvel usar um buffer alternativo fazendo preceder o comando de aspas (”) e de uma letra doalfabeto. Existem 26 buffers deste tipo, cada um correspondendo a uma letra do alfabeto. Assim,por exemplo:

• ”h4dd Apaga 4 linhas de texto e coloca-lo no buffer h.

• ”hp Coloca o texto existente no buffer h na posicao a seguir ao cursor.

Note-se que, geralmente, e usada uma letra minuscula para designacao do buffer. Neste caso,o conteudo anterior do buffer, caso exista, e apagado. Se se usar uma letra maiuscula, o textoapagado e adicionado (sequencialmente) ao texto ja ali colocado por comandos anteriores.

Por vezes, e conveniente copiar texto para o buffer temporario ou um buffer alternativo semo apagar da posicao onde se encontra no buffer de trabalho. Esta operacao pode ser obtida com ocomando y, o qual tem exactamente as mesmas variantes do comando d. Assim, para copiar textopara o buffer temporario podem ser usados os seguintes comandos:

• yy Copia a linha corrente.

• 5yy Copia 5 linhas, com inıcio na linha corrente.

• y0 Copia desde o inıcio da linha ate a posicao do cursor.

• yw Copia desde a posicao actual ate ao fim da palavra.

• yb Copia desde a posicao actual ate ao inıcio da palavra.

• y<ret> Copia 2 linhas de texto.

Tal como anteriomente, e possıvel usar um buffer alternativo fazendo preceder o comando deaspas (”) e de uma letra do alfabeto.

5.3.10 Outros comandos

Os seguintes comandos sao tambem frequentemente usados no vi :

• J Junta a linha actual e a proxima.

• C-g Imprime informacao sobre o ficheiro a ser editado.

• :w Actualiza o ficheiro

• :w nome Escreve o conteudo do buffer de trabalho para o ficheiro nome.

Page 71: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

OS EDITORES PICO E JOE 65

• :r nome Le o conteudo do ficheiro nome para o buffer de trabalho. O texto lido e inserido,sem sobreposicao, ao ja existente. O texto e inserido a seguir a linha corrente.

5.3.11 Saır

Para abandonar o vi , os seguintes comandos podem ser usados:

• ZZ Actualiza o ficheiro e sai do vi .

• :q Abandona o processo de edicao.

• :q! Abandona o processo de edicao sem pre-aviso de possıveis alteracoes nao actualizadasno ficheiro.

5.4 Os editores pico e joe

Os editores pico e joe sao muito menos sofisticados que os editores emacs e vi mas, por estemotivo, a sua utilizacao e extremamente simples e intuitiva. No caso do editor pico, os codigos deacesso aos principais comandos surgem sempre nas ultimas duas linhas do buffer de edicao, peloque nao e necessario a sua memorizacao. No editor joe, a linha de topo recorda que a sequenciaC-K H da acesso ao modo de ajuda (help), onde sao listadas as sequencias de acesso aos principaiscomandos.

Embora os editores pico e joe sejam atractivos numa primeira utilizacao, e necessario terem atencao que nao tem disponıveis facilidades importantes como a edicao simultanea de variosficheiros e, sobretudo a formatacao/indentacao automatica de ficheiros disponıvel no emacs.

Page 72: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...
Page 73: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

Capıtulo 6

Textos e manuais complementares

Pretende-se com este texto facilitar uma primeira abordagem ao sistema operativo Unix e aalgumas das ferramentas necessarias ao desenvolvimento de programas neste sistema. Embora sepretenda que este manual seja tanto quanto possıvel completo a um nıvel introdutorio, e evidenteque a a diversidade e sofisticacao das ferramentas envolvidas nao permita a sua condensacao numdocumento desta dimensao.

Neste capıtulo apresenta-se um extenso conjunto comentado de materiais bibliograficos cujareferencia detalhada se encontra na seccao de “Bibliografia” deste manual. Na sua grande maio-ria, os topicos abordados extravasam largamente as necessidades do estudante medio que pretendaapenas uma primeira abordagem a Programacao e ao sistema operativo Unix, pelo que a sua con-sulta nao e de forma alguma obrigatoria. No entanto, tratam-se de textos que podem ser uteisaos leitores mais interessados, para consulta ou para o aprofundamento de conhecimentos relati-vamente a topicos especıficos.

Na lista de referencias que se seguem, deu-se preferencia a textos disponıveis livermente nainternet, a maioria dos quais resultantes do chamado LDP (Linux Documentation Project), o qualtem por objectivo organizar e sistematizar manuais e guias referentes ao sistema operativo Linuxe software da GNU. E possıvel aceder a um mirror do LDP no IST em http://ldp.ist.utl.pt/. Dedestacar que, alem de alguns manuais e guias com a organizacao habitual de um livro, o LDPinclui um conjunto extenso de pequenos textos introdutorios a topicos especıficos designados porHOWTO e que, como o nome indica, sao manuais muito simple e curtos que apresentam solucoes(frequentemente em formato de receita, sem grandes aprofundamentos tecnicos) para muitos dosproblemas que frequentemente surgem com o sistema operativo Linux (embora a utilidade de mui-tos extravase o ambito restrito do sistema Linux). Alem de disponıveis nas paginas do LDP, muitosdestes textos estao por vezes disponıveis nas maquinas linux sob os directorios /usr/doc/HOWTOe /usr/doc/HOWTO/mini.

Page 74: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

68 TEXTOS E MANUAIS COMPLEMENTARES

6.1 Sistema Operativo Unix e Linux

Para os interessados em instalar Linux num PC, existem hoje em dia diversas empresas quedistribuem pacotes completos de Linux com um conjunto alargado de aplicacoes open sourceincluıdas e cuja instalacao e quase automatizada. Entre as mais conhecidas encontram-se a RedHat (a mais frequente no IST), Slackware, Debbian, SUSE e a Caldera. Saliente-se que estasempresas nao vendem o software em si, ja que este e de distribuicao e copia livre. O precodestes pacotes, de um modo geral relativemente baixo, destina-se apenas a cobrir os custos dedistribuicao, preparacao do conjunto e software de instalacao e de suporte ao cliente.

Note-se que e possıvel e simples instalar no mesmo PC dois sistemas operativos, desde queestes residam em particoes distintas. Um bom HOWTO introdutorio, facil e rapido de seguir, e(Raymond, 2000). Um texto mais completo do LDP para apoio a instalacao do Linux e (Welsh eoutros , 1998). Complementarmente, (Greenfield, 1996) constitui um bom manual do Linux parao utilizador. Um livro que constitui tambem uma boa condensacao do fundamental do Unix naoptica do utilizador e (Robbins, 1999).

Para os interessados na implementacao de sistemas operativos, (Marques e Guedes, 1990) eum bom texto introdutorio, focando varios aspectos do sistema Unix. (Bach, 1986) e geralmenteconsiderado uma das melhores referencias pedagogicas para aprendizagem do sistema Unix, tendosido o texto seguida por Linus Torvalds nas fases iniciais da implementacao do Linux. Este textoinclui uma descricao aprofundada de diversos detalhes de implementacao do nucleo e do sistemade ficheiros do Unix, tal como concebido originalmente por Ritchie e Thompson(Ritchie e Th-mompson, 1974). Um texto menos academico e mais focado na implementacao actual do nucleodo sistema operativo Linux pode ser encontrado em (Rusling, 1998).

6.2 Ambiente de trabalho

Tal como referido anteriomente, o interpretador de comandos (shell) actualmente mais utili-zado no sistema operativo Linux e o bash.

Uma primeira introducao a esta shell pode ser encontrado em (Orr, 1996), que constitui um pe-queno HOWTO suficiente para uma primeira abordagem. Um texto mais aprofundado e completoe o livro (Newham e Rosenblatt, 1998).

Relativamente ao sistema grafico X11, que serve frequentemente de interface ao sistema ope-rativo Unix, uma primeira abordagem pode ter por base a referencia (Brigleb, 1999), uma vezmais um HOWTO do LDP. Um texto mais tecnico e aprofundado sobre o sistema de X11 pode serencontrado em (Quercia e O’Reilly, 1993). Embora este livro esteja parcialmente ultrapassado,

Page 75: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

PROGRAMACAO E DEPURACAO DE PROGRAMAS EM C 69

inclui uma boa descricao dos princıpios e protocolos ainda hoje adoptados pelo sistema X11.

6.3 Programacao e depuracao de programas em C

O primeiro livro de divulgacao da linguagem C foi publicado por Kernighan e Ritchie em 1978(Kernighan e Ritchie, 1978). Este texto, pela sua clareza e qualidade, e ainda hoje consideradouma referencia incontornavel da linguagem C. Embora sem grandes alteracoes de forma, este textofoi revisto anos mais tarde de forma a adaptar-se ao standard ANSI (Kernighan e Ritchie, 1990).

Este livro nao e, no entanto, o mais adequado para uma primeira aprendizagem deProgramacao. Para este efeito, aconselha-se a referencia (Damas, 1999), onde a apresentacaoda linguagem C e acompanhada de uma introducao as tecnicas de programacao procedimental.Uma referencia interessante a nıvel introdutorio do C e tambem (Oualline, 1997) e, do mesmoautor, mas para os interessados em explorar o C++, (Oualline, 1995).

A escrita de programas em unix requer a utilizacao de um editor de texto. Para alem do editorvi, brevemente descrito nestas folhas, existem diversos editores alternativos cuja escolha depende,em grande parte, do gosto do utilizador. De um modo geral, o editor emacs e considerado omais completo disponıvel no sistema operativo Unix. Embora as suas sequencias de comandosrequeiram alguma habituacao, a sua utilizacao e fortemente recomendada. Uma boa introducaoao emacs pode ser encontrada no HOWTO (Zawodny, 1999). Uma referencia mais completa sobreeste editor e (Cameron e outros, 1996).

Informacoes especıficas relativamente ao compilador de C (gcc) utilizado no sistema operativoLinux podem ser encontradas em (Barlow, 1996). Para a depuracao de programas em Linuxutilizando o ddd, e possıvel recorrer ao manual desta ferramenta (Foundation, 2000), tambemdisponıvel na rede. Relativamente ao utilitario make, o seu manual (Stallman e McGrath, 2000)encontra-se igualmente disponıvel na rede.

De um modo geral, uma boa referencia para uma abordagem integrada da programacao emUNIX/Linux e (Loukides e Oram, 1996). Este manual inclui uma introducao a utilizacao do editoremacs, compilador gcc, utilitario make, debugger gdb, alem de introduzir a ferramenta RCS paramanutencao de software.

Page 76: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...
Page 77: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

Bibliografia

Bach, M. J. (1986). The design of the Unix Operating System. Prentice-Hall.

Barlow, D. (1996). The Linux GCC HOWTO. LDP - The Linux Documentation Project,http://ldp.ist.utl.pt/HOWTO/GCC-HOWTO/index.html.

Brigleb, R. (1999). The X Window User HOWTO. LDP - The Linux Documentation Project,http://ldp.ist.utl.pt/HOWTO/XWindow-User-HOWTO.html.

Cameron, D., Rosenblatt, B., e Raymond, E. (1996). Learning GNU Emacs. Unix series. O’Reilly,2nd edition.

csn (2000). NT holds up against linux onslaught; others suffer. Client Server News, (337).

Damas, L. (1999). Linguagem C. FCA - Editora de Informatica.

Foundation, F. S. (2000). DDD - Data Display Debugger. Free Sofwtare Foundation,http://www.gnu.org/manual/ddd/.

Greenfield, L. (1996). The Linux User’s Guide. LDP - The Linux Documentation Project,http://ldp.ist.utl.pt/guides.html.

Kernighan, B. e Ritchie, D. (1978). The C Programming Language. Prentice-Hall.

Kernighan, B. e Ritchie, D. (1990). The C Programming Language - The ANSI edition. Prentice-Hall.

Loukides, M. e Oram, A. (1996). Programming with GNU software. Unix series. O’Reilly &Associates, Inc.

Marques, J. A. e Guedes, P. (1990). Fundamentos de Sistemas Operativos. FCA - Editora deInformatica.

Newham, C. e Rosenblatt, B. (1998). Learning the bash Shell. Unix series. O’Reilly, 2nd edition.

Orr, G. (1996). Bash Prompt HOWTO. LDP - The Linux Documentation Project,http://ldp.ist.utl.pt/HOWTO/Bash-Prompt-HOWTO.html.

Page 78: Introduc¸ao ao Sistema Operativo Unix˜ - Técnico Lisboa · 6.1 Sistema Operativo Unix e Linux ... O sistema operativo Unix surge na sequencia de um projecto iniciado nos anos ...

72 BIBLIOGRAFIA

Oualline, S. (1995). Practical C++ Programming. Unix series. O’Reilly & Associates, Inc, 3thdedition.

Oualline, S. (1997). Practical C Programming. Unix series. O’Reilly & Associates, Inc, 3thdedition.

Quercia, V. e O’Reilly, T. (1993). Volume 3: X Window System User’s Guide. X Window Systemseries. O’Reilly & Associates, Inc.

Raymond, E. S. (2000). The Linux Installation HOWTO. LDP - The Linux Documentation Project,http://ldp.ist.utl.pt/HOWTO/Installation-HOWTO.html.

Ritchie, D. e Thmompson, K. (1974). The unix timesharing system. Commun ACM, paginas365–375.

Robbins, A. (1999). Unix in a Nutshell: System V Edition. Unix series. O’Reilly & Associates,Inc.

Rusling, D. A. (1998). The Linux Kernel. LDP - The Linux Documentation Project,http://ldp.ist.utl.pt/guides.html.

Stallman, R. M. e McGrath, R. (2000). GNU Make. Free Sofwtare Foundation,http://www.gnu.org/manual/html node/make toc.html.

Tanenbaum, A., Linus Torvalds, K. T., e outros (1993). Debate over Linux/Minix - Exchangede-mails. http://www.oreilly.com/catalog/opensources/book/appa.html.

Welsh, M. e outros (1998). Installation and Getting Started Guide. LDP - The Linux Documen-tation Project, http://ldp.ist.utl.pt/guides.html.

Williams, J. (1993). Hard Drive: Bill gates and the Making of the Microsoft Empire. HarperCollinsPublishers, New York, NY.

Zawodny, J. D. (1999). Emacs Beginner’s HOWTO. LDP - The Linux Documentation Project,http://ldp.ist.utl.pt/HOWTO/Emacs-Beginner-HOWTO.html.