Neste trabalho prático, o objetivo é desenvolver um sistema de gestão de processos utilizando a linguagem de programação C. O sistema deverá ser capaz de criar processos filhos a partir de um processo pai, permitindo a execução simultânea de múltiplos processos independentes. Além disso, o trabalho deve conter a implementação de conceitos fundamentais de sistemas operativos, como criação de processos, comunicação entre processos e sincronização.
- Implementar um programa concorrente em linguagem de programação C para simular um despertador
- O programa deve permitir que o utilizador defina um horário de despertar e, quando esse horário for alcançado, deve exibir uma mensagem indicando que é hora de acordar.
- Enquanto o programa estiver a aguardar o horário de despertar, deve ser capaz de executar outras tarefas concorrentemente, como por exemplo: alterar a hora de despertar, desligar ou suspender o alarme.
- O utilizador pode definir o horário de despertar através da entrada de dados
- O programa exibe a hora atual enquanto espera pelo horário de despertar
- Quando o horário de despertar é alcançado, o programa exibe a mensagem "Hora de acordar!"
- O programa é capaz de executar outras tarefas concorrentemente enquanto aguarda o horário de despertar como por exemplo: alterar a hora de despertar, desligar ou suspender o alarme
- Ubuntu: Sistema operativo baseado em Linux
- Nautilus: Gestor de ficheiros padrão do Ubuntu
- Linguagem C
O programa possui três funções fundamentais que são:
- mostrarHoraAtual(): Possui um ciclo infinito para executar a função menu() de minuto a minuto, mas a função menu() só é executada se o utilizador não estiver a definir um horário de despertar
- alarme(): Possui um ciclo infinito. Foi criada uma variável do tipo localtime, que permite verificar se a hora atual é igual à hora que o utilizador definiu para despertar. Assim que a hora atual for igual à hora de despertar, é impresso no terminal a mensagem “Hora de acordar! Clique 9 para parar.” e se estiver a usar o código no Ubunto é também emitido um som de alerta, mas isto só acontece se o utilizador tiver as notificações sonoras ativas. Para o utilizador parar a mensagem de despertar basta digitar “9” no terminal o que fará mudar o valor da variável dslMsg e por consequência interromper o alarme
- menu(): Sempre que é executada, imprime no ecrã a hora atual do sistema, assim como o menu com as funções do despertador
O Ubuntu foi instalado no computador atraves do WSL(Subsistema do Windows para Linux). O WSL é um recurso do Windows que permite executar um ambiente Linux no computador com sistema operativo Windows, sem a necessidade de utilizar uma máquina virtual.
Nautilus
Código no processador de texto do Ubuntu
Menu
Se o utilizador escolher a opção “1-Definir Despertador”, consegue definir um horário de despertar para definir as horas com um valor no intervalo de 0 a 23 e os minutos com um valor no intervalo de 0 a 59. Sempre que o valor de uma destas variáveis sair do intervalo permitido, é indicado ao utilizador para o introduzir novamente o horário de despertar. Após o horário definido, a thread do despertador é criada e o horário escolhido para despertar é impresso no terminal e a variável notificacaoSonora é também ativa.
Definir despertador
Se o utilizador escolher a opção “2-Desligar despertador”, a thread do despertador é terminada e é impresso no terminal uma mensagem a dizer que o alarme foi desligado.
Desligar despertador
Se o utilizador escolher a opção “3-Silenciar Alarme” ou a opção “4-Ativar Alarme” permite escolher se as notificações estão ativas ou não e imprime no terminal a respetiva escolha.
Silenciar alarme
Ativar alarme
Se o utilizador escolher a opção “5-Ver Despertador”, é impresso no terminal o horário de despertar definido que o utilizador escolheu.
Ver despertador