Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Respostas Simulador SOsim - Arquitetura de Sistemas Operacionais - Wellinghton Dias Periquito

Fazer download em pdf ou txt
Fazer download em pdf ou txt
Você está na página 1de 17

Fundao Universidade Federal de Rondnia

SISTEMAS OPERACIONAIS

Wellinghton Dias Periquito


Porto Velho, 17 de junho de 2011.

Curso: Infomtica Perodo: 3 Docente: Silvia das Dores Rissino Discente: Wellinghton Dias Periquito Matrcula: 201010586 Assuntos tratados: Relatrio de Atividades Prticas de Simulao com o Simulador de Sistemas Operacionais SOsim. Resoluo dos problemas de concorrncia dos Filsofos e do Barbeiro.

CAPTULO 5
Atividade 1: Criao de Processos
a) Prticas de simulao Execute o simulador SOsim e identifique as quatro janelas que so abertas na inicializao. Crie um processo: janela Gerncia de Processos / Criar janela Criao de Processos / Criar. b) Anlise Prtica Na janela Gerncia de Processos, observe algumas informaes sobre o contexto de software do processo como PID, prioridade, estado do processo e tempo de processador. Na janela Gerncia de Processador, observe o processo transacionando entre estados. Na janela Gerncia de Processador, movimente a barra de Clock de UCP e observe as variaes ocorridas. c) Questo terica para responder com a ajuda do simulador Com base na observao do comportamento do processo criado, identifique se o processo I/Obound ou CPU-bound. Justifique sua resposta. O processo criado do tipo CPU-bound, pois em nenhum momento ele passa para o estado de espera, caracterstica bsica dos processos do tipo I/O-bound, estando sempre no estado de pronto e em estado de execuo na CPU.

Atividade 2: Tipos de Processos


a) Prticas de simulao Reinicialize o simulador. Crie um processo do tipo CPU-bound: janela Gerncia de Processos / Criar janela Criao de Processos / Criar (tipo de processo deve ser CPU-bound). Crie outro processo do tipo I/O-bound: janela Gerncia de Processos / Cria janela Criao de Processos / Criar (tipo de processo deve ser I/O-bound). b) Anlise Prtica Na janela Gerncia de Processos, observe as mudanas de estado dos dois processos. Na janela Gerncia de Processador, observe o comportamento dos processos e as mudanas de contexto em funo do tipo I/O-bound e CPU-bound. Na janela Gerncia de Processos, compare a taxa de crescimento do tempo de processador dos dois processos. c) Questo terica para responder com a ajuda do simulador Analise os efeitos gerados no caso de reduo do tempo gasto na operao de E/S pelo processo I/O-bound.

Com o tempo mximo de operao de E/S para o processo I/O-bound, o processo CPUbound ter seu tempo de UCP sempre maior que o outro por no precisar passar pelo estado de espera, somente de pronto. Reduzindo o tempo de na operao de E/S pelo processo do tipo I/O-bound ao mnimo ele ficar com uma taxa de crescimento do tempo de UCP igual a do processo do tipo CPU-bound, pois o tempo em que o CPU-bound esta em execuo o necessrio para o I/O-bound realizar a operao de E/S e voltar ao estado de pronto.

Atividade 3: PCB
a) Prticas de simulao Reinicialize o simulador. Crie dois novos processos: janela Gerncia de Processos / Criar janela Criao de Processos / Criar. b) Anlise Prtica Na janela Gerncia de Processos / PCB, observe as informaes sobre o contexto de software e hardware dos processos criados. c) Questo terica para responder com a ajuda do simulador Identifique quais informaes do PCB so estticas ou dinmicas e quais fazem parte do contexto de software e do contexto de hardware. So estticas as informaes de: prioridade, tempo de criao, PID e frames. So dinmicas as informaes de: estado, tempo de UCP e PC. Fazem parte do contexto de software: prioridade, PID, tempo de UCP, tempo de criao e estado. Fazem parte do contexto de hardware: frames e PC,

Atividade 4: Estatsticas
a) Prticas de simulao Reinicialize o simulador. Ative a janela de Estatsticas em Console SOsim / Janelas / Estatsticas. Crie dois novos processos: janela Gerncia de Processos / Criar janela Criao de Processos / Criar. b) Anlise Prtica Na janela Estatsticas, observe as informaes: nmero de processos, estados dos processos e processos escalonados c) Questo terica para responder com a ajuda do simulador Observe que em alguns momentos existem processos no estado de pronto, porm nenhum em estado de execuo. Explique a razo dessa situao.

