Sistemas Operacionais e Programação
Material a entregar
Objetivo
O objetivo deste trabalho é:
- Parte 1: adquirir conhecimentos práticos sobre a manipulação de pipes e redirecionamento de entrada e saída padrão
- Parte 2: adquirir experiência em desenvolver um programa que executa em paralelo no
Linux usando threads Java com sincronização.
PARTE 1 [3 pontos]
Vocês deverão estender nossa querida bgsh de forma que ela aceite a criação de pipes entre processos na linha de comando. Um Pipe criado na linha de comando permite o redirecionamento da saída padrão de um processo para a entrada padrão de outro processo. A bgsh passará a suportar a criação de Pipes utilizando-se o operador | , conforme o exemplo a seguir: bgsh % comando1 [params] | comando2 [params]
Assim, a saída padrão do processo criado para executar o “comando1 [params]” será redirecionada para um Pipe. Esse mesmo Pipe será usado como entrada padrão para o processo criado para executar o comando “comando2 [params]”. Para simplificar a tarefa de vocês, no caso da bgsh só poderá ser criado um Pipe entre processos (apenas um operador | na linha de comando), e os processos serão de background (nas linhas de comando com o uso do operador | nuca serão encontrados operadores #).
PARTE 2 [7 pontos]
Você deverá desenvolver um programa em Java para resolver o seguinte problema:
Suponha um sistema que permite a utilização de sete recursos – R0, R1, R2, R3, R4, R5, R6 – de naturezas distintas (por exemplo, R1 = HD, R2 = impressora, etc). Só existe uma instância de cada recurso. Considere cinco threads concorrentes – Ta, Tb, Tc, Td e Te – que só podem começar a executar suas atividades uma vez garantida a posse dos recursos que necessitam para a execução das mesmas. A tabela de recursos para cada thread é apresentada a seguir:
R0
R1
R2
Ta
Sim
Sim
Tb
Sim
R3
R4
R5
R6
Sim
Tc
Sim
Sim
Td
Sim
Te
Sim
Sim
Sim
Sim
Sim