Um cabo de dados SATA defeituoso em uma unidade de DVD pode causar problemas em programas que não acessam a unidade no Windows 8.1?

0

Eu tive um problema e uma solução muito estranhos em uma de nossas estações de trabalho do Windows 8.1, e não consigo descobrir como minha solução teria resolvido o problema.

Esta é a estação de trabalho:

  • Windows 8.1 x64
  • AMD Athlon x64 x2 5200+ 2,7 GHz
  • RAM DDR2 de 4 GB
  • Placa-mãe NG1DB-M25 Biostar
  • 1 TB de HDD Western Digital
  • DVD Drive (não tem certeza da marca)

Como você pode ver, é um hardware bem antigo, exceto o disco rígido e o DVD Drive (provavelmente antigo, mas não era usado até recentemente, eu o coloquei).

Depois que algo aconteceu que eu não consigo entender completamente a descrição dos meus usuários (algo envolvendo o sleep-mode, supostamente) a estação de trabalho entrou em um loop de reparo, onde eu não poderia nem iniciar em modo de segurança, se Basta carregar e começar a tentar reparar-se.

Eu estava ocupado com coisas de prioridade mais alta o dia todo, então deixei ele funcionando e no dia seguinte tudo começou bem, mas quando eu tentei abrir a atualização do Windows as janelas se abriram, mas nenhuma das informações iria carregar e iria travar até que eu reiniciei o explorador. Também houve problema em outro programa que causaria a suspensão desse programa.

Eu tentei pela primeira vez DISM.exe /Online /Cleanup-image /Restorehealth e depois SFC. Nenhum dos dois funcionou, então decidi ir em frente e reformatar. Coloquei o DVD e, quando tentei inicializá-lo, o Windows acabou criando uma tela de erro (não consigo me lembrar de nenhum código ou das palavras exatas agora) que havia algum problema devido ao armazenamento destacável. Não há drives USB, então imaginei que deveria estar relacionado à unidade de DVD. Eu desliguei o cabo de dados SATA e agora a estação de trabalho está funcionando perfeitamente, sem necessidade de reformatar ou qualquer coisa.

Eu não posso adicionar como isso resolveu o problema. Até o final nenhum dos problemas poderia ter sido devido às unidades de DVD, uma vez que nunca estava sendo acessado. Alguém sabe de alguma razão por que a substituição do cabo SATA iria consertar tudo isso, ou é uma coincidência e algo mais possivelmente também aconteceu?

    
por JRAH 30.04.2015 / 19:45

1 resposta

0

Quando o hardware está falhando, pode causar vários sintomas. O mais provável é uma Tela Azul da Morte, mas sintomas menores podem aparecer com a mesma facilidade. Para ter uma ideia melhor de como os programas aparentemente não relacionados podem ser afetados pelo hardware, considere o modelo do sistema operacional:

Software do usuário > Kernel > Camada de abstração de hardware > Hardware

Qualquer programa que queira interagir literalmente com qualquer recurso, até mesmo a CPU ou RAM, tem que cooperar com o kernel, que por sua vez depende da HAL para traduzir os vários sinais físicos de e para o hardware em sinais lógicos e do kernel.

O kernel tem certas restrições para garantir a estabilidade, como a capacidade limitada de ser reentrante, a segurança de threads, limitações de recursos e assim por diante. Particularmente, a maioria dos hardwares não tem o conceito de ser compartilhado; isso é abstraído em um nível mais alto por meio dos drivers HAL ou kernel.

Se você se lembrar dos dias de modems, somente um programa por vez poderia usar o modem, como o discador. A Internet contornou isso produzindo uma pilha comum - todos os programas que desejavam acessar a Internet o fizeram por meio de uma pilha comum, e essa pilha tinha controle exclusivo do hardware. A pilha produziu multiplexação para compartilhar esse recurso.

Ainda hoje, as placas de som, as unidades de disco, as placas de vídeo e assim por diante não podem ser compartilhadas fisicamente. Os sinais ficariam confusos e o caos ocorreria. O HAL faz um bom trabalho ao enganar os usuários, fazendo-os pensar que há mais de uma coisa acontecendo de cada vez. Ainda existe um gargalo físico, mas normalmente não percebemos quando o hardware está funcionando da maneira pretendida.

Mas, para chegar ao núcleo do problema, se o HAL tiver um problema de comunicação com um dispositivo, ele poderá ficar bloqueado enquanto tenta reenviar ou reler os dados repetidas vezes. O HAL também não é normalmente multithreaded, portanto, ele só pode manipular um pedido por vez (por cadeia de driver).

Se o driver de disco estiver bloqueado, tente ler uma unidade defeituosa, por exemplo, qualquer outro programa que tente fazer uma chamada de API semelhante estará na fila atrás da chamada bloqueada, resultando na suspensão desse programa. Programas multi-threaded não teriam esse problema, porque a interface do usuário poderia permanecer responsiva enquanto a unidade estava bloqueada. Infelizmente, a maioria dos programas não é .

Muitos programas no Windows basicamente entram em um loop, como este:

while(GetMessage(&msg, hWnd, NULL, NULL)) {
    DispatchMessage(&msg);
}

Como você pode imaginar, há apenas um segmento. Uma vez que ele tenta ler de uma unidade que está pendurada, ela não pode se recuperar até que a unidade chegue ao tempo limite. Se não, esse programa está à mercê da API do sistema operacional. Mesmo se fosse multi-threaded, no entanto, o segmento de leitura de unidade seria bloqueado, embora o segmento de interface do usuário seria capaz de detectar isso e recuperar / abortar.

Para compor o problema, muitas chamadas de API, como aquelas que alocam memória, unidades ou arquivos abertos, etc, são todas chamadas de bloqueio . Eles fazem com que o segmento atual espere indefinidamente (a menos que solicite um valor de tempo limite específico) até que o sistema operacional possa concluir a solicitação ou abortar devido a um tempo limite. A maioria dos programas não assume que o sistema operacional demore muito e, portanto, nunca especifique um tempo limite. Esses programas nunca serão recuperados se a unidade não responder.

Para um programa que "nunca acessa a unidade com falha", isso não é necessariamente necessário. Tudo o que precisa fazer é chamar uma função atualmente bloqueada pela unidade defeituosa. Por exemplo, se o OpenFile tiver sido chamado na unidade de DVD incorreta, outras solicitações de arquivo poderão ficar suspensas até que a unidade de DVD expire, mesmo que estejam apenas lendo da unidade do sistema.

Talvez o programa chame GetOpenFileName, que mostra uma caixa de diálogo renderizada pelo SO que assume o controle do encadeamento até retornar. Essa janela lista todas as unidades no sistema, enumerando a lista de unidades. Se a API estiver suspensa em uma unidade defeituosa, o resultado final é o mesmo: a caixa de diálogo está congelada, congelando todo o aplicativo, aguardando que essa unidade fique disponível / livre.

    
por 30.04.2015 / 21:29