Tag: preemptivo

Escalonamento de Processo e o Sistema Operacional. 

Quando se inicia o estudo de Sistemas Operacionais, várias perguntas vem a mente.

O que é um processo do Sistema Operacional? Qual sua função? Algoritmo de Escalonamento? O que é isso? O que é preemptivo e não-preemptivo? Bom, não se preocupe, irei responder essas e outras dúvidas aqui.

Escalonamento de Processo e sua importância no Sistema Operacional

O que é um Sistema Operacional? Qual sua função?

Basicamente, um Sistema Operacional é um software (programa) mais importante de um computador, é ele que nos possibilita usar o computador de maneira como usamos atualmente, mais eficiente. Alguns com uma interface mais intuitiva, alguns com uma interface mais atrativa e alguns com uma interface que ganha a fama de ser difícil. Ele é de extrema importância para interação humano/computador…Um Sistema Operacional administra todos os recursos de um computador, seja ele no software ou hardware, por esse motivo ele é essencial.

O que é Escalonador? Algoritmo de Escalonamento?

O escalonador é a parte do Sistema Operacional que escolhe qual o processo deverá ser executado e algoritmo de escalonamento é o algoritmo que é usado no Escalonador, que em termos “ajuda” o SO a escolher qual o processo vai ser executado.

Quais tipos de algoritmos de escalonamento são usados no escalonador quando o mesmo for escolher o processo que deverá ser executado?

