sexta-feira, 7 de setembro de 2007

Poscomp 2002 -Q25 Fundamentos

Questão 25 Fundamentos 2002
25 Assinale quantas seqüências de caracteres a seguir são reconhecidas pelo automato abaixo as quatro seqüências de caracteres (separadas por vírgulas) são: 0, +567, -89.5, -3e3.


a) 0
b) 1
c) 2
d) 3
e) 4

Como podemos ver, temos um automato finito não determinístico, que reconhece uma string com sinal que representa um número inteiro (e ainda aceita a notação de números inteiros múltiplos de 10) ou seja, necessariamente precisa de sinal (passagem do estado A para o B), depois do sinal, obrigatoriamente precisa de ter algum algarismo (de B para C). No estado C temos 3 opções, continuar recebendo algarismos,(Loop), receber um caracter 'e' ou ainda ir para E [estado de aceitação, quando chega aqui, pode-se afirmar que a string é um número inteiro]. Caso ele va para D [se o estado "ler" um 'e'] ele precisa de ler um outro algarismo[D para E] para chegar ao estado de aceitação.

Vamos as sequências : 0 não vai ser identificado como inteiro, já que ele não tem sinal, nunca vai passar do A para o B. +567 o + passa o automato do A para o B, depois o 5 passa do B para o C, vai para o estado de aceitação e entra no loop 6 e 7. Terminou no estado de aceitação então é a primeira a ser reconhecida. -89.5, o - leva do A para o B, o 8 passa do B para o C, o 9 continua no C (Loop), mas o . (ponto) não permite o automato a ir para lugar algum. O -3e3, o - passa A para B, 3 do B para o C, o 'e' do C para o D, o outro 3 do D para o estado de aceitação E. O que nos deu 2 strings reconhecidas pelo automato :-) letra c)

quarta-feira, 29 de agosto de 2007

Vamos a mais uma Poscomp =P

58. Qual o significado de coerência de memórias cache em sistemas multiprocessados?
a) Caches em processadores diferentes sempre contêm o mesmo dado válido para a mesma linha de
cache.
b) Caches em processadores diferentes nunca compartilham a mesma linha de cache.
c) Caches em processadores diferentes nunca interagem entre si.
d) Caches em processadores diferentes sempre lêem os mesmos dados ao mesmo tempo.
e) Caches em processadores diferentes podem possuir dados diferentes associados à mesma linha de
cache.

Essa pergunta se torna muito simples, a partir do momento que se conhece o conceito de coerência de memórias cache. Eu sempre tive a idéia de que é muito mais fácil aprender, quando consegue se fazer analogias, e vou tentar passar a idéia do que é a coerência de memórias cache usando esse método "revolucionário". Imagine você no seu trabalho, uma equipe de desenvolvimento, e vocês já tem uma versão do programa que está em andamento. No começo do dia cada programador baixa o código-fonte do programa e continua a sua tarefa de desenvolvimento, cria várias funções e o melhor modifica as funções antigas para obter melhor desempenho, no final do dia é preciso "juntar" tudo não é? acontece que se alguem mudou como uma função se comporta e um outro programador criou outra função que utilizava a função modificada (antes dela ser modificada é claro) cria uma inconsistencia nos dados dos programas não é? Bem pra evitar isso, existem softwares de controle de versão, softwares que comparam as diferenças entre textos (códigos) e muito mais. Percebe que mesmo assim existe uma necessidade de ter comunicação entre os programadores que "mexem" na mesma parte do programa para evitar essa inconsistencia nos dados?

O conceito de Coerência de memórias cache vem dessa idéia, pense um sistema com mais de um processador (multiprocessado) com cada processador utilizando uma memória cache, todas as caches acessando dados da memória principal ao mesmo tempo.... o que acontece quando acessam o mesmo dado na memória principal compartilhada? se os processadores mudarem os dados que estão na cache, haverá uma inconsistencia no mesmo dado da memória. Oo pra resolver isso é necessário que haja (por exemplo) algum tipo de comunicação entre as caches, que pode ser feita em Hardware ou em Software, mas isso deixamos para outro dia certo?

Vamos ao que interessa =P

Letra b) errada!!! se os processadores não pudessem utilizar a mesma linha de cache não seria necessário usar algoritmos para a coerencia da dados, e se realmente isso acontecesse, o tempo de latência iria aumentar, e os sistemas multiprocessados não funcionariam de forma desejável (com menos desempenho). Letra c) também é errada pelo mesmo motivo da letra b) ^^, Letra d) está errada pois, os processadores trabalham normalmente de forma assíncrona, fazendo operações de leitura e escrita de forma independente, se fosse limitado a ler os mesmos dados ao mesmo tempo o desempenho seria muito desperdiçado, o que nem vem muito ao caso, não é coerência de memórias e pronto!!! :-) a letra e) nos mostra o que é a INcoerência de dados. (risos). O que torna a letra a) a correta ;-) Se é possível manter o mesmo dado de forma válida para a mesma linha de cache, então há coerÊncia de memórias cache.

