Por que a I / O é ininterrupta?

10

Qual é a razão para tornar a E / S ininterrupta? Quais seriam as conseqüências negativas se um processo manipulando E / S fosse autorizado a manipular um sinal?

    
por twimo 27.01.2013 / 00:20

3 respostas

7

Qualquer E / S é tratada por uma chamada do sistema chamada por um processo. Eventualmente, tal chamada de sistema irá chegar a alguma função de driver de dispositivo de baixo nível apropriada para executar a operação real de E / S.

E / S pode ser complicado - para realmente obter dados dentro e fora do dispositivo, várias etapas podem precisar ser seguidas, em ordem e possivelmente com os requisitos de tempo. Se essas etapas não forem concluídas atomicamente, na próxima vez em que forem executadas, o dispositivo poderá não responder, comportar-se incorretamente ou até mesmo travar o sistema. Essas etapas podem ser diferentes e exclusivas para cada dispositivo, por isso, há tantos drivers de dispositivo.

Um driver de dispositivo bem escrito deve saber como lidar com o dispositivo que está tentando atender, por isso normalmente não deve ter problemas, a menos que haja um bug de driver, você esteja usando o driver errado para o dispositivo ou falhando.

    
por 27.01.2013 / 01:45
4

Agora que eu li o livro "O Design dos Sistemas Operacionais Unix", de Maurice Bach, deixe-me responder a essa pergunta sozinho.

Em suma, tornar a E / S ininterrupta tem a finalidade de fazer a tarefa de E / S terminar o mais rápido possível, sem ser interferida por sinais.

Algum conhecimento relacionado que ganhei do livro:

  1. A palavra "ininterrupta" deve referir-se a "sono ininterrupto". Quando um processo está em sono ininterrupto, ele NÃO pode ser despertado por sinais nem manipular sinais.
  2. Um processo manipula sinais quando: a. Ele está sendo executado no modo kernel e está prestes a retornar ao modo de usuário. b. está prestes a entrar e sair do estado de sono quando o sono é interrompível.
  3. O que acontece quando um processo de sono é despertado por um sinal? Ele lidaria com o sinal, com a ação padrão saindo do processo. Quando um processo está aguardando a conclusão da E / S, você obviamente não quer que ele saia prematuramente.
por 05.01.2014 / 05:41
2

Alguns caminhos de código no kernel são marcados ininterruptamente, principalmente porque o código tem que obedecer a um tempo estrito (para responder a um dispositivo) ou porque está fazendo algo que não admite interferência. No caso do Linux, a maioria do primeiro foi lançada em passos independentes no kernel, e os segundos foram erradicados (suspeito principalmente sob pressão das atuais máquinas multi-CPU). Ou seja, já faz algum tempo que eu não vi um processo no sono ininterrupto.

    
por 27.01.2013 / 03:45

Tags