6 - gerência de dispositivos - ime-uspadao/agd.pdf · 1 6 - gerência de dispositivos 6.1 –...

12
1 6 - Gerência de Dispositivos 6.1 – Introdução A gerência de dispositivos de entrada/saída é uma das principais e mais complexas funções do sistema operacional. Sua implementação é estruturada através de camadas de um modelo semelhante ao apresentado para o sistema operacional, utilizando o conceito de máquina de níveis. As camadas de mais baixo nível escondem características das camadas superiores, oferecendo uma interface simples e confiável ao usuário e suas aplicações. Figura 6.1 – Gerência de Dispositivos Controladores Dispositivos de E/ S Processo S istema de Arquivos Device Drivers Subsistema de E/ S Operações de E/ S Modo Us uá ri o Modo Kerne l Independente do dispositivo (a) Dependente do dispositivo (b) SOFTWARE HARDWARE

Upload: truongdan

Post on 12-Nov-2018

214 views

Category:

Documents


0 download

TRANSCRIPT

1

6 - Gerência de Dispositivos

6.1 – Introdução

A gerência de dispositivos de entrada/saída é uma das principais e mais

complexas funções do sistema operacional. Sua implementação é estruturada

através de camadas de um modelo semelhante ao apresentado para o sistema

operacional, utilizando o conceito de máquina de níveis. As camadas de mais

baixo nível escondem características das camadas superiores, oferecendo uma

interface simples e confiável ao usuário e suas aplicações.

Figura 6.1 – Gerência de Dispositivos

Controladores

Dispositivos de E/S

Processo

Sistema de Arquivos

Device Drivers

Subsistema de E/ S

Operações de E/S

Modo U

suári

oM

odo K

ern

el

Independentedo dispositivo

(a)

Dependentedo dispositivo

(b)

SO

FTW

ARE

HA

RD

WA

RE

2

A diversidade de dispositivos de E/S exige que o sistema operacional

implemente uma camada, chamada de subsistema de E/S, com a função de

isolar a complexidade dos dispositivos da camada de sistemas de arquivo e da

aplicação. Dessa forma, é possível ao sistema operacional ser flexível,

permitindo a comunicação dos processos com qualquer tipo de periférico.

Aspectos como velocidade de operação, unidade de transferência,

representação de dados, tipos de operações e demais detalhes de cada um

dos periféricos são tratados pela camada de device driver, oferecendo uma

interface uniforme entre o subsistema de E/S e todos os dispositivos.

As camadas são divididas em dois grupos, onde o primeiro grupo

visualiza os diversos tipos de dispositivos do sistema de um modo único,

enquanto o segundo é específico para cada dispositivo. A maior parte das

camadas trabalha de forma independente do dispositivo.

6.2 – Acesso ao Subsistema de Entrada e Saída

O sistema possui um conjunto de rotinas que possibilita a comunicação

com qualquer dispositivo que possa ser conectado ao computador. Esse

conjunto de rotinas, denominando rotinas de entrada/saída, faz parte do

subsistema de E/S e permite ao usuário realizar operações de E/S sem se

preocupar com detalhes do dispositivo que está sendo acessado.

As operações de E/S devem ser realizadas através de system calls que

chamam as rotinas de E/S do kernel do sistema operacional. Dessa forma, é

possível escrever um programa que manipule arquivos, estejam eles em

disquetes, discos rígidos ou qualquer outro dispositivo, sem ter que alterar o

código para cada tipo de dispositivo. As system calls responsáveis por essa

comunicação são denominadas system calls de entrada/saída.

A comunicação entre os comandos de E/S oferecidos pelas linguagens

de programação de alto nível e as system calls de E/S é feita simplesmente

através de passagem de parâmetros, como caminho para o arquivo e tipo de

operação (leitura ou escrita). O relacionamento entre o comando e a system

call é criado na geração do código executável do programa, ou seja, pelo

compilador.

3

Um dos objetivos principais das system calls de E/S é simplificar a

interface entre as aplicações e os dispositivos. Com isso, elimina-se a

necessidade de duplicação de rotinas idênticas nos diversos aplicativos, além

