Вы находитесь на странице: 1из 2

Licenciatura em Eng.

ª Informática
Sistemas Operativos - 2º Ano - 1º Semestre

Projecto – Simulador de Silo de Automóveis


Fase 1

1. Introdução

O objectivo do projecto será a construção de um simulador para os problemas de um


silo para estacionamento automóvel. O silo irá ter vários andares que comunicam
entre si e também várias entradas e saídas.

O projecto será realizado em várias fases, ao longo das quais se irão introduzir
requisitos funcionais mais elaborados para a cuja resolução teremos de usar os
recursos do Sistema Operativo (vamos continuar a usar o Linux).

Deveremos usar uma disciplina de programação que nos permita evoluir e alterar
gradualmente o programas. Pensar primeiro.

2. Trabalho a realizar na Fase 1

Iremos realizar 3 programas, que nesta fase irão correr como processos separados.
• o núcleo do simulador, responsável pela leitura de dados e gestão das
estruturas de dados
• um programa que irá simular a chegada de viaturas
• um programa que irá simular a saída de viaturas
Posteriormente, um programa de diagnóstico que permitirá verificar o estado das
estruturas de dados no simulador.

2.1 Estruturas de Dados.

Deverá existir no núcleo do simulador um vector de posições de


estacionamento, representada por uma matrícula e a hora/minuto/segundo de
entrada.

Ter em conta que iremos ter vários andares.

Estas estruturas de dados devem ser referenciadas por apontadores,


pois irão, posteriormente, residir num segmento de memória partilhada

Cada entrada de veículos será simulada por um named pipe ou FIFO.


Em cada FIFO o simulador receber strings de dados com o seguinte formato:

[XX-YY-ZZ]\n

em XX-YY-ZZ representa uma matrícula automóvel portuguesa (por ora não


permitiremos viaturas estrangeiras  )

Sistemas Operativos 1/2 2010/2011


Licenciatura em Eng.ª Informática
Sistemas Operativos - 2º Ano - 1º Semestre

Na primeira fase vamos assumir uma entrada e uma saída apenas (2


FIFOS)
Os FIFOS podem ser criados invocando na shell o comando mkfifo(1).

Trabalho a realizar:

1. Comece por criar um pequeno programa que leia do stdin uma


matrícula e a coloque no primeiro FIFO de entrada. Terá que ter em conta
que os FIFO são half-duplex e que bloqueiam uma das partes (leitor ou
escritor) enquanto a outra parte não abre igualmente o FIFO. Para testar o
seu programa use o cat(1).
2. Crie um programa para imprimir os veículos que saem do silo. Deverá
ler do FIFO de saída e imprimir no stdout. Neste momento pode testar os 2
programas em conjunto.
3. Crie o core do simulador: deverá ler do FIFO de entrada e colocar o
veículo no primeiro espaço livre tomando nota do momento da entrada.
De cada vez que coloca um veículo, deverá verificar se há algum que esteja
estacionado à mais de 30 segundos e caso afirmativo libertar o espaço e
enviar o veículo para a saída.
Esta estratégia é muito limitada: se não entram veículos, então não há saídas!
Como melhorar isto?

4. Evoluir o core do simulador para colocar as estruturas de dados que


representam o espaço de estacionamento num segmento de memória
partilhada. Crie o segmento (com o tamanho adequado) usam a chamada
shmget(2) e mapeie esse segmento usando shmat(2). Terá que arbitrar uma
chave para identificar o segmento.

5.Crie um programa de diagnóstico que imprima todo o contéudo das


estruturas de dados relacionadas com o estacionamento, tal como elas se
encontram na zona de memória partilhada.

3. Prazo de Entrega do Trabalho

O prazo para a entrega dos trabalhos é de duas semanas a contar da aula em que o
enunciado foi apresentado. Não serão aceites trabalhos fora do prazo. A entrega
deverá ser feita no Moodle num ficheiro zip (ou rar) contendo um relatório em PDF e
as listagens dos programas realizados, obedecendo OBRIGATORIAMENTE ao seguinte
formato:

a123456-proj1.zip

4. Links e Referências

Páginas de manual das chamadas de sistema: read(2), write(2), mkfifo(2), fifo(7),


pipe(7) e open(2).
Páginas de manual shmget(2), shmat(2).
Exemplos de utilização se memória partilhada:
http://www.cs.cf.ac.uk/Dave/C/node27.html
http://publib.boulder.ibm.com/iseries/v5r2/ic2924/index.htm?info/apis/ipcshmgt.htm
http://publib.boulder.ibm.com/iseries/v5r2/ic2924/index.htm?info/apis/ipcshmat.htm

Sistemas Operativos 2/2 2010/2011

Вам также может понравиться