Bem entendendo isso, é um bom começo para entender os protocolos de coerência de memórias cache.

Refências:
http://pt.wikipedia.org/wiki/Protocolo_mesi
http://www.ic.unicamp.br/~rodolfo/Cursos/mo401/2s2005/Trabalho/047748-cache.pdf
en.wikipedia.org/wiki/Cache_coherency
http://www.ic.unicamp.br/~rodolfo/mo801/aulas/Coerencia%20de%20Cache.html

terça-feira, 28 de agosto de 2007

Dica Instalar o DBDesigner em distros não RPM ;-)



O DBDesigner é um programa para modelagem de banco de dados, Instalar o DBDesigner em uma distribuição que utiliza pacotes *.rpm é muito fácil [eu acho rsrsrs] pois existe pacote do DBDesignerXXX.rpm

Bem vamos ao que interessa distros .DEB, Slackware ou outra qualquer [gentoo deve funfar tbm] muito fácil [depois de pronto rsrs] Primeiro vamos fazer o download em http://fabforce.net/downloads.php
o pacote que nos interessa é http://fabforce.net/downloadfile.php?iddownloadfile=2 que é para o Linux "genérico". Depois de instalar voce escolhe o diretório que quer descompactar, por exemplo dentro do /usr/share

#mv ~/Desktop/DBDesigner4.0.5.4.tar.gz /usr/share ; cd /usr/share
#tar -zxvf DBDesigner4.0.5.4.tar.gz; rm DBDesigner4.0.5.4.tar.gz
#ln -s /usr/share/DBDesigner4/DBDesigner4 /usr/bin # criando um link pra poder chamar o programa de qualquer lugar no terminal ;-)

Só que se tentarmos chamar pelo terminal DBDesigner4, ele vai acusar um erro de uma lib."libborqt-6.9-qt2.3.so: cannot open shared object file: Arquivo ou diretório não encontrado" Para sanar isso vamos ao site :http://kylixlibs.sourceforge.net/down.html e vamos escolher o mais genérico ;-)

http://prdownloads.sourceforge.net/kylixlibs/kylixlibs3-borqt-3.0-2.tar.gz?download

Pronto agora fica fácil ;-) só eh descompactar e rodar o instalador ;-)

#tar -zxvf ~/Desktop/kylixlibs3-borqt-3.0-2.tar.gz
#cd ~/Desktop/kylixlibs3-borqt/
#./install.sh

Depois disso, vem o pulo do gato :P
#cp /usr/lib/kylix3/* /usr/lib

OBS1.: Ainda não sabe o que é DBDesigner?
http://superdownloads.uol.com.br/download/140/dbdesigner/

OBS2.: Quer saber um pouquinho mais sobre o DBDesigner?
http://www.vivaolinux.com.br/artigos/verArtigo.php?codigo=805
http://fabforce.net/dbdesigner4/

OBS3.: Postado originalmente no www.vivaolinux.com.br por eu msm [atualmente em fase de autorização ;P] e testado no Debian e no Kurumin

Now, relax n enjoy ;-)

terça-feira, 21 de agosto de 2007

Matemática Poscomp

Poscomp Matemática 2002
Questão 1
Pode-se afirmar que o gráfico da função y = 1/(x ? 1) + 2 é o gráfico da função y = 1/x:
(a) transladado uma unidade para a direita e duas unidades para cima;
(b) transladado uma unidade para a direita e duas unidades para baixo;
(c) transladado uma unidade para a esquerda e duas unidades para cima;
(d) transladado uma unidade para a esquerda e duas unidades para baixo;
(e) nenhuma das anteriores.

Hoje vou sair um pouco da prova de tecnologia, e ver um pouco da prova de matemática ;-) Essa é uma questão que até um jovem do ensino médio teria a capacidade de responder, a maneira mais fácil de resolvê-la é desenhando os gráficos e comparando, assim não precisa a ficar preso a nenhum conceito (essa não é a única forma de resolver e talvez nem a melhor). Desenhar os gráficos no GIMP¹, ou em qualquer outro programa de edição de imagens seria uma tarefa no mínimo trabalhosa, então eu recorrir a um
software próprio para desenho de fómulas [tanto em 2D quanto em 3D] o GNUPLOT³ Ele é Software Livre e Gratuito (xD).Vemos o resultado aqui abaixo.

As curvas Vermelhas e Verdes são as nossas funções, sendo que a vermelha é a função y=1/x e a verde a outra =P. As retas (com traçados mais fortes) são as assíntotas dos gráficos é lógico que elas não fazem parte do gráfico rsrs. Mas nos ajudam a visualizar melhor os dois gráficos, como podemos perceber, os dois gráficos tem formatos idênticos, mas estão em coordenadas diferentes e foi justamente isso que a questão do poscomp pediu, qual é essa diferença das coordenadas[translação]?.

