Você está na página 1de 20

QXD0013 - Sistemas Operacionais

Entrada/Saı́da II

Thiago Werlley Bandeira da Silva1

1 Universidade Federal do Ceará, Brazil

5 de julho de 2023
Camadas de SW de E/S
• Software de E/S normalmente dividido em 4 camadas
◦ Tratadores de interrupção
◦ Drivers do dispositivo
◦ Software do SO independente do dispositivo
◦ Software de E/S no nı́vel do usuário

2 of 11
Tratadores de Interrupção
• As interrupções são um fato desagradável da vida e não podem ser
evitadas. Elas devem ser escondidas longe, nas profundezas do SO
• A melhor maneira de escondê-las é bloquear o driver que inicializou
uma operação de E/S até que ela se complete e a interrupção
ocorra.
• Exemplo:
◦ O driver pode bloquear a si mesmo, realizando um down em um
semáforo, um wait em uma variável de condição, um receive em uma
mensagem, ou algo similar.
• down em um semáforo

• Quando a interrupção acontece, a rotina de interrupção faz o que


for necessário a fim de lidar com ela.
• Então ela pode desbloquear o driver que a chamou. Em alguns
casos, apenas completará a operação up em um semáforo.
3 of 11
Tratadores de Interrupção
• Processar uma interrupção não é apenas uma questão de
interceptar a interrupção
• Há bem mais trabalho envolvido para o sistema operacional.
• SO deve realizar várias ações durante o processo
◦ 1 – Salva registradores e os copia para a tabela de processos
◦ 2 – Estabelece contexto para rotina de interrupção
◦ 3 – Estabelece uma pilha para rotina de interrupção
◦ 4 – Sinaliza ao controlador de interrupção (caso exista)
◦ 5 – Copia os registradores de onde foram salvos para a tabela de
processos
◦ 6 – Executa rotina de interrupção
◦ 7 – Escolhe processo a executar em seguida
◦ 8 – Estabelece contexto para processo
◦ 9 – Carregar os registradores do novo processo
◦ 10 – Começar a execução do novo processo

4 of 11
Drivers de Dispositivos

• cada dispositivo de E/S ligado a um computador precisa de algum


código especı́fico do dispositivo para controlá-lo
• Chamado driver do dispositivo
• Geralmente escrito e fornecido pelo fabricante
• Normalmente com versões para diferentes SOs
• Parte do núcleo do SO na maioria dos casos
◦ Possı́vel execução no espaço de usuário
◦ Chamadas de sistema para leitura/escrita dos registradores
◦ Isolamento do núcleo → Mais robustez

5 of 11
Drivers de Dispositivos

6 of 11
SW de E/S Independentes - Interface uniforme
• Ter de modificar o SO para dispositivos novos não é uma boa ideia.
• Fronteira exata entre drivers e SW independente varia com sistema
• Algumas funcionalidades independentes implementadas no driver
• Interface uniforme para drivers
◦ Fazer todos dispositivos parecerem os mesmos
◦ Evitar reconstrução do SO para cada novo dispositivo
◦ Cada classe de dispositivo → Conjunto de funções
◦ Drivers possuem tabela de ponteiros

7 of 11
SW de E/S Independentes - Buffers
• Utilização de buffer
◦ Exemplo de um modem
◦ Sem utilizar buffer → Execuções curtas (ineficiente)
◦ Buffer no espaço de usuário → Interrupção preenche buffer
• Problema com paginação
◦ Buffer no espaço do núcleo → Transferência para espaço do usuário
• Chegada de dados durante carregamento do buffer de usuário
◦ Dois buffers no espaço do núcleo → Durante transferência

8 of 11
SW de E/S Independentes - Buffers
• Utilização de buffer
◦ Exemplo de um modem
◦ Sem utilizar buffer → Execuções curtas (ineficiente)
◦ Buffer no espaço de usuário → Interrupção preenche buffer
• Problema com paginação
◦ Buffer no espaço do núcleo → Transferência para espaço do usuário
• Chegada de dados durante carregamento do buffer de usuário
◦ Dois buffers no espaço do núcleo → Durante transferência

8 of 11
SW de E/S Independentes - Buffers
• Utilização de buffer
◦ Exemplo de um modem
◦ Sem utilizar buffer → Execuções curtas (ineficiente)
◦ Buffer no espaço de usuário → Interrupção preenche buffer
• Problema com paginação
◦ Buffer no espaço do núcleo → Transferência para espaço do usuário
• Chegada de dados durante carregamento do buffer de usuário
◦ Dois buffers no espaço do núcleo → Durante transferência

8 of 11
SW de E/S Independentes - Buffers
• Utilização de buffer
◦ Exemplo de um modem
◦ Sem utilizar buffer → Execuções curtas (ineficiente)
◦ Buffer no espaço de usuário → Interrupção preenche buffer
• Problema com paginação
◦ Buffer no espaço do núcleo → Transferência para espaço do usuário
• Chegada de dados durante carregamento do buffer de usuário
◦ Dois buffers no espaço do núcleo → Durante transferência

