Pesquisa Livre

globoesportes.com

terça-feira, 14 de abril de 2009

Sistema Operacional Mono e Multitarefa

CENTRO DE EDUCAÇÃO TECNOLÓGICA DO AMAZONAS
Curso Técnico de Informática

SISTEMA OPERACIONAL
MONOTAREFA e MULTITAREFA

URUCURITUBA/AMAZONAS
2009

Sumário

1. INTRODUÇÃO 3
2. O QUE É Sistema OPERACIONAL 4
3. A INICIALIZAÇÃO DO SISTEMA OPERACIONAL 6
4. COMO O SISTEMA OPERACIONAL GERENCIA O PROCESSADOR 7
5. COMO O SISTEMA OPERACIONAL GERENCIA O ARMAZENAMENTO E A MEMÓRIA 10
6. COMO O SISTEMA OPERACIONAL GERENCIA OS DISPOSITIVOS 11
7. INTERFACE DO SISTEMA OPERACIONAL COM O MUNDO 12
8. INTERFACE COM O ÚSUARIO 14
9. CÓDIGO-FONTE ABERTO 15
10. SOS MONOTAREFA E MULTITAREFA 15
11. SISTEMA MONOTAREFA VS. MULTITAREFA 17
12. CONCLUSÃO 18
13. BIBLIOGRAFIA 19

1. Introdução

Sistema operacional (SO)? O que é isso? Será que é apenas um grande software de alto porte que ópera simplesmente para digitar um texto qualquer ou jogar paciência spider? Errado! Ao longo do assunto vamos saber a verdade sobre o que é um sistema operacional. E mostrar por que este software se diferencia dos outros, dando exemplos desde o inicio de sua criação até os dias atuais.

2. O que é Sistema Operacional?

Se você tem um computador, já ouviu falar sobre os sistemas operacionais. Qualquer computador de mesa ou laptop que você compra normalmente já vem com o Microsoft Windows instalado. Já os computadores Macintosh rodam o sistema operacional OS X. Muitos servidores corporativos utilizam os sistemas operacionais Linux ou UNIX. O sistema operacional (SO) é a primeira coisa que o computador carrega. Sem um sistema desse tipo, o computador se torna inútil.
Um sistema operacional é formado por um conjunto de programas e rotinas computacionais que têm como objetivo criar uma camada de abstração entre o usuário e o hardware propriamente dito. Entende-se por usuário todo e qualquer objeto que precise de acesso aos recursos de um computador (seja ele um usuário "real" ou aplicativo).
O objetivo de um sistema operacional é organizar e controlar o hardware e o software para que o dispositivo funcione de maneira flexível e previsível.

Os sistemas operacionais podem ser classificados de três maneiras: pelo tipo do núcleo de sistema (ou kernel, como é conhecido no jargão técnico), pelo método adotado ao gerenciar os programas em execução ou pelo número de usuários que podem operá-lo simultaneamente.

Kernel
Atualmente, são utilizados basicamente dois tipos de implementações do núcleo de sistema: monolíticos e estrutura de microkernel.
Núcleos monolíticos têm como principal característica o fato de integrarem todas as funcionalidades possíveis do sistema em um grande "bloco" de software. A adição de novas funcionalidades implica na recompilação de todo o núcleo. Trata-se de uma abordagem um tanto antiquada, mas que foi adotada, por exemplo, por Linus Torvalds quando este resolveu desenvolver o kernel do Linux.

Núcleo monolítico
Microkernel é um termo usado para caracterizar um núcleo de sistema cujas funcionalidades não-essenciais ao seu funcionamento são transferidas para servidores, que se comunicam com o núcleo mínimo através do modo de acesso do núcleo (local onde o programa tem acesso a todas as instruções da CPU e a todas as interrupções de hardware), deixando o máximo de recursos rodando no modo de acesso do usuário. Quando o processador trabalha no modo usuário, uma aplicação só pode executar instruções não-privilegiadas, tendo acesso a um número reduzido de instruções.

3. A inicialização do sistema operacional