Citarei apenas alguns algoritmos de escalonamento:

  • Em Tempo Real: Sistemas que precisam de respostas rápidas em um tempo pré-determinado. Ele pode ser usado em Sistemas médicos de processamento de imagem, Sistemas de Controle Industrial, Sistemas de freios ABS, entre outros. Os dados desses sistemas são armazenados em memória volátil ou ROM. É de extrema importância que um Sistema em Tempo real não ocorra falhas, pois poderão acarretar diversas fatalidades. Já da para imaginar algumas das fatalidades que poderiam ocorrer com esse sistema, né?
  • Menor Job Primeiro: SJF – Shortest job first é utilizado de maneira que o job de menor custo de execução é colocado como prioridade, para que então o mesmo seja executado primeiro. O Menor Job Primeiro é um algoritmo não-preemptivo. Nele é possível prever o tempo de execução do processo. O objetivo desse algoritmo é fazer com que o tempo de espera seja o menor possível, por isso, com uma mesma faixa de tempo ele consegue executar um número maior de processos. O interessante é que se dois processos tiverem o mesmo tamanho de execução, é então usado o algoritmo FIFO para decisão de quem será executado primeiro. Falarei sobre FIFO logo abaixo.
  • FIFO (First in, first out): Entender o algoritmo de escalonamento FIFO é muito fácil, apenas basei-se em uma fila. O primeiro que entra, é o primeiro que sai. Simples assim! Esse algoritmo é conhecido por algoritmo de fila simples. É uma estrutura de dados, que segue o critério de que “O primeiro elemento a ser retirado, é de fato o primeiro elemento que tiver sido inserido.  No FIFO, todos os processos tendem a serem atendidos e por esse exato motivo ele evita o starvation (Quando um processo nunca é executado), ao menos, é claro, que um processo possua algum erro ou até mesmo um loop infinito. Como o algoritmo é de fila, se houver um loop infinito, os outros processos que estão na fila de espera não poderão ser executados e a máquina irá parar. Tenha em mente que um algoritmo FIFO não garante que exista um tempo rápido de resposta, pois o mesmo deverá obedecer a ordem da fila, e por esse motivo, se estiver em execução um processo que demora muito mais tempo que um outro processo, ele deverá ser executado por completo até chegar a vez do processo anterior que está em espera na fila.
  • Shortest Remaining Time (SRT): Traduzido para o português como tempo remanescente mais curto é um algoritmo de escalonamento variante do escalonamento SJF. Na entrada de um novo processo, o SRT avalia todo seu tempo de execução, o mesmo avalia também o restante de tempo do job que está em execução. Caso a estimativa do tempo de execução do processo que está em espera seja menor do que o tempo restante que falta para o processo que está em execução acabar, o algoritmo faz a troca colocando o processo que está em execução em espera, e o processo em espera recém chegado que tem o tempo mais curto em execução. Nesse momento, ocorre então a preempção do processo em execução. Podemos concordar então que esse é um algoritmo preemptivo, né? O interessante desse algoritmo é que ele considera o tempo que falta para o fim da execução do processo atual. Diferentemente do Menor Job Primeiro.
  • Prioridade: Pressupõe-se que nesse algoritmo, todos os processos são igualmente importantes. Porém, deve-se levar em consideração fatores externos que resultam a escolha da prioridade. Processos com mesma prioridades, podem ser executados como FIFO (first in, first out). A prioridade pode ser determinada pelo Sistema Operacional a partir do histórico de I/O e/ou pelo usuário a partir da avaliação da importância do processo. Lembra de quando falei de starvation? Então, uma das limitações desse algoritmo é sofrer de starvation, ou seja, processos com menos prioridade podem sempre serem deixados para mais tarde, portanto podem nunca serem executados. Isso não significa que ele nunca vai ser executado, mas existe uma pequena chance de ele não ser executado nunca.
  • Loteria: A ideia básica de um algoritmo de loteria é dar bilhetes de loteria aos processos. Esse algoritmo, por trabalhar com sorteio, o processo que for sorteado é o que será executado, por esse motivo ele não é preemptivo. Ele só irá parar no meio da execução, caso ele necessite de um outro processo, isso é chamado de cooperativo, mas como funciona? Imagine o processo A que está em execução, e ele precisa do processo B para continuar sua execução. O processo A irá ser bloqueado, todos os seus bilhetes de loteria serão “doados”, transferidos para o processo B, e então juntando os bilhetes que o processo B já tinha com os bilhetes que ele acabou de ganhar do processo A, ele terá mais chance de ser sorteado para entrar em execução.  A probabilidade de um processo ganhar o recurso da CPU será proporcional ao número de bilhetes que ele possuir.
  • Fração Justa: Esse algoritmo estabelece em modo geral como será dividido o tempo do processador entre o usuário. Basicamente, esse algoritmo leva em conta o usuário, ou seja, o dono do processo. Nesse caso, se o USUÁRIO A tem mais processos que o USUÁRIO B, então será disponibilizado para o usuário A mais recursos da CPU. Tendo em mente que a fração justa divide o uso da CPU para os usuários  e um outro escalonador divide os recursos da CPU disponibilizados pela fração justa para os processos. Mas qual outro escalonador? Isso que é o legal da fração justa, qualquer outro escalonador pode realizar essa tarefa.

 

Falei de alguns algoritmos de escalonamento acima, mas não falei nada sobre preemptivo e não-preemptivo.  Você sabia que um algoritmo de escalonamento pode ser preemptivo ou não preemptivo? Mas em primeiro lugar, o que é Preemptivo e Não-Preemptivo?

Preemptivo: O algoritmo é preemptivo quando o processo executa em fatias de tempo, chamadas quantum, que são determinadas pelo Sistema Operacional.

Não-Preemptivo: O algoritmo é não-preemptio quando o processo executa até o fim, sem o mesmo ser interrompido por qualquer outro processo.

Tenho que confessar uma coisa, resolvi fazer esse post porque acredito que esse tema é muito importante para iniciantes, porque já faz um tempo que não posto nada aqui no blog e também porque ~é claro~ vou fazer uma prova essa semana e precisava estudar um pouco mais. Enquanto eu escrevo o post para você, eu me sinto mais animada/motivada para estudar e aprender, pois estarei me ajudando e ajudando você cada vez mais.

Só acho meu conhecimento válido, quando eu consigo compartilhá-lo. ;) <3