LEIC/LERC 2012/2013

Sistemas Operativos

Aula 1

Introdução ao Ambiente Unix

 

Objectivo

 


Introdução

Estude o ciclo de desenvolvimento de aplicações em linguagem C no ambiente Unix (slide).

Copie o ficheiro aula1-eg1.tgz para a sua área de trabalho e descomprima o seu conteúdo com o comando:

  tar -zxvf aula1-eg1.tgz

1. Geração do executável (slide)

a) Visualize e compreenda o conteúdo dos ficheiros.

b) Compile os ficheiros e faça a sua ligação de modo a produzir o executável denominado main.

	gcc -g -c list.c main.c
gcc -o main list.o main.o

c) Execute a aplicação main e compreenda o resultado.

2. Utilização do debugger ddd (slide)

a) Execute a aplicação no debugger ddd:

	ddd main

b) Coloque um breakpoint na primeira instrução lst_insert e execute a aplicação pressionando o botão run. O que observa?

c) Execute a aplicação utilizando os botões next e step. Qual é a diferença entre ambos?

3. Utilização da ferramenta make (slide)

a) Crie um ficheiro Makefile na sua área de trabalho com o conteúdo descrito no slide e execute make. O que aconteceu?

b) Apague o ficheiro list.o. Re-execute make. Interprete o sucedido.

c) Simule uma alteração ao ficheiro main.c com o comando seguinte e re-execute make. Compreenda o resultado.

	touch main.c

Material de Apoio

 


Exercícios

1. Implemente a função lst_insert do exemplo anterior que adiciona um valor no final da lista. Sugestões:

2. Implemente a função lst_print do ficheiro list.c que imprime o conteúdo de uma lista (inteiros separados por vírgulas). Utilizando o ddd, verifique que a lista impressa pela função lst_print corresponde ao conteúdo efectivo da lista em memória.

3. Compreenda melhor o funcionamento do make.

a) Simule a alteração do ficheiro list.h e execute make. Porque razão todos os ficheiros foram gerados?

b) Simule a alteração do ficheiro list.o. O que acontece quando faz make list.o? E se agora fizer make?

c) Retire a dependência do ficheiro list.h da regra list.o da Makefile. Repita procedimento da alínea a). Explique a diferença no resultado?

d) Adicione a regra seguinte no fim do ficheiro. O que descreve esta regra? Identifique: o alvo, as dependências e o comando.

  clean:
       rm -f *.o main

e) Execute make clean. O que aconteceu? Porque razão o comando é executado sempre que esta regra é invocada explicitamente?

4. Implemente as função lst_destroy e lst_remove. A função lst_destroy liberta toda a memória alocada pela lista. A função lst_remove recebe uma lista e um valor e remove o primeiro item com aquele valor.

 


Exercício de Avaliação 1

Gestor de tarefas pessoais

Construa uma aplicação de organização pessoal que permite gerir as tarefas pendentes de uma pessoa.
Cada tarefa:

A aplicação tem os seguintes comandos:

Sugestão: usar tantas listas quanto níveis de prioridade.