Quando você liga o computador, o primeiro programa executado é, geralmente, um conjunto de instruções armazenadas na memória ROM. Este código examina o hardware do sistema para ter certeza de que tudo está funcionando corretamente. Este autoteste, conhecido como POST (power-on self test) verifica a CPU, a memória, a BIOS (Basic Input Output System - Sistema de Entrada e Saída Binário ), procura por erros e armazena o resultado em uma memória especial. Ao completar o POST, o software carregado na memória ROM (às vezes chamado de BIOS ou firmware) ativa as unidades de disco do computador. Na maioria dos computadores modernos, quando o computador ativa o disco rígido ele encontra o trecho inicial do sistema operacional, conhecido como bootstrap loader (sistema de inicialização).
O bootstrap loader é um pequeno programa que tem uma única função. Ele carrega o sistema operacional na memória e permite que ele comece a operar. Em sua forma mais básica, o bootstrap configura os pequenos programas de driver que fazem interface e controlam os vários subsistemas de hardware do computador. Ele configura as partes da memória que contêm o sistema operacional, as informações de usuário e os aplicativos. Ele também estabelece as estruturas de dados responsáveis pelos inúmeros sinais, flags e semáforos que são usados para a comunicação com (e entre) os subsistemas e aplicativos do computador. Então ele entrega o controle do computador ao sistema operacional.
As tarefas do sistema operacional, na maioria das vezes, se encaixam em seis categorias:
• gerenciamento do processador
• gerenciamento da memória
• gerenciamento de dispositivos
• gerenciamento de armazenamento
• interface de aplicativos
• interface do usuário
4. Como o sistema operacional gerencia o processador
As 2 principais funções do gerenciamento do processador são:
1. Garantir que cada processo e aplicativo recebam tempo suficiente do processador para funcionar corretamente;
2. Usar quantos ciclos de processador quanto possível para realizar as tarefas.
A unidade básica do software com a qual o sistema operacional trabalha para organizar as tarefas realizadas pelo processador é representada pelo processo ou thread, dependendo do sistema operacional.
Podemos até pensar em um processo como um aplicativo, mas isso dá uma idéia incompleta de como os processos se relacionam com o sistema operacional e com o hardware. O aplicativo que você vê (processador de texto, planilha eletrônica ou jogo) é, de fato, um processo. Porém, os aplicativos podem ativar outros processos para se comunicarem com outros dispositivos ou computadores. Também existe uma série de processos que são executados sem que você perceba. O Windows e o UNIX podem executar, em background, dezenas de processos para lidar com a rede, gerenciar a memória e o disco rígido, verificar vírus etc.
Em resumo, um processo é um software que executa ações e pode ser controlado pelo usuário, por outros aplicativos ou pelo sistema operacional.
São os processos, e não os aplicativos, que o sistema operacional controla e faz sua escala para que a CPU os execute. Em um sistema monotarefa, este trabalho é bastante simples. O sistema operacional permite que o aplicativo seja iniciado, suspendendo sua execução somente para tratar as interrupções e inserções do usuário.
Interrupções são sinais especiais enviados pelo hardware ou software para a CPU. É como se alguma parte do computador levantasse a mão e chamasse a atenção da CPU em uma reunião animada. Algumas vezes, o sistema operacional vai priorizar alguns processos e ignorar as interrupções (mascarar as interrupções) para que uma tarefa seja cumprida o mais rápido possível. Entretanto, existem algumas interrupções (condições de erro ou problemas com a memória) que são tão importantes que não podem ser ignoradas. Essas interrupções não-mascaráveis (NMI - Non-maskable Interrupts) devem ser atendidas imediatamente.
As interrupções podem causar alguma complicação na execução dos processos em um sistema monotarefa. Porém, o trabalho do sistema operacional se torna muito mais complicado em um sistema multitarefa. Ele deve organizar a execução dos aplicativos para que você acredite que várias coisas estão acontecendo ao mesmo tempo. Isto é complicado porque a CPU só pode fazer uma coisa de cada vez. Para criar esta aparência de coisas acontecendo ao mesmo tempo, o sistema operacional precisa mudar de um processo para o outro milhares de vezes por segundo. Vamos ver o que acontece.
• Um processo ocupa uma certa quantidade de memória RAM. Ele também utiliza os registradores, pilhas e filas da CPU e memória do sistema operacional.
• Quando 2 processos acontecem ao mesmo tempo, o sistema operacional aloca uma certa quantidade de ciclos da CPU para um programa.
• Depois que os ciclos são executados, o sistema operacional faz uma cópia de todos os registradores, pilhas e filas utilizados pelos processos e registra o ponto em que a execução foi interrompida.
• Ele então carrega todos os registradores, pilhas e filas utilizados pelo segundo processo e aloca outra quantidade de ciclos de CPU para ele.
• Quando os ciclos terminam, o sistema operacional copia todos os registradores, pilhas e filas utilizadas pelo segundo programa e carrega o primeiro programa.

