Sei sulla pagina 1di 10

UNIVERSIDADE ESTADUAL DO MARANHÃO

CENTRO DE CIÊNCIAS TECNOLÓGICAS


CURSO DE ENGENHARIA DA COMPUTAÇÃO

THALYSON LUAN MENEZES PEREIRA


IGOR PINHEIRO SERRA
LAISON PEREIRA ALMEIDA
DARLISSON SANTOS DE JESUS

ALGORITMOS COMPUTACIONAIS

São Luís
2018
THALYSON LUAN MENEZES PEREIRA
IGOR PINHEIRO SERRA
LAISON PEREIRA ALMEIDA
DARLISSON SANTOS DE JESUS

ALGORITMOS COMPUTACIONAIS
Trabalho apresentado ao curso de
Engenharia da Computação para a
obtenção parcial da segunda nota da
disciplina Sistemas Operacionais.

São Luís
2018
1
RESUMO

Para uma boa utilização dos recursos de hardware, é preciso que a utilização do
mesmo seja bem gerenciada, para isso, é necessário que boas técnicas de
programação propicie esta possibilidade. O presente trabalho apresenta as formas
mais elaboradas para tornar isto realidade, usando de diversos métodos que
correspondem às expectativas. Os procedimentos são conhecidos como Algoritmo
da Padaria, Problema dos Filósofos e Algoritmo do Banqueiro e eles servem como
um suporte para que os processos sejam bem favorecidos nas suas determinadas
aplicações.

Palavras-chave: Algoritmo. Processos. Recursos. Procedimentos.

2
ABSTRACT

For good use of hardware resources, it is necessary that the use of the same is well
managed, for this, it is necessary that good programming techniques provide this
possibility. The present work presents the most elaborate forms to make this reality,
using different methods that correspond to the expectations. The procedures are
known as Bakery Algorithm, Problem of the philosophers and Algorithm of the
Banker and they serve as a support for the processes to be well favored in their
particular applications.

Key Words: Algorithm. Processes. Resources. Procedures

3
SUMÁRIO

1. INTRODUÇÃO​……………………………………………………….. 5
2. DESENVOLVIMENTO​……………………………………………….. 5
2.1 ​ lgoritmo do Padeiro​………………………………………………….. 5
A
2.1.1 Contextualização e Problemática​…………………………...…………… 5
2.1.2 Solução​…………………………………………………………………. 6
2.2 ​ roblema dos Filósofos​……………………………………………….. 7
P
2.2.1 Contextualização e Problemática​…...………………………………….... 7
2.2.2 Solução​…………………………………………………………………. 7
2.3 Algoritmo do Banqueiro​……………………………………………….. 8
2.3.1 Contextualização e Problemática​…………………………………...…… 8
2.3.2 Solução​…………………………………………………………………. 8
3. CONCLUSÃO​……………………………………………………….... 9
4. REFERÊNCIAS​………………………………………………………. 9

4
1. INTRODUÇÃO

Desde os primórdios da humanidade, o ser humano vem evoluindo a forma


como se interagem, com isso, o desenvolvimento da tecnologia e ciência é
inevitável devido ao poder de raciocínio que adquirimos. Um produto dessa fusão de
curiosidade e intelecto foi a existência de computadores, que são máquinas muito
poderosas capazes de realizar cálculos inimagináveis para os humanos, eles
transcenderam a forma como nos comunicamos e vivemos em sociedade e uns dos
seus maiores feitos foi o aumento da capacidade humana em pesquisar, criar e
desenvolver em praticamente todos os campos da atividade, seja ela espacial ou
aplicações rurais.
O computador, mesmo sendo uma máquina de poder imenso, ainda está
sujeito às leis da natureza humana, e isso inclui todas as imperfeições que o
intelecto humano concebe. O equipamento sofre com problemas, não só na sua
parte física (componente “palpável” conhecido como hardware) mas também na sua
parte lógica(software). Com intuito de minimizar esses pequenos acontecimentos, o
desenvolvedores criaram ferramentas e técnicas capazes de amenizar, ou até
finalizar, algumas dessas adversidades que complicam a eficácia do computador,
culminando numa má distribuição de tarefas.
Alguns desses problemas serão apresentados neste presente trabalho, tal
como sua execução e solução com as variedades de técnicas usadas pelos
solucionadores. Eles são semelhantes à forma que os seres humanos convivem,
deste modo, certas explicações podem parecer uma forma trivial, porém, envolvem
métodos de programação para a sua conclusão. Os problemas a serem discutidos
neste trabalho serão o Algoritmo do Padeiro, Problema dos filósofos e Algoritmo do
Banqueiro.

