mastk escreveu:Ai que tá uma coisa é vc programar pensado em mult-tarefa, outra coisa é um sistema operacional, certo?
Tipo assim, todo mundo se depara com a nescessidade de um software que tem n coisas a serem feitas e organiza como faze-las, como sam descreveu. Tudo num loop principal, interrupção ou misto.
Apartir do momento que se troca de contesto, pode-se chamar isso de sistema operacional, certo? Já que tem essa comada superior, que determina qual é a proxima tarefa a ser realizada. E para a tarefa que esta sendo execultada, tudo fica transparente certo, disso coloca-se esse programa numa região limitada da memoria, não permitindo que esse codigo zoe o sistema, caso de tentar escrever em fora da região permitida. Agora como colocar isso em pratica num 8051 por exemplo

na verdade vc teria q pensar em niveis de complexidade.
- pooling: provavelmente eh o primeiro passo para qq um q mexe com uma mcu, o cara simplesmente faz um loop que testa o que ele quer testar e, conforme os resultados, roda tarefas especificas.
- interrupcao: provavelmente o segundo passo para qq um que mexe com uma mcu, o cara pode programar recursos de hw, por exemplo timers, para disparar tarefas especificas, tornando desnecessario o loop anterior.
- interrupcao com queue: quando o negocio comeca a complicar e vc comeca a perder interrupcoes a primeira saida eh atender o mais rapido possivel elas e sair fora. para isso uma solucao eh montar uma queue para processar a interrupcao mais tarde em um loop de eventos, ou seja, essa solucao eh um misto das duas primeiras.
- multitarefa cooperativa: quando um unico loop de eventos nao dah conta, uma saida eh criar multiplos loops de eventos em tarefas a parte, onde a entrada de cada loop de eventos pode ser uma queue de mensagens. quando uma tarefa vai consultar a queue e ela esta vazia, a proxima tarefa eh escalonada. as queues sao alimentadas tanto por interrupcoes quanto tarefas q se comunicam umas com as outras, ou seja, eh uma versao melhor da solucao anterior.
- multitarefa preemptiva: quando as tarefas se tornam longas o suficiente para que a multitarefa cooperativa deixe de funcionar eficientemente, a multitarefa preemptiva resolve o problema alocando fatias de tempo para cada tarefa. obviamente as solucoes anteriores estao embutidas dentro desta.
- virtualizacao: quando os diferentes componentes do sistema se tornam complexos e comecam a interferir fortemente uns com os outros, a solucao eh virtualizar. para isso sao criadas solucoes de virtualizacao que separam as tarefas do kernel, de modo que cada tarefa pensa q tem uma maquina completa para si, mas na realidade ela roda em uma fatia de tempo, com memoria e perifericos virtualizados.
o que muda entre uma e outra eh o grau de complexidade. agora se eh um sistema operacional ou nao, depende. se vc consegue reaproveitar a base e soh adicionar novas tarefas de forma relativamente simples, pode ateh dizer que eh um sistema operacional, mesmo que seja apenas um loopzao para pooling.
nao eh o nivel de complexidade que vai dizer se eh um sistema operacional ou nao, mas sim o nivel de reaproveitamento e utilidade.