Sistemas Operacionais, 10 semestre/2004
Experimento # 7
1. Introdução
Os experimentos
anteriores devem ter permitido ao aluno familiarizar-se com a criação de
processos, threads e mecanismos de IPC em ambiente Linux. Este experimento é
bem diferente dos anteriores, pois envolve outro ambiente, o Windows, e um
sistema operacional simulado, o Winux.
Deseja-se neste experimento que o aluno entre em contato com rotinas de um SO simplificado, as entenda, especifique, projete, desenvolva e teste mudanças nesse SO, além de estar trabalhando com a linguagem de programação Delphi.
Este exercício
foi definido especialmente para as aulas de Sistemas Operacionais, na Faculdade
de Engenharia de Computação, na PUC-Campinas, com a ajuda de bolsistas do
Professor Ricardo Freitas.
2. Objetivos
A
seguir estão os objetivos deste experimento com relação ao aluno:
·
Perceber que um
SO é um conjunto de programas, com certo grau de dificuldade, porém programas
como outros quaisquer.
· Perceber que é capaz de fazer mudanças nos fontes de um SO.
·
Relembrar partes
da matéria vista na teoria.
·
Entrar em
contato com uma forma de desenvolver esforços de programação de maneira
organizada.
·
Perceber o grau
de dificuldade para se realizar manutenção de software.
·
Conhecer e
utilizar a linguagem Delphi.
A
parte teórica deste experimento foi vista em sala de aula e diz respeito a:
· Mecanismos para obtenção de exclusão mútua, mais especificamente, as primitivas SEND e RECEIVE.
· Estratégias para escalonamento de processos, em especial a SJF (Shortest Job First).
· Estratégias para substituição de páginas, em especial Segunda Chance.
Recomenda-se
que os alunos utilizem as notas de aula e um dos livros referência para
relembrar a parte teórica.
Este experimento
constitui uma atividade que precisa de ser completada através de duas tarefas
básicas, que se referem ao entendimento e à modificação e compilação do Winux,
o qual trata de assuntos relacionados com aqueles cobertos em sala de aula.
Este experimento deve
ser acompanhado de um relatório com as seguintes partes obrigatórias:
Introdução, indicando, em não mais do que 20 linhas, quais os objetivos do experimento;
Especificação
do que foi implementado;
Projeto
do que foi implementado;
Plano
de testes e resultados do que foi implementado.
Conclusão
indicando o que foi aprendido com o experimento.
A entrega do trabalho
deve ocorrer através do envio de um e-mail "Encaminhando programa 7",
de acordo com o cronograma previamente
estabelecido. A data e hora limites correspondem à segunda-feira às 24:00, da
semana marcada para entrega e apresentação. Anexos a esse e-mail devem constar:
os
programas fonte modificados,
os
correspondentes executáveis,
o
relatório final do trabalho e
uma
imagem do comando ls -l sobre os arquivos usados no experimento ao final
do mesmo.
A falta de qualquer
elemento no e-mail ou a perda da data de entrega implica na perda da nota
correspondente. Somente duas exceções serão consideradas, o fechamento do
laboratório durante o período disponibilizado para a realização do experimento,
ou problema de doença, avisado com antecedência mínima de dois dias, antes da
data da entrega.
Laboratório cheio,
quedas de máquinas, falta de linha telefônica, problemas pessoais ou
"blackouts" não serão aceitos como desculpas por atrasos. Por isso,
recomenda-se fortemente que o início do trabalho ocorra o mais rapidamente
possível.
Tarefas
As tarefas para este experimento são:
1.
Quantos e quais
são os comandos Assembly do SOMAT?
2.
É possível
realizar operações sobre números reais no SOMAT?
3.
Qual o tipo de
escalonamento de processos implementado no SOMAT?
4.
Qual o tipo de
gerência de memória implementado no SOMAT? Caracterize essa gerência definindo
estratégia de substituição e tamanho da memória.
5.
Como é
caracterizado um programa (job) no SOMAT? Identifique e estabeleça limites para
cada parte de um programa (job).
A partir desta
etapa começa o trabalho de laboratório propriamente dito. Deseja-se modificar e
incluir algumas das características do Winux.
Deverá ser
entregue um documento que apresente O QUE vai ser implementado ou modificado.
Algo como um manual do usuário, explicando o funcionamento dos mecanismos do
ponto de vista do usuário. Algo parecido com o que existe nos manuais do Winux.
Não esquecer de estabelecer as entradas e saídas de cada nova instrução,
incluindo os resultados e possíveis erros (se existirem mensagens de erro,
apresentá-las).
Nesta etapa do
trabalho são exploradas questões de COMO será implementado aquilo que está
documentado na especificação.
Na documentação a
ser entregue deve-se apresentar:
·
Quais as rotinas
serão modificadas ou incluídas e quais os parâmetros e resultados dessas
rotinas (parâmetros retornados, valor retornado e erros).
·
Estruturas de
dados que serão criadas e as operações que podem ser realizadas sobre as
mesmas. Todas as estruturas devem ter tipo e valores válidos para seus campos.
·
Algoritmos em
pseudo código.
Nesta atividade
deve-se explorar a forma como será testada a implementação (que ainda não foi
realizada). Para isso são considerados os dois documentos já criados
(especificação e projeto).
Na documentação a
ser entregue, deve-se incluir casos de teste, tantos quantos sejam necessários
para cobrir toda a implementação.
Um caso de testes
tem quatro partes:
·
A condição a ser
testada. Por exemplo, digamos que uma instrução numérica a ser implementada
seja a exponencial. Condições a serem testadas seriam o zero elevado a algum
inteiro, algum inteiro elevado a zero, algum inteiro elevado a um negativo, um
inteiro elevado a um grande inteiro, um inteiro elevado a um inteiro. Repare
que estamos estabelecendo situações críticas quando escolhemos o zero como
parâmetro da instrução. Não se pode esquecer de cobrir as situações de erro
definidas na especificação.
·
A maneira de fazer
ocorrer a condição, ou seja, a escolha dos dados de entrada de maneira a fazer
a condição ocorrer. Por exemplo, para a condição inteiro elevado a um inteiro,
escolho 2 e 3. Para a condição zero elevado a um inteiro, escolho 10 (o zero já
estava estabelecido). Se for necessário (e vai ser), deve-se mostrar todo o
programa (job) em Assembly que deve ser executado para a ocorrência da
condição.
·
O resultado
esperado, ou seja, aquilo que deve ser exibido ou que deve ocorrer dentro do
Winux. Por exemplo, na condição inteiro elevado a um inteiro com valores 2 e 3,
o resultado deve ser um 8. No caso da implementação da nova estratégia de
escalonamento, dependendo da condição a ser testada e dos valores de entrada,
deve-se indicar os valores que devem resultar nas estruturas de dados
envolvidas.
·
Como observar o
resultado esperado, ou seja, é necessário para a pessoa que vai realizar o
teste de perceber visualmente o resultado esperado. No exemplo da
exponenciação, o resultado 8 vai ficar no acumulador da máquina virtual, para
ser exibido, pode-se usar o comando de impressão. No caso do escalonamento, vai
ser necessário incluir código no Winux para mostrar o conteúdo das estruturas
de dados.
A implementação
deve ser realizada usando o Delphi em ambiente Intel/Windows.
Após terminada a
codificação e os testes que acharem necessários, deve-se executar o plano de
testes. Caso algum caso de testes apresente resultado final diferente do
esperado, deve-se procurar e resolver o erro.
O resultado do experimento será apresentado em sala de aula no
dia de aula prática da semana marcada para a entrega, com a presença
obrigatória de todos os alunos, de acordo com o cronograma previamente estabelecido.
Serão escolhidos
alunos para a apresentação e discussão do resultado.
A critério do professor pode, inclusive, ocorrer o convite a qualquer dos alunos
não escolhidos para que façam essa apresentação.
Todos os alunos que
completaram o experimento devem preparar para a apresentação:
· O Winux;
· A introdução,
· A especificação,
· O projeto,
· Os fontes modificados,
·
Os resultados
dos testes, e
·
A conclusão.
Durante a apresentação deverão ser respondidas perguntas do Professor e de colegas.