Introdução aos Sistemas Operacionais Subsistema de Entrada

EA876 - Prof. Eleri Cardozo - FEEC/Unicamp Entrada e Saída Chamadas de Sistema (E/S) Subsistema de Entrada e Saída Periférico dados interrupções...

13 downloads 427 Views 678KB Size
EA876 - Prof. Eleri Cardozo - FEEC/Unicamp

Introdução aos Sistemas Operacionais Subsistema de Entrada e Saída

Eleri Cardozo FEEC/Unicamp

EA876 - Prof. Eleri Cardozo - FEEC/Unicamp

Entrada e Saída O subsistema de entrada e saída é responsável pela interface entre o sistema operacional e os periféricos conectados ao computador (disco, vídeo, teclado, mouse, microfone, altofalante, câmera, rede, etc. etc.). Este subsistema é responsável por tornar mais simples ao sistema operacional e aos processos a interação com os periféricos (por exemplo, escondendo as interrupções geradas pelos periféricos). Vamos examinar 3 componentes fundamentais deste subsistema: ● Módulos; ● Acionadores de dispositivos (device drivers); ● Acesso direto à memória (DMA).

EA876 - Prof. Eleri Cardozo - FEEC/Unicamp

Entrada e Saída Provê uma interface homogênea para operações de E/S

Chamadas de Sistema (E/S)

Subsistema de Entrada e Saída

dados

Núcleo

interrupções

Periférico

EA876 - Prof. Eleri Cardozo - FEEC/Unicamp

Módulos Módulos provêem extensões ao núcleo do sistema operacional. Estas extensõs (os módulos) podem ser anexadas ao núcleo sob demanda, por exemplo, quando um periférico é conectado. Módulos são componentes fundamentais para o subsistema de entrada e saída pois permitem incorporar ao núcleo as funcionalidades necessárias para a operação dos periféricos conectados ao computador (e apenas destes). O núcleo oferece uma interface para o desenvolvimento de módulos. Portanto, qualquer programador que conheça esta interface pode desenvolver um módulo para operar um periférico.

EA876 - Prof. Eleri Cardozo - FEEC/Unicamp

Módulos Módulos são usados tipicamente na implementação de: Acionadores de dispositivos. Exemplo: e100e (Ethernet), nvidia (vídeo), psmouse (mouse), soundcore (som). ●



Sistema de arquivos (filesystem drivers). Exemplo: fat, vfat, nfs.



Pilhas de protocolos de rede (network drivers). Exemplo: ipx, isdn.

Inclusão de novas chamadas de sistema. Exemplo: Video for Linux (v4l). ●

Linux provê uma interface (conjunto de chamadas de sistema) para a programação de módulos e um conjunto de comandos para o gerenciamento de módulos.

EA876 - Prof. Eleri Cardozo - FEEC/Unicamp

Módulos no Linux

EA876 - Prof. Eleri Cardozo - FEEC/Unicamp

Módulos no Linux O Linux emprega um conjunto de arquivos de configuração para o gerenciamento de módulos que especificam: Os módulos que devem ser instalados na inicialização do sistema (/etc/modules). ●

Os módulos que não devem ser carregados no sistema (blacklist) (/etc/modprobe.d/blacklist.conf). ●

Os parâmetros de inicialização dos módulos e suas dependências de outros módulos, quando necessários (/etc/modprobe.d/.conf). ●

EA876 - Prof. Eleri Cardozo - FEEC/Unicamp

Módulos no Linux /* hello.c * "Hello world" - um modulo elementar * Compile com gcc -c hello.c -Wall */ /* Declara o codigo como modulo (parte do nucleo) */ #define __KERNEL__ /* uma parte do nucleo */ #define MODULE /* mas nao uma parte permanente */ /* inclusoes padrao para modulos */ #include #include /* Inicializacao do LKM (loadable kernel module) */ int init_module() { printk("O modulo hello world foi instalado\n"); return 0; } /* Cleanup */ void cleanup_module() { printk("O modulo hello world foi desinstalado\n"); }

EA876 - Prof. Eleri Cardozo - FEEC/Unicamp

Desenvolvimento de Módulos O desenvolvedor de módulos deve utilizar apenas as bibliotecas empregadas na programação do núcleo. Por exemplo, libc não pode ser empregada em módulos (razão pela qual o exemplo anterior não utilizou a função printf). Durante o teste do módulo uma falha pode comprometer todo o núcleo (lembre-se que módulos são parte do núcleo). O desenvolvedor pode utilizar “User-mode Linux” (UML) para desenvolver e testar módulos. UML é uma máquina virtual que executa o sistema Linux no espaço do usuário.