Todas as informações necessárias para controlar a mudança dos processos são armazenadas num pacote de dados chamado de bloco de controle de processo, que contém:
• Um número ID que identifica o processo;
• Ponteiros para as localizações do programa e seus dados quando o último processamento ocorreu;
• Conteúdo dos registradores;
• Estado de vários flags e switches;
• Ponteiros para os limites superior e inferior da memória requisitada para o processo;
• Uma lista de arquivos abertos pelo processo;
• A prioridade do processo;
• O status de todos os dispositivos de entrada/saída requisitados pelo processo.

Cada processo tem um status associado a ele. Muitos processos não consomem tempo da CPU até que recebam algum tipo de comando. O processo pode estar, por exemplo, esperando que o usuário aperte alguma tecla, enquanto ele espera, a CPU não é utilizada. Neste momento, o processo está "suspenso". Quando o usuário aperta a tecla, o sistema operacional muda o status do processo. Quando o status do processo muda de "pendente" para "ativo" ou de "suspenso" para "em execução", as informações no bloco de controle de processo devem ser usadas, assim como os dados de programa, para direcionar a execução da alternância de tarefas do sistema operacional.
Essa troca de processo acontece sem a interferência direta do usuário e cada processo consegue ciclos de CPU suficientes para realizar suas tarefas em um período razoável de tempo. O problema acontece quando o usuário tenta executar muitos processos ao mesmo tempo. O próprio sistema operacional precisa de alguns ciclos de CPU para salvar todos os registradores, filas e pilhas dos processos e realizar a alternância entre eles. Se uma determinada quantidade de processos é iniciada, e se o sistema operacional não foi cuidadosamente planejado, o sistema pode começar a usar a maioria dos ciclos de CPU disponível para alternar os processos em vez de executá-los. Isso se chama thrashing e geralmente requer algum tipo de intervenção direta do usuário para interromper os processos e reorganizar o sistema.
Uma forma de reduzir o thrashing é diminuir a necessidade de criação de novos processos para realizar as tarefas. Alguns sistemas operacionais utilizam um processo mais "leve" chamado thread. Uma thread pode controlar o trabalho mas, geralmente, não lida com os vários tipos de entrada/saída e não estabelece estruturas que exijam o longo bloco de controle de processo de um processo regular. Um processo pode iniciar muitas threads ou outros processos, mas uma thread não pode iniciar um processo.
Até agora, tudo o que discutimos diz respeito a uma única CPU. Em um sistema com duas ou mais CPUs, o trabalho é dividido. O sistema operacional deve equacionar a demanda de cada processo para as diferentes CPUs. Os sistemas operacionais assimétricos utilizam uma CPU para suas próprias necessidades e dividem os processos dos aplicativos entre as outras CPUs. Os sistemas operacionais simétricos compartilham as várias CPUs e equacionam a demanda e a disponibilidade da CPU, mesmo quando o sistema operacional é o único aplicativo em execução.
A CPU não é o único recurso requisitado mesm¬o quando somente o sistema operacional está sendo executado. O gerenciamento da memória é um passo crucial para que todos os processos sejam executados de maneira tranqüila.