2. DESENVOLVIMENTO

2.1 Algoritmo do Padeiro

2.1.1 Contextualização e Problemática


O processador é o componente principal de um computador, ele executa
programas e alterna os processos que ficam na memória. Ele alterna os processos
de acordo a necessidade (nível de prioridade) que o sistema exige. O alto uso do
processador devido às alternâncias que o mesmo efetua tem como objetivo evitar
que um processo fique inoperante, mantendo ativo a maior porção de processos
que o processador conduz, entretanto, a sincronização realizada pelo processador

5
nem sempre é eficiente, fazendo com que haja um uso paralelo de processos na
CPU.
O algoritmo do Padeiro, também conhecido como exclusão mútua, tem como
objetivo a prevenção do problema de condição de disputa em regiões críticas, ou
seja, preservar o uso eficaz do processador, impedimento múltiplos acessos. O
conceito básico que o Algoritmo do Padeiro faz alusão do mundo real é de que o
funcionamento assemelha-se ao ambiente da padaria, em que o cliente espera a
sua vez para realizar sua função, porém, o funcionário (Processador) é que atende
os clientes, no entanto, apenas um por vez, igual à uma fila. Para uma organização
mais eficaz do ambiente, é entregue fichas aos clientes à medida em que entram na
padaria e o que define a hora em que o cliente será atendido é o número da ficha, a
ficha de menor valor será priorizada no atendimento. Após o cliente ser atendido, é
entregue a compra e dá lugar a outro cliente, no caso é o número da ficha acima
dele.

2.1.2 Solução
Em síntese, o mutex tem regras para definir da melhor como os processos
devem se comportar: dois ou mais processos não podem estar simultaneamente
dentro de uma região crítica, ou seja, a forma como se organiza a fila para a
execução do processador, não se podem fazer afirmações em relação à velocidade
e ao número CPU’s, até porque o engasgo pode acontecer até nas melhores
condições caso não seja bem utilizado. Um processo fora da região crítica não deve
causar bloqueio a outro processo, isto é, não deve haver interrupções adjacentes ao
processo em execução e um processo não pode esperar infinitamente para entrar
na região crítica. Em seguida, o algoritmo do padeiro:

​ scolhendo[N] = { false, false, …, false }


e
num[N] = { 0, 0, … , 0}

escolhendo[i] = true;
num[i] = true;
num[i] = max (num[0] … num[N-1]) + 1
escolhendo[i] = false;
for (j = 0; j < N; j++)
while (escolhendo[j]);
while (num[j] != 0 && (num[j] < num[i] || num[i] == num[j] && j < i));
s = i;
print ( “Processo” , i , s);
num[i] = 0;

6
figura 1 : Região crítica sem proteção, disponível em:
https://edisciplinas.usp.br/pluginfile.php/3061851/mod_resource/content/2/36-Mutex-v27.pdf

figura 2 : Região crítica protegida com uso de mutex, disponível em:


https://edisciplinas.usp.br/pluginfile.php/3061851/mod_resource/content/2/36-Mutex-v27.pdf

2.2 Problema dos Filósofos

2.2.1 Contextualização e Problemática


O problema dos filósofos ou o jantar dos filósofos, é um problema clássico da
programação concorrente. Foi elaborado em 1965 por Edsger Dijkstra e traz a tona
problemas de sincronização, de tal modo que algoritmos propostos como soluções
para sincronização são recorrentemente testados contra o problema dos filósofos.
Eis o problema: ​Cinco filósofos estão sentados em uma mesa redonda para
jantar. Cada filósofo tem um prato com espaguete à sua frente. Cada prato possui
um garfo para pegar o espaguete. O espaguete está muito escorregadio e, para que
um filósofo consiga comer, será necessário utilizar dois garfos. Portanto, cada
filósofo alterna entre duas tarefas: ​comer ou ​pensar​. Quando um filósofo fica com
fome, ele tenta pegar os garfos à sua esquerda e à sua direita; um de cada vez,
independente da ordem. Caso ele consiga pegar d ​ ois garfos,​ ele come durante um

7
determinado tempo e depois recoloca os garfos na mesa. Em seguida ele volta a
pensar. O objetivo é chegar a um algoritmo que permita cada ​filósofo executar as
tarefas de c​ omer​ e p
​ ensar​ sem nunca ficar travado.

