Por que a E / S é ininterrupta?


11

Qual é a lógica por trás da E / S ininterrupta? Quais seriam as consequências negativas se um processo de manipulação de E / S tivesse permissão para manipular um sinal?


write(2)tem permissão para retornar mais cedo, retornando a contagem de bytes real gravada, que pode ser menor que o tamanho do buffer passado como o terceiro argumento.
Peter Cordes

Respostas:


9

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

A E / S pode ser complicada - para realmente entrar e sair de dados 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 tentadas, o dispositivo poderá não responder, se comportar mal ou até causar o bloqueio do sistema. Essas etapas podem ser diferentes e exclusivas para cada dispositivo, portanto, por que existem tantos drivers de dispositivo.

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


5

Agora que li o livro "O design dos sistemas operacionais Unix", de Maurice Bach, deixe-me responder a essa pergunta sozinho.

Em resumo, tornar a E / S ininterrupta é o objetivo de fazer com que a tarefa de E / S termine o mais rápido possível, sem ser interferida por sinais.

Algum conhecimento relacionado que adquiri com o livro:

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

2

Alguns caminhos de código no kernel são marcados como ininterruptos, principalmente porque o código precisa cumprir um tempo estrito (para responder a um dispositivo) ou porque está fazendo algo que não admite interferências. No caso do Linux, a maioria foi direcionada para etapas independentes no kernel, e as segundas foram erradicadas (suspeito principalmente sob pressão das atuais máquinas com várias CPUs). Ou seja, já faz algum tempo que não vejo um processo em sono ininterrupto.


3
Tente ler um CD riscado.
Joshua

1
Ou montando com sshfs e puxando o cabo de rede. O sono ininterrupto acontece, mesmo hoje em dia, quando a mídia / armazenamento subjacente atua. E geralmente é uma dor na bunda para lidar.
Nubarke
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.