de esconder do programador características específicas associadas à

programação de cada dispositivo.

Figura 6.2 – Operações de Entrada/Saída

As operações de E/S podem ser classificadas conforme o seu

sincronismo. Uma operação é dita síncrona quando o processo que realizou a

operação fica aguardando no estado de espera pelo seu término. A maioria dos

comandos das linguagens de alto nível funciona desta forma. Uma operação é

dita assíncrona quando o processo que realizou a operação não aguarda pelo

seu término e continua pronto para ser executado. Neste caso, o sistema deve

Device drivers

Dispositivos de E/ S

Comandosde E/ S

Rotinas de E/ S

System calls de E/ S

Aplicação

Bibliotecas

4

oferecer algum mecanismo de sinalização que avise ao processo que a

operação foi terminada, como uma interrupção por exemplo.

6.3 – Subsistema de Entrada e Saída

O subsistema de entrada e saída é responsável por realizar as funções

comuns a todos os tipos de dispositivos, ficando os aspectos específicos de

cada periférico como responsabilidade dos drivers. Dessa forma, o subsistema

de E/S é a parte do sistema operacional que oferece uma interface uniforme

com as camadas superiores.

Cada dispositivo trabalha com unidades de informação de tamanhos

diferentes, como caracteres ou blocos. O subsistema de E/S é responsável por

criar uma unidade lógica de transferência independente do dispositivo e

repassa-la para os níveis superiores, sem o conhecimento do conteúdo da

informação.

Normalmente, o tratamento de erros nas operações de E/S é realizado

pelas camadas mais próximas ao hardware.

Todos os dispositivos de E/S são controlados, com o objetivo de obter o

maior compartilhamento possível entre os diversos usuários de forma segura e

confiável. Alguns dispositivos como os discos, podem ser compartilhados,

simultaneamente, entre os diversos usuários, sendo o sistema operacional

responsável pela integridade dos dados acessados. Outros como as

impressoras, devem ter acesso exclusivo, e o sistema operacional deve

controlar o seu compartilhamento de forma organizada.

O subsistema de E/S é responsável também por implementar todo um

mecanismo de proteção de acesso aos dispositivos. No momento em que o

usuário solicita a realização de uma operação de E/S, é verificado se o seu

processo possui permissão para realizar a operação.

A bufferização é outra tarefa realizada por esse subsistema. Essa

técnica permite reduzir o número de operações de E/S, utilizando uma área de

memória intermediária, chamada de buffer.

Uma das principais funções do subsistema de E/S é criar uma interface

padronizada com os device drivers. Sempre que um novo dispositivo é

5

instalado no computador, é necessário que um novo driver seja adicionado ao

sistema. O subsistema de E/S deve oferecer uma interface padronizada que

permita a inclusão de novos drivers sem a necessidade de alteração da

camada de subsistema de E/S.

6.4 – Device Drivers

O device driver ou apenas driver tem como função implementar a

comunicação do subsistema de E/S com os dispositivos, através de

controladores. Enquanto o subsistema de E/S trata de funções ligadas a todos

os dispositivos, os drivers tratam apenas dos seus aspectos particulares.

Os drivers têm como função receber comandos gerais sobre acessos

aos dispositivos e traduzi-los em comandos específicos para aquele dispositivo

em questão. Cada driver manipula somente um tipo de dispositivo ou grupos de

dispositivos semelhantes.

Figura 6.3 – Device Drivers

Processo

Driver deImpressora

Subsistema de E/ S

Dr iver deDisco

Driver deFita

6

O driver está integrado diretamente às funções do controlador, sendo o

componente do sistema que reconhece as características particulares do

funcionamento de cada dispositivo de E/S, como o número de registradores do

controlador, funcionamento e comandos específicos. Sua função principal é

receber os comandos abstratos do subsistema de E/S e traduzi-los para

comandos que o controlador possa entender e executar. Além disso, o driver

pode realizar outras funções, como a inicialização do dispositivo e seu

gerenciamento.

Figura 6.4 – Driver de Disco

Os drivers fazem parte do núcleo do sistema operacional, sendo escritos