2.2.2 Solução
No problema do Jantar dos filósofos a seção crítica da execução de um
filósofo é a operação de comer, que necessariamente, precisa utilizar os dois garfos.
Iremos representar cada garfo como um ​mutex (técnica usada em programação
concorrente para evitar que dois processos ou threads tenham acesso
simultaneamente a um recurso compartilhado, acesso esse denominado por seção
crítica). Eles serão controlados e irão trabalhar na forma de um semáforo. Logo
após o filósofo terminar de comer os dois garfos que estavam com ele serão
liberados. O sistema operacional garantirá que outras ​threads i​ nteressadas no
recurso liberado sejam escalonadas para executar e tentar pegar os garfos livres.
Dessa forma, o “sistema” não sofrerá problemas de ​starvation (​ morte da operação
por falta de acesso ao recurso), tampouco ​deadlock (​ onde o sistema fica preso na
seção crítica, inoperante).

2.3 Algoritmo do Banqueiro

2.3.1 Contextualização e Problemática


O algoritmo do banqueiro é um algoritmo de alocação de recursos e que pode
evitar a ocorrência de deadlocks. ​Caracteriza-se, pelo comportamento semelhante à
de um banqueiro fornecedor de créditos a um número de clientes. Imagine que cada
cliente possua seu próprio negócio, e cada um deles eventualmente faz requisições
de empréstimos ao banco para continuar operando seus negócios. Entretanto, o
banqueiro possui uma quantidade limitada de unidades de crédito e precisa saber
distribuir as unidades da melhor forma possível entre seus clientes.
As unidades de créditos fazem o papel dos recursos do sistema, os clientes
são os processos (que para continuar o processamento, necessitam dos recursos )
e o banqueiro é o sistema operacional . Para fazer a distribuição da melhor forma
possível, o banqueiro (SO) precisa saber o número de clientes, quantos recursos
cada um deles possui e precisa, e quantas unidades de crédito ainda estão
disponíveis. Os clientes possuem um limite máximo de créditos, quando esse limite
é atingido significa que todas as suas necessidades foram atendidas e agora os
créditos podem ser devolvidos ao banqueiro.

2.3.2 Solução
Toda solução passa pelo cálculo de “segurança” do banqueiro (SO), ele
utiliza as informações acima expostas para determinar quando é seguro fazer um
empréstimo para determinado cliente (processo). Uma situação é segura quando o
número de unidades de créditos disponíveis (recursos do sistema) é o suficiente
para atender as necessidades de um cliente e de clientes futuros, ou atingir seu
limite máximo, fazendo com que os créditos alocados sejam devolvidos ao
banqueiro . Uma situação é insegura quando não satisfaz a necessidades do cliente

8
e não atinge o limite máximo, caracterizando assim uma situação de deadlock. A
partir de uma requisição de crédito, se o banqueiro determinar a situação como
segura o empréstimo é fornecido, caso contrário o cliente deve esperar (pilha de
processos) e seu empréstimo será realizado em outro momento.

3. CONCLUSÃO
Através desses problemas propostos, desenvolvemos abstrações do que nos
era requerido a fim de elaborarmos soluções mais palpáveis que antes não se
apresentavam dessa forma. Cada problema consta situações chaves que trazem ao
cotidiano rotinas e processos de um sistema operacional. Dessa forma ao
pensarmos em soluções para essas problemáticas também chegamos a soluções
mais concretas em termos computacionais, por exemplo o problema dos filósofos
que traz uma situação bem peculiar e sutilmente nos introduz ao problema de
sincronização de recursos por parte do sistema operacional. Esse tipo de
proposição de problemas se apresentou bastante válida para a solução de
problemas de cunho computacional, em especial ao que tange sistemas
operacionais.

4. REFERÊNCIAS

BORGES BENAL​, volnys.Exclusão Mútua.Disponível


em:<https://edisciplinas.usp.br/pluginfile.php/3061851/mod_resource/content/2/36-M
utex-v27.pdf> Acesso em 21 dez. 2018.

UEYMA​,Jó.Comunicação de Processos.Disponível
em:<http://wiki.icmc.usp.br/images/7/76/Aula06.pdf> Acesso em 21 dez. 2018.

PANTUZA​,Gustavo.O jantar dos filósofos - problema de sincronização em sistemas


operacionais .​Blog do pantuza​.Disponível
em:<https://blog.pantuza.com/artigos/o-jantar-dos-filosofos-problema-de-sincronizac
ao-em-sistemas-operacionais> Acesso em 21 dez. 2018.

LUÍS ANTONELLI​, Pedro .Sistemas com multiprocessadores.Disponível


em:<https://docplayer.com.br/2169252-Sistemas-operacionais.html> Acesso em 21
dez. 2018.

Potrebbero piacerti anche