8 of 11
SW de E/S Independentes - Buffers
• Utilização de buffer
◦ Exemplo de um modem
◦ Sem utilizar buffer → Execuções curtas (ineficiente)
◦ Buffer no espaço de usuário → Interrupção preenche buffer
• Problema com paginação
◦ Buffer no espaço do núcleo → Transferência para espaço do usuário
• Chegada de dados durante carregamento do buffer de usuário
◦ Dois buffers no espaço do núcleo → Durante transferência

8 of 11
SW de E/S Independentes - Buffers
• Muitas cópias afetam desempenho (Exemplo: Envio de pacotes)
◦ Pacote copiado para buffer do núcleo
• Buffer do usuário liberado
◦ Driver requisitado → Pacote copiado para buffer do dispositivo
• Barramento necessita transferência constante
◦ Transferência na rede → Buffer do dispositivo de destino
◦ Transferência para o buffer do núcleo de destino
◦ Transferência para o buffer do usuário de destino

9 of 11
SW de E/S Independentes - Buffers
• Muitas cópias afetam desempenho (Exemplo: Envio de pacotes)
◦ Pacote copiado para buffer do núcleo
• Buffer do usuário liberado
◦ Driver requisitado → Pacote copiado para buffer do dispositivo
• Barramento necessita transferência constante
◦ Transferência na rede → Buffer do dispositivo de destino
◦ Transferência para o buffer do núcleo de destino
◦ Transferência para o buffer do usuário de destino

9 of 11
SW de E/S Independentes - Buffers
• Muitas cópias afetam desempenho (Exemplo: Envio de pacotes)
◦ Pacote copiado para buffer do núcleo
• Buffer do usuário liberado
◦ Driver requisitado → Pacote copiado para buffer do dispositivo
• Barramento necessita transferência constante
◦ Transferência na rede → Buffer do dispositivo de destino
◦ Transferência para o buffer do núcleo de destino
◦ Transferência para o buffer do usuário de destino

9 of 11
SW de E/S Independentes - Buffers
• Muitas cópias afetam desempenho (Exemplo: Envio de pacotes)
◦ Pacote copiado para buffer do núcleo
• Buffer do usuário liberado
◦ Driver requisitado → Pacote copiado para buffer do dispositivo
• Barramento necessita transferência constante
◦ Transferência na rede → Buffer do dispositivo de destino
◦ Transferência para o buffer do núcleo de destino
◦ Transferência para o buffer do usuário de destino

9 of 11
SW de E/S Independentes - Buffers
• Muitas cópias afetam desempenho (Exemplo: Envio de pacotes)
◦ Pacote copiado para buffer do núcleo
• Buffer do usuário liberado
◦ Driver requisitado → Pacote copiado para buffer do dispositivo
• Barramento necessita transferência constante
◦ Transferência na rede → Buffer do dispositivo de destino
◦ Transferência para o buffer do núcleo de destino
◦ Transferência para o buffer do usuário de destino

9 of 11
SW de E/S Independentes - Buffers
• Muitas cópias afetam desempenho (Exemplo: Envio de pacotes)
◦ Pacote copiado para buffer do núcleo
• Buffer do usuário liberado
◦ Driver requisitado → Pacote copiado para buffer do dispositivo
• Barramento necessita transferência constante
◦ Transferência na rede → Buffer do dispositivo de destino
◦ Transferência para o buffer do núcleo de destino
◦ Transferência para o buffer do usuário de destino

9 of 11
SW de E/S Independentes - Relatórios de erros

• Erros são muito mais comuns no contexto de E/S do que em


outros contextos.
• Quando ocorrem, o sistema operacional deve lidar com eles da
melhor maneira possı́vel.
• Muitos erros são especı́ficos de dispositivos e devem ser tratados
pelo driver apropriado, mas o modelo para o tratamento de erros é
independente do dispositivo.
• Divisão em classes
◦ Programação
◦ Parâmetro inválido
◦ Erros reais do dispositivo

10 of 11
SW de E/S no Espaço de Usuário
• Embora a maior parte do software de E/S esteja dentro do sistema
operacional, uma pequena porção dele consiste em bibliotecas
ligadas aos programas do usuário e mesmo programas inteiros
sendo executados fora do núcleo.
• Chamadas de sistema, incluindo chamadas de sistema de E/S, são
normalmente feitas por rotinas de biblioteca
◦ Algumas apenas posicionam parâmetros
• Exemplo:

c o n t a d o r = w r i t e ( fd , b u f f e r , n b y t e s )

◦ Outras formatam parâmetros


• Exemplo:

p r i n t f ( ”O q u a d r a d o de %3d e %6d\n” , i , i ∗ i )

11 of 11

Você também pode gostar