5. Como o sistema operacional gerencia o armazenamento e a memória
Quando o sistema operacional gerencia a memória do computador, duas grandes tarefas precisam ser cumpridas.
1. Cada processo deve ter memória suficiente para ser executado. Ele não pode utilizar a memória de outro processo e outro processo também não pode utilizar a sua memória.
2. Os diferentes tipos de memória no sistema devem ser bem utilizados para que cada processo seja executado de forma eficaz.
Para realizar a primeira tarefa, o sistema operacional tem de definir os limites de memória para cada tipo de software e aplicativo.
• O armazenamento em disco é apenas um dos tipos de memória que podem ser gerenciados pelo sistema operacional. Também é a memória mais lenta.
¬O sistema operacional deve equacionar as necessidades dos diversos processos com a disponibilidade dos diferentes tipos de memória. Ele pode mover dados em blocos (chamados de páginas) para a memória disponível de acordo com a necessidade dos processos.

6. Como o sistema operacional gerencia os dispositivos
O caminho entre o sistema operacional e todo hardware que não está na placa-mãe passa por um programa especial chamado driver. A função principal do driver é funcionar como tradutor entre os sinais elétricos dos subsistemas de hardware e a linguagem de programação de alto nível do sistema operacional e dos aplicativos. Os drivers pegam os dados que o sistema operacional definiu como um arquivo e transforma-os em seqüências de bits. Estes bits são armazenados em locais específicos dos dispositivos de armazenamento ou se transformam em pulsos de laser em uma impressora.
O funcionamento dos drivers depende do tipo de hardware, mas a maioria dos drivers é executada quando o dispositivo é acionado, eles funcionam de maneira semelhante a qualquer outro processo. O sistema operacional dá prioridade aos drivers para que o recurso do hardware seja liberado e disponibilizado o mais rápido possível.
Uma razão para que os drivers sejam separados do sistema operacional é para que novas funções sejam adicionadas ao driver (e aos subsistemas de hardware) sem que o sistema operacional seja modificado, recompilado e redistribuído. O desenvolvimento de novos drivers, geralmente realizado ou pago pelo fabricante do subsistema (em vez do desenvolvedor do sistema operacional) melhora as capacidades de entrada/saída de todo o sistema.
O gerenciamento de entrada/saída está relacionado com o gerenciamento das filas e buffers. Funções de armazenamento especial pegam esses bits de um dispositivo, talvez um teclado ou uma porta USB, e os distribuem para a CPU em uma taxa lenta o suficiente para que sejam absorvidos. Esta função é especialmente importante quando muitos processos estão sendo executados e o processador está sobrecarregado. O sistema operacional diz para o buffer que continue coletando informações de entrada do dispositivo. Mas os dados não serão enviados para a CPU enquanto o processo que estiver usando a entrada não for suspenso. Então, quando o processo de obtenção de dados de entrada estiver ativo de novo, o sistema operacional vai dizer para o buffer que ele pode enviar dados. Este processo permite que um teclado ou um modem interajam com usuários externos ou computadores em alta velocidade, mesmo quando a CPU não pode executar informações de entrada destas fontes.
Gerenciar os recursos do sistema do computador é uma boa parte da função de um sistema operacional, o objetivo é fornecer, de maneira simples e consistente, poder de processamento para aplicativos e usuários.
7. Interface do sistema operacional com o mundo
Interface de aplicativos
Da mesma forma que os drivers fornecem uma maneira dos aplicativos utilizarem os subsistemas de hardware sem que eles conheçam cada detalhe de operação destes subsistemas, as APIs, interfaces de programação de aplicativos, permitem que os programadores utilizem funções do computador e do sistema operacional sem conhecer todos os detalhes de operação da CPU. Vamos examinar o exemplo da criação de um arquivo de disco rígido que armazena dados.
Um programador está criando um aplicativo para gravar dados de um instrumento científico. Ele quer que o cientista possa nomear o arquivo criado. O sistema operacional pode fornecer uma função API chamada MakeFile para criar arquivos. Ao escrever o programa, o programador pode inserir uma linha deste tipo:
MakeFile [1, %Name, 2]
Neste exemplo, a instrução diz para o sistema operacional que ele deve criar um arquivo que permite acesso aleatório as seus dados. (O número 1 depois do comando "MakeFile" estabelece esta opção. Se a opção fosse 0, o sistema operacional criaria um arquivo serial). Este arquivo terá o nome criado pelo usuário (%Name) e terá um tamanho variável de acordo com a quantidade de dados armazenados no arquivo. (O número 2 define esta opção. 0 atribuiria um tamanho fixo para o arquivo e 1 seria um arquivo que cresce quando os dados são armazenados mas não diminui quando os dados são removidos). Vamos ver o que o sistema operacional faz para transformar a instrução em ação.
O sistema operacional envia uma consulta para o disco para saber onde há espaço disponível.
Com esta informação, o sistema operacional cria uma entrada no sistema de arquivos. Esta entrada mostra a localização inicial e final do arquivo, o nome e o tipo do arquivo, que tipo de usuário tem permissão para modificar ou enxergar o arquivo e a data e a hora da criação.
O sistema operacional grava todas estas informações no começo do arquivo, identificando o arquivo, o tipo de acesso possível, e inclui outras informações que unem o arquivo ao aplicativo. Em toda essa informação, as requisições ao drive de disco e os endereços do ponto de início e término do arquivo estão em formato totalmente dependentes do fabricante e modelo do disco rígido.
Como o programador utilizou uma API para o armazenamento no disco, ele não precisa conhecer todas as instruções de cada tipo de disco rígido. O sistema operacional, através do drivers, lida com os detalhes de cada tipo de hardware. O programador deve, simplesmente, escrever um código para API e deixar o resto do trabalho para o sistema operacional.
A API é um tema de discussões na indústria dos computadores. As empresas perceberam que os programadores, utilizando as APIs podem controlar e lucrar em cima de uma parte da indústria. Esta é uma das razões pela qual tantas empresas fornecem, gratuitamente, aplicativos como visualizadores e leitores. Eles sabem que os consumidores vão solicitar programas que possam ser lidos por visualizadores gratuitos. As empresas desenvolvedoras de aplicativos estarão prontas para pagar os royalties e permitir que seus softwares tenham as funções solicitadas pelos consumidores.

