segunda-feira, 27 de junho de 2011

Condições de Disputa

     Em alguns SO, processo compartilham  a mesma área de processamento na memória principal ou o mesmo arquivos.

Ex.: Spool de impressão

       Existem dois processos. Um gera um nome de arquivo para ser impresso em um Diretório de Spool, um outro processo, Daemons de impressão, verifica constantemente este diretório para checar arquivos a serem impressos. Encontrando arquivos ele os remove e imprime.

       Também no meio deste processo existem duas variáveis que determina as próximas unidade o diretório de Sspool vazias e quais as próximas unidades a serem impressas.

 Ex.:
 
        Supondo que em algum momento a variável entra, esta  =7, e um processo A solicita a impressão de um arquivo.a, neste instante o escalonador de processo inte3rrompe o processo A e inicial um processo B que solicita  a impressão de um arquivo.b, este ele a variável entra = 7 e incrementa de 1, entra fica igual a 8, neste instante o escalonador volta a a da execução ao processo A. Para este processo o valor de entra é iguak a 7, e ele coloca seu arquivo.a no diretório de Spool 7. No mesmo lugar onde se havia alterado ante pelo processo B. Colocando em seu lugar o arquivo.a e não o arquivo.b. como conseqüência de tudo isso, o arquivo do processo B desaparece e não imprime. Condição de disputa.


 