geralmente em assembly. Como os drivers são códigos reentrantes que

executam em modo kernel, qualquer erro de programação pode comprometer o

funcionamento do sistema. Por isso, um driver deve ser cuidadosamente

desenvolvido e testado.

Rotinade E/S

Driverde Disco

Controladorde Disco

Ler bloco n Ler setor x

Discos

7

Figura 6.5 – Gerenciador de Dispositivos do Windows 7

Devido ao alto grau de dependência entre os drivers e o restante do

kernel do sistema, os fabricantes desenvolvem, para um mesmo dispositivo,

diferentes drivers, uma para cada arquitetura de processador (32 ou 64bits),

um para cada sistema operacional, inclusive para versões diferentes. Sempre

que um novo dispositivo é instalado, o driver do dispositivo deve ser adicionado

ao kernel do sistema. Nos sistemas mais antigos, a inclusão de um novo driver

significava a recompilação do kernel, uma operação complexa que exigia a

reinicialização do sistema. Atualmente, os sistemas operacionais permitem a

fácil instalação de novos drivers, sendo os drivers carregados dinamicamente,

sem a necessidade de reinicialização, alguns sistemas permitem até mesmo a

instalação física de dispositivos com o computador ligado (HOT SWAP ou HOT

PLUG).

8

6.5 – Controladores

Os controladores são componentes de hardware responsáveis por

manipular diretamente os dispositivos de E/S. O sistema operacional, mais

exatamente o driver, comunica-se com os dispositivos através dos

controladores. Em geral, o controlador pode ser uma placa independente

conectada a um slot do computador ou implementada diretamente na placa-

mãe.

Figura 6.6 – Processador, Memória e Controladores

O controlador possui memória e registradores próprios utilizados na

execução de instruções enviadas pelo driver. Essas instruções, de baixo nível,

são responsáveis pela comunicação entre o controlador e o dispositivo de E/S.

Em operações de leitura, o controlador deve armazenar em seu buffer interno

uma seqüência de bits provenientes do dispositivo até formar um bloco. Após

verificar a ocorrência de erros, o bloco pode ser transferido para um buffer de

E/S na memória principal. A transferência do bloco do buffer interno do

controlador para o buffer de E/S na memória principal pode ser realizada pelo

MemóriaPrincipal

UCP

Controladorde

Impressora

Controladorde

Disco

ControladordeFita

Impressora Disco Fita

9

processador ou por um controlador de DMA. O uso da técnica de DMA evita

que o processador fique ocupado com a transferência do bloco para a

memória. O controlador de DMA é um dispositivo de hardware que pode fazer

parte do computador ou pode ser um dispositivo independente.

Figura 6.7 – Técnica de DMA

Alguns controladores, particularmente os de discos, implementam

técnicas de cache semelhante às implementadas pelos sistemas de arquivos,

na tentativa de melhorar o desempenho das operações de E/S. Normalmente,

o controlador avisa ao sistema operacional do término de uma operação de

gravação, quando os dados no buffer do controlador são gravados no disco

(write-through caching). O controlador também pode ser configurado para

avisar do término da gravação, mesmo quando os dados ainda se encontram

no buffer do controlador e a operação de gravação no disco não foi realizada

(write-back caching). Desta forma é possível obter ganhos consideráveis de

desempenho.

UCP

Controladorde DMA

Registradores

Buffer

MemóriaPrincipal

Buffer de E/S

Controladorde

Disco

Disco

1

2

3

4

10

6.6 – Dispositivos de Entrada e Saída

Os dispositivos de entrada e saída são utilizados para permitir a

comunicação entre o sistema computacional e o mundo externo. Os

dispositivos de E/S podem ser classificados como de entrada de dados, como

CDROM, DVD, teclado e mouse, ou de saída de dados, como impressoras e

monitores. Também é possível que um dispositivo realize tanto entrada como

saída de dados, como placas de som, de rede, HDs, monitor touchscreen.

A transferência de dados pode ocorrer através de blocos de informação

ou caracteres, por meio de controladores dos dispositivos. Em função da forma

com que os dados são armazenados, os dispositivos de E/S podem ser

