EPSOsim - Faculdade Farias Brito

Propaganda
FACULDADE FARIAS BRITO
CIÊNCIA DA COMPUTAÇÃO
JOEL OLIVEIRA DE CARVALHO
EPSOSIM – SIMULADOR DE ESCALONAMENTO DE PROCESSOS EM
SISTEMAS OPERACIONAIS
FORTALEZA
2011
JOEL OLIVEIRA DE CARVALHO
EPSOSIM – SIMULADOR DE ESCALONAMENTO DE PROCESSOS EM
SISTEMAS OPERACIONAIS
Monografia de graduação apresentada na
Faculdade Farias Brito como requisito parcial
do curso de Ciência da Computação para
obtenção do título de Bacharel em Ciência da
Computação.
Orientado por: MSc. Sérgio Araújo Yunes
FORTALEZA
2011
II
EPSOSIM – SIMULADOR DE ESCALONAMENTO DE PROCESSOS EM
SISTEMAS OPERACIONAIS
Joel Oliveira de Carvalho
PARECER _____________________
NOTA: FINAL (0 – 10): _______
Data: ____/____/_________
BANCA EXAMINADORA:
__________________________________
MSc. Sérgio Araújo Yunes
(Orientador)
___________________________________
MSc. Francisco Lúcio Gomes Guimarães
(Examinador)
___________________________________
MSc. José Helano Matos Nogueira
(Examinador)
III
Dedico este trabalho ao Deus Todo Poderoso, ao Senhor dos Exércitos
e Pai dos espírito. Ao seu Filho amado Senhor Jesus Cristo e ao
Espírito Santo a qual nos ensina e corrige. A meu pai João Ananias
que me ajudou financeiramente no começo de minha jornada. A
minha mãe Antônia pelo incentivo e apoio.
IV
AGRADECIMENTOS
Primeiramente, agradeço a Deus que verdadeiramente nos ama mesmo nós sendo
ingratos, pecadores, imerecível da sua misericórdia. Pois Ele não muda e está é a razão de
nós não sermos consumidos (Malaquias 6.3).
Aos meus pais João Ananias, por ter me ajudado financeiramente no início do curso e
Antônia por ter me apoiado e à minha irmã Jackeline, por ter me incentivado. A meu irmão
Jarbas por ter me ajudado. À minha prima Samilly Dantas, por ter contribuído em minhas
pesquisas.
Ao professor Sérgio Yunes, por ter me orientado, colaborado e se empenhado para a
conclusão deste trabalho. Ao Professor de metodologia científica Leonardo por ter revisado.
Aos meus amigos e colega de trabalho Marcos Rafael, Cristtiano pelos conselhos e por
ter cooperado com o meu o projeto.
Agradeço aos professores que participaram da banca, ao professor Helano Matos. E ao
professor Lúcio Guimarães por tornar este trabalho com mais qualidade, por ser um professor
muito crítico e perceptivo. Ao professor e coordenador do curso de Ciência da Computação
Ricardo Wagner pelos conselhos e pelas críticas construtivas.
Aos meus colegas e professores, todos que contribuíram direto e indiretamente para a
conclusão deste trabalho.
V
Posso todas as coisas em Cristo que me fortalece. (Filipenses 4.13)
VI
RESUMO
No Brasil há uma grande carência de ferramentas de ensino-aprendizagem prática para o
ensino da disciplina de Sistemas Operacionais. Existem entre os alunos certas dificuldades em
compreender o conteúdo das disciplinas teóricas do curso de Ciência da Computação,
Engenharia da Computação e Sistemas de Informações, no qual os professores se empenham
em transmitir. Com a interface gráfica do simulador, torna mais viável para aos alunos a
visualização dos assuntos complexos e abstratos de escalonamento de processos da disciplina
de Sistemas Operacionais. Os alunos serão capazes de resolver suas atividades com mais
eficiência e tirar suas dúvidas do conceito teórico com base na observação no simulador. O
simulador EPSOsim busca de forma simples, prática e detalhada simular os algoritmos de
escalonamento de processos.
Palavras chaves: escalonamento de processos, Sistemas Operacionais, algoritmos, FIFO,
Round Robin, prioridade.
VII
ABSTRACT
In Brazil it has a great lack of tools of practical teach-learning for the education of disciplines
of Operational Systems. Difficulties in understanding the content of them exist between the
certain pupils discipline theoreticians of the course of computer science, engineering of the
computation and systems of information, in which the professors if pledge in transmitting.
With the graphical interface of the simulator, it becomes more viable for the pupils the
visualization of the complex subjects and abstract of scheduling of processes of it disciplines
of Operational Systems. The pupils will be capable to decide its activities with more
efficiency and to take off its doubts of the theoretical concept on the basis of the comment in
the simulator. The EPSOsim simulator search of form simple, practical and detailed to
simulate the algorithms of scheduling of processes.
Words keys: scheduling of processes, Operational Systems, algorithms, FIFO, Round Robin,
priority.
VIII
SUMÁRIO
INTRODUÇÃO ..................................................................................................................................................... 1
METODOLOGIA ................................................................................................................................................. 2
1.
TEORIAS EDUCACIONAIS E FERRAMENTAS DE ENSINO-APRENDIZAGEM ....................... 4
1.1
ENSINO CONTEUDISTA ...................................................................................................................... 4
1.2
TEORIA CONSTRUTIVISTA ................................................................................................................. 4
1.3
FERRAMENTAS DE AUXÍLIO AO ENSINO-APRENDIZAGEM ................................................................. 5
1.3.1 SIMULADORES ................................................................................................................................... 5
1.3.1.1 SOSIM ............................................................................................................................................... 6
1.3.1.2 SISO ................................................................................................................................................. 7
1.3.1.3 NACHOS ............................................................................................................................................ 7
1.3.1.4 MOSS ............................................................................................................................................... 8
1.3.2 SISTEMAS REAIS ................................................................................................................................ 9
1.3.2.1 MINIX .............................................................................................................................................. 9
1.3.3 LINUX.............................................................................................................................................. 10
1.3.3.1 PROJETO GNU ................................................................................................................................ 12
1.3.3.2 KERNEL LINUX ................................................................................................................................ 13
2.
SISTEMAS OPERACIONAIS E O ESCALONAMENTO DE PROCESSOS .................................. 15
2.1
CONCEITOS BÁSICOS DE SISTEMAS OPERACIONAIS......................................................................... 15
2.2
PROCESSOS...................................................................................................................................... 18
2.2.1 PROCESSOS X THREADS.................................................................................................................... 19
2.2.2 MULTIPROGRAMAÇÃO .................................................................................................................... 20
2.2.3 BLOCO DE CONTROLE ..................................................................................................................... 21
2.3
ESCALONAMENTO DE PROCESSOS ................................................................................................... 22
2.3.1 PREEMPTIVO E NÃO-PREEPTIVO ...................................................................................................... 23
2.3.2 FUNÇÕES DO ESCALONAMENTO DE PROCESSOS .............................................................................. 24
2.3.3 CATEGORIA DE ALGORITMOS DE ESCALONAMENTO EM LOTE, INTERATIVO E TEMPO REAL. .......... 26
3.
4.
ARQUITETURA DO SIMULADOR ..................................................................................................... 28
3.1
CLASSES E OBJETOS DO SIMULADOR ............................................................................................... 28
3.2
DIAGRAMA DE CLASSES .................................................................................................................. 33
FUNCIONAMENTO E DESCRIÇÃO DO AMBIENTE ..................................................................... 35
4.1
AMBIENTE DO SIMULADOR ............................................................................................................. 35
IX
4.2
JANELA PRINCIPAL .......................................................................................................................... 36
4.3
JANELA CONFIGURAÇÃO DO SISTEMA ............................................................................................. 37
4.4
JANELAS DE ESCALONAMENTO DE PROCESSOS ............................................................................... 39
4.4.1 JANELA FIFO .................................................................................................................................. 43
4.4.2 JANELA SJF ..................................................................................................................................... 45
4.4.3 JANELA SRT .................................................................................................................................... 47
4.4.4 JANELA CIRCULAR .......................................................................................................................... 48
4.4.5 JANELA PRIORIDADE NÃO-PREEMPTIVO ......................................................................................... 51
4.4.6 JANELA PRIORIDADE PREEMPTIVO .................................................................................................. 53
4.4.7 JANELA CIRCULAR COM PRIORIDADES ............................................................................................ 54
4.4.8 JANELA MÚLTIPLAS FILAS .............................................................................................................. 55
4.5
JANELA DIAGRAMA DE GANTT........................................................................................................ 57
5.
CONCLUSÃO .......................................................................................................................................... 58
6.
REFERÊNCIAS BIBLIOGRÁFICAS ................................................................................................... 60
7.
ANEXOS ................................................................................................................................................... 65
ANEXO I – CÓDIGO-FONTE DA JANELA CONFIGURAÇÃO DO SISTEMA ..................................................... 65
ANEXO II – CÓDIGO-FONTE DO COMPONENTE DE CORES DOS PROCESSOS .............................................. 77
X
LISTA DE FIGURAS
Figura 1 – Simulador SOsim (MAIA, 2007).................................................................. 6
Figura 2 – Simulador SISO 2.0 (PAULO, 2009) ........................................................... 7
Figura 3 – O MINIX 3 (EQUINOX, 2007) .................................................................. 10
Figura 4 – Kalango Linux (SONYMASTER, 2009).................................................... 11
Figura 5 – Big Linux (SONYMASTER, on-line) ........................................................ 12
Figura 6 – Representação gráfica de um Kernel monolítico (DOI, 2005) ................... 13
Figura 7 – Colossus foi criado em 1941. (SARAIVA, 2009) ...................................... 16
Figura 8 – Jobs (BRANCO, on-line) ........................................................................... 16
Figura 9 – Batch e a multiprogramação (CARDOSO, 2006) ...................................... 17
Figura 10 – Monitor Residente (VAGO, 2011) ........................................................... 17
Figura 11 – Processo (GUIZZI, 2010). ........................................................................ 18
Figura 12 – Multiprogramação (MEDEIROS, 2006)................................................... 20
Figura 13 – (PCB) - Bloco de Controle de Processo (MACHADO; MAIA, 2009). ... 21
Figura 14 – Estados de processos ................................................................................. 23
Figura 15 – Diagrama de classe do formulário de configuração do sistema................ 33
Figura 16 – Janela principal ......................................................................................... 37
Figura 17 – Configuração do sistema ........................................................................... 38
Figura 18 – Janela de estado de criação do processo. .................................................. 39
Figura 19 – Layout padrão usada nos escalonamentos FIFO, SJF, SRT e Round Robin
.................................................................................................................................................. 41
Figura 20 – Informações de processos ......................................................................... 42
Figura 21 – Uso da política de escalonamento FIFO com o diagrama de Gantt ......... 43
Figura 22 – Janela que simula o funcionamento do escalonamento FIFO .................. 44
Figura 23 – Exemplo da política de escalonamento SJF com o diagrama de Gantt. ... 45
Figura 24 – Janela que simula o funcionamento do escalonamento SJF ..................... 46
Figura 25 – Janela que simula o funcionamento do escalonamento SRT..................... 47
XI
Figura 26 – Diagrama de Gantt do escalonamento Round Robin, com quantum igual a
oito. ........................................................................................................................................... 49
Figura 27 – Diagrama de Gantt do escalonamento Round Robin, com quantum igual a
cinco. ........................................................................................................................................ 49
Figura 28 – Diagrama de Gantt do escalonamento Round Robin, com quantum igual a
dois. .......................................................................................................................................... 50
Figura 29 – Janela que simula o funcionamento do escalonamento Round Robin ...... 51
Figura 30 – Janela que simula o funcionamento do escalonamento não-preemptivo .. 52
Figura 31 – Janela que simula o funcionamento do escalonamento preemptivo ......... 54
Figura 32 – Janela que simula o funcionamento do escalonamento circular com
prioridade ................................................................................................................................. 55
Figura 33 – Janela que simula o funcionamento do escalonamento múltiplas filas .... 56
Figura 34 – Diagrama de Gantt do simulador EPSOsim (Escalonamento FIFO) ....... 57
XII
LISTA DE TABELAS
Tabela 1 – Escalonamento de processos e suas respectivas filas de criação. ............... 31
Tabela 2 – Lista de escalonamentos e objetos (fila de prontos) ................................... 31
Tabela 3 – Lista de escalonamentos e objetos (usadas três filas de prontos) ............... 32
Tabela 4 – Formulário do simulador EPSOsim ........................................................... 35
XIII
LISTA DE ABREVIATURA E SIGLAS
CPU (Central Processing Unit) – Unidade de Processamento de Dados.
CTSS (Compatible Time-Sharing System) – Sistema Compatível de Divisão por
Tempo.
FCFS (First Come First Server) – O Primeiro a Chegar é o Primeiro a ser Servido.
FIFO (First In First Out) – Primeiro a Entrar é o Primeiro a Sair.
GNU (Gnu is Not Unix) – GNU não é Unix.
MEC – Ministério da Educação.
MOSS – (Modern Operating Systems Simulators) – Simulador Moderno de Sistemas
Operacionais.
PC (Program Counter) – Contador de Programa.
PCB (Processo Controle Block) – Bloco de Controle de Processo.
PID (Process Identification) – Identificação do Processo.
SESu – Secretaria de Ensino Superior.
SISO – Simulador de Sistema Operacional.
SJF (Shortest Job First) – Processo Mais Curto Primeiro.
SP (Stack pointer) – Ponteiro de Pilha.
SR (Status Register) – Registradores de Status.
SOsim Simulador de Sistemas Operacionais.
SuSE (Software und System-Entwicklung) – Desenvolvimento de Software e Sistema.
UFRJ – Universidade Federal do Rio de Janeiro.
VCL (Visual Component Libary) – Biblioteca de Componentes Visuais.
MMU (Memory Management Unit) – Unidade de Gerência de Memória.
UML (Unified Modelling Language) – Linguagem de Modelagem Unificada.
XIV
INTRODUÇÃO
As Diretrizes Curriculares do Ministério da Educação (MEC) recomendam que o
assunto Sistemas Operacionais esteja presente no conjunto das disciplinas tecnológicas dos
cursos de Ciência da Computação, Engenharia de Computação, Sistemas de Informação e
Licenciatura em Computação (MEC; Diretrizes; SESu, on-line). Trata-se de uma disciplina
relevante, de extenso conteúdo e que aborda aspectos crucias do funcionamento de um
sistema de computação, dentre eles: programação concorrente, gerência de processos,
gerência de memória, gerência de arquivos, gerência de E/S e memória virtual.
Uma das formas de facilitar o processo ensino-aprendizagem consiste em realizar
atividades práticas que permitam ao aluno visualizar o conceito teórico.
Dentre essas
atividades se inclui a utilização de programas simuladores. A utilização de simuladores
permite ver, associar e analisar conceitos diante de situações práticas que imitam a realidade.
Diante desse cenário, o presente trabalho propõe, a criação de um simulador como ferramenta
de apoio ao ensino da disciplina de Sistemas Operacionais e que possa ser utilizado no
contexto dos objetivos e realidade dos cursos que contemplam a disciplina.
O presente trabalho visa desenvolver um simulador como recurso de apoio didático ao
ensino do assunto escalonamento de processos da disciplina Sistemas Operacionais, buscando
agregar novos algoritmos ainda não explorados nos simuladores existentes e gerar gráficos
com informações das simulações.
Espera-se que o simulador seja capaz de representar o funcionamento do Sistema
Operacional por meio de recursos gráficos de modo a contribuir com o processo de ensinoaprendizagem de disciplinas que abordem esse assunto. Com a implementação do simulador,
o aluno terá mais conhecimento e obterá mais experiência para fazer uma determinada
atividade em sala de aula.
1
METODOLOGIA
De acordo com Perin Filho (1995), existem três estratégias para solução de problemas
são elas: a experimentação direta, a resolução analítica e a simulação de sistema. O projeto
consiste na estratégia de simulação de sistemas, na qual é desenvolvido um programa de
computador para simular um sistema real que apresentará o funcionamento dos Sistemas
Operacionais.
O desenvolvimento do simulador será norteado fundamentalmente pelos resultados
dos seguintes passos:
•
Levantamento dos trabalhos existentes que visam apoiar o ensino da disciplina de
Sistemas Operacionais;
•
Pesquisa junto aos professores e alunos de Sistemas Operacionais visando identificar
os aspectos, mecanismos e conceitos de Sistemas Operacionais que geram mais
dúvidas nos alunos;
O levantamento dos trabalhos existentes será feito utilizando os recursos da biblioteca
da Faculdade Farias Brito, notadamente a ferramentas de busca na internet, tal como o Google
Acadêmico. Após a descoberta dos simuladores existentes, um grupo desses será escolhido
para testes. A análise das funcionalidades, e levantamento dos pontos positivos e negativos
será verificada com a instalação e uso de cada simulador.
Após a definição das funcionalidades requeridas para o simulador, será feito um
levantamento a respeito da linguagem de programação que será usada para o desenvolvimento
do projeto. Pretende-se utilizar uma ferramenta de desenvolvimento como a ferramenta
Borland Delphi, pois esta possui bibliotecas com bastantes recursos, comparado com outras
linguagens de programação.
2
Pretende-se desenvolver e modelar o simulador com o método de orientação a objeto,
visando o reuso e a facilidade de inclusão de novas funcionalidades. E será usada a ferramenta
de modelagem UML, Star UML, para o desenvolvimento do artefato diagrama de classe.
3
1.
TEORIAS EDUCACIONAIS E FERRAMENTAS DE ENSINOAPRENDIZAGEM
Nas seções seguintes serão abordadas algumas teorias, ferramentas de simulação e
sistemas reais que faz parte do ensino-aprendizagem dos alunos.
1.1
ENSINO CONTEUDISTA
Há cerca de duas décadas surgiu o modelo de ensino conteudista, que prepara
indivíduos passivos, no qual é transmitido ao aluno uma grande quantidade de informação por
um determinado período de tempo, sem se preocupar se realmente os alunos estão
aprendendo. Muitos alunos tentam memorizam o conteúdo que é transmitido. Logo depois, é
exigido dos alunos resultados por meio de provas escrita ou oral. Com o passar do tempo,
grande parte do que foi memorizado pelo aluno é perdido, devido à transmissão ser
momentânea e superficial (CASTRO, 2011).
Hoje em dia, grande parte dos intelectuais educadores não concorda com este padrão
de ensino. Eles pesquisam sobre as possíveis conseqüências, agregam novos conhecimentos
contra este modelo e favorecem novos meios práticos para se dissociar dessa abordagem
teórica (CASTRO, 2011).
1.2
TEORIA CONSTRUTIVISTA
O construtivismo ou sócio-construtivismo empenha-se a explicar a inteligência
humana, do modo que determine ações mútuas entre indivíduos e o meio, procurando
incentivar o conhecimento científico. O construtivismo deriva do conhecimento e da
aprendizagem das teorias da epistemologia genética de Jean Piaget, que se empenhou em
analisar a passagem do individuo que possui um conhecimento inferior para um conhecimento
superior (BALDI, 2010). O construtivismo teve também como pesquisador sócio-histórico
Lev Vygotsky, onde afirma que:
4
O homem não nasce inteligente, mas também não é passivo sob a influência
do meio, isto é, ele responde a estímulos externos agindo sobre eles para
construir e organizar o seu próprio conhecimento, de forma cada vez mais
elaborada (BALDI, 2010).
Piaget emprega dois conceitos importantíssimos no que diz respeito ao saber e ao
funcionamento da mente humana: assimilação e acomodação. Estes dois processos procuram
restaurar um equilíbrio mental perturbado pela influência de um dado incombinável, aquilo
que já se conhece, chamado de princípio de equilibração (RODRÍGUEZ, 1999).
Há duas vertentes no princípio de equilíbrio. No primeiro caso, o dado entra em
contato e é assimilado por um esquema já existente, onde se amplia. No segundo caso, o novo
dado é incompatível com o esquema já formulado e então cria novo esquema acomodando
novo conhecimento. Este novo esquema será então ampliado na medida em que o indivíduo
estabelecer relações com o meio. A teoria construtivista foi usada para solucionar muitos
problemas educacionais existentes. Os educadores se empenharam bastante neste modelo no
qual investiram muito, mas constataram resultados inferiores ao que esperavam.
(RODRÍGUEZ, 1999).
1.3
FERRAMENTAS DE AUXÍLIO AO ENSINO-APRENDIZAGEM
Na subárea da programação, existem certas dificuldades entre os alunos com relação à
implementação nos algoritmos de escalonamento de processos. Tais problemas ficam ainda
mais difíceis sem a ajuda de uma ferramenta que auxilie no ensino-aprendizagem, ou de
algum software que simule os algoritmos de escalonamento de processos.
Nas próximas seções, serão abordadas algumas ferramentas de apoio ao ensino, tais
como simuladores, os quais demonstram algumas funções dos Sistemas Operacionais, e que
estão disponíveis na internet.
1.3.1 SIMULADORES
A simulação antigamente era estigmatizada apenas como fingimento ou farsa, porém
na era da tecnologia ganhou um sentido mais positivo. Atualmente, a simulação pode ser uma
5
ferramenta que ajude a compreender melhor o espectro computacional, ou seja, o
funcionamento interno de um determinado dispositivo eletrônico. Alguns simuladores de
Sistemas Operacionais serão apresentados a seguir.
1.3.1.1 SOSIM
O SOsim (Simulador de Sistemas Operacionais) foi desenvolvido por Luiz Paulo Maia
em sua tese de mestrado na Universidade Federal do Rio de Janeiro (UFRJ). O SOsim é um
software educativo que auxilia no ensino-aprendizado de professores e alunos. Ele foi
desenvolvido com o intuito de ser uma ferramenta gratuita (MAIA, 2001), está disponível no
site, na página www.training.com.br/SOsim/. Este simulador ilustra alguns conceitos da
disciplina Sistemas Operacionais, tais como multiprogramação, processos e suas mudanças de
estado, gerência do processador (escalonamento) e a gerência da memória virtual. A figura 1
ilustra um exemplo do simulador SOsim:
Figura 1 – Simulador SOsim (MAIA, 2007)
6
1.3.1.2 SISO
O simulador SISO (Simulador de Sistema Operacional) é um applet disponível na web
no site http://martins.webcindario.com/jsiso/bin/index.html. O SISO simula a detecção de
deadlock e foi criado com o intuito de auxiliar no ensino-aprendizagem da disciplina a
Sistemas Operacionais. O SISO é um simulador muito prático. Seu funcionamento não exige
uma instalação, podendo ser executado diretamente pela internet. Para isso é necessário que o
computador tenha a Java Runtime Environment 1.5 ou superior (PAULO, 2009). A figura 2
ilustra um exemplo do simulador SISO 2.0:
Figura 2 – Simulador SISO 2.0 (PAULO, 2009)
1.3.1.3 NACHOS
O simulador de Sistema Operacional Nachos foi criado com o uso na linguagem C++,
usando uma abordagem de orientação a objetos. Também possui algumas partes
7
desenvolvidas com o uso da linguagem C. O simulador Nachos simula uma máquina virtual
que utiliza a arquitetura MIPS (Microprocessor without Interlocked Pipeline Stages Microprocessador sem Estágios Interligados de Pipeline) - não confundir com MIPS (Milhões
de Instruções Por Segundo). O MIPS é utilizado em aplicações como: computadores de alto
desempenho (Silicon Graphics), sistemas embarcados, em Sistemas Operacionais portáteis,
roteadores (CISCO) e videogames (GONÇALVES, 2011).
Na implementação do Nachos foi declarada a classe “Machine, a qual possui métodos
parecidos com os do assembly MIPS, onde a cada linha de código é traduzida pelo próprio
simulador em instrução executável, e então compilado habitualmente para uma máquina alvo,
por exemplo. O Sistema Operacional Linux, normalmente utiliza o compilador g++, no qual o
código-fonte é compilado neste compilador (g++), gerando assim o código MIPS que
corresponde ao código do hardware. Para compilar é preciso à instalação de um compilador
especial diferente do compilador padrão dos Sistemas Operacionais, o compilador cruzado
(cross-compiler) (GONÇALVES, 2011).
No simulador Nachos há várias rotinas, tais como: threads e chamadas de
procedimento remoto. O Nachos foi desenvolvido por várias pessoas de diversos países, tais
como: Estados Unidos, Canadá, França e Alemanha. Thomas Anderson foi um dos criadores
do Nachos e em seu site na internet está disponível toda informação, documentação, patch e
versões (ANDERSON, 2008).
1.3.1.4 MOSS
O MOSS (Modern Operating Systems Simulators) ou simulador moderno de Sistemas
Operacionais é um pequeno simulador com uma coleção de programas desenvolvidos em
Java. Ele foi criado por Ray Ontko e Alexander Reeder, que se basearam no conceito do livro
de Andrew S. Tanenbaum (professor de Ciências da Computação da Vrije Universiteit na
Amsterdã em Holanda) com ajuda da Prentice Hall (Editora líder educacional nos EUA). O
simulador está disponível tanto para sistemas Windows como para Linux (ONTKO, 2008).
8
O simulador MOSS reúne um conjunto de programas de quatro diferentes aplicativos
tais como: simulador de escalonamento, simulador de deadlock, simulador de gerência de
memória e simulador de sistema de arquivos. No programa de simulação de escalonamento o
estudante pode escrever seus próprios algoritmos de escalonamento, podendo especificar o
número de processos, a média, e o desvio padrão para calcular o tempo de I/O, o tempo de
bloqueio para cada processo e a duração da simulação (ONTKO, 2008).
O programa de simulação de deadlock apresenta uma interface gráfica que permite ao
aluno percorrer os programas que estão em execução em cada um dos processos e os
processos bloqueados, para analisar os casos de impasse e como podem ser evitados,
detectados e/ou resolvidos (ONTKO, 2008).
1.3.2 SISTEMAS REAIS
Os sistemas reais que serão apresentados na subseção a seguir possuem códigos-fonte
disponíveis na web, tornando assim possível a interação entre alunos e professores com o
Sistema Operacional. Além disso, qualquer pessoa pode alterar o código-fonte e observar seus
efeitos na prática.
1.3.2.1 MINIX
MINIX é um Sistema Operacional do tipo Unix-like (é parecido com Unix), gratuito e
com código fonte disponível na web (TANENBAUM, 2011a). Ele foi criado para uso
educacional em 1987 por Andrew S. Tanenbaum, com o objetivo de ajudar nas suas aulas de
Sistemas Operacionais. O desenvolvimento da nova versão, MINIX 3, está sendo liderado
outra vez por Andrew S. Tanenbaum. Segundo suas publicações em artigos, Tanenbaum diz
que o Sistema Operacional MINIX será mais seguro do que Linux e o Windows (AVRAM,
2009). Após algum tempo trabalhando no projeto em uma lista de discussão (TORVALDS,
1996), Linus diz o seguinte:
Como eu mencionei há um mês atrás, estou trabalhando numa versão
independente de um S.O. similar ao Minix para computadores AT-386. Ele
está, finalmente, próximo do estado em que poderá ser utilizado (embora
possa não ser o que você espera), e eu estou disposto a disponibilizar o
9
código-fonte para ampla distribuição. Ele está na versão 0.02... Contudo eu
tive sucesso ao executar bash,gcc , gnu-make, gnu-sed,compressão etc, nele
(TORVALDS, 1996).
É esperado que o MINIX versão 3, seja um Sistema Operacional altamente confiável,
livre de falhas como os aparelhos televisores, sistemas embarcados ou aplicações críticas
(sistemas de controle de tráfego aéreo, processamento de pedidos para uma cadeia de lojas de
varejo, entre outros). A figura 3 ilustra a janela do MINIX versão 3:
Figura 3 – O MINIX 3 (EQUINOX, 2007)
1.3.3 LINUX
Geralmente, os Sistemas Operacionais que usam o kernel (núcleo) Linux são tidos
como Sistema Operacional Linux. O kernel Linux foi criado pelo finlandês Linus Torvalds
(OLIVEIRA et. al., 2004). Linus inspirou-se no projeto MINIX do professor Tanenbaum.
10
Como já foi descrito na subseção 1.3.2.1, o MINIX é um sistema bem simples, criado com
propósitos didáticos e bastante disseminado no meio acadêmico. Depois que Linus criou a
versão inicial do Sistema Operacional Linux, disponibilizou o MINIX em grupo de discussão
na internet, com a intenção de ser um material de estudo para acadêmicos na área da
computação, mas logo que divulgou outras pessoas entraram no projeto e contribuíram com
novas funcionalidades.
O Linux faz parte de um conjunto de softwares mais um kernel Linux, formando a
chamada distribuição. Existem várias distribuições, tais como: Red Hat, Debian, Slackware,
SuSE, Mandrake e Conectiva (TANENBAUM, 2005). As Figuras 4 e 5 ilustram duas
distribuições Linux:
Figura 4 – Kalango Linux (SONYMASTER, 2009)
11
Figura 5 – Big Linux (SONYMASTER, on-line)
1.3.3.1 PROJETO GNU
GNU é um significado recursivo de (GNU Não é Unix). GNU também se refere a um
animal nativo da África, sendo ele o logotipo da empresa do projeto Free Software
Foundation (Fundação para o Software Livre), que foi criada em 1985 por Richard Smallman
(GNU, 2009). Stallman fundou o GNU com a intenção de criar um Sistema Operacional livre.
Em 1991, o sistema estava praticamente pronto, mas precisava de um núcleo. Smallman tinha
seu grupo, que estava desenvolvendo seu próprio núcleo, chamado de Hurd. Foi então que
Smallman conheceu Linus. Linus tinha desenvolvido o núcleo que Stallman tanto precisava.
O núcleo Hurd da GNU está em desenvolvimento desde 1991. O um projeto GNU reuniu
diversos programadores. Foram desenvolvidas ferramentas para o conjunto de software que
compõe o Sistema Operacional Linux. Entre as ferramentas, podem ser citados o compilador
gcc, o editor de texto emac, o editor de gráficos gimp, o ambiente de janelas gnome, etc.
(GNU, on-line).
12
1.3.3.2 KERNEL LINUX
O núcleo do Linux foi dividido em duas categorias, o núcleo de desenvolvimento e o
núcleo estável. O núcleo de desenvolvimento é aquele em que os programadores podem
modificar o código, sendo por isso chamado de núcleo de experimentação. O núcleo estável é
conhecido pelos programadores como confiável. Nessa fase o núcleo já parcialmente pronto é
lançado para as comunidades da internet. Existem bugs menores para serem corrigidos nessa
parte, os quais geram os chamados realeases. A versão é determinada por três números, por
exemplo, 1.0.12. No momento em que eu estava digitando esta linha do projeto a versão do
kernel do Linux estava em 2.6.31.6.
O primeiro número indica uma troca radical do núcleo começando do zero. O segundo
número indica se a versão é de desenvolvimento ou estável. Se for par, a versão é estável,
caso contrário de desenvolvimento. O terceiro número referisse a correções de bugs menores
em um núcleo, é o chamado realease (OLIVEIRA, et. al., 2004, p. 175). A Figura 6 ilustra
um Kernel Monolítico.
Figura 6 – Representação gráfica de um Kernel monolítico (DOI, 2005)
13
O núcleo é classificado de duas formas, monolítico e micronúcleo. No monolítico
estão todos os componentes que fazem parte de um único código. O micronúcleo
(microkernel) é constituído de funcionalidades reduzidas, tais como escalonador simples,
primitivas de sincronização e mecanismos de comunicação entre processos. Os outros
componentes no qual compõe um Sistema Operacional são implementados separadamente
(OLIVEIRA, et. al., 2004).
14
2. SISTEMAS
PROCESSOS
OPERACIONAIS
E
O
ESCALONAMENTO
DE
É relevante notar que há uma demanda de recursos muito grande, que faz parte do diaa-dia de um usuário. Essa exigência requer que os programas respondam de forma rápido,
onde o usuário não perceba as ações do que há por trás do sistema, é frustrante para o usuário
ficar esperando a resposta de um determinado recurso no qual solicitou. Quando o usuário
solicita um recurso através de um programa, é notório que o Sistema Operacional resolva a
solicitação (apud. OLIVEIRA, et. al., 2004, p. 1). . Oliveira (2004) conceitua o Sistema
Operacional como uma camada de software colocada entre o hardware e as aplicações que
executam tarefas para o usuário.
Para um melhor entendimento sobre Sistemas Operacionais, nas subseções a seguir,
serão abordados os seguintes assuntos: origem, funções e conceito do Sistema Operacional
(gerência de processos, gerência de memória, memória virtual, sistemas de arquivos,
sincronização de arquivo, seus mecanismos que antigamente eram usados, especificamente o
funcionamento dos Jobs, além dos mecanismos que são usados atualmente. Será visto
também monitores residentes, multiprogramação, conceitos e funções de escalonamentos de
processos e os principais algoritmos de escalonamento de processos.
2.1
CONCEITOS BÁSICOS DE SISTEMAS OPERACIONAIS
Na década de 40 não existiam Sistemas Operacionais, o programador era o próprio
operador do computador, que o controlava por meio de chaves, fios e luzes de aviso. Naquela
época havia uma planilha chamada de alocação de horário, onde em certo horário o
programador executava um programa que possibilitava o controle total da máquina. Nesta
mesma década surgiram os operadores profissionais, com isso o programador deixou de
operar o computador durante a execução de um programa (OLIVEIRA et. al., 2004). A figura
7 ilustra o antigo computador Colossus da década de 1940:
15
Figura 7 – Colossus foi criado em 1941. (SARAIVA, 2009)
Em consequência do surgimento dos operadores, surgiu o job, que enfileirava tarefas,
onde era compilado, executado e os dados eram lidos por meio de cartões perfurados. O Jobs
podia chamar vários programas e funcionavam por etapas: o montador era executado e
traduzia o programa de assembly para a linguagem de máquina. O programa então era ligado
às rotinas de I/O de uma biblioteca, depois de ligarem as rotinas de I/O então podia ser
carregado e executado. Caso houvesse um erro na execução, tirava-se uma cópia na listagem
do conteúdo de toda a memória principal (OLIVEIRA, et. al., 2004). A figura 8 mostra um
exemplo de Jobs:
Figura 8 – Jobs (BRANCO, on-line)
Os Jobs eram uma forma de agrupar programas em lotes, com isso surgiu a idéia de
sistema em batch. O sistema em batch era um arquivo com um conjunto de comandos
executados sequencialmente. Mesmo com o agrupamento de Jobs os programas ainda eram
16
colocados para executar de forma manual (OLIVEIRA, et. al., 2004). A figura 9 compara o
processamento de um sistema em batch e multiprogramação, será
rá visto o assunto de
multiprogramação na seção 2.2.2:
Figura 9 – Batch e a multiprogramação (CARDOSO, 2006)
Na década dee 50 surgiu o monitor residente cuja função era automatizar a execução
dos Jobs. Conforme Oliveira et. al. (2004),
), a sua função era a transição dos programas no
computador. Quando
uando um programa terminava, o monitor residente se comprometia de
carregar outro programa automaticamente e o executava. Os monitores residentes ficavam o
tempo todo na memória principal
incipal e reduziam o tempo que se levava para transferir um job
para outro. A figura 10 ilustra um exemplo de monitor
m
residente:
Figura 10 – Monitor Residente (VAGO, 2011)
17
2.2
PROCESSOS
O processo é simplesmente um programa em execução, ou pode-se dizer que,
processo seja um módulo carregável e executável de maneira concorrente com outros
processos separadamente. Cada processo possui um espaço de endereçamento. O espaço de
endereço é uma lista de posições de memória que varia de zero a uma quantidade máxima de
posições onde o referente processo pode ler ou escrever. O espaço de endereçamento contém
o programa executável, os dados do programa e sua pilha (TANENBAUM, 2005).
Os processos se comunicam através de mecanismos tais como: sinais, pipes, named
piped, memória compartilhada, soquete (socket) e trocas de mensagem (SILBERSCHATZ, et.
al., 2005). Através de um processo, um programa pode alocar recursos, compartilhar dados,
trocar informação e sincronizar sua execução (GUIZZI, 2010). Os processos em sistemas
multiprogramados são executados concorrentemente, compartilhando o uso da CPU, memória
principal e dos dispositivos de E/S. O processo é dividido em três grupos, conforme a figura
11:
Figura 11 – Processo (GUIZZI, 2010).
18
•
Contexto de software
•
Contexto de hardware
•
Espaço de endereçamento.
O armazenamento do conteúdo dos registradores gerais e registradores específicos
(PC - contador de programa, SP - ponteiro de pilha e SR - registradores de status), acontecem
através do contexto de hardware (MACHADO, et. al., 2009). Um das fases mais importantes
de um processo é a mudança de contexto, isto é, onde são guardadas as informações do
contexto de software e de hardware de um determinado processo que deverá ser selecionado
para CPU. A mudança de um processo para outro acontece de maneira muito rápido,
imperceptível para o usuário, dando a ilusão de execução simultânea (TANENBAUM, 2005).
De acordo com Machado (2009), no contexto de software existem três grupos importantes:
•
Identificação - PID (Process Identification – Identificação do Processo), owner
(UID – User Identification – Identificação do usuário), nome, data e hora da
criação, prioridade da execução, tempo de processador (burst time).
•
Quotas - número máximo de arquivos abertos, tamanho máximo da memória
principal e secundária, número máximo de operações de E/S, tamanho máximo do
buffer, número máximo do sub-processos e threads
•
Privilégios ou direito - permissões entre o próprio processo (prioridade de
execução, limitação da alocação das memórias seja ela principal, secundária e etc),
entre os demais processos (características) e entre o Sistema Operacional
(desativação do sistema, modificação de regras de segurança, criação de outros
processos privilegiados, alteração de parâmetro de configuração do sistema)
2.2.1 PROCESSOS X THREADS
Threads são semelhantes aos processos e contém seu próprio conjunto de
registradores, contador de programa e pilhas. Um thread é a unidade básica de um processo,
19
vários threads concorrem entre si dentro de um processo, onde são executadas separadamente.
Tanenbaum (2005) diz que os threads podem realizar execuções múltiplas ocorrendo no
mesmo ambiente de processo com alto grau de paralelismo. No entanto, múltiplos threads são
equivalentes a múltiplos processos onde os processos são executados em paralelo em um
único computador.
Existem dois ambientes de thread, a monothread e a multithread, na monothread cada
processo comporta apenas um thread no seu espaço de endereçamento, isto é, implementado
exclusivamente com uso de múltiplos processos isolados. No ambiente multithread, um
processo pode conter diversas threads concorrendo entre si. (MACHADO; MAIA, 2009).
2.2.2 MULTIPROGRAMAÇÃO
Os primeiros sistemas de computadores, apenas um programa podia ser executado por
vez, pois nesta época não existia a idéia de multiprogramação. Na década de 60 surgiu o
conceito de multiprogramação, onde permite que vários programas concorram de forma
pseudo-paralela ao mesmo tempo. Ao contrário do monitor residente, onde executava um
programa de cada vez e permitia que o processador ficasse ocioso (OLIVEIRA, et. al., 2004,
pag. 8-9). A figura 12 ilustra um exemplo de multiprogramação:
Figura 12 – Multiprogramação (MEDEIROS, 2006)
20
2.2.3 BLOCO DE CONTROLE
O Sistema Operacional implementa o processo por meio de uma estrutura de dados
localizada em seu núcleo, chamada de Bloco de Controle de Processo ou em inglês PCB
(Process Control Block). Os PCBs ficam residentes em uma área protegida da memória
principal, seu tamanho é limitado por um parâmetro do Sistema Operacional (MACHADO;
MAIA, 2009). De acordo com Machado (2009), a função do PCBs é armazenar informações
sobre o contexto de hardware e contexto de software e espaço de endereçamento referente a
cada processo, tais como:
1. PID (Process Identification) - Identificação do processo;
2. Prioridade do processo;
3. Estado do processo (criação, aptos, execução, bloqueado e finalização);
4. Localização e quantidade de memória principal usada pelo processo;
5. Ponteiros para o encadeamento dos blocos de controle dos próximos processos;
6. Informações de contabilidade (espaço de memória ocupado, tempo de
processador entre outros);
7. Identificador do processo pai;
8. Contador de programa;
9. Recursos que o processo pode ter acesso;
10. Ponteiro de pilha de processos.
A figura 13 ilustra o Bloco de Controle de Processo visto anteriormente:
Figura 13 – (PCB) - Bloco de Controle de Processo (MACHADO; MAIA, 2009).
21
2.3
ESCALONAMENTO DE PROCESSOS
O escalonamento de processos ou agendador de tarefas é conceituado como sendo
uma atividade organizacional feita através da CPU ou um sistema distribuído (STALLINGS,
2004). À medida que os processos são criados é passado para o estado de pronto, a partir de
então, é necessários critérios para estabelecer a escolha do processo na qual deverá utilizar o
processador. Tais critérios para a escolha do processo são chamados de política de
escalonamento.
Maia (2009) diz que a política de escalonamento é à base da multiprogramação e
gerência de processos em Sistemas Operacionais. Um processo, no decorrer do seu
processamento passa por diferentes estados, em cargo de eventos gerados pelo Sistema
Operacional ou pelo próprio processo. De acordo com Tanenbaum (2005) resume os estados
de um processo em três estados, no qual os processos podem se encontrar em:
•
Execução – o processo é alocado na CPU;
•
Pronto – temporariamente parado para dar lugar a outro processo;
•
Bloqueado – aguardando o término de um evento externo para que possa
continuar a execução.
Conforme Cunha (2003), para poder criar um processo são necessárias as seguintes
ações do Sistema Operacional:
•
O mapa de memória do processo, com as regiões de código, dados e pilha.
•
Os valores iniciais de variáveis do ambiente.
•
Os valores iniciais dos registradores do processador, quando o programa for
posto em execução.
•
Os canais iniciais para as entradas e saídas.
•
Uma entrada numa tabela, interna ao Sistema Operacional, na qual expõe o
estado de cada processo.
22
Após as ações, o novo processo está apto para a execução. Outros autores têm uma
concepção diferente com relação aos estados dos processos, como Silberchatz (2005), no qual
define os estados dos processos em cinco estados. A figura 14 ilustra cinco estados dos
processos do modelo proposto por Silberchatz (2005), mostrando o fluxo dos processos:
Fatia de tempo
(preempção ou
interrupção)
Criação
CPU
Fila de Aptos
Admitir
Liberar
Finalização
Despachar
Espera de
evento
Desbloquear
E/S
Bloquear
Erro Crítico
Fila de Espera
Figura 14 – Estados de processos
1. Novo ou criação: onde o processo é criado;
2. Pronto ou aptos: o processo está esperando para ser atribuído a um processador;
3. Execução (CPU): as instruções estão sendo executadas;
4. Espera ou bloqueado: o processo está esperando que ocorra algum evento;
5. Finalização/Terminado: o processo é finalizado.
2.3.1 PREEMPTIVO E NÃO-PREEPTIVO
Há dois grupos principais nos algoritmos de escalonamento, preemptiva e nãopreemptiva. O escalonamento não-preemptivo foi o primeiro a ser implementado nos sistema
multiprogramado, os processos CPU-Bound assumem todo o controle da CPU gastando todo
23
seu tempo de processador na CPU, em seguida é repassado para o estado de finalização. Nos
processos do tipo IO-Bound, caso não exista nenhuma instrução para que ocorra à mudança
do estado de execução para o estado de espera, o processo é também repassado para o estado
de finalização (MACHADO; MAIA, 2009).
Os algoritmos de escalonamento não-preemptivo, não é muito utilizado atualmente,
pois os processos que se localiza na fila de pronto devem esperar o processo que está em
execução até ser finalizado, tornando o tempo médio de espera muito maior comparado com
outros algoritmos preemptivo (MACHADO, et. al., 2009).
Os escalonamentos do tipo preemptivo, o processo é removido da CPU devido ter
acabado a fatia de tempo (timeslice), idéia usada principalmente no escalonamento circular,
ou por preempção por prioridade, usada nos escalonamentos por prioridade. Isso acontece
devido à chegada na fila de pronto um processo com maior prioridade do que o processo
alocado na CPU. Nos sistemas atuais é comum utilizar uma combinação de diversos
escalonamentos de processos, isto depende da necessidade do sistema.
2.3.2 FUNÇÕES DO ESCALONAMENTO DE PROCESSOS
Uma das funções mais importantes do Sistema Operacional é o scheduler
(escalonador). Diante disto, no processador, todo o compartilhamento dos processos está
sujeito a esta função, no qual difere de critérios estabelecidos na implementação. Outra função
importante é o dispatcher (despachador), que é responsável pela a troca de contexto do
processo e passar o controle que antes era da CPU para o processo. O período em que
acontece a troca de contexto é chamado de latência de dispatcher. Em sistemas onde existe a
fatia de tempo (timeslice ou quantum), o dispatcher usa um circuito chamado de temporizador
onde calcula a fatia de tempo do próximo processo (MACHADO; MAIA, 2009). Conforme
Machado (2009), as políticas de escalonamento exigem determinados critérios:
1. Manter o processador ocupado a maior parte do tempo.
24
2. Balancear o uso do processador entre os processos.
3. Maximizar o sistema.
4. Oferecer tempo de resposta razoável para o usuário interativo.
O objetivo dos algoritmos de escalonamento é tratar todos os processos de forma igual
evitando o starvation (inanição), jargão na computação no qual o processo morre de fome. Os
processos ociosos ficam indefinitivamente esperando a utilização do processador
(SILBERCHATZ, et. al., 2005). Serão descritos a seguir, alguns critérios que devem ser
considerados nas políticas de escalonamento. De acordo com Machado (2009), em todos os
casos é desejável existir:
•
Justiça: cada processo deve ter sua parte justa ou integra na CPU, dependendo
do tipo de cada processo.
•
Aplicação da política: verificar se a política é cumprida.
•
Equílibrio: todas as partes do sistema devem está ocupada.
•
Turnaround: tempo gasto deste a criação do processo até sua finalização,
contabilizando o tempo em que o processo gasta na espera para a alocação de
memória, na fila de pronto, fila de espera, processamento e operações de E/S.
O objetivo das técnicas de escalonamento é justamente diminuir o tempo de
turnaround.
Segundo Machado (2009), nos sistemas em lote devem respeitar os determinados
requisitos:
•
Throughput (vazão): número de processos que são executados em um espaço
de tempo, quanto maior o throughput melhor.
•
Tempo de Resposta: tempo desde que é solicitada a requisição do processo, até
no instante que é exibida.
•
Utilização da CPU: conservar a CPU sempre ocupada. É estabelecida uma
porcentagem em que o processador fica ocupado (0 a 100%). A utilização de
30% indica que o sistema está com a carga de processamento baixa e com a
25
porcentagem de 90% indicam que está consideravelmente alta, ou seja, o
sistema está sobrecarregado.
Ainda de acordo com Machado (2009), nos sistemas interativos devem seguir os
requisitos:
•
Cumprimento dos prazos: evitar perda de dados;
•
Previsibilidade: evitar a degradação da qualidade em sistemas multimídias
Machado (2009), diz ainda que nos casos de sistemas em tempo real os algoritmos de
escalonamento devem priorizar os processos críticos.
2.3.3 CATEGORIA
TEMPO REAL.
DE
ALGORITMOS
DE
ESCALONAMENTO
EM
LOTE, INTERATIVO
E
Existem determinados critérios que devem ser estabelecidos para a boa implementação
dos algoritmos de escalonamento de processos de um Sistema Operacional, isso depende de
seu ambiente em lote, interativo ou tempo real. Nos sistemas em lote, os processos são
enfileirados no estado de pronto, em seguida, o escalonador escolhe um processo para ser
alocado na CPU até usar todo seu tempo de processador e ser transferido para o estado de
finalização. Os sistemas em lote possuem um tempo de resposta muito lento, os usuários
ficam esperando exaustivamente pela resposta do programa (TANENBAUM, 2005).
Os sistemas interativos são caracterizados pela a preempção, os processos ficam
alternando entre si na utilização da CPU. Não se pode confundir o tempo de resposta com o
tempo de turnaround, o tempo de resposta equivale com o tempo decorrido até o momento
em que é apresentado os resultados nos sistemas. Na maioria das vezes, esse tempo é restrito
devido à velocidade do dispositivo de saída (MAZIERO, 2008, p. 6). Mais detalhes sobre
esses algoritmos serão vistos no capitulo 4.
Sistemas em tempo real são aqueles em que devem reagir de forma imediata em
26
determinado espaço de tempo. Por exemplo, um programa player de vídeo como o Real
Player deve obter os bits do disco para converter em vídeo em um intervalo crítico de tempo,
se o cálculo que fizer for muito demorado, pode ter certos problemas nos resultados da saída,
saindo em intervalos diferentes, ou com alguma falha, ou até com o áudio soando diferente
(TANENBAUM, 2005).
Segundo Tanenbaum (2005), os sistemas em tempo real são usados em hospitais,
aeronaves, robôs e etc. A implementação desses sistemas funciona da seguinte maneira, o
programa é dividido em vários processos onde seu tempo de vida pode durar menos que um
segundo.
27
3.
ARQUITETURA DO SIMULADOR
Este capítulo aborda assuntos da arquitetura do simulador, suas funcionalidades com
base no modelo de Silberchatz (2005), apresentado no capítulo 2 (Sistemas Operacionais e o
escalonamento de processos). Mais adiante, neste capítulo será descrito as classes e objetos do
simulador dando ênfase na implementação do simulador e especificações de sua estrutura
interna.
3.1
CLASSES E OBJETOS DO SIMULADOR
O simulador EPSOsim usa biblioteca de classes VCL (Visual Component Library), é
uma biblioteca que tornam a estrutura do código mais organizado, diminuindo assim a
complexidade do código-fonte (PODGORETSKY ANATOLY, 2011). O simulador usa o
conceito da abstração no paradigma de orientação a objeto, ou seja, modela conceitos do
mundo real com base em um elemento, uma entidade ou um problema específico, no caso do
simulador a representação dos processos computacionais foi representada por uma instância
de objeto. Atualmente, é muito raro um Sistema Operacional usar o conceito de orientação a
objeto, sistemas que usa este conceito permitem a redução do acoplamento entre os módulos
(MACHADO; MAIA, 2009).
No simulador foi implementada a classe Tprocesso (vide anexo I), no qual é
instanciado um objeto toda vez que um usuário aciona o botão criar da janela de estado de
criação do processo (vide figura 18), onde são repassados os parâmetros necessários que
caracteriza o processo, desta forma a representação de um novo processo é criada. Veja a
linha de código abaixo, onde é instanciado um objeto e inserido na estrutura de dados fila:
FI.Push(Tprocesso.create(Ppid, Ptipo, Pcor, PTempoProc, Pprioridade));
Na classe Tprocesso foram definidos cinco atributos semelhantes ao do contexto de
software de um Sistema Operacional real. Veja os cinco atributos abaixo:
28
•
PID: número de identificação do processo.
•
Tipo de processo: possuem os tipos CPU-Bound, I/O-Bound Disco, I/O-Bound
CD, I/O-Bound USB Flash. Apenas os tipos dos processos no escalonamento
por múltiplas filas diferem dos demais escalonamentos, abaixo os itens que o
compõe:
1. Processo de sistema CPU-Bound;
2. Processo de sistema I/O-Bound;
3. Processos Interativos CPU-Bound;
4. Processos Interativos I/O-Bound;
5. Processos Batch CPU-Bound;
6. Processos Batch I/O-Bound;
•
Cor do processo: determina a cor de cada processo, no simulador existe 83
cores na versão do Delphi 2010 (vide anexo II) e 19 cores na versão Delphi 7.
•
Tempo de processador: tempo de cada processo, referente ao uso da CPU.
•
Prioridade: determina a prioridade de cada processo dos escalonamentos de
processos por prioridade (não-preemptivo, preemptivo e circular).
•
Turnaround: tempo desde a criação até a finalização de cada processo.
Na classe TSistema (vide anexo I) foi instanciado apenas o objeto S, este objeto
contém as informações do sistema, veja abaixo:
•
FatiaTempoSistema:
usado para a realizar a preempção por tempo no
escalonamento circular.
•
TempoDecorridoSistema: conta o tempo decorrido de um processo na CPU,
usado como um variável auxiliar da fatia de tempo.
29
•
TempoAcessoDisco: quantidade de tempo em que os processos do tipo IOBound disco realiza entrada e saída.
•
TtempoAcessoUSBFlash: quantidade de tempo em que os processos do tipo
IO-Bound USB Flash realiza entrada e saída.
•
TempoAcessoCD: quantidade de tempo em que os processos do tipo IO-Bound
CD realiza a entrada e saída.
•
TempoClock: relógio do escalonamento, tem o default igual a um,
representando um segundo.
•
TempoThroughput: números de processos executado em um determinado
espaço de tempo.
•
TempoInicialGantt: tempo inicial do diagrama de Gantt, equivale ao parâmetro
x do componente do diagrama, equivalente ao tempo em que o processo entra
na CPU.
•
TempoFinalGantt: tempo final do diagrama de Gantt equivale ao parâmetro y
do componente do diagrama, equivalente ao tempo em que o processo sai na
CPU.
•
UT: usada no diagrama de Gantt para fazer o somatório do tempo dos
processos em que ficou no estado de pronto.
•
UTAux: variável auxiliar da unidade de tempo, também usada no diagrama de
Gantt para obter o tempo dos processos em que ficou no estado de pronto.
Na classe TDisco (vide anexo I) foi instanciada o objeto D, este objeto contém
informações dos processos IO-Bound, foram criados quatro atributos, veja os quatro baixo:
•
Ocupado: verifica a CPU se está ocupada ou não.
•
TempoEsperado: contador de tempo dos processos do tipo IO-Bound, usado
junto com o atributo tempoDecorrido, é atualizado de acordo com o tipo, seja
disco, CD ou USB Flash. Veja abaixo o trecho de código que atualiza este
atributo:
if (Tprocesso(FCPU.peek).tipo = 'I/O Bound - Disco') then
30
TDisco(D).StempoEsperado(TSistema(S).FtempoAcessoDisco);
if (Tprocesso(FCPU.peek).tipo = 'I/O Bound - CD') then
TDisco(D).StempoEsperado(TSistema(S).FtempoAcessoCD);
if (Tprocesso(FCPU.peek).tipo = 'I/O Bound – USB Flash') then
TDisco(D).StempoEsperado(TSistema(S).FtempoAcessoUSBFlash);
•
TempoDecorrido: Atributo contador usado para contar o tempo em que os
processos IO-Bound estão no estado de espera.
•
TempoIO: tempo de I/O dos processos do tipo IO-Bound.
Foram implementadas diversas filas, na mesma estrutura de fila vista na seção 3.3.
Primeiramente, foi criado o objeto FI, da classe TQueue (fila), que representa a fila do estado
de criação. No caso dos algoritmos de escalonamento múltiplas filas e por prioridade, foram
criadas três instâncias da classe TQueue, FI1, FI2 e FI3, tendo em vista que esses algoritmos
usam três filas de prontos. Abaixo a tabela 1, descreve os escalonamentos e seus respectivos
objetos no qual representa a fila de criação (estado de criação):
Tabela 1 – Escalonamento de processos e suas respectivas filas de criação.
FIFO, SJF, SRT e Round Robin
FI
Múltiplas Filas, Prioridade
FI1
Não-Preemptiva, Prioridade
FI2
Preemptiva e Circular
FI3
com prioridade
Abaixo na tabela 2 e 3, descreve os escalonamentos e seus respectivos objetos no qual
representa a fila de prontos:
Tabela 2 – Lista de escalonamentos e objetos (fila de prontos)
FIFO
FAFF
SJF
FASJF
31
SRT
FASRT
Round Robin
FARR
Tabela 3 – Lista de escalonamentos e objetos (usadas três filas de prontos)
Múltiplas Filas
FAPP
FARR
FAFF
Prioridade
FAPP1
Não-Preemptiva
FAPP2
FAPP3
Prioridade
FAPSP1
Preemptiva
FAPSP2
FAPSP3
Circular
FACP1
com prioridade
FACP2
FACP3
Foi instanciado o objeto FE no qual representa a fila de espera (estado de espera),
além do objeto FEAux usado como fila auxiliar para os objetos no estado de espera. Foram
criadas com o intuito de apenas ser uma fila auxiliar para coordenar os processos, representa
respectivamente o estado de execução e o I/O dos processos. E finalmente, o objeto FIN, que
representa o estado de finalização (estado de término). Neste estado os processos não são
excluídos, suas informações ficam mantidas até o início de outro escalonamento.
32
3.2
DIAGRAMA DE CLASSES
No simulador EPSOsim existem quatro principais classes que são TSistema,
Tprocesso, TCPU e a TDisco. A figura 15 ilustra o diagrama de classe do simulador
EPSOsim:
Figura 15 – Diagrama de classe do formulário de configuração do sistema.
33
As classes TCPU e TDisco fazem associação com a classe Tprocesso. Com isso,
vários objetos (processo) da classe Tprocesso pode usar apenas um objeto (disco) da classe
TDisco. Da mesma forma, vários objetos (processo) da classe Tprocesso podem usar apenas
um objeto (CPU) da classe TCPU. A classe TSistema é apenas uma classe externa.
Na classe TSistema foram declaradas as filas de pronto, em que cada fila pode existir
de zero a n instância de processos da classe TProcesso. Na classe TDisco uma fila (FE – Fila
de Espera) pode conter de zero a n processos. A fila FEAux faz o intermédio entre o estado de
espera e o estado de pronto. Da mesma forma, a fila FCPU serve de transição entre a fila de
pronto e a fila de espera.
34
4.
FUNCIONAMENTO E DESCRIÇÃO DO AMBIENTE
Neste capítulo será apresentado o ambiente do simulador, suas descrições,
funcionalidades e alguns trechos do seu desenvolvimento.
4.1
AMBIENTE DO SIMULADOR
O ambiente do simulador foi desenvolvido de acordo com o modelo de
escalonamento de processos de Silbershartz (2005) visto no capítulo 2 seção 2.3, de forma
bem detalhada comparada com os simuladores disponíveis na internet. Abaixo a tabela 4, é
descrita a lista de formulários existente no simulador EPSOsim:
Tabela 4 – Formulário do simulador EPSOsim
Formulários do Simulador EPSOsim
Form1
Janela principal
Form2
Janela de simulação do escalonamento FIFO
Form3
Janela de criação de processo
Form4
Janela de simulação do escalonamento SJF
Form5
Janela de simulação do escalonamento Round Robin
Form6
Janela de simulação do escalonamento múltiplas filas
Form7
Janela de configuração de sistema
Form8
Janela de simulação do escalonamento prioridade não-preemptivo
Form9
Janela do diagrama de Gantt
Form10
Janela de créditos
Form11
Janela de simulação do escalonamento prioridade preemptivo
Form12
Janela de simulação do escalonamento circular com prioridade
Form17
Janela de informações de processos
35
Form18
Janela de simulação do escalonamento SRT
Conforme mostra a tabela 4, o simulador consiste em uma janela principal, oito
janelas que simulam os escalonamentos de processos, uma janela do diagrama de Gantt,
uma janela configuração do sistema, uma janela de informações de processos, outra janela do
estado da criação dos processos. O simulador EPSOsim foi desenvolvido não como uma
demonstração real do Sistema Operacional, pois se fosse como o funcionamento real de um
Sistema Operacional, não seria possível para o usuário perceber o funcionamento, porque no
Sistema Operacional os processos são escalonados de maneira muito rápida e
imperceptível. O simulador foi desenvolvido com a intenção de transmitir para o aluno o
melhor entendimento do assunto de escalonamento de processos.
Uma das idéias
para facilitar a percepção do usuário, foi à criação dos processos com cores diferentes, desta
forma dará para diferenciar um processo do outro.
4.2
JANELA PRINCIPAL
Inicialmente, foi criada a janela principal onde será o ponto inicial da aplicação. Nesta
janela o usuário pode abrir as janelas dos escalonamentos através das ilustrações com formato
de esferas coloridas ou pelo menu de escalonamento de processos, que foi dividido em dois
grupos: escalonamento de processos em lote e escalonamento de processos em sistemas
interativos. A figura 16 ilustra a janela principal:
36
Figura 16 – Janela principal
4.3
JANELA CONFIGURAÇÃO DO SISTEMA
O formulário de configuração do sistema é uma das partes mais importante do
simulador, neste formulário contém as classes principais do simulador. Veja mais detalhes do
código-fonte da configuração do sistema no anexo I. Nesta janela o usuário poderá alterar os
seis parâmetros conforme mostra a figura 17:
37
Figura 17 – Configuração do sistema
1. Tempo de clock: altera o clock do sistema. Foi considerado um clock inicial
(default) razoavelmente lento, pois assim, é mais perceptivo e coerente ao usuário o
funcionamento do escalonamento.
2.
Fatia de tempo: o usuário pode definir neste campo a fatia de tempo (timeslice)
usado no escalonamento Round Robin e circular com prioridade.
3. Tempo de acesso ao disco: determina o tempo do IO/Bound disco.
4. Tempo de acesso ao CD: determina o tempo do IO/Bound CD.
5. Tempo de acesso ao USB Flash: determina o tempo do IO/Bound USB Flash.
6. Tempo de IO: determina o tempo de espera dos processos de I/O.
38
4.4
JANELAS DE ESCALONAMENTO DE PROCESSOS
Inicialmente, antes de começar a simulação é preciso criar os processos, podem-se
criar inicialmente nove processos para os escalonamentos FIFO, SJF, SRT e RR e vinte e sete
processos para os escalonamentos múltiplas filas e prioridades (não-preemptivo, preemptivo e
circular). Para os escalonamentos de prioridade não-preemptivo, prioridade preemptivo,
circular com prioridade e múltiplas filas, após a inicialização da simulação o usuário pode
inserir quantos processos for necessário. Ao pressionar o botão criar processo nas janelas de
escalonamento (ver a figura 18), abre-se uma janela onde é possível determinar os parâmetros
necessários para a criação do processo. A figura 18 ilustra a janela de criação de processo:
Figura 18 – Janela de estado de criação do processo.
Conforme a figura 18, o usuário pode determinar os parâmetros do processo. Exceto o
PID do processo o qual é gerado automaticamente. O componente gráfico que seleciona a
prioridade, somente aparecerá quando a janela de escalonamento de processos por prioridade
(não-preemptivo, preemptivo e circular) for acionada, neste campo o usuário poderá definir a
prioridade de 1 a 3. No campo tempo de processamento o usuário poderá definir de 1 a 100,
foi limitado devido à visualização dos componentes gráficos dos processos. O botão criar
serve para cria o processo em si. O botão close é usado para fechar a janela de criação de
processos. O botão “Del. Tudo” (deletar tudo), exclui todos os processos.
39
No componente tipo de processo (vide figura 18) o usuário poderá escolher os tipos de
processo: CPU-Bound, I/O-Bound Disco, I/O-Bound CD, I/O-Bound USB Flash. Apenas os
tipos dos processos no escalonamento por múltiplas filas diferem dos demais escalonamentos,
veja abaixo:
1. Processo de sistema CPU-Bound;
2. Processo de sistema I/O-Bound;
3. Processos Interativos CPU-Bound;
4. Processos Interativos I/O-Bound;
5. Processos Batch CPU-Bound;
6. Processos Batch I/O-Bound;
A figura 19 ilustra o layout padrão usada nos escalonamentos FIFO, SJF, SRT e
Round Robin, onde contém os cinco estados criação, prontos, execução, bloqueado e
finalização:
40
Figura 19 – Layout padrão usada nos escalonamentos FIFO, SJF, SRT e Round
Robin
Conforme a figura 19, para dar início o escalonamento de processo é preciso clicar no
botão iniciar. E o botão diagrama de Gantt exibe a janela diagrama de Gantt. Com essa
funcionalidade, ficará melhor acompanhar e entender o tempo de execução de cada processo.
No botão finalizar processos, quando o processo passa para o estado de execução, logo é
transferido para o estado de finalização mesmo que o processo não tenha acabado todo seu
tempo de processamento. Quando todos os processos forem finalizados é mostrado o
diagrama de Gantt até o ponto em que foram finalizados. No botão abortar, a simulação é
interrompida e a janela referente ao escalonamento é fechada voltando para janela principal.
41
O botão pause e o botão play referente aos botões azuis (vide figura 19), nestes botões
o usuário poderá pausar e continuar a execução do escalonamento de processo. É possível
selecionar o intervalo de tempo do clock e do tempo de espera no componente conhecido
como “spinedit”, estes componentes estão localizados a direita do botão pause. No botão
“Inf. Processos” (Informações de processos), o usuário pode visualizar as informações dos
processos tais como: cor, alias do processo (campo processo), tipo do processo (campo tipo),
tempo de processador (campo t. burst), turnaround (campo t. execução), tempo de espera e o
estado do processo. A figura 20 ilustra a janela de Informações de processos:
Figura 20 – Informações de processos
42
Nas seções seguintes, serão apresentadas as janelas em que ocorre a simulação dos
escalonamentos de processos, primeiramente será mostrado o escalonamento FIFO.
4.4.1 JANELA FIFO
O FIFO (em inglês First in First Out - Primeiro a Entrar é o Primeiro Sair) também
denominado de FCFS (em inglês First Come First Serve – o primeiro a chegar é o primeiro a
ser servido) é considerado o escalonamento mais simples de ser entendido. O FIFO funciona
da seguinte forma, quando um processo é criado no estado de criação, é inserido no final de
uma estrutura de dados fila chamada de fila de aptos ou prontos. À medida que os processos
são criados, o Sistema Operacional faz o armazenamento das informações de cada processo
no bloco de controle de processos (PCB), mais detalhes do PCB, ver na seção 2.2.3
(PIOVESANA, 2010).
Para compreender e visualizar melhor o funcionamento dos escalonamentos de
processos e obter os parâmetros para se calcular o tempo médio de espera dos processos é
necessário criar o diagrama de Gantt. A figura 21 será ilustrado o diagrama de Gantt do
escalonamento FIFO:
Tempo médio de espera:
(0+8+15) = 23/3
=7,666666666666667 u.t.
0
1
2
3
4
5
6
7
8
9 10 11
12 13 14
15
16 17 18 19
20
Figura 21 – Uso da política de escalonamento FIFO com o diagrama de Gantt
43
Gantt é um diagrama em barra que ilustra os intervalos de tempo de uma ou mais
tarefas, tem como parâmetros para criar as barras o início e fim de cada tarefa. Para se
calcular o tempo médio de espera é preciso fazer o somatório do tempo decorrente de cada
processo em que ficou na fila de prontos e dividir pelo número de processos o resultado é
medido por unidades de tempo (u.t.). Mais detalhes do funcionamento do escalonamento
FIFO, veja na seção 4.5. A figura 22 ilustra a janela de escalonamento FIFO:
Figura 22 – Janela que simula o funcionamento do escalonamento FIFO
O FIFO é não-preemptivo, isto é, o escalonador não interrompe os processos em
execução. O processo que estiver no início da fila de pronto será selecionado e alocado na
CPU. Em seguida, o processo ficará na CPU até acabar todo seu tempo de processador (burst
time) (LEITÃO, 2010).
44
4.4.2 JANELA SJF
O SJF (Shortest Job First) em português processo mais curto primeiro, este algoritmo
de escalonamento poderia ser implementado usando uma lista ordenada na ordem crescente
dos tempos de vida dos processos (OLIVEIRA et. al., 2001).
No SJF pode ocorrer o starvation (inanição), por exemplo, um processo com um
tempo de processador definido como 30, este processo fica infinitamente no estado de pronto,
pois sempre há processos no estado de pronto com um tempo de processador menor do que
30. No caso deste exemplo, se existir outro processo com um tempo de processador igual a
30, o desempate é tirado de acordo com a política FIFO. A figura 23 ilustra o diagrama de
Gantt do escalonamento SJF:
Tempo médio de espera:
(0+5+12) = 17/3 =
5,666666666666667 u.t
0
1
2
3
4
5
6
7
8
9
10 11
12 13
14
15 16 17 18 19
20
Figura 23 – Exemplo da política de escalonamento SJF com o diagrama de Gantt.
De acordo com Machado (2009), uma das vantagens do escalonamento SJF com
relação ao FIFO, é que possui um tempo médio de espera menor. Foram representados três
processos de tempo de processamento iguais para cada escalonamento FIFO e SJF,
comparando o diagrama de Gantt do escalonamento FIFO da figura 21 com o diagrama do
escalonamento SJF da figura 23, o resultado do FIFO equivale a 7.666666666666667 u.t.,
45
enquanto do SJF equivale a 5.666666666666667 u.t.. A figura 24 a janela de escalonamento
SJF:
Figura 24 – Janela que simula o funcionamento do escalonamento SJF
Conforme a figura 24, quando inicia o escalonamento no botão iniciar, todos os
processos são transferidos do estado de criação para o estado de pronto e ordenados pelo
tempo de processamento na ordem crescente no sentido da direita para esquerda da fila de
pronto. Diante disso, será selecionado o processo de menor tempo de processamento para ser
alocado na CPU. Caso o processo for do tipo CPU-Bound, é utilizado todo o seu tempo de
processador na CPU. O usuário poderá visualizar o tempo de processador na parte inferior do
estado de execução. Utilizado todo o tempo de processador na CPU, o processo é passado
para o estado de finalização.
46
No caso dos processos IO-Bound, o processo é transposto rapidamente para o final da
fila de espera no estado bloqueado. No simulador os processos são enfileirados no sentido da
esquerda para direita. Nos estado de espera, o primeiro processo da fila é escolhido para
realizar operações de entrada e saída, nesta fase o usuário poderá acompanhar o progresso
desta operação no componente processbar. Após realizar as operações de entrada e saída, o
processo é repassado novamente para o estado de pronto, no final da fila de prontos. Quando
o processo IO-Bound utilizar todo o seu tempo de processamento (burst time), o processo é
finalizado passado para o estado de término.
4.4.3 JANELA SRT
O SRT (Shortest Remaining Time) é um escalonamento que significa tempo
mais curto remanescente, este escalonamento é uma versão semelhante ao
escalonamento SJF. O que diferencia o SRT do SJF é a preempção (MACHADO;
MAIA, 2009). A figura 25 ilustra o escalonamento SRT:
Figura 25 – Janela que simula o funcionamento do escalonamento SRT
47
O SRT é preemptivo, isso funciona da seguinte forma, no momento do escalonamento
ao chegar à fila de pronto um processo de menor tempo de processador do que o processo em
execução é realizado a troca dos processos destes processos. O processo que antes estava na
CPU é realocado na posição correta na fila de prontos. E o processo recém chegado é alocado
na CPU (MACHADO; MAIA, 2009).
Uma das vantagens do SRT é que os processos de menor tempo de processamento têm
um tempo de resposta superior do que processos de maior tempo de processamento, além de
possuir um throughput maior. Uma desvantagem é que pode ocorrer o starvation onde
processos de maior tempo de processamento podem nunca ser executados. Outra diferença
notória deste escalonamento está nos processos do tipo IO-Bound, após realizar as operações
de entrada e saída é repassado para a fila de pronto. Com isso, os processos na fila de pronto
são realocados na posição correta em que são reordenados pelo tempo de processador
(MACHADO; MAIA, 2009).
4.4.4 JANELA CIRCULAR
O Round Robin é uma das políticas de escalonamento mais antigas e usadas. Uma das
características dos algoritmos Round Robin é a utilização da fatia de tempo (timeslice). A
fatia de tempo é utilizada para realizar a preempção por tempo, no qual o processo é removido
da CPU pelo tempo definido da fatia de tempo (MACHADO; MAIA, 2009). De acordo com
Machado (2009), no caso da fatia de tempo tender ao infinito o escalonamento Round Robin
equivale ao escalonamento FIFO. As três as figuras a seguir, figuras 26, 27 e 28 ilustra o
diagrama de Gantt do escalonamento Round Robin, respectivamente com um quantum igual a
8, 5 e 2.
48
Quantum = 8
Tempo Médio de Espera:
(0 + 8 + 15+ 20) = 43/ 3 =
14,33333333333333 u.t
0
1
2
3
4
5
6
7
8
9
10 11 12 13 14
15
16 17 18 19
20
Figura 26 – Diagrama de Gantt do escalonamento Round Robin, com quantum igual a oito.
Quantum = 5
Tempo Médio de Espera:
(0 + 5 + 10 + 10 + 8) = 33/ 3
= 11 u.t
0
1
2
3
4
5
6
7
8
9
10
11 12 13 14
15
16 17
18 19 20
Figura 27 – Diagrama de Gantt do escalonamento Round Robin, com quantum igual a cinco.
49
Quantum = 2
Tempo Médio de Espera:
(0+2+4+4+4+4+4+4+4+4) =
34/3 = 11,33333333333333
u.t
0
1
2
3
4
5
6
7
8
9
10
11
12 13 14 15 16
17
18 19 20
Figura 28 – Diagrama de Gantt do escalonamento Round Robin, com quantum igual a dois.
Conforme Machado (2009), quando o quantum é muito pequeno, acontece excessivos
números de preempções por tempo, isso compromete a performance de um sistema. No
simulador o usuário pode alterar a variável fatia de tempo na janela de configuração (vide
seção 4.3). A figura 29 ilustra o escalonamento Round Robin:
50
Figura 29 – Janela que simula o funcionamento do escalonamento Round Robin
Como em todos os escalonamentos do simulador, os processos são criados e inseridos
no estado de criação. Em seguida, são transferidos para fila de pronto. Mais adiante, é
selecionado o primeiro processo da fila de pronto e é alocado na CPU. Com isso, no caso de
processos CPU-Bound, quando termina a fatia de tempo, o processo retorna para o estado de
pronto, onde é desalocado da CPU e inserido no final da fila de pronto. Desta forma, a CPU
fica livre para a entrada do próximo processo (MACHADO; MAIA, 2009).
4.4.5 JANELA PRIORIDADE NÃO-PREEMPTIVO
No escalonamento por prioridade é comum a preferência a determinados tipos de
processos com relação a outros tipos, neste tipo de escalonamento não existe o conceito de
fatia de tempo. A prioridade é determinada principalmente pelo gerenciador da CPU ou
51
administrador, onde é atribuído um valor a variável de prioridade do contexto de software a
cada processo (ALMEIDA, [s.d]).
Alguns sistemas têm como o processo de maior prioridade o número zero, outros
sistemas usam o zero como sendo o processo de menor prioridade. Outros sistemas dão mais
prioridade aos processos que tem menos tempo de turnaround, processos que usa menos
memória, processos IO-Bound e etc. Estes critérios depende da implementação do algoritmo
de escalonamento de prioridade (MACHADO; MAIA, 2009).
No simulador, cada fila possui um nível de prioridade, os processos da primeira fila
tem prioridade 1, os processos da segunda fila tem prioridade 2 e os processos da terceira fila
tem prioridade 3. Os processos que possui menor número de prioridade é o que possui maior
prioridade, nos quais são os primeiros a serem executado. Quando os processos da fila de
prioridade 1 for esvaziada, o escalonador passa a escalonar os processos da fila de prioridade
2, quando a fila de prioridade 2 é esvaziada, o escalonador passa a escalonar os processos da
fila número 3. A figura 30 representa o escalonamento por prioridade não-preemptivo:
Figura 30 – Janela que simula o funcionamento do escalonamento não-preemptivo
52
Uma das características que define o escalonamento não-preemptivo, é quando um
processo x está em execução e outro processo y entra na fila de pronto, no qual o processo y
tem maior prioridade do que o processo x. Com isso, não ocorre à preempção por prioridade,
o processo x continua executando até acabar o tempo de processador, isso para os processos
do tipo CPU-Bound. No caso dos processos IO-Bound o processo é despachado para a fila de
bloqueado, logo em seguida, é repassado para a fila de pronto (MACHADO; MAIA, 2009).
Neste escalonamento pode ocorrer a inanição (starvation), ou seja, o processo de
prioridade inferior corre o risco de nunca ser executado, neste caso a solução é o
envelhecimento (aging), em que aumenta o nível de prioridade do processo (MACHADO;
MAIA, 2009). O envelhecimento não foi implementado no simulador EPSOsim, mas é
possível o usuário fazer com que aconteça o envelhecimento mesmo que não possua nada que
indique o envelhecimento no simulador.
4.4.6 JANELA PRIORIDADE PREEMPTIVO
O escalonamento por prioridade preemptivo possui a preempção por prioridade, não
confundir com preempção por tempo. A diferença do escalonamento por prioridade
preempção com o escalonamento por prioridade não-preemptivo, é quando um processo x de
maior prioridade entra na fila de pronto no momento em que outro processo y de menor
prioridade utiliza a CPU, neste momento acontece à preempção por prioridade, onde o
processo y é desalocado da CPU para a entrada do processo x de maior prioridade. A figura
31 ilustra a janela de escalonamento preemptivo:
53
Figura 31 – Janela que simula o funcionamento do escalonamento preemptivo
4.4.7 JANELA CIRCULAR COM PRIORIDADES
O escalonamento circular por prioridade é uma combinação do escalonamento Round
Robin com o escalonamento por prioridade, isto quer dizer que pode existir tanto a preempção
por tempo quanto a preempção por prioridade (MACHADO; MAIA, 2009). A figura 32
representa o escalonamento circular com prioridade:
54
Figura 32 – Janela que simula o funcionamento do escalonamento circular com prioridade
De acordo com Machado (2009), uma das vantagens do escalonamento circular com
prioridade, é que possui um melhor equilíbrio dos processos no uso da CPU. Normalmente,
os processos do tipo IO-Bound recebem mais privilégios por intermédio do administrador de
sistema, isso para que se tenha um balanceamento mais justo.
4.4.8 JANELA MÚLTIPLAS FILAS
Os algoritmos de escalonamento de múltiplas filas é implementado usando várias filas
no estado de prontos. Cada fila de pronto é determinado por níveis ou classes de prioridade,
onde podem ser aplicados vários tipos de escalonamentos de processos, tais como: FIFO,
Round Robin, SJF, por prioridade e etc (MACHADO; MAIA, 2009).
55
Uma das características deste escalonamento é que pode estabelecer vários critérios,
um dos critérios é que, se um processo for do tipo I/O-Bound, o processo passa para a fila de
maior prioridade. Caso o processo for do tipo CPU-Bound, o processo passa para a fila de
menor prioridade, depende muito da implementação do algoritmo escalonamento
(MACHADO; MAIA, 2009). A figura 33 será ilustrado o escalonamento Múltiplas Filas:
Figura 33 – Janela que simula o funcionamento do escalonamento múltiplas filas
Na janela de escalonamento de múltiplas filas do simulador foi usada três filas, onde
cada fila representa um escalonamento diferente, a primeira fila representa o escalonamento
por prioridade, a segunda fila representa o escalonamento Round Robin e a terceira fila
representa o escalonamento FIFO. À medida que a fila é totalmente esvaziada, o escalonador
desce a um nível de prioridade.
56
4.5
JANELA DIAGRAMA DE GANTT
O diagrama de Gantt foi criado por Henry L. Gantt em 1917 é um tipo de gráfico em
barra usado pelos chefes de projeto para cronogramas de projeto. O diagrama de Gantt é
muito simples de criar e de entende (KIOSKEA, 2009). A figura 34 o diagrama de Gantt com
base nos mesmos valores do diagrama ilustrado na seção 4.4.1 (FIFO):
Figura 34 – Diagrama de Gantt do simulador EPSOsim (Escalonamento FIFO)
No eixo x (horizontal), indica o tempo das tarefas, seja representado por segundo,
minuto, hora, mês, dia, mês, ano e etc. No eixo y (vertical) do diagrama de Gantt, representa
as tarefas, onde no simulador são processos computacionais (KIOSKEA, 2009). No
simulador, o diagrama de Gantt registra o momento em que entra o primeiro processo na CPU
(início do escalonamento), até o último processo no qual finalizou seu tempo de processador
na CPU (final do escalonamento).
57
5.
CONCLUSÃO
No início desde trabalho, foi visto o relevante grau de dificuldade para se compreender
os assuntos predominantemente teóricos abordados na disciplina de Sistemas Operacionais, os
quais implicam em uma série de dificuldades para os alunos de graduação dos cursos de
computação.
Há assuntos na disciplina de Sistemas Operacionais muito importantes, porém
complexos. A gerência de processos faz parte um destes assuntos, como também o
escalonamento de processos. Diante disto, foi desenvolvido o simulador EPSOsim, o
qual demonstra o funcionamento dos escalonamentos de processos, permitindo a visualização
dos resultados dos processos em tempo de execução na tabela de informações dos processos
(vide figura 20).
Foi criado o simulador de escalonamento de processo que permite a visualização
gráfica do funcionamento dos algoritmos. O simulador possui oito algoritmos de
escalonamento que são:
FIFO;
SJF;
SRT;
Circular;
Circular com prioridade;
Por prioridade preemptiva;
Por prioridade não-preemptivo;
Múltiplas Filas.
O simulador permite a visualização do diagrama de Gantt, o qual é uma das partes
fundamentais do simulador. O diagrama de Gantt registra os processos desde o início até final
do escalonamento. Com este instrumento, os alunos terão mais facilidade em aprender sobre o
funcionamento dos escalonamentos de processos.
58
A criação desta ferramenta educativa representa uma contribuição para o estudo de
algoritmos de escalonamento, em especial na disciplina Sistemas Operacionais. É possível
perceber que a ferramenta servirá para temas de futuros alunos em trabalhos acadêmicos,
monografias e dissertações. Espera-se que o simulador contribua com o processo de ensinoaprendizagem de disciplinas que abordem algoritmos de escalonamento
59
6.
REFERÊNCIAS BIBLIOGRÁFICAS
ALMEIDA, Helder C. P. Princípios de Sistemas Operacionais. Disponível em:
<http://www.cefetto.org/~05203130/superior/I%20periodo/Aula%20introdu%e7%e3o%20a%20computa%e7%
e3o/Princ%edpios%20de%20Sistemas%20Operacionais%20%20Gerenciador%20de%20Processador%20e%20Processos%20-%20Final2.ppt> Acesso em
05 de Junho de 2011.
ANDERSON, Thomas. Nexos. 2008. Disponível em:
<http://www.cs.washington.edu/homes/tom/nachos/> Acesso em 21 de Novembro de 2009.
AVRAM, Abel. MINIX 3 Promises to be more secure than windows or linux. Disponível
em: <www.infoq.com/br/news/2009/05/MINIX> Acesso em 10 de Outubro de 2009.
BALDI,
Sérgio
Dario.
Construtivismo.
2010.
Disponível
<http://www.artigos.com/artigos/humanas/educacao/construtivismo-10900/artigo/>
em
Acesso
em: 11 Junho 2011
BRANCO, Ricardo Rubira. Sistemas Operacionais. Disponível em:
<http://www.kernelhacking.com/rodrigo/docs/OS/AulaFGP1.pdf>
Acesso
em
28
de
Novembro de 2009.
CARDOSO,
Nogueira
Paes.
Sistemas
Operacionais.
2006.
Disponível
em:
<http://algol.dcc.ufla.br/~olinda/arquivos/so%20aula%201.pdf> Acesso em 01 de Dezembro
de 2009.
CASTRO, Giselle Fernandes. Ensino conteudista versus Escola atual. Disponível em:
<http://www.apagina.pt/?aba=7&cat=69&doc=7368&mid=2> Acesso em 28 de Maio de 2011.
60
CUNHA, Jose C. Estados de um processo num sistema de multiprogramação. 2003.
Disponível em: <http://www-asc.di.fct.unl.pt/~jcc/ASC2/Teoricas/a4/node10.htm>Acesso em
09 Novembro de 2010
DOI, Marcio Ken Iti. Microkernel. 2005. Disponível em:
<http://www.tiparana.com.br/articles.php?id=12> Acesso em 01 de Dezembro de 2009.
EQUINOX.
MINIX
3.
2007.
Disponível
em:
<http://www.minix3.org/news/screendump.png> Acesso em 21 de Novembro de 2009.
FILHO, Clovis Perin. Introdução à Simulação de Sistemas. 1995. 159f. Campinas, SP:
Editora da UNICAMP.
GNU. GNU Operating System. 2009. Disponível em: <http://www.gnu.org/> Acesso em 19
de Novembro de 2009.
GONÇALVES, José Pereira Filho. Trabalho info1142. 2008. Disponível em:
<http://www.inf.ufes.br/~zegonc/material/Sistemas%20Operacionais/SO%20old/S.O/SO%20
2005/Nachos%20-%20info1142.htm> Acesso em 28 de Maio de 2011.
GUIZZI. Processo. 2010. Disponível em:
<http://www.scribd.com/doc/5565560/03PROCESSOS> Acesso em 01 Novembro de 2010.
KIOSKEA. Diagrama de GANTT. 2009. Disponível em:
<http://pt.kioskea.net/contents/projet/gantt.php3 > Acesso em 12 de Junho de 2011.
LEITÃO,
Gustavo.
Processos.
2010.
Disponível
em
<http://www.dca.ufrn.br/~guga/downloads/par/aulas/Aula3-Processos.pdf>Acesso em 28 de
Novembro de 2010.
61
MACHADO, Francis Berenger, MAIA, Luiz Paulo. Um framework construtivista no
aprendizado de Sistemas Operacionais - uma proposta pedagógica com o uso do
simulador SOsim. Disponível em: <http://www.training.com.br/SOsim/sbcwei04.pdf>
Acesso em 10 de Setembro de 2009.
MAIA, Luiz Paulo, MACHADO, Francis Berenger. Laboratório SOsim - Gerência de
Processos. Disponível em: <http://www.inf.puc-rio.br/~francis/aso3ed/aso-labSOsim-cap5processo.pdf > Acesso em 10 de Setembro de 2009.
MAIA, Luiz Paulo. SOsim: Simulador para o ensino de Sistemas Operacionais. Tese de
Mestrado,
NCE/UFRJ,
mar.
2001.
Disponível
em:
<http://www.training.com.br/SOsim/SOsim_tese.zip> Acesso em 10 de Setembro de 2009.
MACORATTI, José Carlos. UML - Diagrama de Classes e objetos. Disponível em:
<http://www.macoratti.net/net_uml1.htm> Acesso em 29 de Maio de 2011.
RODRÍGUEZ, Miguel Ángel Martínez. l Enfoque sociocultural en el estudio del desarrollo
y la educación. Escuela Nacional de Estudios Profesionales. 1999. Campus Iztacala.
Universidad Nacional Autónoma de México. Artigo publicado na Revista Eletrônica de
Investigação Educativa. UABC. México.
MAZIERO, Carlos. Sistemas Operacionais I - Conceitos Básicos. 2008. Disponível em:
<http://www.ppgia.pucpr.br/~maziero/lib/exe/fetch.php/so:so-cap01.pdf > Acesso em 04 de
Junho de 2011.
MEC/SESu, Comissão de especialistas de ensino de computação e informática. Disponível
em: <http://www.inf.ufrgs.br/mec> Acesso em 10 de Outubro de 2009.
MEDEIROS, Raissa Dantas Freire de. Gerência de Memória. 2006. Disponível em:
<http://www.ucb.br/prg/professores/raissad/disciplinas/2006_2/SO/material/memoria/memori
a.html> Acesso em 01 de Dezembro de 2009.
62
OLIVEIRA, R. S.; CARISSIMI, Alexandre da S.; TOSCANI, S. S. Sistemas Operacionais.
3. ed. Porto Alegre: Editora Sagra Luzzatto, 2004, 259p.
ONTKO, Ray. Modern Operating Systems Simulators. 2008. Disponível em:
<http://www.ontko.com/moss/> Acesso em 21 de Novembro de 2009.
PAULO, Marcus. SISO 2.0 - Simulador de Sistema Operacional (Módulo de Deadlock).
2009.
Disponível
em:
<http://www.martins.eti.br/2009/03/siso-20-simulador-de-
sistema.html> Acesso em 01 de Dezembro de 2009.
PERIN FILHO, Clovis. Introdução à Simulação de Sistemas. Campinas, SP: UNICAMP,
1995, 159p.
PIOVESANA, Rodrigo. Processos. Disponível em:
<http://www.slideshare.net/rodrigo.piovesana/processos-3360190>
Acesso
em
18
de
Novembro de 2010.
PODGORETSKY ANATOLY. Object Pascal Language Guide.
Disponível em:
<http://www.podgoretsky.com/ftp/Docs/Delphi/D5/oplg/oplg.pdf> Acesso em 10 de Maio de
2011.
SARAIVA, Márcio. em: Um "exame de DNA" na carreira de dois grandes cientistas para
descobrirmos
o
"pai"
da
nossa
profissão.
2009.
Disponível
em:
<http://www.dsc.ufcg.edu.br/~pet/jornal/agosto2009/materias/carreira.html> Acesso em 28 de
Novembro de 2009.
SESu. Diretrizes curriculares para os cursos de graduação. Disponível em:
<http://portal.mec.gov.br/sesu/index.php?option=content&task=view&id=430&Itemid=420>
Acesso em 10 de Outubro de 2009.
63
SILBERSCHATZ, Avi; GALVIN, Peter B.; GAGNE, Greg. Operating System Concepts.
7.ed. Hoboken: Wiley. 2005.
SONYMASTER (2009). Especial - A Historia do Sistema Operacional Unix (Linux).
Disponível em:<http://forum.outerspace.terra.com.br/showthread.php?t=209016> Acesso em
28 de Novembro de 2009.
STALLINGS, William (2004). Sistemas Operacionais internas e Princípios de Design
(quinta
edição
internacional).
Prentice
Hall. ISBN 0-13-147954-7.
Disponível
em:
<http://pt.wikipedia.org/wiki/Escalonamento_de_processos>Acesso em 15 Novembro de
2010
TANENBAUM, Andrew, em: Sistemas Operacionais modernos. 2. ed. Rio de Janeiro:
Editora Prentice Hall. 2005.
TANENBAUM, Andrew. MINIX 3 – Download. 2011. Disponível em:
<http://www.minix3.org/download/> Acesso em 04 de Junho de 2011.
TORVALDS, Linus. Lignux, what's the matter with you people? 1996. Disponível em:
<http://groups.google.com/group/comp.os.linux.misc/msg/7781d4221fceedb2> Acesso em 21
de Novembro de 2009.
VAGO,
El
Rincón
del.
Sistemas
Operativos.
Disponível
em:
<http://html.rincondelvago.com/sistemas-operativos_12.html> Acesso em 12 de Junho de
2011.
64
7.
ANEXOS
ANEXO I – CÓDIGO-FONTE DA JANELA CONFIGURAÇÃO DO SISTEMA
unit Unit7;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Spin, Buttons, Contnrs,ExtCtrls, ComCtrls;
type
TForm7 = class(TForm)
Label4: TLabel;
BitBtn5: TBitBtn;
BitBtn2: TBitBtn;
Label2: TLabel;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
Label8: TLabel;
Label7: TLabel;
Label1: TLabel;
SpinEdit2: TSpinEdit;
SpinEdit6: TSpinEdit;
SpinEdit7: TSpinEdit;
SpinEdit9: TSpinEdit;
SpinEdit10: TSpinEdit;
SpinEdit8: TSpinEdit;
SpinEdit1: TSpinEdit;
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure BitBtn5Click(Sender: TObject);
function Calculate(SMyExpression: string; digits: Byte): string;
//
Calculate
a
simple
expression.
Supported
are:
http://www.swissdelphicenter.ch/en/showcode.php?id=470
private
{ Private declarations }
public
{ Public declarations }
end;
Real
Numbers,
parenthesis.
TProcesso = class(TInterfacedObject)
private
public
{ ----- Atributos ----- }
Fcor:Tcolor;
Fpid:integer;
FTempoProcessador:integer; //tempo de processo
FtempoExecucao:integer;
FtempoTurnaround:integer;
FtempoEsperaProcesso :integer;
Fporcentagem:integer;
Ftipo:String;
Fprioridade:integer;
{ ----- Construtor ----- }
constructor
create
(cor:
Tcolor;
pid:integer;
TempoProcessador:integer;
tempoExecucao:integer;
porcentagem:integer;
tipo:string;
prioridade:integer;
tempoTurnaround:integer; tempoEsperaProcesso:integer);
//destructor Destroy;
{ ----- Funções e procedimetos ----- }
function GTempoProcessador:integer;
procedure STempoProcessador(valor:integer);
function Gcor:Tcolor;
procedure Scor(valor:Tcolor);
65
function Gpid:integer;
procedure Spid(valor:integer);
function GtempoExecucao:integer;
procedure StempoExecucao(valor:integer);
function GtempoTurnaround:integer;
procedure StempoTurnaround(valor:integer);
function GtempoEsperaProcesso:integer;
procedure StempoEsperaProcesso(valor:integer);
function Gporcentagem:integer;
procedure Sporcentagem(valor:integer);
function Gtipo:String;
procedure Stipo(valor:String);
function Gprioridade:integer;
procedure Sprioridade(valor:integer);
{ ------ Gets E Sets ------ }
property cor: Tcolor
read Gcor
property pid:integer
read Gpid
property TempoProcessador:integer
read GTempoProcessador
STempoProcessador;
property
tempoExecucao:integer
read GtempoExecucao
StempoExecucao;
property
tempoTurnaround:integer
read GtempoTurnaround
StempoTurnaround;
property
tempoEsperaProcesso:integer
read GtempoEsperaProcesso
StempoEsperaProcesso;
property
porcentagem:integer
read Gporcentagem
Sporcentagem;
property tipo: String
read Gtipo
property
prioridade:integer
read Gprioridade
Sprioridade;
end;
write Scor;
write Spid;
write
write
write
write
write
write Stipo;
write
TCPU = class(TInterfacedObject)
public
{ ------ Atributos ------ }
Focupado:integer;
FtempoDecorrido:integer;
FProcessoExecutando:Tprocesso;
{ ------ Construtor ------ }
constructor create;
//destructor Destroy;
{ ------ Funções e procedimentos ------ }
function Gocupado:integer;
procedure Socupado(valor:integer);
function GtempoDecorrido:integer;
procedure StempoDecorrido(valor:integer);
function GProcessoExecutando:Tprocesso;
procedure SProcessoExecutando(valor:Tprocesso);
{ ------ Gets E Sets ------ }
property ocupado:integer
read Gocupado
write Socupado;
property
tempoDecorrido:integer
read
GtempoDecorrido
write
StempoDecorrido;
property
ProcessoExecutando:Tprocesso
read
GProcessoExecutando
write
SProcessoExecutando;
procedure incrementaTempoDecorrido;
function removeProcessoExecutando:Tprocesso;
procedure insereProcessoExecutando(processo:Tprocesso);
end;
TDisco = class(TInterfacedObject)
public
{ ------ Atributos ------ }
Focupado :integer;
FtempoEsperado :integer;
FtempoDecorrido :integer;
FtempoIO :integer;
FProcessoIO:Tprocesso;
{ ------ Construtor ------ }
constructor
create(ocupado:integer; tempoEsperado:integer;
tempoIO:integer);
tempoDecorrido:integer;
66
//destructor Destroy;
{ ------ Funções e procedimentos ------ }
function Gocupado:integer;
procedure Socupado(valor:integer);
function GtempoEsperado:integer;
procedure StempoEsperado(valor:integer);
function
GtempoDecorrido:integer;
procedure StempoDecorrido(valor:integer);
function GtempoIO:integer;
procedure StempoIO(valor:integer);
function GProcessoIO:Tprocesso;
procedure SProcessoIO(valor:Tprocesso);
{ ------ Gets E Sets ------ }
property ocupado
:integer
read
property tempoEsperado
:integer
read
property tempoDecorrido :integer
read
property tempoIO
:integer
read
Gocupado
GtempoEsperado
GtempoDecorrido
GtempoIO
write
write
write
write
Socupado;
StempoEsperado;
StempoDecorrido;
StempoIO;
end;
TSistema = class(TInterfacedObject)
public
{ ------ Atributos ------ }
FfatiaTempoSistema
:integer;
FtempoDecorridoSistema :integer;
FtempoAcessoDisco
:integer;
FtempoAcessoUSBFlash :integer;
FtempoAcessoCD
:integer;
FtempoClock
:integer;
FtempoThroughput
:integer;
FtempoInicialGantt
:integer;
FtempoFinalGantt
:integer;
FtempoMedioTurnaround :integer;
FUT
:integer;
FUTAux
:String;
FLimitePrioridade
:integer;
FCalculaUnidadeTempo
:String;
{ ------ Construtor ------ }
constructor
create(fatiaTempoSistema:integer;
tempoDecorridoSistema:integer;
tempoAcessoDisco:integer;
tempoAcessoUSBFlash:integer;
tempoAcessoCD:integer;
tempoClock:integer;
tempoThroughput:integer;
tempoInicialGantt:integer;
tempoFinalGantt:integer; UT:integer; UTAux:String; LimitePrioridade:integer);
//destructor Destroy;
{ ------ Funções e procedimentos ------ }
function GfatiaTempoSistema:integer;
procedure SfatiaTempoSistema(valor:integer);
function GtempoDecorridoSistema:integer;
procedure StempoDecorridoSistema(valor:integer);
function GtempoAcessoDisco:integer;
procedure StempoAcessoDisco(valor:integer);
function GtempoAcessoUSBFlash:integer;
procedure StempoAcessoUSBFlash(valor:integer);
function GtempoAcessoCD:integer;
procedure StempoAcessoCD(valor:integer);
function GtempoClock:integer;
procedure StempoClock (valor:integer);
function GtempoThroughput:integer;
procedure StempoThroughput (valor:integer);
function GtempoInicialGantt:integer;
procedure StempoInicialGantt (valor:integer);
function GtempoFinalGantt:integer;
procedure StempoFinalGantt (valor:integer);
function GUT:integer;
procedure SUT(valor:integer);
function GUTAux:String;
procedure SUTAux (valor:String);
function GLimitePrioridade:integer;
procedure SLimitePrioridade (valor:integer);
function GtempoMedioTurnaround:integer;
procedure StempoMedioTurnaround (valor:integer);
67
function GCalculaUnidadeTempo:String;
procedure SCalculaUnidadeTempo (valor:String);
{ ------ Gets E Sets ------ }
property fatiaTempoSistema
:integer
read
GfatiaTempoSistema
SfatiaTempoSistema;
property tempoDecorridoSistema :integer
read
GtempoDecorridoSistema
StempoDecorridoSistema;
property tempoAcessoDisco
:integer
read
GtempoAcessoDisco
StempoAcessoDisco;
property tempoAcessoUSBFlash
:integer read GtempoAcessoUSBFlash
StempoAcessoUSBFlash;
property tempoAcessoCD
:integer
read
GtempoAcessoCD
StempoAcessoCD;
property tempoClock
:integer
read
GtempoClock
StempoClock;
property tempoThroughput
:integer
read
GtempoThroughput
StempoThroughput;
property tempoInicialGantt
:integer
read
GtempoInicialGantt
StempoInicialGantt;
property tempoFinalGantt
:integer
read
GtempoFinalGantt
StempoFinalGantt;
property UT
:integer read GUT
property UTAux
:String
read GUTAux
property LimitePrioridade
:integer
read
GLimitePrioridade
SLimitePrioridade;
property tempoMedioTurnaround
:integer
read
GtempoMedioTurnaround
StempoMedioTurnaround;
property CalculaUnidadeTempo
:String
read
GCalculaUnidadeTempo
SCalculaUnidadeTempo;
write
write
write
write
write
write
write
write
write
write
write
SUT;
SUTAux;
write
write
write
Protected
end;
var
Form7
S
D
:TForm7;
:TSistema;
:TDisco;
//Objeto Sistema
//Objeto Disco
implementation
uses Unit1, Unit2, Unit3, Unit4, Unit5, Unit6, Unit8;
{$R *.dfm}
{-----CONSTRUTORES-----}
constructor
TProcesso.create(cor:
Tcolor;
pid:integer;
TempoProcessador:integer;
tempoExecucao:integer;
porcentagem:integer;
tipo:string;
prioridade:integer;
tempoTurnaround:integer; tempoEsperaProcesso:integer);
begin
Fcor
:= cor;
Fpid
:= pid;
FTempoProcessador
:= TempoProcessador;
FtempoExecucao
:= tempoExecucao;
Fporcentagem
:= porcentagem;
Ftipo
:= tipo;
Fprioridade
:= prioridade;
FtempoTurnaround
:= tempoTurnaround;
FtempoEsperaProcesso := tempoEsperaProcesso;
end;
constructor TCPU.create;
begin
ocupado
:= 0;
tempoDecorrido := 0;
end;
68
constructor TDisco.create(ocupado:integer;
tempoIO:integer);
begin
Focupado
:= ocupado;
FtempoEsperado
:= tempoEsperado;
FtempoDecorrido
:= tempoDecorrido;
FtempoIO
:= tempoIO;
end;
tempoEsperado:integer;
tempoDecorrido:integer;
constructor
TSistema.create(fatiaTempoSistema:integer;
tempoDecorridoSistema:integer;
tempoAcessoDisco:integer;
tempoAcessoUSBFlash:integer;
tempoAcessoCD:integer;
tempoClock:integer;
tempoThroughput:integer;
tempoInicialGantt:integer;
tempoFinalGantt:integer; UT:integer; UTAux:String; LimitePrioridade:integer);
begin
Self.FfatiaTempoSistema
:=
fatiaTempoSistema;
Self.FtempoDecorridoSistema :=
tempoDecorridoSistema;
Self.FtempoAcessoDisco
:=
tempoAcessoDisco;
Self.FtempoAcessoUSBFlash
:=
tempoAcessoUSBFlash;
Self.FtempoAcessoCD
:=
tempoAcessoCD;
Self.FtempoClock
:=
tempoClock;
Self.FtempoThroughput
:=
tempoThroughput;
Self.FtempoInicialGantt
:=
tempoInicialGantt;
Self.FtempoFinalGantt
:=
tempoFinalGantt;
Self.FUT
:=
UT;
Self.FUTAux
:=
UTAux;
Self.FLimitePrioridade
:=
LimitePrioridade;
end;
{destructor TProcesso.Destroy;
begin
inherited Destroy;
end;
destructor TCPU.Destroy;
begin
inherited Destroy;
end;
destructor TDisco.Destroy;
begin
inherited Destroy;
end;
destructor TSistema.Destroy;
begin
inherited Destroy;
end;
}
{**************CLASSE CPU**************}
procedure TCPU.incrementaTempoDecorrido;
begin
FtempoDecorrido := tempoDecorrido + 1;
end;
function TCPU.removeProcessoExecutando: Tprocesso;
begin
ocupado
:= 0;
tempoDecorrido
:= 0;
result
:= processoExecutando;
end;
procedure TCPU.insereProcessoExecutando(processo:Tprocesso);
begin
ocupado
:= 1;
tempoDecorrido
:= 0;
processoExecutando
:= processo;
69
end;
function TCPU.Gocupado:integer;
begin
result := Self.FOcupado;
end;
procedure TCPU.Socupado(valor:integer);
begin
Self.Focupado := valor - 1;
end;
function TCPU.GtempoDecorrido:integer;
begin
result := Self.FtempoDecorrido;
end;
procedure TCPU.StempoDecorrido(valor:integer);
begin
Self.FtempoDecorrido := valor - 1;
end;
function TCPU.GProcessoExecutando:Tprocesso;
begin
result := Self.FProcessoExecutando;
end;
procedure TCPU.SProcessoExecutando(valor:Tprocesso);
begin
Self.FProcessoExecutando := valor;
end;
{*************CLASSE PROCESSO************}
function TProcesso.GTempoProcessador:integer;
begin
result := Self.FTempoProcessador;
end;
procedure TProcesso.STempoProcessador(valor:integer);
begin
Self.FTempoProcessador := FTempoProcessador - valor;
end;
function TProcesso.Gcor:Tcolor;
begin
result := Self.Fcor;
end;
procedure TProcesso.Scor(valor:Tcolor);
begin
Self.Fcor := valor;
end;
function TProcesso.Gpid:integer;
begin
result := Self.Fpid;
end;
procedure TProcesso.Spid(valor:integer);
begin
Self.Fpid := valor;
end;
function TProcesso.GtempoExecucao:integer;
begin
result := Self.FtempoExecucao;
end;
70
procedure TProcesso.StempoExecucao(valor:integer);
begin
Self.FtempoExecucao := FtempoExecucao - valor;
end;
function TProcesso.GtempoTurnaround:integer;
begin
result := Self.FtempoTurnaround;
end;
procedure TProcesso.StempoTurnaround(valor:integer);
begin
Self.FtempoTurnaround := Self.FtempoTurnaround + valor;
end;
function TProcesso.GtempoEsperaProcesso:integer;
begin
result := Self.FtempoEsperaProcesso;
end;
procedure TProcesso.StempoEsperaProcesso(valor:integer);
begin
Self.FtempoEsperaProcesso := FtempoEsperaProcesso + valor;
end;
function TProcesso.Gporcentagem:integer;
begin
result := Self.Fporcentagem;
end;
procedure TProcesso.Sporcentagem(valor:integer);
begin
Self.Fporcentagem := valor;
end;
function TProcesso.Gtipo:string;
begin
result := Self.Ftipo;
end;
procedure TProcesso.Stipo(valor:string);
begin
Self.Ftipo := valor;
end;
function TProcesso.Gprioridade:integer;
begin
result := Self.Fprioridade;
end;
procedure TProcesso.Sprioridade(valor:integer);
begin
Self.Fprioridade := valor;
end;
{************* CLASSE SISTEMA **************}
function TSistema.GfatiaTempoSistema:integer;
begin
result := Self.FfatiaTempoSistema;
end;
procedure TSistema.SfatiaTempoSistema(valor:integer);
begin
Self.FfatiaTempoSistema := valor;
end;
function TSistema.GtempoDecorridoSistema:integer;
begin
result := Self.FtempoDecorridoSistema;
end;
71
procedure TSistema.StempoDecorridoSistema(valor:integer);
begin
Self.FtempoDecorridoSistema := Self.FtempoDecorridoSistema + valor;
end;
function TSistema.GtempoAcessoDisco:integer;
begin
result := Self.FtempoAcessoDisco;
end;
procedure TSistema.StempoAcessoDisco(valor:integer);
begin
Self.FtempoAcessoDisco := valor;
end;
function TSistema.GtempoAcessoUSBFlash:integer;
begin
result := Self.FtempoAcessoUSBFlash;
end;
procedure TSistema.StempoAcessoUSBFlash(valor:integer);
begin
Self.FtempoAcessoUSBFlash := valor;
end;
function TSistema.GtempoAcessoCD:integer;
begin
result := Self.FtempoAcessoCD;
end;
procedure TSistema.StempoAcessoCD(valor:integer);
begin
Self.FtempoAcessoCD := valor;
end;
function TSistema.GtempoClock:integer;
begin
result := Self.FtempoClock;
end;
procedure TSistema.StempoClock (valor:integer);
begin
Self.FtempoClock := valor;
end;
function TSistema.GtempoThroughput:integer;
begin
result := Self.FtempoThroughput;
end;
procedure TSistema.StempoThroughput(valor:integer);
begin
Self.FtempoThroughput := FtempoThroughput + valor;
end;
function TSistema.GtempoInicialGantt:integer;
begin
result := Self.FtempoInicialGantt;
end;
procedure TSistema.StempoInicialGantt(valor:integer);
begin
Self.FtempoInicialGantt := FtempoInicialGantt + valor;
end;
function TSistema.GtempoFinalGantt:integer;
begin
result := Self.FtempoFinalGantt;
72
end;
procedure TSistema.StempoFinalGantt(valor:integer);
begin
Self.FtempoFinalGantt := FtempoFinalGantt + valor;
end;
function TSistema.GUT:integer;
begin
result := Self.FUT;
end;
procedure TSistema.SUT(valor:integer);
begin
Self.FUT := FUT + valor;
end;
function TSistema.GUTAux:string;
begin
result := Self.FUTAux;
end;
procedure TSistema.SUTAux(valor:string);
begin
Self.FUTAux := FUTAux + valor + '+';
end;
function TSistema.GLimitePrioridade:integer;
begin
result := Self.FLimitePrioridade;
end;
procedure TSistema.SLimitePrioridade(valor:integer);
begin
Self.FLimitePrioridade := FLimitePrioridade + valor;
end;
function TSistema.GtempoMedioTurnaround:integer;
begin
result := Self.FtempoMedioTurnaround;
end;
procedure TSistema.StempoMedioTurnaround(valor:integer);
begin
Self.FtempoMedioTurnaround := FtempoMedioTurnaround + valor;
end;
function TSistema.GCalculaUnidadeTempo:string;
begin
result := Self.FCalculaUnidadeTempo;
end;
procedure TSistema.SCalculaUnidadeTempo(valor:string);
var count, i, j:integer;
VUT: string;
vUTAux: string;
begin
vUTAux := Copy(valor,1, count-1);
j := length(Copy(valor,1, count-1));
count := j;
for i := 1 to j do
begin
VUT := Copy(vUTAux, count,1);
dec(count);
if VUT = '+' then break;
end;
VUT := Copy(vUTAux,1,count);
Self.FCalculaUnidadeTempo
end;
:= VUT;
73
{********** CLASSE DISCO **********}
function TDisco.Gocupado:integer;
begin
result := Self.Focupado;
end;
procedure TDisco.Socupado(valor:integer);
begin
Self.Focupado := valor;
end;
function TDisco.GtempoEsperado:integer;
begin
result := Self.FtempoEsperado;
end;
procedure TDisco.StempoEsperado(valor:integer);
begin
Self.FtempoEsperado := valor;
end;
function TDisco.GtempoDecorrido:integer;
begin
result := Self.FtempoDecorrido;
end;
procedure TDisco.StempoDecorrido(valor:integer);
begin
Self.FtempoDecorrido := Self.FtempoDecorrido + valor;
end;
function TDisco.GtempoIO:integer;
begin
result := Self.FtempoIO;
end;
procedure TDisco.StempoIO(valor:integer);
begin
FtempoIO := valor;
end;
function TDisco.GProcessoIO:Tprocesso;
begin
result := Self.FProcessoIO;
end;
procedure TDisco.SProcessoIO(valor:Tprocesso);
begin
Self.FProcessoIO := valor;
end;
procedure TForm7.BitBtn1Click(Sender: TObject);
begin
Tsistema(S).SfatiaTempoSistema(SpinEdit2.Value);
Tsistema(S).StempoClock(SpinEdit6.Value);
TSistema(S).StempoAcessoDisco(SpinEdit7.Value);
TSistema(S).StempoAcessoCD(SpinEdit9.Value);
TSistema(S).StempoAcessoDisco(SpinEdit10.Value);
TDisco(D).StempoIO(SpinEdit8.Value);
TSistema(S).SLimitePrioridade(SpinEdit1.Value);
Form3.SpinEdit1.MaxValue := Form7.SpinEdit1.Value ;
Application.MessageBox('Opera磯
Sucesso!','Aviso',mb_Ok+mb_IconExclamation);
end;
Realizada
com
procedure TForm7.BitBtn2Click(Sender: TObject);
74
begin
close;
end;
function TForm7.Calculate(SMyExpression: string; digits: Byte): string;
//
Calculate
a
simple
expression.
Supported
are:
http://www.swissdelphicenter.ch/en/showcode.php?id=470
var
z: Char;
ipos: Integer;
Real
Numbers,
parenthesis.
function StrToReal(chaine: string): Real;
var
r: Real;
Pos: Integer;
begin
Val(chaine, r, Pos);
if Pos > 0 then Val(Copy(chaine, 1, Pos - 1), r, Pos);
Result := r;
end;
function RealToStr(inreal: Extended; digits: Byte): string;
var
S: string;
begin
Str(inreal: 0: digits, S);
realToStr := S;
end;
procedure NextChar;
var
s: string;
begin
if ipos > Length(SMyExpression) then
begin
z := #9;
Exit;
end
else
begin
s := Copy(SMyExpression, ipos, 1);
z := s[1];
Inc(ipos);
end;
if z = ' ' then nextchar;
end;
function Expression: Real;
var
w: Real;
function Factor: Real;
var
ws: string;
begin
Nextchar;
if z in ['0'..'9'] then
begin
ws := '';
repeat
ws := ws + z;
nextchar
until not (z in ['0'..'9', '.']);
Factor := StrToReal(ws);
end
else if z = '(' then
begin
Factor := Expression;
nextchar
75
end
else if z = '+' then Factor := +Factor
else if Z = '-' then Factor := -Factor;
end;
function Term: Real;
var
W: Real;
begin
W := Factor;
while Z in ['*', '/'] do
if z = '*' then w := w * Factor
else
w := w / Factor;
Term := w;
end;
begin
w := term;
while z in ['+', '-'] do
if z = '+' then w := w + term
else
w := w - term;
Expression := w;
end;
begin
ipos
:= 1;
Result := RealToStr(Expression, digits);
end;
procedure TForm7.FormCreate(Sender: TObject);
begin
SpinEdit2.Value
SpinEdit6.Value
SpinEdit7.Value
SpinEdit9.Value
SpinEdit10.Value
SpinEdit8.Value
SpinEdit1.Value
:=
:=
:=
:=
:=
:=
:=
Tsistema(S).GfatiaTempoSistema;
Tsistema(S).GtempoClock;
TSistema(S).GtempoAcessoDisco;
TSistema(S).GtempoAcessoCD;
TSistema(S).GtempoAcessoUSBFlash;
TDisco(D).GtempoIO;
TSistema(S).GLimitePrioridade;
end;
procedure TForm7.BitBtn5Click(Sender: TObject);
begin
close;
end;
end.
76
ANEXO II – CÓDIGO-FONTE DO COMPONENTE DE CORES DOS PROCESSOS
colorbox1.AddItem('clBackground',TObject(clBackground));
colorbox1.AddItem('clMaroon', TObject(clMaroon));
colorbox1.AddItem('Chocolate',TObject(clWebChocolate));
colorbox1.AddItem('Peru',TObject(clWebPeru));
colorbox1.AddItem('Ouro-Escuro (rod)',TObject(clWebDarkGoldenRod));
colorbox1.AddItem('RosyBrown',TObject(clWebRosyBrown));
colorbox1.AddItem('Azul-Royal',TObject(clWebRoyalBlue));
colorbox1.AddItem('Azul-Ardósia Médio',TObject(clWebMediumSlateBlue));
colorbox1.AddItem('clblue', TObject(TColor(clblue)));
colorbox1.AddItem('Azul CornFlower',TObject(clWebCornFlowerBlue));
colorbox1.AddItem('Azul Dodger',TObject(clWebDodgerBlue));
colorbox1.AddItem('Azul-Petroleo',TObject(clActiveCaption));
colorbox1.AddItem('Céu-Azul Profundo',TObject(clWebDeepskyBlue));
colorbox1.AddItem('Azul-Celeste',TObject(clSkyBlue));
colorbox1.AddItem('Azul-Claro',TObject(ClAqua));
colorbox1.AddItem('Ciano Claro',TObject(clWebLightCyan));
colorbox1.AddItem('Azure',TObject(clWebAzure));
colorbox1.AddItem('Azul Água-Marinho',TObject(clWebAquamarine));
colorbox1.AddItem('Turquesa Pálido',TObject(clWebPaleTurquoise));
colorbox1.AddItem('Azul LightSteel',TObject(clWebLightSteelBlue));
colorbox1.AddItem('Turquesa',TObject(clWebTurquoise));
colorbox1.AddItem('Turquesa Escuro',TObject(clWebDarkTurquoise));
colorbox1.AddItem('Azul Cadet',TObject(clWebCadetBlue));
colorbox1.AddItem('Ciano Escuro',TObject(clWebDarkCyan));
colorbox1.AddItem('Água-Marinho Médio',TObject(clWebMediumAquamarine));
colorbox1.AddItem('Azul-Esverdeada (Teal)',TObject(clTeal));
colorbox1.AddItem('Verde-Mar',TObject(clWebSeaGreen));
colorbox1.AddItem('Verde-Oliva Escuro',TObject(clWebDarkOliveGreen));
colorbox1.AddItem('Verde-Floresta',TObject(clWebForestGreen));
colorbox1.AddItem('Verde',TObject(clGreen));
colorbox1.AddItem('Verde-Oliva',TObject(clOlive));
colorbox1.AddItem('Verde Oliva Monótono',TObject(clWebOliveDrab));
colorbox1.AddItem('Verde Escuro',TObject(clWebLimeGreen));
colorbox1.AddItem('Verde-Mar Médio',TObject(clWebMediumSeaGreen));
colorbox1.AddItem('Verde-Mar Light',TObject(clWebLightSeaGreen));
colorbox1.AddItem('Verde-Mar Escuro',TObject(clWebDarkSeaGreen));
colorbox1.AddItem('Verde-Claro',TObject(clWebLightGreen));
colorbox1.AddItem('Verde-Primavera Médio',TObject(clWebMediumSpringGreen));
colorbox1.AddItem('Verde-Claro',TObject(clWebLightgrey));
colorbox1.AddItem('Verde Dinheiro',TObject(clMoneyGreen));
colorbox1.AddItem('Verde-Amarelo',TObject(clWebGreenYellow));
colorbox1.AddItem('Verde-Limão',TObject(clLime));
colorbox1.AddItem('Verde-Primavera',TObject(clWebSpringGreen));
colorbox1.AddItem('Vermelho Escuro',TObject(clWebDarkRed));
colorbox1.AddItem('Violeta-Vermelho Médio',TObject(clWebMediumVioletRed));
colorbox1.AddItem('Violeta-Vermelho Pálido',TObject(clWebPaleVioletRed));
colorbox1.AddItem('Vermelho Carmesim',TObject(clWebCrimson));
colorbox1.AddItem('Firebrick',TObject(clWebFirebrick));
colorbox1.AddItem('Vermelho Indiano',TObject(clWebIndianRed));
colorbox1.AddItem('Siena',TObject(clWebSienna));
colorbox1.AddItem('Vermelho',TObject(clRed));
77
colorbox1.AddItem('Laranja-Vermelho',TObject(clWebOrangeRed));
colorbox1.AddItem('Vermelho Tomate',TObject(clWebTomato));
colorbox1.AddItem('Salmão Escuro',TObject(clWebDarkSalmon));
colorbox1.AddItem('Salmão',TObject(clWebLightSalmon));
colorbox1.AddItem('Laranja-Escuro',TObject(clWebDarkOrange));
colorbox1.AddItem('Laranja',TObject(clWebOrange));
colorbox1.AddItem('Ouro',TObject(clWebGold));
colorbox1.AddItem('Amarelo',TObject(clYellow));
colorbox1.AddItem('Caqui Escuro',TObject(clWebDarkKhaki));
colorbox1.AddItem('Ouro Rod',TObject(clWebGoldenRod));
colorbox1.AddItem('Caqui',TObject(clWebKhaki));
colorbox1.AddItem('Ouro (Palerod)',TObject(clWebPaleGoldenrod));
colorbox1.AddItem('Ouro-Claro (rodYellow)',TObject(clWebLightGoldenrodYellow));
colorbox1.AddItem('Creme',TObject(clCream));
colorbox1.AddItem('LightCoral',TObject(clWebLightCoral));
colorbox1.AddItem('Rosa-Pink Profundo',TObject(clWebDeepPink));
colorbox1.AddItem('Rosa-Pink Quente',TObject(clWebHotPink));
colorbox1.AddItem('Rosa-Pink',TObject(clWebPink));
colorbox1.AddItem('Rosa-Pink Claro',TObject(clWebLightPink));
colorbox1.AddItem('Rosa Enevoado',TObject(clWebMistyRose));
colorbox1.AddItem('Magenta Escuro',TObject(clWebDarkMagenta));
colorbox1.AddItem('Purpura',TObject(clPurple));
colorbox1.AddItem('Violeta Escuro',TObject(clWebDarkViolet));
colorbox1.AddItem('Violeta Azul',TObject(clWebBlueViolet));
colorbox1.AddItem('Orquídea Escuro',TObject(clWebDarkOrchid));
colorbox1.AddItem('Orquídea Médio',TObject(clWebMediumOrchid));
colorbox1.AddItem('Orquídea',TObject(clWebOrchid));
colorbox1.AddItem('Lilás',TObject(clFuchsia));
colorbox1.AddItem('Violeta',TObject(clWebViolet));
colorbox1.AddItem('Ameixa',TObject(clWebPlum));
colorbox1.AddItem('Cardo',TObject(clWebThistle));
colorbox1.AddItem('Lavanda',TObject(clWebLavender));
78
Download