Threads

           Threads 
      Em SO tradicionais, todo processo possui uma única thread(fluxo) de controle e um espaço de endereçamento. Mas há situações em que e necessários utilizar varias threads em um único espaço de endereçamento
 
          Modelo de Threads
          O modelo de processos é baseado em dois conceitos independentes: 
  1.          Um é o agrupamento de recursos(arquivos abertos, processos filhos, alarmes pendentes, tratadores de sinais e outros.
  2.          O outro é de execução(controle das instruções,registradores, estados atuais do processo.
          Apesar dos conceitos serem muito parecidos, Processo e threads. Ambos são diferentes
         O processo é o agrupamento de recursos e Threads são entidades escalonadas para execução sobre a CPU. Devido a esta situação de varias threads em um único processo surgiu a definição do termo multithreads ou muitas vezes chamados de processos leves.
         O Uso das Threads 
      Agora que já sabemos o que vem ser Threads, o seu uso é bastante visível em aplicações em que ocorrem múltiplas atividades ao mesmo tempo. 
     O sistema de multiprogramacao se torna simples se dividimos o processo em varias threads sendo executadas quase que em paralelo. 
     Threads também são mais fáceis de ser cria e destruídas do que processos, visto que não estão associados a recursos.
         
      Quando se utiliza somente a CPU, o desempenho do processo cai, mas quando se utiliza múltiplos acesso de E/S o desempenho aumenta. 
     Comunicação Interprocesso 
Frequentemente, processos precisam se comunicar. Assim há três situações: 
  1. A saída de um processo serve de entrada para outro processo 
  2. Criar estruturas para garantir que um processo não invada  espaço de outros em atividades criticas
  3. Dependência de processo, um processo A precisa saber que seus dados serão entradas de outros processo B, por exemplo o processo 
  4. A produz dados para ser impresso pelo processo B, o processo B só ira imprimir a a partir do momento que o processo A gerar dados para ser impressos.

 

Criaçào de Processos


         O SO precisa de algum modo assegurar a existência de todos os seus processos. Em sistema simples,  quando é executado somente uma ação, por exemplo sistemas de microondas, os processos estão sempre existente quando o microondas e ligado. Já nos sistemas gerais, os processo devem ser criados e terminados quando for necessário. 
 
Há 4 eventos que fazem com que os processos sejam criados:
1. 
  1. Inicio do sistema
  2. 2.Execução de chamadas de sistemas de criação de processo por outro processo em execução
  3. 3.Uma requisição de usuário
  4. 4.Inicio de Job  em lote. 
              Daemons
 
      Quando o SO é iniciado existem processo em primeiro plano, que interagem diretamente com o usuário e outros em segundo plano que executa funções especificas para o usuário ou sistema operacional. A este processos que ficam em segundo planos chamamos de Daemons. 
 
           Termino de Processos
 
         Depois de criado, um processo executa e faz o trabalho, como nada e para sempre, mas cedo ou mais tarde ele terminara. Assim temos 4 condições para que o processo termine.
 
  1. Saída Normal
  2. Saída por Erro
  3. Erro fatal
  4. Cancelamento por  outro processo 
 Na maioria das vezes, os processos terminal porque já executaram o seu trabalho.
 Condições para terminar Processos

O segundo motivo é quando o processo encontra um erro no programa ou ação do usuário. Então sai normalmente. 
 
Exemplo: Usuário querendo compilar um arquivo que não existe.
 
A terceira razão para o termino de um processo e a execução de um erro fatal no programa. Uma instrução ilegal ou cálculos de divisão por zero
 
A ultima razão é quando um outro processo e acional pelo sistema operacional para cancelar um processo anterior. 
      
  Ex.: Kill e gerenciador de tarefas. 
 
Estados de um Processo
 
Muitas vezes um processo, por mais que seja um entidade independente, precisa interagir com outros processos. Por exemplo um processo gerando entradas para outro processo.
 
Ex.: O interpretador de comando  executando a linha abaixo:
               
         cat arq1 car2 car 3 | grep tree 
 
Assim, um processo pode assumir três estados:
 
  1. Em Execução
  2. Pronto
  3. Bloqueado
 

Implementação de Processo 
 
Para implementar um processo, o SO mantém uma estrutura chamada tabela de processos, com a entrada de cada processo. Estas entradas contem informações sobre:
1. 
  1. Estado do Processo
  2. 2.Contador de Programa
  3. 3.Ponteiro da pilha
  4. 4.Alocação de memória
  5. 5.Estado de seus arquivos abertos
  6. 6.Escalonamento
  7. 7.Tudo sobre o processo

         Implementação de Processo
 
        Cada dispositivo e a CPU estão associadas  a uma alocação na memória RAM,  chamado de vetor de interrupções, que contem o endereço de cada interrupção. 
 
       Então quando um processo é criado, um contador de programa aponta para um endereço e seta o estado do processo.
 
          Implementação de Processo
 
         Se um processo esta em execução  e ocorre uma interrupção de disco, o Contado de Programa grava o estado do processo e os registradores Ativos. O hardware de interrupção os coloca em uma pilha.
 
        Depois a CPU desvia a sua atenção para o endereço do dispositivo que foi  acionado. Neste momento, o controle passa ao sistema o sistema operacional assume.
 
Gerencia de Processo
Gerência de Memória
Gerencia de Arquivos
Registradores
Contador de Programas
Palavra de estado do programa
Ponteiro da Pilha
Prioridade
Parâmetros de escalonamento
Identificador de processo
Processo Pai
Grupo de Processo
Processo pai
Grupo ne
Ponteiro para o segmento de código
Ponteiro para segmento de dados Ponteiro para segmento de pilha
Diretório raiz
Diretório de Trabalho
Descrito de arquivos
Identificador do usuário
Identificador do grupo


 

 

Processos

Modelo de Processo 


         Todos os computadores modernos são capazes de realizar varias coisas ao mesmo tempo. Enquanto executa um programa, pode ler dados do disco, mostrar texto na tela e enviar dados para a impressora.



            Em sistemas multiprogramados, a CPU fica saltando de um programa para o outro, a todo o momento, dando a impressão que vários programas estão sendo executados ao mesmo tempo, ou seja, um paralelismo de processamento. 

      Ao longo dos anos, os projetista de SO vem desenvolvendo um conceito de seqüenciamento de processos. Onde vários processos são executados seqüencialmente. 


              Um processo pode ser um programa em execução, acompanhado sempre de valores atuais do  contador de programa, de valores dos registradores e das suas variáveis. Paca cada processo, pode-se dizer que possui uma CPU virtual.  É claro, que na realidade isto não acontece.  O que acontece e a alternância rápida da CPU que neste caso e chamado de Multiprogramação. 


           Deste modo não existe um tempo predefinido que um processo ira ser executado pela CPU, devido a alternância.  

          Muitas pessoas confundem os conceitos de processos e programas. Tendo em vista que o programa é como uma receita de bolo, um algoritmo.  E o processo e a atividade realizada pelo programa. 

 
 

quarta-feira, 22 de junho de 2011

Tipos de Sistemas Operacionais

Sistemas Monoprogramáveis / Monotarefa


         Os primeiros sistemas operacionais eram tipicamente voltados para a execução de um único programa. Qualquer outra aplicação, para ser executada, deveria aguardar o término do programa corrente. 
 
       Os sistemas monoprogramáveis, como vieram a ser conhecidos, se caracterizam por permitir que o processador, a memória e os periféricos permaneçam exclusivamente dedicados à execução de um único programa.

     Neste tipo de sistema, enquanto um programa aguarda por um evento, como a digitação de um dado, o processador permanece ocioso, sem realizar qualquer tipo de processamento.
 
       A memória é subutilizada, caso o programa não a preencha totalmente e os periféricos, como discos e impressoras, estão dedicados a um único usuário, nem sempre utilizados de forma integral.
 
       Sistemas Multiprogramáveis / Multitarefa

    Os sistemas multiprogramáveis ou multitarefa são uma evolução dos sistemas monoprogramáveis.

       Neste tipo de sistema, por exemplo, enquanto um programa espera por uma operação de leitura ou gravação em disco, outros programas podem estar sendo processados neste mesmo intervalo de tempo. Nesse caso, podemos observar o compartilhamento da memória e do processador. O sistema operacional se preocupa em gerenciar o acesso concorrente aos seus diversos recursos, como memória, processador e periféricos, de forma ordenad e protegida, entre os diversos programas. 
 
 
               Sistemas Batch

      Os sistemas batch foram os primeiros tipos de sistemas operacionais multiprogramáveis a serem implementados na década de 1960. Os programas, também chamados de jobs, eram submetidos para execução através de cartões perfurados e armazenados em disco ou fita, onde aguardavam para ser processados. Posteriormente, em função da disponibilidade de espaço na memória principal, os jobs eram executados, produzindo uma saída em disco ou fita
 
         Sistemas Multiusuário. 
 
     Um sistema operacional multiusuário permite que diversos usuários utilizem simultaneamente os recursos do computador. O sistema operacional deve se certificar de que as solicitações de vários usuários estejam balanceadas. Cada um dos programas utilizados deve dispor de recursos suficientes e separados, de forma que o problema de um usuário não afete toda a comunidade de usuários. Unix, VMS e sistemas operacionais mainframe como o MVS são exemplos de sistemas operacionais multiusuário.
 
 
        Sistemas de Tempo Real

       Os sistemas de tempo real (real-time) são implementados de forma semelhante aos sistemas de tempo compartilhado. O que caracteriza a diferença entre os dois tipos de sistemas é o tempo exigido no processamento das aplicações. Enquanto em sistemas de tempo compartilhado o tempo de processamento pode variar sem comprometer as aplicações em execução, nos sistemas de tempo real os tempos de processamento devem estar dentro de limites rígidos, que devem ser obedecidos, caso contrário, poderão ocorrer problemas irreparáveis.
 
      Nos sistemas de tempo real não existe a idéia de fatia de tempo, implementada nos sistemas de tempo compartilhado. Um programa utiliza o processador o tempo que for necessário ou até que apareça outro mais prioritário. A importância ou prioridade de execução de um programa é definida pela própria aplicação e não pelo sistema operacional.

      Esses sistemas, normalmente, estão presentes em aplicações de controle de processos, como no monitoramento de refinarias de petróleo, controle de tráfego aéreo, de usinas termoelétricas e nucleares, ou em qualquer aplicação onde o tempo de processamento é fator fundamental. 
 
        Sistemas com Múltiplos Processadores

       Os sistemas com múltiplos processadores caracterizam-se por possuir duas ou mais UCPs interligadas e trabalhando em conjunto. A vantagem deste tipo de sistema é permitir que vários programas sejam executados ao mesmo tempo ou que um mesmo programa seja subdividido em partes, para serem executadas simultaneamente em mais de um processador.
 
     Com múltiplos processadores, foi possível a criação de sistemas computacionais voltados, principalmente, para processamento científico, aplicado, por exemplo, no desenvolvimento aeroespacial, prospecção de petróleo, simulações, processamento de imagens e CAD. A princípio, qualquer aplicação que faça uso intensivo da UCP será beneficiada pelo acréscimo de processadores ao sistema. A evolução desses sistemas deve-se, em grande parte, ao elevado custo de desenvolvimento de processadores de alto desempenho. 
 
 


 
 

API Win32 do Windows


          O Windows e Unix se diferem de maneira  fundamental pelo método de programação utilizado. O Unix  consiste em códigos que realizam uma coisa ou outra, realizando chamados os sistemas para realizar certos serviços. Já no Windows , um programa e dirigida  a evento.  O programa principal espera acontecer um evento e então chama procedimentos típicos para tratá-lo. Um evento típico é o click do mouse ou um disco sendo inserido. Existem tratadores de eventos que são acionados para trata o evento, atualizar a tela e o estado interno do programa. 
 
           Os sistemas operativos Windows (Windows 9x/Me/NT/2000) partilham uma API de Programação comum, geralmente designada por Win32. Essa API de programação é Constituída por um elevado número de serviços ou funções, definidos utilizando a linguagem de programação C.
 
           Quando se solicita ao S.O. a execução de um novo programa (serviço CreateProcess() em Win32), este começa por executar uma rotina (no caso de programas em C) designada por C startup. Esta rotina é a responsável por chamar a função main() do programa, passando-lhe alguns parâmetros, se for caso disso, e por abrir e disponibilizar três “ficheiros” ao programa: 
 
         Os chamados standard input, standard output e standard error. O standard input fica normalmente associado ao teclado (excepto no caso de redireccionamento), enquanto que o standard output e o standard error ficam  normalmente associados ao écran/consola (também podem ser redireccionados. 
 
        API é a “matrix” dos aplicativos, ou seja, uma interface que roda por trás de tudo: enquanto você usufrui de um aplicativo ou site, a sua API pode estar conectada a diversos outros sistemas e aplicativos. E tudo isso acontece sem que você perceba. 
 
        Windows, por exemplo, possui APIs como a Win16 API, Win32 API ou Telephony API, em todas as suas versões. Ao executar um programa que envolva algum processo do sistema operacional, é provável que ele faça uma conexão com alguma API do Windows.