EA876 - Prof. Eleri Cardozo - FEEC/Unicamp

Acionadores de Dispositivos 0

1

N-1

Acionador de Dispositivo (Device Driver)

Dispositivo físico de armazenamento

Blocos e Inodes (visão abstrata do dispositivo)

EA876 - Prof. Eleri Cardozo - FEEC/Unicamp

Acionadores de Dispositivos Núcleo Acionador de Dispositivo

dados

int.

controle Barramento (PCI, ISA, etc.)

Buffer

Registradores

Controlador de Dispositivo Interface de comunicação (SATA, USB, etc.)

Dispositivo

EA876 - Prof. Eleri Cardozo - FEEC/Unicamp

Dispositivos de E/S Os acionadores de dispositivos operam de duas formas em função do dispositivo físico que controlam Orientados a bloco: a transferência de dados se dá em blocos de bytes. Acionadores de disco, CD-ROM, memória USB são exemplos deste tipo. ●

Orientados a caractere: a transferência de dados se dá byte a byte. Acionadores de terminais, porta serial e porta paralela são exemplos deste tipo. ●

Via de regra, os acionadores de dispositivos orientados a bloco utilizam um cache de blocos ou páginas em memória (cache de buffers ou páginas no Unix/Linux). Portanto, são mais complexos que os orientados a caractere.

EA876 - Prof. Eleri Cardozo - FEEC/Unicamp

Acionadores de Dispositivos no Linux No Linux, acionadores de dispositivos são acessados a partir do espaço do usuário da mesma forma que arquivos. Para tal, cada acionador de dispositivo é representado por um arquivo especial no diretório /dev. Para relacionar um arquivo no diretório /dev com um acionador de dispositivo são empregados dois identificadores: número maior e número menor. O comando mknod cria um arquivo especial que será associado a um acionador de dispsitivo, por exemplo mknod /dev/mydriver c 60 0 cria um acionador de de dispositivo de nome “mydriver” do tipo caractere (c) cujos números maior e menor são 60 e 0, respectivamente.

EA876 - Prof. Eleri Cardozo - FEEC/Unicamp

Acionadores de Dispositivos no Linux

EA876 - Prof. Eleri Cardozo - FEEC/Unicamp

Acionadores de Dispositivos no Linux open

close

read

write

mmap

ioctl

Implementadas pelo acionador de dispositivo

Chamadas de Sistema (E/S)

Acionador de Dispositivo

Dispositivo de E/S

EA876 - Prof. Eleri Cardozo - FEEC/Unicamp

Exemplo: Video for Linux (v4l) Mapeia buffer de imagem do acionador de dispositivo na memória do processo

Inicia/encerra operação do dispositivo open

close

mmap

Configura dispositivo (formato e tamanho da imagem) ioctl

Controla o dispositivo (captura de imagem)

Chamadas de Sistema (E/S)

/dev/video0

Acionador de Dispositivo (videodev)

Acionador de Dispositivo (uvcvideo)

WebCam

USB

EA876 - Prof. Eleri Cardozo - FEEC/Unicamp

Acesso Direto à Memória Acesso direto à memória (DMA: Direct Memory Access) é um componente fundamental do subsistema de entrada e saída e presente em praticamente todos os dispositivos de entrada e saída orientados a bloco como discos, CD-ROM, etc. Estes dispositivos possuem um componente de hardware denominado controlador de DMA. Este controlador tem por objetivo liberar a CPU de copiar dados de/para a memória em operações de entrada e saída. DMA é usado tipicamente em: ● Transferência de páginas entre memória e área de swap. ● Transferência de blocos entre memória (cache de bufffers ou de páginas) e disco. ● Transferência de pacotes de rede entre memória e NIC.

EA876 - Prof. Eleri Cardozo - FEEC/Unicamp

Acesso Direto à Memória CPU

Memória

CPU

Memória

CPU

Memória

Controlador de DMA

Controlador de DMA

Controlador de DMA

(a) Programação do controlador de DMA

(b) Transferência de dados para a memória

(c) Notificação via interrupção

barramento

EA876 - Prof. Eleri Cardozo - FEEC/Unicamp

Acesso Direto à Memória Chamadas de Sistema (E/S)

Barramento CPU-Memória

Memória

Acionador de Dispositivo

CPU dados

controle

int.

Barramento

Controlador de DMA

Controlador de Dispositivo Interface de comunicação (SATA, USB, etc.)

Dispositivo