Provavelmente todo mundo que olhou o gráfico já se ligou neh? como o gráfico verde esta uma unidade a direita e duas unidades pra cima, certo? ;-) o que nos leva a resposta letra a) Uma coisa muito importante é a interpretação da questão, uma mente descuidada[pensando provavelmente na morte da bezerra² ] poderia marcar a letra d) que é na verdade o que a função y=1/x é em relação a y=1/(x-1)+2, mas a questão pede o contrário.

¹GIMP [windows e *nix]-> programa de manipulação de imagens, estilo o Photoshop, com recursos muito parecidos, Com código fonte disponível e muito mais barato!!(GIMP é de graça ;-) Tá tá... eu sei... todo mundo tem o photoshop de graça, quero ver é ter o código fonte ^^,
²Morte da Bezerra -> Ditado de Baiano =P
³Gnuplot-> Programa para criação de gráficos, Software livre e tem versão para Windows e Linux. Para esse problema específico foi usado esses comandos no terminal:
gnuplot
>setxrange[-5:5]
>setyrange[-5:5]
>plot 1/x ,\
1(x-1)+2

O comando "gnuplot" habilita o terminal para interpretar funçoes e opções do Gnuplot, os comandos 'setxrange' e 'setyrange' dão as faixas de onde vão mostrar o 'x' e o 'y' nesse caso ambas começam em -5 e vão até 5, depois mando "plotar" com o comando 'plot' e passo as funções. Poderia passar uma função de cada vez, mas como a intenção aqui era comparar, preferir passar as duas simultaneamente e pra isso usei o ',\' [vírgula e barra invertida].e escrevi a outra função :-)

domingo, 19 de agosto de 2007

1ª do Poscomp ;-)

Bem,

Vou começar meu primeiro post falando um pouco sobre sistema operacional e politicas de escalonamento de processos, lógico não cabe a mim ensinar o conteúdo de sistemas operacionais em um post neh? aliás as pessoas estudam isso durante um semestre na faculdade ^^, vamos nos basear em exemplos práticos de provas do poscomp.

Questão 54 e 55 - Tecnologia 2002 c a

Qual das seguintes condições não é necessária para a ocorrência de um deadlock?
a) Uso mutuamente exclusivo de recursos por processos.
b) Alocação parcial de recursos a processos.
c) Escalonamento preemptivo de recursos.
d) Processos em espera circular.
e) Haver compartilhamento de recursos por processos.

Starvation ocorre quando:
a) Pelo menos um processo é continuamente postergado e não executa.
b) A prioridade de um processo é ajustada de acordo com o tempo total de execução do mesmo.
c) Pelo menos um evento espera por um evento que não vai ocorrer.
d) No meu pdf realmente não da pra ler essa questão :P
e) O processo tenta mas não consegue acessar uma variável compartilhada.

Então podemos ver que temos dois conceitos correlacionados que são abordados: DeadLock e Starvation.
Antes de responder vamos buscar realmente os significados de cada um desses.

DeadLock: Definição formal - "Deixa que eu deixo.". Outros autores preferem chamar de "A galinha ou o ovo?"
Starvation: Definição formal - "Fiado só amanhã!" nós baianos também conhecemos como "Não deixe para amanhã o que vc pode fazer depois de amanhã" (risos)

Fácil não? vamos ver com uma definição um pouco mais informal... Deadlock acontece quando um primeiro processo fica a espera de um outro processo, entretanto este outro processo depende do primeiro processo. Oo então como os processos ficam um dependendo do outro, eles travam!!!é como se uma função esperasse uma galinha pra retornar um ovo, e uma outra função esperasse um ovo pra gerar uma galinha (risos) essa situação é denominada Deadlock.Já o Starvation acontece quando a política de escalonamento favorece a um tipo de processo (por exemplo) e os processos menos favorecidos nunca serão executados, por exemplo: o SO favorece aos processos menores, (executa primeiro os processos menores, pra depois executar os maiores), na lista do PCB (Process Control Block) existe processos pequenos e processos grandes, mas a todo momento o SO recebe mais processos pequenos, o que faz a política de escalonamento deixar os processos grandes para depois... para depois ...para depois ... e eles ficariam nessa até parassem de vir mais processos pequenos.