Essa situao ocorre porque nesse momento esta ocorrendo a mudana de contexto, ou seja, salva-se o contedo dos registradores do processo em execuo e logo aps carrega-se o contudo dos registradores do prximo processo a entrar em execuo.

Atividade 5: Log de Execuo dos Processos


a) Prticas de simulao Reinicialize o simulador. Ative a janela de Log em Console SOsim / Janelas / Log. Crie dois novos processos do tipo CPU-bound: janela Gerncia de Processos / Cria janela Criao de Processos / Criar (tipo de processo deve ser CPU-bound). b) Anlise Prtica Na janela Log, observe as informaes sobre as mudanas de estado dos processos observando o tempo que cada processo permanece nos estados de Execuo e Pronto. Reinicialize o simulador parametrizado com um valor de fatia de tempo diferente observe as diferenas na janela Log. c) Questo terica para responder usando o simulador Analise comparativamente a concorrncia de dois processos CPU-bound executando em dois sistemas operacionais que se diferenciam apenas pelo valor da fatia de tempo. No Sistema Operacional com fatia de tempo igual a 1s, em 20 segundos cada processo entrou em estado de execuo 5 vezes totalizando 10s de UCP, no entanto houve 10 s em gastos em troca de contexto. A 1 T 2 B 3 T 4 A 5 T 6 B 7 T 8 A T B T A T B T A T B T 9 10 11 12 13 14 15 16 17 18 19 20

No Sistema Operacional com fatia de tempo igual a 4s, em 20 segundos o processo A entrou em execuo 3 vezes totalizando 9s UCP e o B 2 vezes e 6s de UCP, totalizando 15s de UCP e apenas 5s de troca de contexto. 1 A 2 3 T 4 5 B 6 7 T A T B T A T 8 9 10 11 12 13 14 15 16 17 18 19 20

Observamos assim que quanto menor a fatia de tempo, maiores sero os tempos gastos em trocas de contextos.

Atividade 6: Suspenso e Eliminao de Processos


a) Prticas de simulao Reinicialize o simulador. Crie dois novos processos: janela Gerncia de Processos / Cria Processos / Criar. janela Criao de

b) Anlise Prtica Na janela Gerncia de Processos, observe as informaes sobre o contexto de software dos processos criados. Na janela Gerncia de Processador, observe a concorrncia no uso do processador pelos dois processos. Compare percentualmente os tempos de uso do processador entre os dois processos. Suspenda temporariamente um dos processos na janela Gerncia de Processos / Suspender. Observe os estados dos processos, a concorrncia no uso do processador e novamente compare percentualmente os tempos de uso do processador entre os dois processos. Libere o processo do estado de espera (suspenso) na janela Gerncia de Processos / Prosseguir. Elimine um dos processos na janela Gerncia de Processos / Finalizar. c) Questo terica para responder com a ajuda do simulador Ao se eliminar um processo em estado de suspenso, o processo no eliminado imediatamente. Reproduza essa situao no simulador e explique a razo da situao. Isso ocorre porque a solicitao de finalizao do processo s pode ser executada depois que ele sair do estado de suspenso, pois ao solicitar a finalizao o SO notifica o processo atravs de um bit de sinalizao localizado no seu PCB, ou seja, o Sistema Operacional ativa o bit correspondente eliminao e no momento em que o processo escalonado, o bit testado e ai sim ser finalizado.

CAPTULO 8
Atividade 1: Escalonamento Circular
a) Prticas de simulao Execute o simulador SOsim e configure-o para trabalhar com Escalonamento Circular: janela Console SOsim / Opes / Parmetros do Sistema na guia Processador. b) Anlise Prtica Crie dois processos com a mesma prioridade (um CPU-bound e outro I/O-bound): janela Gerncia de Processos / Criar janela Criao de Processos / Criar. Na janela Gerncia de Processos, observe o tempo de processador de cada processo durante dois minutos e as mudanas de estado. Aps esse perodo anote o tempo de processador de cada processo. Analise o balanceamento no uso do processador pelos dois processos. Na janela Gerncia de Processos finalize os dois processos. Na janela Gerncia de Processador, aumente a fatia de tempo movimentando a barra de Fatia de Tempo. Na janela Gerncia de Processos, observe mais uma vez o tempo de processador de cada processo durante dois minutos e as mudanas de estado. Aps esse perodo anote o tempo de processador de cada processo. Compare os tempos anotados nas duas e analise o resultado do balanceamento no uso do processador pelos dois processos. Identifique as causas da variao. c) Questo terica para responder com a ajuda do simulador Considere a concorrncia, nesse tipo de escalonamento, com dois processos CPU-bound que no realizam operaes de E/S. Qual o efeito da variao da fatia de tempo sobre o balanceamento no uso do processador? No h efeito algum porque os dois usam de forma idntica a UCP. Aps a analise percebese que mesmo aumentando a fatia de tempo os dois processos continuam passando a mesma quantidade de tempo na CPU e o tempo total de CPU s diferente porque, mesmo sendo criados juntos, um entra primeiro n UCP para ser processado. Outra coisa que pode modificar esse tempo total de CPU se a fatia de tempo for aumentada quando determinado processo tiver executando, isso aumentara a quantidade total de tempo de CPU desse processo

