Gerência de Dispositivos do Sistema Operacional
A função do SO nas operações de entrada e saída (E/S ou I/O) envolve prover uma interface para utilização dos dispositivos, de modo que a sintaxe das operações seja independente dos dispositivos, emitir comandos, atender as interrupções geradas e tratar os erros nas operações desses dispositivos.
As principais funções do gerenciamento de E/S são:
• Realizar funções que são comuns a todos os dispositivos;
• Criar uma unidade lógica de informações independente de dispositivos e repassá-la para os níveis superiores;
• Implementar todo o mecanismo de proteção de acesso aos dispositivos;
• Mapear o nome do dispositivo com seu respectivo driver, para que as camadas superiores acessem o dispositivo através deste nome;
• Controlar os dispositivos de Entrada/Saída de forma segura e confiável obtendo um maior compartilhamento;
• Realizar a bufferização, permitindo reduzir o número de operações de Entrada/ Saída, utilizando-se de uma área de memória intermediária chamada buffer.
Neste modelo, os aspectos e funções específicas de cada dispositivo ficam a cargo dos devicedrivers e normalmente, os erros são tratados nas camadas mais próximas ao hardware, sendo que alguns podem ser tratados independente de dispositivos.
O princípio básico de funcionamento dos dispositivos de E/S é a implementação de interrupções. Um pedido de interrupção (IRQ – InterruptRequest) é a forma pela qual os componentes de hardware requisitam a CPU para executarem o código do driver relacionado. Um IRQ é a sinalização de um pedido de interrupção de hardware.
Durante a execução de um programa ou processo, algumas operações podem estar sendo executadas nos dispositivos de E/S e elas não podem esperar, como por exemplo, os caracteres digitados no teclado e os movimentos do mouse, que precisam ser interpretados rapidamente pelo sistema, mesmo quando o computador está executando tarefas pesadas. Outro exemplo, de operações que precisam de atenção semelhante, são as transferências de dados recebidos através da placa de rede, operações de leitura e escrita nos HDs, dentre outras.
A placa de rede, por exemplo, não pode ficar simplesmente esperando que chegue a sua vez de ser atendida, pois isso retardaria a transmissão dos pacotes e poderia ocasionar a perda de dados vindos pela rede.
É neste momento que entram as requisições de interrupção por meio dos endereços de IRQ. Ao ser avisado por meio de qualquer um desses canais, o processador imediatamente para de executar o processo corrente, salva o contexto para continuar depois e dá atenção ao dispositivo, executando o código do driver associado a cada interrupção. O código do tratamento da interrupção vai atender o dispositivo vinculado a ele, realizando a tarefa necessária. Ao concluir o tratamento da interrupção, o processador volta ao trabalho que foi interrompido, continuando do ponto em que estava, como se nada tivesse acontecido.
Cada endereço é uma espécie de sinal, que pode ser acionado a qualquer momento. Se não fossem as interrupções, o processador não seria capaz de ler as teclas digitadas no teclado ou os cliques do mouse e a transmissão de dados através da rede pararia toda vez que você abrisse qualquer programa.
Quando um programa de usuário emite uma chamada ao sistema relacionada aos dispositivos de E/S, esta é encaminhada ao driver apropriado. Para evitar que a CPU fique ocupada interrogando se o dispositivo terminou a operação de E/S (espera ociosa), o driver pede ao dispositivo que lhe sinalize quando isso ocorrer. Dessa forma, o SO poderá executar outras tarefas enquanto o programa que o chamou pedindo o serviço se encontra bloqueado. Ao final da operação, o controlador do dispositivo gera uma interrupção ao chip controlador de interrupção, para sinalizar à CPU que a tarefa foi finalizada.
Caso nenhuma outra interrupção esteja pendente ou em tratamento e nenhum outro dispositivo fez uma requisição, de maior prioridade no mesmo momento, a interrupção é tratada imediatamente. Caso contrário, ela é ignorada, e o dispositivo continuará emitindo sinal de interrupção. Após executar uma instrução, a CPU verifica as linhas de interrupções para saber se alguma interrupção foi sinalizada. Caso tenha sido sinalizada uma interrupção, o hardware grava os registradores da CPU, na pilha do programa que estava em execução, e carrega o contador de programa com o endereço da rotina referente à interrupção sinalizada.
Os dispositivos de E/S apresentam uma grande variedade, com diferentes velocidades e taxas de transferência de dados e podem ser divididos em um modo genérico como dispositivos de bloco e caractere.
Um dispositivo de bloco armazena as informações em blocos de tamanho fixo, cada qual com seu endereço. Cada bloco pode ser lido ou escrito, de maneira independente uns dos outros. Os dispositivos de caractere não utilizam estrutura de blocos nem posicionamento. Os discos e unidades de armazenamento são exemplos de dispositivos de bloco.
No dispositivo de caractere ele simplesmente recebe e manipula um fluxo de caracteres. O teclado, mouse e impressora são exemplos de dispositivos deste tipo.
Além desses dois modelos, os relógios (timers) não são dispositivos de blocos nem de caracteres. Os relógios só causam interrupções pré-programadas com um determinado tempo.
Comentários
Postar um comentário