Então vamos voltar ao poscomp... Questão 54. Qual das seguintes condições não é necessária para a ocorrência de um deadlock?
Lógico que é a letra c) (falei "Lógico" porque eu conferi no gabarito =P) note que: A letra a) não poderia ser, pois, é necessário que os processos compartilhem recursos, e essa dependencia mútua é que ocasiona o deadlock. Ainda não entendi o que difere a letra e) da letra a) =P, a letra b) não poderia ser também
pois cai no caso da aquisição gradativa de recursos, ou seja, os processos têm alguns recursos e pedem outros. A letra d) também não, pois processos em espera circular (Tipo: processo P1 espera pelo recurso R1 que esta com o processo P2, que espera recurso R2 que está com o processo P3, etc, e PN espera pelo recurso RN que está com o processo P1), enfim.... deadlock.
Enfim temos a letra correta c) ^^,

Agora vamos a questão 55 Starvation ocorre quando:
Com certeza é a letra a) (o que será que me faz tão confiante hein?) Só ver a definição ^^, esse processo é continuamente postergado devido à política de escalonamento que pode privilegiar outros processos. Um exemplo é a política de filas multiplas de alimentação (dá alta prioridade a processos com muito uso de I/O e baixa prioridade a processos com uso intensivo da CPU). Vamos supor que entra um processo de uso intensivo da CPU, e varios outros processos que utilizam de entrada e saída, se sempre ficar entrando processos de I/O o primeiro processo (o de uso intensivo da CPU nunca irá rodar). A letra b) fala de outras políticas de escalonamento de processos (SJF e SRJN).a letra c) e a letra e) são o DeadLock!

Espero ser compreendido e ter ajudado!
Algumas Referencias na WEB
http://pt.wikipedia.org/wiki/Deadlock
http://pt.wikipedia.org/wiki/Starvation
http://homepages.dcc.ufmg.br/~scampos/cursos/so/aulas/aula9.html
http://www.cesur.br/downloads/rafael/Aulas/Sistemas_Operacionais_-_Aula_4.ppt

O Início

Seja Bem vindo ao BLOG DEU NA TELHA, como o nome sugere, não há um conteúdo específico que irá ser demonstrado aqui, entretanto, com o tempo, você [Leitor] irá perceber que alguns assuntos sempre serão 'tratados' aqui ^^,

Bem, não é de meu interesse me promover profissionalmente aqui, mas creio que você, deve ter o direito de conhecer o perfil do 'redator' do Blog. E assim conhecer um pouco dos conteúdos que serão aqui abordados, e é claro, os conteúdos serão relacionados aos meus interesses¹, Pra começar sou um aluno² de computação, e provavelmente você irá encontrar aqui no Blog, assuntos relacionados à computação [ohhhhhh], direitos do consumidor [de vez em quando eu me arrisco =P], e por incrível que pareça, há possibilidade que eu me aventure em "blogar" algo sobre literatura [conteporânea é claro ^^,]³ além da resenha e downloads que é quase lei neh?

Sempre pensei em criar um blog, mas não tinha um conteúdo específico que eu queria abordar, queria falar sobre muitas coisas, mas não acabaria falando muito sobre nada. Foi quando surgiu o poscomp em minha vida =P uma prova promovida pela SBC4 com o objetivo de avaliar o conhecimento de pessoas que pretendem prestar programas de nível superior. Como tenho objetivo em fazer concursos na área de computação, nada melhor que avaliar meus conhecimentos em computação. ;-) Partindo desse ponto, pensei qual seria a melhor forma de estudar, pensei que, se eu tivesse a "responsabilidade" de passar esse conteúdo pra "alguem", teria disciplina pra estudar e isso me ajudaria a passar no poscomp. Então [pelo menos por enquanto] o blog se infestará com conteúdos poscomp.

Penso ainda que o Blog pode me auxiliar de outras formas também, como melhorar minha capacidade de expressão, meus pontos fracos, corrigir meus conhecimentos deturpados [se os leitores contribuirem é claro], e ainda pode ajudar quem quer estudar para o poscomp, por exemplo, alunos de computação que ainda não se formaram, mas pretende se preparar para o poscomp, ou alunos que já se formaram e querem reelembrar conceitos simples ;-). O objetivo do blog é fugir de jargões e tentar trazer os conteúdos de forma didática e simples, se possível de forma interativa... mas isso fica para o futuro!!!

Já "falei" demais por hoje, e se você conseguiu ler até aqui, você é um guerreiro rsrsrs. Abraços e até mais.


¹ -> Até parece que algum blogueiro abre um blog pra expor conteúdos que não são de seus próprios interesses.
² -> Sim, sou um estudante, isso me da o direito de errar, falar baboseira, errar, se equivocar, errar, falar algo que não esteje 100% correto, errar,....
³ -> Se minhas professoras de lingua portuguesa lerem isso aqui não sei qual seria a reação delas, espanto ou alívio, porque eu era péssimo em lingua portuguesa. O alívio seria ... "Nossa até que enfim tomou jeito hein?" e o espanto seria algo como "Meu Deus, eu sinceramente não acredito que ele vai tentar fazer isso... " rsrsrs
4 -> Sociedade Brasileira de Computação