Atividade 2: Escalonamento Circular com Prioridades Estatsticas I


a) Prticas de simulao Execute o simulador SOsim e configure-o para trabalhar com Escalonamento Circular com Prioridades Estticas: janela Console SOsim / Opes / Parmetros do Sistema na guia Processador. b) Anlise Prtica Crie um processo CPU-bound com prioridade 3 e um outro I/O-bound com prioridade 4: janela Gerncia de Processos / Criar janela Criao de Processos / Criar. Na janela Gerncia de Processos, observe o tempo de processador de cada processo durante dois minutos e as mudanas de estado. Aps esse perodo anote o tempo de processador de cada processo. Verifique a preempo por prioridade que ocorre toda vez que o processo I/O-bound de aior prioridade passa para o estado de Pronto. Analise o balanceamento no uso do processador pelos dois processos comparativamente a Atividade 1.

c) Questes tericas para responder com a ajuda do simulador Quais devem ser os critrios para determinar as prioridades dos processos? A determinao das prioridades dos processos em um sistema operacional deve ser feito baseado em critrios como a importncia do processo, a maximizao de desempenho do sistema, Melhor aproveitamento do processador dentre outros. Caso, nesse escalonamento, todos os processos sejam criados com a mesma prioridade, qual o benefcio dessa poltica sobre o Escalonamento Circular? No haver nenhum benefcio, uma vez que dessa forma eles se comportaro da mesma forma.

Atividade 3: Escalonamento Circular com Prioridades Estatsticas II


a) Prticas de simulao Execute o simulador SOsim e configure-o para trabalhar com Escalonamento Circular com Prioridades Estticas: janela Console SOsim / Opes / Parmetros do Sistema na guia Processador. b) Anlise Prtica Crie um processo CPU-bound com prioridade 4 e um outro I/O-bound com prioridade 3: janela Gerncia de Processos / Criar janela Criao de Processos / Criar. Na janela Gerncia de Processos, observe o escalonamento dos dois processos. Analise o problema do starvation. c) Questes tericas para responder com a ajuda do simulador Por que o problema do starvation pode ocorrer? Starvation ocorre quando um ou mais processos no conseguem obter recursos no sistema e no pode progredir. Neste caso, o processo tem baixa prioridade e pode nunca ser escolhido. Cite duas aes que o administrador do sistema pode realizar quando identificada a situao de starvation em um processo. Aumentar a prioridade do processo no executado, ou suspender a execuo do processo que utiliza a CPU para que o processo em estado de starvation entre na UCP.

Atividade 4: Escalonamento Circular com Prioridades Dinmica


a) Prticas de simulao Execute o simulador SOsim e configure-o para trabalhar com Escalonamento Circular com Prioridades Dinmicas: janela Console SOsim / Opes / Parmetros do Sistema na guia Processador. Habilite as janelas de log e estatsticas: janela Console SOsim / Janelas. Na janela Gerncia do Processador desloque a barra Frequncia clock para a metade da escala. b) Anlise Prtica Crie um processo CPU-bound com prioridade base 3 e mais trs processos I/O-bound com prioridade base 4, porm com perfis diferentes (tipo 1, 2 e 3): janela Gerncia de Processos / Criar janela Criao de Processos / Criar. Observe as prioridades base e dinmica dos quatro processos na janela Gerncia de Processos. Identifique os motivos das prioridades dinmicas dos processos variarem ao longo do tempo.

