Atenção: Precisando de ajudas nos seus trabalhos entre em contato e realize um orçamento: E-mail: mvf5system@gmail.com
Os processadores Intel da família x86 costumam dar a possibilidade e o programador criar sub-rotinas em assembly (procedimentos ou funções). Para isso, o programador deve conhecer muito bem a arquitetura e organização do computador. A programação de computadores em linguagem de baixo nível exige que saibamos como manipular dados em memória respeitando as regras de inserção e remoção impostas pela estrutura de dados conhecida como pilha. Segundo Silberchartz (2011), um programa possui quatro áreas principais, em memória, a saber: seção de texto, seção e dados, heap e pilha. A figura abaixo ilustra a estrutura de um processo em memória principal.
SILBERSCHATZ, Abraham. Fundamentos de Sistemas Operacionais. 8. ed. Rio de Janeiro: LTC, 2011.
Considere que você é um desenvolvedor Open Source e está ajudando a comunidade de Sistema Operacional de Código aberto a desenvolver um algoritmo de gerenciamento da pilha em memória. Assim sendo, você decide criar um programa que simule condições semelhantes às de um Sistema Operacional que manipula a pilha.
Os dados a serem armazenados na pilha devem simular processos, sendo que cada elemento a empilhar/desempilhar deve possuir:
O PID do cada processo (Process ID, é um código gerado automaticamente pelo sistema – cada processo tem seu próprio PID);
O nome do programa/comando que gerou o processo.
O programa deve ter um menu principal em forma de laço de repetição que atenda aos seguintes requisitos:
O menu sempre deve imprimir o conteúdo da pilha (da base em direção ao topo);
Após a impressão do conteúdo da pilha, o usuário deve ser informado de que pode realizar as seguintes operações:
Inserir um elemento na pilha;
Remover um elemento da pilha;
Esvaziar a pilha;
Encerrar o programa.
A operação “Inserir um elemento na pilha” deve pedir para que o usuário informe o nome do programa ou comando que será empilhado. O programa deve associar um PID a esse nome automaticamente, e empilhar ambos os dados: PID + nome. Caso a pilha esteja cheia, o usuário deve receber uma mensagem informando: “Pilha cheia, impossível empilhar mais elementos.”.
A operação “Remover um elemento da pilha” tentar remover um elemento da pilha. Caso haja elemento para ser removido, o PID e o nome do elemento desempilhado devem ser impressos na tela. Caso não seja possível desempilhar elementos, o programa deve imprimir a mensagem “Pilha vazia, impossível desempilhar elementos.”, na tela.
A operação “Esvaziar a pilha” deve remover todos os elementos da pilha.
A operação “Encerrar programa” deve finalizar o processo.
Observações:
O código-fonte deve ser escrito de forma a implementar estruturas de dados estáticas. Nesse caso, nossa pilha deverá ter, no máximo, 5 posições para armazenar elementos (tamanho igual a 5);
A correção será feita em ambiente Bloodshed Dev C++, no padrão C ANSI. Assim, caso o aluno tenha desenvolvido seu código em outra IDE/Compilador, é importante que o aluno garanta que seu código também é compilável/executável em ambiente Dev C++. Essa é uma responsabilidade do aluno, e não da equipe de correção.
0 comentários:
Postar um comentário