quinta-feira, 3 de novembro de 2011

Multiprogramação

Tenta fazer com que a CPU esteja ocupada a maior parte do tempo e os periféricos sejam compartilhados entre os usuários. 

Concorrência

Os sistemas monoprogramáveis subutilizam os recursos do equipamento (processador, memória e periféricos).
Exemplo:

Ao realizar I/O o programa perde o uso do processador, para retornar, após a operação ter sido terminada, para o estado em que se encontrava anteriormente. 

Interrupção

Intervenção do sistema operacional devido à ocorrência de algum evento previsto.

Desvia o fluxo de execução para uma rotina de tratamento da interrupção.

Podem ser geradas a partir:
     - da execução de um programa;
     - do próprio sistema operacional;
     - de algum dispositivo de hardware.

Pode ser:
     - interna (trap ou exceção): deve ser tratada para a execução prosseguir (overflow, divisão por zero). É síncrona, pois a execução com as mesmas entradas de dados implicará no mesmo resultado;
     - externa: gerada pelo S.O. ou pelo hardware (comunicação de periférico à CPU - deve ser atendida). É assíncrona, pois é imprevisível e independente do que estava sendo executado.

Para tratar a interrupção o contexto deve ser salvo.

Cada interrupção possui uma rotina de tratamento, e a associação entre elas é mantida em uma estrutura denominada vetor de interrupção.

As rotinas podem ser escritas pelo programador e evitar o procedimento padrão do Sistema Operacional (overflow).

Se a interrupção externa pode ser desabilitada pelo processador, ela é denominada mascarável e será ignorada, não recebendo tratamento. Caso contrário, ela é chamada não-mascarável e o tratamento será obrigatório.

As interrupções permitiram a implementação da concorrência e por elas o Sistema Operacional sincroniza a execução dos programas dos usuários e controla os periféricos e recursos do sistema.

Operações de E/S

Primeiramente, a UCP executava instruções especiais de E/S, as quais continham informações detalhadas sobre os diversos periféricos (trilhas e setores que poderiam ser lidos ou gravados). Grupo limitado de dispositivos.

O controlador (ou interface) criou a independência entre a UCP e o dispositivos, pois faz a intermediação entre os dois. As características dos dispositivos ficaram a cargo do controlador e as instruções de E/S foram, portanto, simplificadas.

O monitoramento do dispositivo e a transferência de dados entre a UCP e os periféricos evolui conforme as técnicas abaixo:
     - E/S controlada por programa: a UCP inicia a transferência e fica testando o periférico, esperando pelo final da instrução de E/S. Há desperdício de tempo de UCP;
     - polling: o periférico era testado em intervalos de tempo, o que liberava a UCP para a execução de outro(s) programa(s). No caso de existirem muitos periféricos, o sistema interrompe frequentemente o processamento para testar o término exato da operação;

     - E/S controlada por interrupção: a UCP envia um sinal para o controlador que se encarrega de ler o disco e armazenar na memória ou em registradores próprios. Ao término, o controlador sinaliza uma interrupção ao processador que, ao tratá-la, busca os dados. Várias operações de E/S podem ser executadas paralelamente, porém toda transferência de dados entre a memória e os periféricos exige utilização da UCP;

     - técnica de DMA (Direct Memory Access): o controlador recebe informações de onde o dado se encontra, qual o dispositivo de E/S envolvido, posição inicial de memória onde os dados serão lidos ou gravados e o tamanho do bloco de dados. A transferência é realizada pelo controlador (que assume
temporariamente o controle do barramento), utilizando uma área de memória reservada, denominada buffer;

     - canal de E/S: é um processador com capacidade de controle total sobre os dispositivos de E/S (vários controladores), o qual executa um programa de canal (na memória principal) que especifica os dispositivos e os buffers e controla possíveis erros da transferência, sinalizando a UCP ao final da operação;

     - processador de E/S: o canal passou a ter sua própria memória de modo que a intervenção da UCP se tornou mínima.

Buffering

É a utilização de uma parte da memória para transferir dados entre os periféricos e a UCP. Visa minimizar as diferenças de velocidade do processamento da UCP e dos dispositivos.

A unidade lógica é o registro, que é especificado em função do dispositivo (linha de impressora, caracter de teclado) ou da aplicação (registro lógico de um arquivo).

O dispositivo transfere um dado para o buffer e pode iniciar nova leitura. A UCP pode manipular o dado no buffer simultaneamente às leituras do dispositivos.

Na gravação o processo é semelhante, com a UCP colocando dados no buffer.

No buffer podem existir dados lidos mas não processados, ou processados e não gravados.

Spooling

Simultaneous peripheral operation on-line surgiu como opção para um melhor aproveitamento da UCP e dos dispositivos periféricos (final dos anos 50). É utilizado, principalmente, na impressão.

Ao invés de enviar os jobs diretamente para a impressora e ficar esperando o término da impressão para iniciar a execução de outro programa, a UCP envia o job para um arquivo intermediário (no início era uma fita). Este arquivo é, então, impresso, sendo que a ordem de impressão dos jobs é determinada por prioridades atribuídas à eles.

Reentrância

Consiste na capacidade de um código de programa (código reentrante) ser compartilhado, na memória, por diversos usuários, existindo, desse modo, apenas uma cópia carregada. Este código, por razões óbvias, não pode ser alterado.

Cada usuário pode estar em um ponto diverso do programa, manipulando seus próprios dados. Utilitários do sistema como editores, compiladores e link-editores são códigos reentrantes. Alguns sistemas permitem que aplicações dos usuários utilizem reentrância. 

Proteção do sistema

Em ambientes onde muitos usuários compartilham recursos e dados, o sistema operacional deve prover mecanismos que garantam:
     - integridade dos dados de cada usuário: um programa não pode acessar a área de memória do outro (acidentalmente ou não). O mecanismo de gerência de memória determina a forma de controle;
     - compartilhamento de dispositivos de E/S: um programa só pode utilizar um dispositivo de E/S no momento em que o primeiro programa o liberar;
     - compartilhamento de arquivos: o S.O. provê mecanismo de controle de acesso aos arquivos, de modo que as informações do usuário permaneçam consistentes;
     - compartilhamento de UCP: o uso da UCP deve ser compartilhado entre os diferentes programas de maneira rígida, pois é o principal componente do sistema.

Modos de execução

Cada vez que o usuário necessita utilizar um recurso, ele solicita ao Sistema Operacional através de rotinas do sistema (system calls). Essas rotinas, por acessarem os recursos, devem possuir mecanismos de proteção.

O mecanismo mais utilizado nos sistemas multiprogramáveis é chamado modo de execução. Consiste em uma característica que, associada ao programa em execução, determina se ele pode executar certas instruções ou rotinas. O modo corrente é armazenado em um registrador especial da UCP, o qual é verificado pelo hardware, e assim, executa ou não a instrução. 

Existem, basicamente, dois modos de execução:
     - modo usuário: o programa só executa instruções que não afetem diretamente os outros programas (instruções não-privilegiadas);
     - modo supervisor (monitor ou kernel): qualquer instrução pode ser executada, mesmo rotinas do sistema (instruções privilegiadas).

Em uma leitura, por exemplo, o programa solicita ao Sistema Operacional o acesso ao disco. O S.O. verifica se o arquivo pode ser acessado. Se sim, muda o modo de execução para supervisor, realiza a operação de leitura e retorna o modo de execução para usuário, continuando o processamento.

O sistema operacional sempre executa em modo supervisor, pois é responsável pelo compartilhamento dos recursos, e deve possuir esta capacidade.

0 comentários:

Postar um comentário