Observe na janela de log o valor do incremento recebido na prioridade de cada processo, Identifique o porqu das diferenas nos valores do incremento. Observe na janela de estatsticas o percentual de utilizao da UCP. Suspenda o processo CPU-bound: janela Gerncia de Processos / Suspender. Observe na janela de estatsticas as mudanas no percentual de utilizao da UCP e identifique o porqu. Libere o processo CPU-bound do estado de suspenso: janela Gerncia de Processos / Prosseguir. c) Questo terica para responder com a ajuda do simulador Qual o critrio utilizado pelo sistema operacional para determinar diferentes valores de incremento prioridade-base de um processo quando h uma mudana do estado de espera para pronto? O sistema incrementa um valor prioridade base em relao ao tipo de espera que o processo estava submetido. Eventos que possuem um longo tempo de espera recebem um incremento maior. Um processo CPU-bound tende a ter uma prioridade dinmica menor que a de um processo I/O-bound.

CAPTULO 10
Atividade 1: Poltica de Busca Paginao Antecipada
a) Prticas de simulao Execute o simulador SOsim e configure-o para trabalhar com Escalonamento Circular: janela Console SOsim / Opes / Parmetros do Sistema na guia Processador. Configure a poltica de busca de pginas antecipada: janela Console SOsim / Opes / Parmetros do Sistema na guia Memria. Reinicialize o simulador SOsim para que a nova parametrizao passe a ser vlida. b) Anlise Prtica Crie um processo CPU-bound: janela Gerncia de Processos / Criar janela Criao de Processos / Criar. Ative a janela Contexto do Processo para visualizar a tabela de pginas do processo criado: Gerncia de Processos / PCB na guia Tab. de Pag. Verifique os valores do Bit de Validade (Bit V) nas Entradas das Tabelas de Pginas (ETP).

Atividade 2: Poltica de Busca Paginao sob Demanda


a) Prticas de simulao Execute o simulador SOsim e configure-o para trabalhar com Escalonamento Circular: janela Console SOsim / Opes / Parmetros do Sistema na guia Processador. Configure a poltica de busca de pginas sob demanda: janela Console SOsim / Opes / Parmetros do Sistema na guia Memria. Reinicialize o simulador SOsim para que a nova parametrizao passe a ser vlida. b) Anlise Prtica Crie um processo CPU-bound: janela Gerncia de Processos / Criar janela Criao de Processos / Criar. Ative a janela Contexto do Processo para visualizar a tabela de pginas do processo criado: Gerncia de Processos / PCB na guia Tab. de Pag. Verifique os valores do Bit de Validade (Bit V) nas Entradas das Tabelas de Pginas (ETP) e o local em que se encontram as pginas. c) Questo terica para responder com ajuda do simulador Considerando as atividades prticas 1 e 2, quais as diferenas encontradas nas ETPs do processo criado? Justifique o motivo. A diferena que o processo criado na poltica de busca de pgina por demanda faz com que o processo necessite de operaes de E/S, porque o processo referencia uma pagina com endereo de memria que no se encontra na memria principal (page fault), o qual verificado atravs do

bit de validade, neste caso o sistema transfere a pgina da memria secundria para a memria principal (page in) (Figura 2). J o processo de criado na poltica de busca de pgina antecipada no realiza nenhuma operao E/S, pois quando ele criado ele no possui espao de endereamento com referncia memria secundria, ou seja, j carregado na memria principal (Figura 1).

Figura 1

Figura 2

Atividade 3: Espao de Endereamento Virtual


a) Prticas de simulao Execute o simulador SOsim e configure-o para trabalhar com Escalonamento Circular: janela Console SOsim / Opes / Parmetros do Sistema na guia Processador. Configure a poltica de busca de pginas sob demanda: janela Console SOsim / Opes / Parmetros do Sistema na guia Memria.

Reinicialize o simulador SOsim para que a nova parametrizao passe a ser vlida.

b) Anlise Prtica Crie dois processos CPU-bound: janela Gerncia de Processos / Criar janela Criao de Processos / Criar. Ative a janela Contexto do Processo para visualizar a tabela de pginas do processo criado: Gerncia de Processos / PCB na guia Tab. de Pag. Na janela Gerncia de Memria observe a alocao dos frames na memria principal. Na janela Contexto do Processo observe as alteraes nas tabelas de pginas dos dois processos navegando com as setas inferiores. c) Questes tericas para responder com a ajuda do simulador Qual o espao de endereamento real mximo de um processo? Ser a capacidade mxima a quantidade de memria principal e secundria juntas. Qual o espao de endereamento real mnimo de um processo?

