Simulador para a Prática de Sistemas Operacionais Denise Schimitz de Carvalho, Glauber da Rocha Balthazar, Carlos Rodrigo Dias, Marco Antônio Pereira Araújo, Paulo Henrique Rezende Monteiro Bacharelado em Sistemas de Informação – Faculdade Metodista Granbery (FMG) Rua Batista de Oliveira, 1145 - 36010-532 - Juiz de Fora – MG {dcarvalho,gbalthazar}@si.granbery.edu.br, {crdias,maraujo,phrmonte}@granbery.edu.br Resumo. Nesse artigo é apresentado o trabalho de pesquisa que vem sendo realizado com o objetivo de desenvolver uma ferramenta de apoio para o ensino e aprendizagem da disciplina Sistemas Operacionais de cursos de graduação nas diferentes áreas da Computação. Esta ferramenta trata-se de um simulador das principais funcionalidades de um sistema operacional e permitirá uma interação com o usuário/aluno de forma a facilitar a assimilação dos conceitos ensinados na disciplina. Palavras-chave: Sistemas Operacionais, Simulador, Aprendizado, S²O. Abstract. This paper presents the research that has been done in order to develop a tool to be used in the process of teaching and learning Operating Systems classes in graduation courses of different areas in Computer Science. This tool is a simulator of the operating system main functions, and it will allow an interaction with the user/student that will make the assimilation of the concepts taught in class easier. Keywords: Operational Systems, Simulator, Learning, S²O. 1. Introdução O presente artigo tem como objetivo apresentar o desenvolvimento do S²O (CARVALHO et al. 2006), um software para auxílio no aprendizado da disciplina Sistemas Operacionais. A motivação para o desenvolvimento do software surgiu a partir da constatação da necessidade de agregar aspectos práticos à disciplina do Curso de Sistemas de Informação, o que pode ser realizado através da utilização pelos alunos de um software simulador das principais funções implementadas em um Sistema Operacional (SO). A partir da realização de um estudo preliminar, não foi encontrado nenhum simulador de sistemas operacionais que possuísse funcionalidades como a exibição gráfica e gradual de Gerência dos Processos por diferentes políticas de escalonamento, importantes no processo de aprendizagem do funcionamento de um sistema operacional. O S²O (Simulador de Sistemas Operacionais) está sendo desenvolvido para que estas funcionalidades possam estar disponíveis de acordo com as necessidades do professor responsável pela disciplina, alinhada às necessidades dos alunos. Para que o S²O possa ser utilizado como suporte no contexto da aprendizagem da disciplina, está sendo desenvolvido tendo em vista sua aplicabilidade através do modelo pedagógico construtivista. A disciplina de Sistemas Operacionais, normalmente presente nas grades curriculares de cursos de Bacharelado em Sistemas de Informação, é uma disciplina em que são abordados tópicos referentes às principais funcionalidades encontradas em um Sistema Operacional. Um SO pode ser considerado, de uma forma geral, como sendo um conjunto de módulos de software que trabalham de forma integrada, com o objetivo de permitir o funcionamento dos diversos componentes de um computador e a sua interação com o usuário. Os temas normalmente tratados na disciplina Sistemas Operacionais são: gerência de processos, que corresponde ao controle dos programas em execução no computador, bem como os aspectos relevantes sobre a concorrência de processos que compartilham recursos; gerência de memória, que diz respeito às possíveis formas de controle da alocação dos processos na memória principal do computador; sistemas de arquivos, quando são consideradas as diferentes possíveis estruturas mantidas na memória secundária do computador para o armazenamento e controle de arquivos (SILBERSCHATZ, GALVIN e GAGNE, 2000). Apesar da disciplina Sistemas Operacionais possuir um apelo prático, tendo em vista que os conceitos são todos aplicáveis em sistemas operacionais reais, ela é essencialmente teórica, com a exposição dos muitos conceitos envolvidos e algoritmos existentes. Dessa forma, seu conteúdo muitas vezes não é absorvido adequadamente. Com o objetivo de enfrentar esta questão, a do distanciamento ou dicotomia entre teoria e prática, o S²O simula o comportamento de um sistema operacional no que tange à gerência dos processos. No contexto do Curso de Sistemas de Informação, a implementação do S²O possui uma perspectiva pedagógica que aborda a utilização dos conceitos ministrados em diferentes disciplinas como Algoritmos, Estruturas de Dados, Análise e Programação Orientada a Objetos, Arquitetura e Organização de Computadores, Linguagem de Programação e a própria disciplina de Sistemas Operacionais. Esta interdisciplinaridade é estendida na medida em que o projeto pretende utilizar, como um dos pilares de suporte, as propostas pedagógicas de educação que levem em consideração ao exposto anteriormente. Neste sentido, as reflexões e escritos de pensadores como Jean Piaget, Vygotsky, Emília Ferreiro e Paulo Freire são significativas. Desta forma, nesse artigo é apresentado o S²O na sua atual fase de desenvolvimento. Inicialmente, na Seção 2, é apresentada uma conceituação do simulador S²O, indicando seus objetivos e como ele se enquadra neste contexto teórico. Na Seção 3, é apresentado seu processo de desenvolvimento. Em seguida, na Seção 4, é apresentado detalhadamente o funcionamento do simulador com a intenção de mostrar as funcionalidades já implementadas. Finalmente, na Seção 5 é destacado o que será implementado nas próximas etapas de desenvolvimento do S²O, sempre com o foco em construir um software que agregue conhecimento e promova os alunos da disciplina Sistemas Operacionais a participarem de forma mais ativa no seu processo ensino/aprendizagem. 2. Conceituação Especificamente sobre o processo de aprendizagem ou de entendimento sobre o sistema operacional de uma máquina de computação, aquele que pretende ensinar deve se fazer algumas perguntas antes de começar a discursar como as coisas acontecem no processamento de um problema, por parte de um sistema operacional. Quais são as informações que este alguém que quer aprender deverá ter para entender um sistema operacional? A detenção mnemônica, por parte de quem aprende, de alguns dados é o suficiente para a aprendizagem? É assim que acontece a aprendizagem? Primeiro se memoriza algumas informações e depois, por um processo mágico — que não se tem a menor idéia de como se dá — o aprendiz vai articulando as coisas e aprende? (FREIRE, 1977). A idéia que fundamenta a proposta pedagógica deste projeto é a de que o processo de aprendizagem de algo por alguém, quer seja autonomamente ou com auxílio de outra pessoa, guarda relação direta com o grau de consciência — por parte de quem quer ensinar e também de quem quer aprender — do processo de aprendizagem. Ninguém aprende se não tem consciência de que conhecer é empreender a inteligência no entendimento de uma determinada questão/problema. Neste sentido, o(a) estudante de sistemas operacionais precisa ter consciência das questões/problemas que um sistema operacional pretende dar conta. Em outras palavras, é necessário saber quais são as questões/problemas que se pretende responder com um sistema operacional. Mas não é só isso. É necessário que o(a) aprendiz seja convidado(a) a resolver alguns problemas típicos de um sistema operacional. E ainda, é necessário que o(a) aprendiz acompanhe os “movimentos” da solução de um problema por um sistema operacional. O que ora é proposto é uma ferramenta que auxilie o(a) aprendiz neste sentido. 3. Construção do S²O Dentro da perspectiva apresentada na Seção 2, está sendo desenvolvido o S²O para atender à funcionalidade de gerência do processador, baseado no paradigma da orientação a objetos. O processo de desenvolvimento segue uma abordagem clássica de desenvolvimento de software através das etapas de Levantamento de Requisitos, Análise, Projeto, Codificação e Testes, apoiadas pelos diagramas propostos pela UML (Unified Modeling Language) (BOOCH, RUMBAUGH e JACOBSON, 2000). Como resultado da etapa de Levantamento de Requisitos, os principais requisitos foram identificados como sendo: permitir a simulação de processos definidos pelo usuário; adicionar processos antes e durante a execução da simulação; permitir a persistência e recuperação destes processos em disco através de arquivos XML; manter os processos organizados em filas (processos, executando, prontos e terminados); aumentar e diminuir a velocidade da simulação; permitir ao usuário informar o número de processadores a serem utilizados na simulação; permitir a visualização da alteração dos estados dos processos entre as filas de execução; escolher a política de escalonamento a ser utilizada; possibilitar que o usuário possa executar a simulação através de uma política personalizada, na qual ele faça o papel de escalonador de processos; e exibir estatísticas da execução dos processos, como tempo médio de turnaround e tempo da espera dos processos. Ainda nesta etapa do processo de desenvolvimento, os requisitos identificados foram detalhados, servindo de base para a etapa seguinte de Análise, onde estes requisitos são expressos em termos de diagramas que retratam o problema em questão, numa visão conceitual. Neste contexto, o Diagrama de Classes da Figura 1 apresenta o modelo do S²O. Figura 1. Diagrama de Classes do Simulador de Sistema Operacional A etapa de Projeto refere-se à transformação dos modelos conceituais em especificações que possam ser implementadas, ou seja, representam o problema em uma visão computacional. Nesta etapa, além de refinar os diagramas criados na etapa anterior, é definida a plataforma a ser utilizada no desenvolvimento do produto. Uma diretriz para este projeto é que o desenvolvimento seja baseado em software livre e, considerando um desenvolvimento orientado a objetos, foi escolhida a linguagem Java (DEITEL e DEITEL, 2002) para a construção do S²O. Desta forma, considerando a etapa de Codificação, o protótipo do S²O foi construído e sua tela principal é mostrada na Figura 2. A utilização do protótipo será explicada na Seção 4. Figura 2. Tela principal do simulador A etapa de Testes permite a verificação do correto funcionamento do simulador, através do planejamento e execução de casos de teste previamente definidos, através de uma ferramenta que auxilie, de forma efetiva, a realização desta etapa, como por exemplo a ferramenta JUnit. No atual estágio de implementação, o S²O disponibiliza as políticas de escalonamento FCFS, Prioridade não preemptivo, SJF não preemptivo, Prioridade Preemptivo, Prioridade não Preemptivo, Round Robin e Personalizada, utilizadas para gerenciar a execução dos processos definidos pelo usuário. Além disso, o S²O permite ao usuário adicionar processos em tempo de execução e manipular a velocidade da simulação. 4. Funcionamento do S²O Com o desenvolvimento da primeira versão do S²O, através do processo descrito na Seção 3 e com as principais funcionalidades já implementadas, é apresentada nessa seção uma descrição detalhada do funcionamento do simulador. Na tela principal do S²O, apresentada na Figura 2, estão presentes as filas que correspondem aos estados que um processo pode assumir durante a sua permanência no sistema de computação: “Pronto”, “Executando” e “Terminado”. Segundo Silberschatz, Galvin e Gagne (2000), a utilização destas filas é necessária para a gerência da utilização do processador. Na tela principal do S²O há também a fila “Processos”, na qual são inseridos os processos que irão entrar no sistema. As informações relativas a cada processo, presentes nas filas, são: • PID (Process Identifier): um número inteiro utilizado como identificador do processo; • Nome: um nome que pode ser atribuído ao processo; • Prioridade: valor inteiro que indica a prioridade de execução do processo, para o qual, quanto menor o valor, maior a prioridade do processo. Este atributo é relevante apenas para as políticas de escalonamento “Prioridade Preemptivo” e “Prioridade Não-Preemptivo”; • T. Cheg.: tempo de chegada é um valor inteiro, em milisegundos, que indicará em qual momento o processo deverá entrar no sistema, quando será inserido na fila de prontos e estará apto a utilizar o processador – o estado “Executando”. Este momento de chegada corresponde ao número de ciclos da CPU decorridos desde o início da execução do escalonador; • Ciclos: corresponde ao número de ciclos que o processo irá utilizar na CPU, ou seja, o tempo que ficará no estado “Executando”. Dependendo do algoritmo utilizado, um processo pode utilizar os ciclos de CPU de forma não contínua no tempo; • T. Saída: o tempo de saída é um valor inteiro, também em milisegundos, que será obtido apenas quando o processo tiver terminado a sua execução por completo, correspondendo ao valor do contador do ciclo do processador no momento em que isto ocorreu. • Ciclo Rest.: corresponde ao número de ciclos de CPU que o processo ainda necessita para executar. Assim que o processo entra no sistema este valor é igual ao valor do atributo “Ciclos”, e vai reduzindo o seu valor enquanto está executando na CPU, até alcançar o valor 0 (zero), quando o processo termina a sua execução. Antes de iniciar uma simulação, é necessária a criação de processos, informando seus atributos e inserindo-os na fila de processos. Para isto, na tela principal, deve-se clicar no botão “Adicionar” e informar as características de cada processo na caixa de diálogo apresentada, conforme Figura 3. Figura 3. A inserção de processos no simulador. Ao término da inserção de todos os processos, a fila de Processos estará preenchida como exemplificado na Figura 4, permitindo que as demais configurações possam ser definidas. Figura 4: Exemplo de fila de Processos preenchida com processos para a execução da simulação Após o preenchimento da fila de processos, deve-se escolher a Política de Escalonamento a ser utilizada pela simulação. Para isto, deve ser utilizada a Lista de Políticas, disponível na barra de ferramentas do S²O, conforme a Figura 5. Figura 5: Políticas de Escalonamento Na barra de ferramentas, ao lado da caixa de listagem referente à política de escalonamento, está a caixa de texto “Nº de Processadores”, na qual pode-se informar a quantidade de processadores que serão utilizados na simulação, bastando que apenas seja digitado um número inteiro maior que zero. O número de processadores determinará quantos processos poderão executar paralelamente, ou seja, ficarem simultaneamente na fila “Executando”. A simulação do S²O segue uma velocidade de execução pré-determinada, podendo-se acelerar a execução do escalonador de processos ou retardá-lo. Isto permite uma execução lenta ou rápida, de acordo com a quantidade de ciclos da CPU por unidade de tempo, informados na caixa “Ciclos de CPU”. Por padrão, é adotado no S²O uma velocidade mediana, mas que pode ser alterada de acordo com a necessidade para ser mais rápida, com mil ciclos por unidade de tempo, ou mais lenta, com cem ciclos por unidade de tempo. O S²O permite também que a configuração dos processos definidos em uma simulação possa ser persistida em disco através de um arquivo XML, sendo reutilizada em outro momento. Para isso, deve-se abrir o menu Opções e escolher o item “Gravar Fila de Processos”, como mostrado na Figura 6. Figura 6: Persistindo a simulação em disco através de arquivos XML Na caixa de diálogo que é exibida, deve-se fornecer um nome para a simulação e um diretório para o armazenamento. Ao final deste procedimento a simulação estará armazenada em disco e o layout do arquivo será como do exemplo exibido na Figura 7. Caso exista um arquivo criado anteriormente com informações sobre processos, este pode ser carregado para a realização de uma nova simulação. Após a realização das configurações do simulador, pode-se iniciar uma simulação pressionando o botão “Iniciar” na parte inferior da tela principal. Durante a execução de uma simulação pode-se também pausar a simulação e em seguida continuar, através do botão “Pausar”, ou interromper definitivamente uma execução, através do botão “Terminar”. No canto inferior direito da tela principal é apresentado o contador da CPU, que indica o total de ciclos de CPU decorridos desde o início da execução do escalonador. Figura 7: Arquivo XML gerado a partir de uma configuração de simulação Durante a execução do simulador, os processos passam da fila de “Processos” para a fila de “Prontos” conforme o tempo de chegada. A partir daí, dependendo da política de escalonamento selecionada, os processos são selecionados para execução, migrando da fila de “Prontos” para “Executando”. Vale ressaltar que apenas os processos que estão na fila de “Prontos” podem ser executados. Ainda dependendo da política de escalonamento escolhida, um processo pode ser interrompido durante sua execução para que outro processo de maior prioridade ou com menos ciclos execute na CPU, o que é chamado de preempção. Na preempção, o processo interrompido durante a execução retorna para a fila de prontos e aguarda nova chance para executar. Quando um processo conseguir terminar de executar todos os seus ciclos de CPU, ele é encerrado e migra da fila “Executando” para a fila “Terminados”. Como exemplo da execução de uma simulação no S²O, será utilizada a política de escalonamento “Personalizada”, que permite que o usuário/aluno faça o papel do escalonador de processos. Nesta política, a cada interrupção gerada pelo sistema o usuário/aluno deverá tomar decisão sobre qual o processo que deverá ser escalonado para execução. Neste exemplo, o número de ciclos por unidade de tempo para a execução da simulação será configurado como 900 ciclos e apenas um processador estará disponível para a simulação. Para este exemplo será utilizada a fila de processos apresentada na Figura 4. Após carregar a fila de processos, para dar início à execução da simulação, deve-se clicar no botão “Iniciar”, na parte inferior da janela. Assim que a simulação é iniciada, perguntas são feitas de acordo com a chegada de novos processos. Na Figura 8 o simulador está em 2 ciclos de CPU e neste momento o processo “proc1” (com PID = 3) chegará à fila de prontos, conforme indicado na fila de processos. Assim, é questionado sobre o que o simulador deverá fazer, se o processo proc1 deverá ser executado ou não. Figura 8: Pergunta sobre a execução de um processo Como dito anteriormente, é possível, durante a execução da simulação, clicar no botão “Pausar”. Isto permite que possa ser feita uma troca de processos entre filas, ou seja, assim que o botão “Pausar” for acionado é disponibilizada a opção de realizar uma troca entre um processo que está sendo executado por outro que se encontre na fila de Prontos. Um exemplo desta situação é apresentado na Figura 9, na qual, caso seja escolhida a opção “sim”, será apresentada uma caixa de diálogo solicitando que seja informado o processo que será movido da fila de “Prontos” para a fila “Executando”, devendo ser fornecido, para isto, o identificador dos processos (PID), como mostrado na Figura 10. Caso o simulador tenha sido configurado com mais de um processador e, assim, mais de um processo esteja na fila “Executando”, é solicitado também o PID do processo que deverá deixar a fila “Executando” e ir para a fila de “Prontos”. Figura 9: Troca de processo que está em execução por outro existente na Fila de Prontos Figura 10: Seleção do Processo a ser movido entre as Filas de Execução e de Prontos Após o término da troca de processos entre as filas, deve-se clicar no botão “Continuar”, que substituiu o botão “Pausar”, para dar prosseguimento à simulação. Ainda na política de escalonamento “Personalizada”, quando o simulador conclui a execução de um processo, questiona sobre qual processo será executado, ou seja movido da fila de “Prontos” para “Executando”, solicitando para isto o PID do processo, conforme Figura 11. Figura 11: Seleção do Processo a ser movido da Fila de Execução para a Fila de Prontos Quando a execução da simulação é concluída, os processos estarão todos alocados na Fila de Terminados e será permitido executar uma nova simulação bastando para isso, clicar no botão “Terminar” e logo em seguida no botão “Nova Simulação”. O exemplo “Personalizada”. apresentado Entretanto, pode-se referiu-se escolher à política qualquer de uma escalonamento das políticas implementadas no simulador e apresentadas na Figura 5. Dependendo da política escolhida, o simulador irá selecionar de forma automática determinados processos para migrarem entre as filas de “Prontos” e “Executando”. A solicitação ao usuário sobre os processos que devem migrar entre filas ocorre apenas na política “Personalizada”. 5. Considerações Finais Neste artigo foi apresentado o S²O, uma ferramenta para auxílio ao ensino da disciplina Sistemas Operacionais. A pesquisa para o desenvolvimento deste simulador pretende utilizar, como um dos pilares de suporte, as propostas pedagógicas de educação que permitem reduzir a distância entre teoria e prática no ensino da disciplina, facilitando o aprendizado do conteúdo lecionado, além de melhor aprendizado da disciplina através da aplicação prática. Para que este objetivo seja alcançado, é simulada a gerência de execução dos processos da forma como é realizada pelo sistema operacional, permitindo também que o usuário/aluno realize uma gerência personalizada. Na continuidade desse trabalho serão implementadas outras funcionalidades presentes em um sistema operacional, como gerência de memória, sistemas de arquivos e escalonamento de disco, sempre mantendo a preocupação com o aprendizado dos conceitos relacionados e, no segundo semestre de 2006, o S²O será utilizado experimentalmente nas aulas de Sistemas Operacionais, a fim de verificar se os objetivos serão alcançados através de sua utilização. Agradecimentos Os autores reconhecem o apoio dado pela Faculdade Metodista Granbery ao projeto de pesquisa "Simulador para Suporte ao Aprendizado de Sistemas Operacionais", ao qual este trabalho está vinculado. Referências Bibliográficas BOOCH, G.; RUMBAUGH, J.; JACOBSON, I. UML - Guia do Usuário. Rio de Janeiro: Editora Campus, 2000. CARVALHO, D. S.; BALTHAZAR, G. R.; DIAS, C. R.; ARAÚJO, M. A. P.; MONTEIRO, P. H. R.. S²O: Uma Ferramenta de Apoio ao Aprendizado de Sistemas Operacionais. Anais do XIV Workshop sobre Educação em Computação, Campo Grande/MS, 2006. DEITEL, H. M.; DEITEL, P. J. Java: Como Programar. 4ª ed. Porto Alegre: Editora Bookman, 2002. FREIRE, P. Extensão ou comunicação?, O Mundo Hoje. v. 24, 10ª ed. Rio de Janeiro: Editora Paz e Terra, 1977. SILBERSCHATZ, A.; GALVIN, P.; GAGNE, G. Sistemas Operacionais: Conceitos e Aplicações. Rio de Janeiro: Editora Campus, 2000.