8. Interface com o usuário
Da mesma forma que as APIs provêem um meio consistente para que os aplicativos utilizem os recursos do computador, a interface com o usuário estrutura a interação entre o usuário e o computador. Na última década, quase todo o desenvolvimento de interfaces de usuário foi feito na área da interface gráfica (GUI - graphical user interface). Duas empresas receberam mais atenção e conquistaram maior fatia de mercado: Apple Macintosh e Microsoft Windows. O popular sistema operacional com código-fonte aberto, o Linux, também utiliza uma interface gráfica.
Existem outras interfaces de usuário para sistemas operacionais. Algumas são gráficas, outras não.
O Unix, por exemplo, tem uma interface chamada Shell que é mais flexível e poderosa do que a interface baseada em texto dos sistemas operacionais padrão. Programas como o Korn Shell e o C Shell são interfaces de texto que adicionam utilitários importantes. Porém, o seu principal objetivo é facilitar o acesso do usuário às funções do sistema operacional. Existem interfaces gráficas como o X-Windows e o Gnome que tornam o Unix e Linux parecidos com computadores Windows e Macintosh, do ponto de vista do usuário.
É importante lembrar que, em todos estes exemplos, a interface com o usuário é um programa ou um conjunto de programas que funcionam como uma camada acima do sistema operacional. Podemos dizer o mesmo (apesar dos diferentes mecanismos) dos sistemas operacionais Windows e Macintosh. A função principal do sistema (o gerenciamento dos recursos do computador) está no kernel (núcleo) do sistema operacional. O gerenciador de exibição é uma parte separada, porém intimamente ligada ao kernel que funciona por trás dele. A ligação entre o kernel do sistema operacional e a interface do usuário, utilitários e outros softwares definem as diferenças entre os sistemas operacionais.