classificados em duas categorias: dispositivos estruturados e dispositivos não-

estruturados. Os dispositivos estruturados (block devices) caracterizam-se

por armazenar informações em blocos de tamanho fixo, possuindo cada qual

um endereço que pode ser lido ou gravado de forma independente dos demais.

Os dispositivos estruturados classificam-se em dispositivos de acesso

direto e seqüencial, em função da forma com que os blocos são acessados.

Um dispositivo é classificado como de acesso direto quando um bloco pode

ser recuperado diretamente através de um endereço. O HD é o um exemplo de

dispositivo de acesso direto. Um dispositivo é do tipo de acesso seqüencial

quando, para se acessar um bloco, o dispositivo deve percorrer

sequencialmente os demais blocos até encontrá-los. A fita magnética é um

exemplo deste tipo de dispositivo.

Os dispositivos não-estruturados (character devices) são aqueles

que enviam ou recebem uma seqüência de caracteres sem estar estruturada

no formato de um bloco. Desse modo, a seqüência de caracteres não é

endereçável, não permitindo operações de acesso direto ao dado. Dispositivos

como terminais, impressoras e interfaces de rede são exemplos de dispositivos

não-estruturados.

11

6.7 – Gerência de Dispositivos no Windows

O Windows oferece centenas de APIs relacionadas à gerência de E/S,

sendo a maior parte ligada ao subsistema gráfico, chamado Graphics Device

Interface (GDI). O GDI é um conjunto de rotinas que permite a uma aplicação

manipular dispositivos gráficos, como monitores e impressoras, independente

do dispositivo físico, funcionando como uma interface entre a aplicação e os

drivers dos dispositivos. O GDI oferece funções de gerenciamento de janelas,

menus, caixas de diálogo, cores, desenhos, textos, bitmaps, ícones e clipboard.

O sistema oferece suporte a operações de E/S assíncronas. O término

da operação pode ser sinalizado ao thread utilizando um dos diversos

mecanismos de sincronização disponíveis no sistema.

O gerente de E/S (I/O Manager) é responsável por receber pedidos de

operações de E/S e repassá-los aos drivers. Cada solicitação de E/S é

representada por uma estrutura de dados chamada I/O Request Packet (IRP),

que permite o controle de como a operação de E/S será processada.

Os drivers no Windows são desenvolvidos a partir de um padrão

chamado Windows Driver Model (WDM). O WDM define diversas

características e funções que um drivers deve oferecer para ser homologado

pela Microsoft, como suporte a plug-and-play e a múltiplos processadores,

gerência de energia e interface com os objetos do sistema operacional.

O Windows trabalha com diferentes tipos de drivers para implementar

diversas funções, como a emulação de aplicações MS-DOS (virtual drivers),

interface com o subsistema gráfico GDI (display e printer drivers),

implementação de sistemas de arquivos (file system drivers), funções de

filtragem (filter drivers) e o controle de dispositivos de E/S (hardware drivers).

As operações de compressão, criptografia e tolerância a falhas de discos

são implementadas através de drivers específicos acima dos drivers ligados

aos dispositivos de E/S. Os sistemas de arquivos NTFS e FAT também são

implementados através de drivers especiais que recebem solicitações do

gerente de E/S e as repassam para os drivers de disco correspondentes.

12

6.8 – Gerência de Dispositivos no Unix

A gerência de entrada/saída no Unix foi desenvolvida de forma integrada

ao sistema de arquivos. O acesso aos dispositivos de E/S é feito através de

arquivos especiais, localizados no diretório /dev.

Os arquivos especiais podem ser acessados da mesma forma que

qualquer outro arquivo, utilizando simplesmente as system calls de leitura e

gravação. Isso permite enviar o mesmo dado para diferentes dispositivos de

saída. Dessa forma, as system calls de E/S podem manipular qualquer tipo de

dispositivo de maneira uniforme.

As versões mais recentes do Unix e o Linux permitem que os drivers

possam ser acoplados ao núcleo com sistema em funcionamento, sem a

necessidade de gerar um novo kernel e reinicializar o sistema.