Seria o tamanho mnimo da tabela de mapeamento carregada. Qual o tamanho da pgina virtual? O tamanho pode variar de acordo com o processador utilizado e a arquitetura do hardware, podendo em algumas arquiteturas ser configurado.

Atividade 4: Limite de Frames e FIFO com Buffer de Pginas


a) Prticas de simulao Execute o simulador SOsim e configure-o para trabalhar com Escalonamento Circular: janela Console SOsim / Opes / Parmetros do Sistema na guia Processador. Configure a poltica de busca de pginas sob demanda: janela Console SOsim / Opes / Parmetros do Sistema na guia Memria. Reinicialize o simulador SOsim para que a nova parametrizao passe a ser vlida. b) Anlise Prtica Crie um processo CPU-bound com limite de trs frames: janela Gerncia de Processos / Criar. Ative a janela Contexto do Processo para visualizar a tabela de pginas do processo criado: Gerncia de Processos / PCB na guia Tab. de Pag. Ative a janela Arquivo de Paginao para visualizar o arquivo de paginao do sistema: Console SOsim / Janelas / Arquivo de Paginao Observe na janela Gerncia de Memria a alocao dos frames na memria principal e na janela Contexto do Processo a tabela de pginas do processo.

c) Questo terica para responder com a ajuda do simulador O que acontece quando a pgina virtual 3 (quarta pgina) referenciada? Pelo fato do limite de frames ser trs, o nmero de pagina virtual (NPV) 0 passa a ter o Bit v igual a 0 e vai para arquivo de pginas modificadas para que o NPV 3 possa carregar para a memria principal. o endereo real e assim seu Bit v possa ser 0.

E a pgina virtual 4? O NPV 1 passa para arquivo de pginas modificadas e passa a ter seu bit v 0 e o NPV 2 passa a ter o bit v 0, assim o limite de frames no superado.

O que acontece quando a pgina virtual 0 novamente referenciada? Ela sai da arquivo de pginas modificadas e carregada na memria principal novamente no mesmo endereo que foi carregada no primeiro momento, e a NPV 2 sai da memria principal.

Observe se ao longo da execuo do programa ocorre page out ou para o arquivo de paginao. Justifique. Ocorre page out porque o limite de frames j foi atingido, assim o primeiro frame deve ser guardado para que abra espao para o prximo frame (FIFO).

Atividade 5: Swapping
a) Prticas de simulao Execute o simulador SOsim e configure-o para trabalhar com Escalonamento Circular: janela Console SOsim / Opes / Parmetros do Sistema na guia Processador. Configure a poltica de busca de pginas sob demanda: janela Console SOsim / Opes / Parmetros do Sistema na guia Memria. Configurar a memria livre para possuir sempre 20% de frames livres: janela Console SOsim / Opes / Parmetros do Sistema na guia Memria. Reinicialize o simulador SOsim para que a nova parametrizao passe a ser vlida. b) Anlise Prtica Criar dois processos CPU-bound e trs I/O-bound com limite de cinco frames para cada processo: janela Gerncia de Processos / Criar. Suspenda um dos processos I/O-bound: janela Gerncia de Processos / Suspender. Ative a janela Arquivo de Paginao para visualizar o arquivo de paginao do sistema: Console / Janelas / Arquivo de Paginao Crie mais dois processos CPU-bound: janela Gerncia de Processos / Criar. Observe os estados dos processos outswapped. c) Questo terica para responder com a ajuda do simulador Quais os critrios utilizados pelo simulador para selecionar o processo a ser transferido para o arquivo de paginao (swap out)? Seleciona o processo com menor chance de entrar na UCP. Quando o processo deve ser transferido novamente para a memria principal (swap in)? Quando a limite de memria principal no for suficiente para todos os processos estarem carregados.

PROBLEMA DOS FILSOFOS

