LEIC/LERC 2012/2013

Sistemas Operativos

Aula 2

Processos Unix

 

Objectivo

 


Introdução

1. Observação dos processos no sistema (slide)

Execute o comando seguinte:
  ps -lA
Compreenda o resultado e responda às questões seguintes. Use as páginas do manual como ajuda (man ps).
a) Que processos observa?

b) Que aplicação o processo está a executar?

c) O que significam as colunas PID e PPID?

d) Identifique três processos relacionados hierarquicamente.

2. Principais chamadas sistema para criação de processos

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

  tar -zxvf aula2-eg1.tgz

a) Estude o código fonte com a ajuda do slide, compile e execute a aplicação.

b) Confirme que se trata realmente de dois processos em execução:

c) Modifique o código para que o processo pai espere pela terminação do processo filho (slide).

d) Verifique que o pai espera realmente pelo filho:

e) Verifique o que acontece se o pai não esperar pelo filho:

f) Modifique o programa de acordo com o slide.

g) Modifique o programa anterior para que o comando seja executado com a opção -b.

Material de Apoio

 


Exercícios

SO Shell (sosh)

Uma shell é uma aplicação que lê os comandos introduzidos pelo utilizador numa consola e os executa de acordo com uma semântica própria, como por exemplo bash e ksh. O exercício consiste em desenvolver um interpretador de comandos muito simples chamado sosh. A construção do interpretador será feito por etapas (sugestão: crie cópias de segurança sucessivas entre versões).

1. Implemente a sosh 0.1 suportando os seguintes requisitos:

2. Implemente a sosh 0.2:

Sugestões:

3. Implemente a sosh 0.3.

 a) Além dos comandos anteriores, a nova versão deve permitir executar as aplicações localizadas em /usr/bin, com número variável de argumentos.

Sugestões:

b) Organize o código da aplicação colocando a implementação dos comandos da sosh num módulo (.h e .c) independente:


Exercício de Avaliação 2

sillyShell - Interpretador elementar de comandos

Construa um interpretador elementar de comandos capaz de suportar os seguintes comandos (e respectivos argumentos/opções) introduzidos pelo utilizador:

Adicionalmente, o sillyShell deve implementar as seguintes funcionalidades:

Sugestões: (i) para a execução dos comandos utilize a chamada de sistema fork; (ii) utilize uma lista dinâmica para armazenar strings (para o efeito, pode alterar o código da lista de inteiros da 1ª aula); (iii) adicione o código fonte da lista como ficheiros independentes (.h e .c) e actualize a Makefile.