9. Código-fonte aberto
Uma questão sobre o futuro dos sistemas operacionais envolve uma filosofia específica de distribuição de software. O objetivo é criar um sistema operacional que seja utilizado por empresas e consumidores.
O Linux, um sistema operacional criado e distribuído de acordo com os princípios de código-fonte aberto teve um impacto significativo no mercado de sistemas operacionais. A maioria dos sistemas, drivers e utilitários são escritos por organizações comerciais que distribuem versões executáveis dos seus softwares. Estas versões não podem ser estudadas nem alteradas pelos usuários. O software livre tem o código-fonte aberto. Assim, o material original pode ser estudado, alterado e complementado. Além disso, os resultados são distribuídos gratuitamente. Isso gerou o desenvolvimento e a distribuição de inúmeros aplicativos gratuitos como o programa de manipulação de imagens GIMP (em inglês), o popular servidor da Web Apache (em inglês) e o navegador de internet Firefox. A vantagem para os usuários é que eles podem personalizar os seus sistemas e ter mais controle sobre o comportamento de seus dispositivos.
10. SOs Monotarefa e Multitarefa

Monousuário, monotarefa. O sistema operacional foi criado para que um único usuário possa fazer uma coisa por vez. O Palm OS dos computadores Palm é um bom exemplo de um moderno sistema operacional monousuário e monotarefa.
Os sistemas monotarefa permitem que apenas um aplicativo possa ser utilizado por vez. Assim, se o usuário estiver usando um editor de textos, não poderá abrir um gerenciador de banco de dados sem antes encerrar a sessão do editor. O sistema operacional MS-DOS (Microsoft Disk Operating System, Um dos mais famosos sistemas operacionais monotarefa lançado em 1981 e desenvolvido para rodar no recém-lançado processador 8086 da Intel.), que substituiu o sistema CP/M pioneiro dos PC’s.


Monousuário, multitarefa. Este tipo de sistema operacional é o mais utilizado em computadores de mesa e laptops. As plataformas Microsoft Windows e Apple MacOS são exemplos de sistemas operacionais que permitem que um único usuário utilize diversos programas ao mesmo tempo. Por exemplo, é perfeitamente possível para um usuário de Windows escrever uma nota em um processador de texto ao mesmo tempo em que faz download de um arquivo da Internet e imprime um e-mail.

Tipos de sistemas multitarefa

Existem basicamente dois tipos de sistema multitarefa:

1. A multitarefa cooperativa trabalha repartindo o processamento entre as diversas tarefas, dando a impressão ao usuário que elas estão sendo executadas simultaneamente. Sua principal característica (ou deficiência) reside no fato de que não há controle sobre o tempo de CPU que cada processo consome. O sistema cede o controle da CPU ao processo, e este só o devolve quando tiver terminado a sua tarefa.

2. A multitarefa preemptiva realiza o gerenciamento do tempo de utilização da CPU de forma inteligente, reservando e protegendo o espaço de memória dos aplicativos e evitando que programas com erros possam invadir as áreas delimitadas pelo sistema operacional. Os núcleos destes sistemas mantêm em memória um registo de todos os processos em execução através de uma árvore de processos. Entre outros atributos acerca de cada processo, a árvore de processos inclui as informações de prioridade, com a qual o núcleo calcula o tempo de CPU que deve dar a cada processo; quando esse tempo acaba, o núcleo tira do processo o controle da CPU e o passa ao processo que vem a seguir na fila. Quando a fila acaba, o núcleo volta a dar o controle da CPU ao primeiro processo, fechando assim o ciclo.
11. Sistema Monotarefa vs. Multitarefa

_ Sistema monotarefa - Capazes de executar apenas uma tarefa de cada vez.

Ex. MS-DOS.

_ Sistema multitarefa – Projetados ara suportar várias sessões de usuários em um computador. Existem dois tipos de sistemas multitarefas:

1. Não preemptivos (cooperativo) - Ex. Windows 3.x, Windows9x (aplicativos 16 bits)

2. Preemptivos - Ex. Windows NT, OS/2, UNIX, Windows9x (aplicativos 32 bits)

12. Conclusão

Vimos que o Sistema Operacional é quem da vida ao computador, vimos também que SO não é apenas o Programa do computador como costumamos falar até então. Buscamos ao máximo todas as informações necessárias para podermos falar um pouco sobre ele (Sistema Operacional), é claro, que não conseguimos aqui apresentar tudo, mas, podemos afirmar que o pouco que aprendemos foi o suficiente para daqui pra frente nos interarmos ainda mais sobre esse assunto, pois, certamente nos ajudará muito na hora em que resolvermos comprar um computador.


Por Fabrísio Trovão