Sistema operacional - Softwares de E / S

O software de E / S é frequentemente organizado nas seguintes camadas -

  • User Level Libraries- Isso fornece uma interface simples para o programa do usuário realizar a entrada e saída. Por exemplo,stdio é uma biblioteca fornecida pelas linguagens de programação C e C ++.

  • Kernel Level Modules - Fornece driver de dispositivo para interagir com o controlador de dispositivo e módulos de E / S independentes de dispositivo usados ​​pelos drivers de dispositivo.

  • Hardware - Esta camada inclui o hardware real e o controlador de hardware que interagem com os drivers de dispositivo e dá vida ao hardware.

Um conceito chave no projeto de software de E / S é que ele deve ser independente de dispositivo, onde deve ser possível escrever programas que podem acessar qualquer dispositivo de E / S sem ter que especificar o dispositivo com antecedência. Por exemplo, um programa que lê um arquivo como entrada deve ser capaz de ler um arquivo em um disquete, em um disco rígido ou em um CD-ROM, sem ter que modificar o programa para cada dispositivo diferente.

Drivers de dispositivo

Drivers de dispositivo são módulos de software que podem ser conectados a um sistema operacional para lidar com um dispositivo específico. O sistema operacional recebe ajuda de drivers de dispositivo para lidar com todos os dispositivos de E / S. Os drivers de dispositivo encapsulam o código dependente do dispositivo e implementam uma interface padrão de forma que o código contenha leituras / gravações de registro específicas do dispositivo. O driver do dispositivo é geralmente escrito pelo fabricante do dispositivo e entregue junto com o dispositivo em um CD-ROM.

Um driver de dispositivo executa os seguintes trabalhos -

  • Para aceitar a solicitação do software independente do dispositivo acima.
  • Interaja com o controlador do dispositivo para obter e fornecer I / O e realizar o tratamento de erros necessário
  • Certificando-se de que a solicitação é executada com sucesso

O modo como um driver de dispositivo lida com uma solicitação é o seguinte: Suponha que uma solicitação chegue a ler um bloco N. Se o driver estiver ocioso no momento em que uma solicitação chega, ele começa a realizar a solicitação imediatamente. Caso contrário, se o driver já estiver ocupado com alguma outra solicitação, ele coloca a nova solicitação na fila de solicitações pendentes.

Manipuladores de interrupção

Um manipulador de interrupção, também conhecido como rotina de serviço de interrupção ou ISR, é um pedaço de software ou mais especificamente uma função de retorno de chamada em um sistema operacional ou mais especificamente em um driver de dispositivo, cuja execução é acionada pela recepção de uma interrupção.

Quando a interrupção acontece, o procedimento de interrupção faz tudo o que é necessário para lidar com a interrupção, atualiza as estruturas de dados e ativa o processo que estava aguardando a ocorrência de uma interrupção.

O mecanismo de interrupção aceita um endereço - um número que seleciona uma rotina / função de tratamento de interrupção específica de um pequeno conjunto. Na maioria das arquiteturas, esse endereço é um deslocamento armazenado em uma tabela chamada tabela de vetores de interrupção. Este vetor contém os endereços de memória de manipuladores de interrupção especializados.

Software de E / S independente de dispositivo

A função básica do software independente de dispositivo é realizar as funções de E / S que são comuns a todos os dispositivos e fornecer uma interface uniforme para o software de nível de usuário. Embora seja difícil escrever software totalmente independente de dispositivo, podemos escrever alguns módulos que são comuns a todos os dispositivos. A seguir está uma lista de funções de software de E / S independente de dispositivo -

  • Interface uniforme para drivers de dispositivo
  • Nomenclatura de dispositivos - Nomes mnemônicos mapeados para números de dispositivos principais e secundários
  • Proteção de dispositivo
  • Fornecendo um tamanho de bloco independente de dispositivo
  • Buffer porque os dados que saem de um dispositivo não podem ser armazenados no destino final.
  • Alocação de armazenamento em dispositivos de bloco
  • Alocação e liberação de dispositivos dedicados
  • Relatório de erros

Software de E / S do espaço do usuário

Estas são as bibliotecas que fornecem uma interface mais rica e simplificada para acessar a funcionalidade do kernel ou, em última análise, interativa com os drivers de dispositivo. A maior parte do software de E / S de nível de usuário consiste em procedimentos de biblioteca, com algumas exceções, como sistema de spool, que é uma maneira de lidar com dispositivos de E / S dedicados em um sistema de multiprogramação.

Bibliotecas de E / S (por exemplo, stdio) estão no espaço do usuário para fornecer uma interface para o SW de E / S independente de dispositivo residente do SO. Por exemplo, putchar (), getchar (), printf () e scanf () são exemplos de biblioteca de E / S de nível de usuário stdio disponível em programação C.

Subsistema de E / S do Kernel

O subsistema de E / S do kernel é responsável por fornecer muitos serviços relacionados a E / S. A seguir estão alguns dos serviços oferecidos.

  • Scheduling- O kernel agenda um conjunto de solicitações de E / S para determinar uma boa ordem de execução. Quando um aplicativo emite uma chamada de sistema de E / S de bloqueio, a solicitação é colocada na fila para esse dispositivo. O agendador de I / O do kernel reorganiza a ordem da fila para melhorar a eficiência geral do sistema e o tempo médio de resposta experimentado pelos aplicativos.

  • Buffering - Kernel I / O Subsystem mantém uma área de memória conhecida como bufferque armazena dados enquanto eles são transferidos entre dois dispositivos ou entre um dispositivo com uma operação de aplicativo. O armazenamento em buffer é feito para lidar com uma incompatibilidade de velocidade entre o produtor e o consumidor de um fluxo de dados ou para se adaptar entre dispositivos que têm tamanhos de transferência de dados diferentes.

  • Caching- Kernel mantém a memória cache, que é a região da memória rápida que contém cópias dos dados. O acesso à cópia em cache é mais eficiente do que o acesso ao original.

  • Spooling and Device Reservation- Um spool é um buffer que contém a saída de um dispositivo, como uma impressora, que não pode aceitar fluxos de dados intercalados. O sistema de spool copia os arquivos de spool enfileirados para a impressora, um de cada vez. Em alguns sistemas operacionais, o spool é gerenciado por um processo daemon do sistema. Em outros sistemas operacionais, ele é tratado por um thread no kernel.

  • Error Handling - Um sistema operacional que usa memória protegida pode proteger contra muitos tipos de erros de hardware e aplicativos.