polesapart escreveu:Marcelo Samsoniuk escreveu:com uma cadencia decente? ****nenhum**** rtos vai permitir. note a quadrupla enfase... ****nenhum****! nao tem como escalonar isso na cadencia que se espera da paralela... justamente pq qq OS preemptivo vai contra isso! portanto o negocio seria investir em DMA! mas como soh tem 1 request, teria q escolher uma direcao (somente leitura ou somente escrita)

Pode ser que no caso prático um hardware modesto não tenha meios de atender isto usando o melhor dos modelos.
Mas você está mal informado quando afirma que qualquer os preemptivo vai contra isto. Existe mais de um modelo de preempção além daquele que você conhece. Num O/S convencional, quando existem tarefas de prioridades idênticas, você só consegue garantir um timeslice entre elas, usando um mecanismo de comutação por timer. Note que a meu ver isto já resolve o problema, supondo que o hardware esteja adequado e que o sistema não seja um kernel pesado com tarefas pesadas.
nao fique bravinho alex, mas quem anda mal informado eh vc! hahaha =)
para simular um IO sincrono, sem jitter ou slip na sinalizacao, vc teria que ter um sistema de escalonamento de processos *totalmente* deterministico... o simples fato de ter prioridades, outras interrupcoes ou qq especie de multiplexacao de recursos ou utilizacao sob demanda destruiria o determinismo do sistema e faria a sinalizacao sofrer com jitter ou slip.
a efetividade dessa solucao tambem nao vai muito longe, por uma serie de motivos. primeiro que a troca de contexto consome um certo tempo, entao o timer que vc vai utilizar nao vai servir para sinalizacoes que requerem bases de tempo agressivas. segundo que as tasks devem ser sincronas, portanto elas tem que desempenhar suas atividades inteiramente dentro daquele time-slice, sob pena de ocorrer jitter ou slip... mas como eh um recurso compartilhado, se nao de tempo alguem tem que sair perdendo. terceiro que as tasks rodam sucessivamente, entao vc nao consegue simultaneidade na ativacao de diferentes sinalizacoes... e por aih vai.
ao contrario do que vc falou, isso eh possivel em hardware modesto, justamente pq as necessidades de uso simultaneo de recursos sao menores e controlados. em sistemas maiores vc tem tanta falta de determinismo no sistema que fica impossivel simular IO sincrono por software. a vantagem de ter um hardware maior, por outro lado, eh que vc pode fazer o IO sincrono por hardware, utilizando DMA, por exemplo.
Mas vamos alêm... existem modelos em que cada tarefa existente possui uma prioridade única. Assim quando uma tarefa de ordem superior precisa rodar, a tarefa de prioridade inferior é empilhada e a tarefa superior roda em modelo RTC (run to completion), ou seja, executa o que tem que fazer e finaliza. A tarefa inferior então continua. Este modelo de preempção é adotado ao menos pela quantum platform, e funciona muito bem.
pois eh, eu trabalho com um rtos similar a esta que vc descreveu e isso nao resolve problema algum em termos de simular IO sincrono. a unica sinalizacao isenta de jitter e slip seria a sinalizacao controlada pelo processo de maior prioridade, ficando o resto zuado. se vc tem varias sinalizacoes importantes e independentes, vc teria que na pratica ter um processador por sinalizacao.
soh para mostrar como a vida eh dificil, o simples processamento de sinalizacao CAS a cadencia de 125us eh algo que consome 50% dos recursos de um microcontrolador de velocidade bem consideravel.
Acho que você tem dificuldades em comparar o modelo rtos a um modelo "os". O rtos não garante que você vai ser capaz de extrair todo o "suco" do hardware, apenas que vai conseguir fazê-lo dentro de parâmetros deterministicos, que podem ser longe do ideal e podem ser insuficientes pra atender certas condições, mas dentro destas condições, qual o problema que você enxerga? Alguns sistemas chamados de rtos não são tão realtime assim. Porém comparar este modelo a um modelo de O/S sem garantias de tempo e onde existe um kernel trabalhando com tarefas complexas que são executadas com grande variabilidade de tempo é como comparar alhos com bugalhos.
depende... na pratica os conceitos sao intercambiaveis pq resolvem o mesmo problema de formas diferentes!
a maioria dos rtos que eu conheco sao dimensionados para trabalhar dentro de janelas de no maximo 125us sem slip e requerem ainda hardware extra para eliminar jitter em IO sincrono, na forma de FIFOs. por outro lado, conheco muitas solucoes equivalentes implementadas em sistemas operacionais convencionais cuja base de tempo eh apenas 10ms, mas rodam em cima de hardware melhor e conseguem atender os mesmos requisitos de slip e jitter dos sistemas que rodam rtos.
eh facil achar exemplos que ninguem discute: o controlador de video e ethernet em um PC sempre utiliza DMA e sempre possui hardware dedicado... mas muita gente gera video e ethernet por software em microcontroladores pequenos... se o PC tem um clock tao alto, pq nao fazer por software ? pq eh um desperdicio e nao eh eficiente.
Recomendo que você releia o que o cara pediu no inicio da thread e pense se é algo assim tão absurdo

O que ele quer é ler a paralela a cada 20ms, ele não quer ligar uma OC-92 através de um transceptor na paralela e fazer um mirror do slackware

hahaha olha a *idade* chegando ae alex!
ele escreveu 20 microsegundos (50KHz) e nao 20 milisegundos (50Hz). na pratica, se ele ativar um strobe para a leitura, o que ele vai medir na saida eh um burst de 1000 pulsos por 20ms e 20ms parado. solucao para isso existe com interrupcao ou DMA, mas uma solucao alternativa mais simples seria manter a leitura por software e bufferizar a entrada com uma memoria FIFO, de modo que a entrada fica cadenciada a 50KHz sem jitter ou slip e o outro lado simplesmente le a FIFO o mais rapido possivel, em qq cadencia. eh muito mais simples!
bom, nao vou mais discutir isso com vc... a menos que vc pare de ser ranzina e pague uma pizza para mim e para o xultz!