O problema dos filsofos um exemplo clssico de sincronizao de processos proposto por Dijkstra. Nesse problema, h uma mesa com cinco pratos e cinco garfos, onde os filsofos podem sentar, comer e pensar. Toda vez que um filsofo pra de pensar e deseja comer, necessrio que ele utilize dois garfos, posicionados sua direita e sua esquerda. Pressupostos 1. Cada filsofo pode comer (representa a ao do uso de um recurso) 2. Cada filsofo pode pensar (representa outra atividade do processo) 3. Cada filsofo necessita de dois garfos (representa que para efetuar uma determinada ao necessitamos de dois recursos livres). Ex. Gravar direto da memria para o disco. Usando Sincronizao Condicional esbocei abaixo a base de um algoritmo para solucionar o problema do barbeiro. Variveis FILOSOFO F1, F2, F3, F4, F5, Fn...; TALHERES T1, T2, T3, T4, T5, Tn...; Para que um filsofo Fn possa sentar-se a mesa para comer necessrio que os talheres Tn-1 e Tn+1 estejam desocupados. Assim para que o Fn possa sentar a mesa, preciso que o Fn+1 e Fn-1 estejam pensando porque existe uma concorrncia no uso dos talheres, sendo Tn+1 com fislfo Fn+1 e Tn-1 com Fn-1 , lembrando-se que para F1, Tn-1=T5 e F5, Tn+1=T1, como se percebe na tabela abaixo: T1 T2 T3 T4 T5 F1 X X F2 X X F3 X X F4 X X F5 X X

Deste modo sempre que um filsofo for sentar a mesa, ele verifica se os recursos necessrios para ele esto disponveis, ou seja, verifica se os talhares do seu lado esquerdo e do lado direito esto desocupados, caso estejam ele no pode sentar-se a mesa, fazendo uma nova tentativa posteriormente. E para que no ocorra o problema do starvation, espera por tempo indefinido de um recurso, deve-se estabelecer que cada filsofo possa usar por um tempo determinado os talhares.

PROBLEMA DO BARBEIRO

O problema do barbeiro outro exemplo clssico de sincronizao de processos. Neste problema, um barbeiro recebe clientes para cortar o cabelo. Na barbearia h uma cadeira de barbeiro e apenas cincos cadeiras para clientes esperarem. Quando um cliente chega, caso o barbeiro esteja trabalhando, ele senta se houver cadeira vazia ou vai embora se todas as cadeiras estiverem ocupadas. No caso de o barbeiro no ter nenhum cliente para atender, ele senta na cadeira e dorme at que um novo cliente aparea. Para melhor compreender a concorrncia que ocorre no problema, desenvolvi um algoritmo em linguagem C com fundamento na Sincronizao Condicional, o qual consiste em atribuir valor 0 para cadeira do barbeiro (recurso) se ela estiver vazia (barbeiro dormindo), e 1 quando ela estiver ocupada (babeiro acordado), assim quando um cliente estiver cortando o cabelo o outro s poder cortar quando o primeiro sair da cadeira, e estabelecendo um tempo determinado para que o barbeiro termine o corte, evitando espera indefinida pelos clientes da fila de espera, caso no termine no tempo estabelecido, o cliente vai para o final da fila. Tendo como base os seguintes pressupostos: Se no ha clientes, o barbeiro adormece; Se a cadeira do barbeiro estiver livre, um cliente pode ser atendido imediatamente; O cliente espera pelo barbeiro se houver uma cadeira de espera vazia. Se no ter onde sentar, o cliente vai embora...

main() { int cadeiraBarbeiro=0; int numClientes=0;char op; while(1){ system("cls"); if(numClientes==0)printf("\nNumeros de clientes atual na fila = 0\n"); else printf("\nNumeros de clientes atual na fila = %d\n",numClientes-1); if(cadeiraBarbeiro==0)printf("O Barbeiro encontra-se: DORMINDO\n"); else printf("O Barbeiro encontra-se: ACORDADO\n"); printf("\n\nDigite uma opcao:\n\n0-Sair do programa\n1-Entra Cliente\n2-Sai Cliente\n"); scanf("%c",&op); switch(op){ case'1'://entra cliente if(cadeiraBarbeiro==0){system("cls"); printf("\n\nO Barbeiro estava dormindo, sente-se na cadeira principal!"); cadeiraBarbeiro=1; numClientes++;} else{ if(numClientes<6){system("cls"); printf("\n\nO Barbeiro esta ocupado, agurde, vc eh o %do da fila de espera OK!", numClientes); numClientes++;} else{system("cls"); printf("\n\nA Barbearia esta cheia, volte mais tarde!!!"); } } getch(); break; case'2'://sai cliente if(numClientes>0){//s executa se estiver alguem na cadeira principal if(numClientes==1){ cadeiraBarbeiro=0; numClientes--; system("cls"); printf("\n\nAgora barbeiro vai dormir, pois nao ha clientes na barbearia!!",numClientes); getch(); break;} else numClientes--; system("cls"); printf("\n\nAgora exitem %d clientes na fila de espera",numClientes-1); getch();} break; case'0'://sair exit(0); } } }

Você também pode gostar