Como o computador é capaz de salvar coisas antes de travar?

52

Fiquei com a impressão de que, quando um computador falha, algo deu errado e não pode mais funcionar.

Eu queria saber como é que o computador é capaz de salvar as coisas antes de travar?

O computador é realmente capaz de saber quando está travando (e, portanto, informa todos os processos: " Salve o mais rápido possível, porque estou prestes a travar ")?

Caso contrário, como é possível que programas gostem Chromee Microsoft Wordpossam oferecer serviços de "restauração" após a falha do computador?

Pacerier
fonte
13
Eu gosto de como a resposta para a pergunta está no título da pergunta.
Chris
Como as luzes de emergência podem acender quando a energia está desligada?
JoelFan
@JoelFan eles não estão se a sua bateria / gerador está morto = P
Mechaflash

Respostas:

6

Quando um computador "falha", pode ser, por exemplo, devido a uma falha de energia "abrupta" (caso em que nada pode ser feito), pode ser devido a algum tipo de evento interno desagradável (por exemplo, tabelas de páginas corrompidas) que Da mesma forma, impede-se de fazer qualquer coisa, ou pode ser devido a alguma condição que simplesmente impede "operações adicionais" de alguma forma - talvez novos processos não possam ser iniciados, talvez a exibição não possa ser atualizada, talvez o sistema simplesmente fique sem armazenamento.

Nessas últimas situações, o sistema operacional ainda pode funcionar, dentro de limites, e pode pelo menos concluir operações de disco que estavam em andamento, fechar bem arquivos etc. Além disso, se um pouco mais de função for possível, o sistema operacional poderá informar os vários aplicativos processos para se desligar de forma limpa.

Porém, mesmo que o sistema fique "rígido", o sistema como um todo e os aplicativos individuais podem ter mantido um sistema de "diários" e / ou "pontos de verificação" para permitir que o estado do sistema como um todo e aplicativos individuais sejam restaurados até um ponto "atômico", onde tudo é "internamente consistente" e onde um mínimo de dados importantes foi perdido.

Isso tudo não é realizado com um único mecanismo, mas com camadas de funcionalidade no nível do sistema e do aplicativo.

No que diz respeito especificamente a falhas de energia, pode ou não haver uma notificação prévia, e o aviso de "antecedência" pode ser uma fração de segundo ou (com o no-break ou a bateria do laptop com falha) vários minutos. O que pode ser feito depende da quantidade de aviso.

Na maioria dos casos, com um sistema de desktop sem UPS, na melhor das hipóteses, é possível "interromper" as operações do disco para que nenhum disco fique no meio de uma gravação quando a energia finalmente desaparecer. Isso evita a geração de setores defeituosos no disco. Quando a RAM era muito menor, costumava haver tempo suficiente (com grandes capacitores na fonte de alimentação, ou mesmo, estranhamente, usando a energia armazenada no rotor da unidade de disco para gerar eletricidade) para gravar a RAM no disco antes da energia caiu, mas essa possibilidade praticamente desapareceu quando a RAM cresceu mais de 100 milhões.

[E observe que, antigamente, quando as memórias eram feitas com "núcleos" magnéticos, a RAM era inerentemente preservada quando a energia era perdida (embora uma palavra específica sendo lida / gravada quando a energia falha pudesse estar corrompida). Isso facilitou a recuperação desses sistemas antigos por falta de energia.]

No entanto, com algo parecido com um no-break (que pode fornecer de alguns minutos a várias horas de energia adicional), existem várias outras opções. Uma é simplesmente desligar o sistema, como se você tivesse solicitado "desligar". Isso faz com que cada aplicativo termine sozinho e, em seguida, o sistema como um todo grava tabelas permanentes e é encerrado. Isso pode levar um longo tempo (como tenho certeza de que muitos de vocês notaram). Mas também é possível usar uma estratégia de "hibernação", onde a RAM é gravada no disco como um único bloco e, em seguida, o sistema é desligado. No cenário "hibernar", ao restaurar a energia, a RAM é lida de volta exatamente de onde foi gravada, alguns bits aqui e ali são distorcidos e a execução é retomada de onde parou.

Em alguns sistemas antigos de "grande ferro", uma estratégia semi-hibernada era usada para fazer um desligamento de emergência: a memória seria gravada como acima, mas quando a energia fosse restaurada e a memória lida, ocorreria um desligamento padrão. Isso foi feito porque alguns bits do estado do sistema (principalmente nos controladores de E / S) não puderam ser salvos / restaurados com confiabilidade para permitir a operação continuada.

Daniel R Hicks
fonte
82

O Chrome e o Microsoft Word salvam periodicamente seu estado atual enquanto você trabalha. Se o aplicativo ou o computador travar, quando os aplicativos forem reiniciados, eles procurarão um estado salvo no disco e o restaurarão para você. Eles não precisam prever o acidente; eles estão constantemente salvando seu estado, caso algo dê errado.

Stephen Jennings
fonte
10
Isso é apenas parcialmente verdade. Os SOs agora fornecem estruturas para ajudar os aplicativos a se recuperarem de exceções.
surfasb
3
@surfasb: Você poderia ser mais específico? Sempre conseguimos captar sinais em sistemas semelhantes ao Unix, mas cabe ao programador de aplicativos fazer algo a respeito.
Dietrich Epp
5
Esta resposta está correta. A maioria dos aplicativos com recuperação de erros salva seus dados periodicamente. O sistema operacional não pode saber quando está prestes a falhar. E quando descobrir, é tarde demais.
precisa saber é o seguinte
11
@surfasb, a pergunta feita sobre o travamento do computador (presumivelmente o Kernel), não o aplicativo recebendo uma exceção, que geralmente é tratada e está tudo bem, ou tudo está bem, ou, na melhor das hipóteses, os núcleos do processo, não salva seus documentos.
Psusi
62

EDIT: Isso só funciona quando um aplicativo falha, não o Windows.

Desde o Windows Vista, existe uma nova API que permite que o Windows chame uma função especial no aplicativo quando ele falha, para tentar recuperar os dados antes de serem desligados. Funciona assim:

  • O aplicativo inicia
  • O aplicativo chama a função Windows: quando falhar, execute RecoverData()
  • ...
  • Falhas no aplicativo
  • Windows é executado RecoverData()no aplicativo
  • RecoverData() tenta recuperar dados sobre o documento aberto no momento, enquanto isso continua fazendo ping no Windows para dizer que ainda está ocupado se recuperando.
  • Quando RecoverData()termina / atinge o tempo limite / para de executar ping, o Windows encerra o aplicativo e o reinicia.

Mais informações: http://msdn.microsoft.com/en-us/library/windows/desktop/aa373351(v=VS.85).aspx

ZippyV
fonte
8
+1: Infelizmente, essa é uma das ferramentas mais subutilizadas. E também, infelizmente, essa não é a resposta mais votada?
surfasb
2
@ZippyV, no entanto, não é verdade que, se não for o aplicativo que falha, mas o próprio Windows que falha, o computador não tem a capacidade de ligar RecoverData()?
Pacerier
12
O OP está perguntando sobre a falha do computador (SO), não da falha do aplicativo, portanto, essa resposta é irrelevante.
vitaut
É verdade que, no caso de um BSOD, isso não funcionará.
ZippyV
Que API boba para MS adicionar. Quando chega a esse ponto, você não pode confiar no aplicativo para salvar nenhum dado, e é por isso que os aplicativos foram projetados por décadas para salvar dados antes que algo dê errado.
Psusi
16

Bem, eles apenas salvam o estado atual antes de travarem. Como um salvamento automático a cada X segundos.

Eu acho que é preciso realmente diferenciar:

  • Falha no hardware: capaz de recuperar apenas com pontos de verificação anteriores
  • Crash do SO: não há como o aplicativo salvar dados, o SO pode soltar algo como um dump principal
  • Falha no aplicativo: os recursos do SO para falha no aplicativo podem salvar informações
inf
fonte
Sim, eu estava falando sobre as falhas mais graves, como OS / hardware trava
Pacerier
10

Depende da gravidade do acidente. Uma falha muito grave (no nível mais baixo do computador) fará com que o computador simplesmente pare. O único trabalho que é salvo é que cada aplicativo salva automaticamente seus dados periodicamente.

Para falhas menos graves, o computador avisa a cada programa que ele precisa ser desligado. Se o programa ouvir esta mensagem, é onde o programa salvará os dados atuais. No entanto, nem todos os programas prestam atenção a esta mensagem.

beeudoublez
fonte
11
Eu não acho que a última parte seja realmente possível. O Windows fornece apenas um BSoD se detectar uma exceção no modo kernel ou outro erro fatal que significa que alguns dados no espaço de endereço do kernel estão corrompidos. Como os programas no modo kernel (drivers, etc) têm acesso ilimitado à memória, o erro não pode ser facilmente isolado nos componentes; portanto, todo o sistema deve ser desligado no modo kernel. A sinalização de programas no espaço do usuário para salvar dados significa essencialmente retomar grande parte da funcionalidade do kernel, o que é muito perigoso.
billc.cn
2
A última parte parece se referir a falhas no espaço do usuário, não BSoDs.
precisa saber é o seguinte
8

Os programas salvam os estados periodicamente em um arquivo no disco. O computador não é capaz de saber. De fato, o despejo de memória nem é executado usando o driver de disco - o sistema simplesmente pagina toda a memória.

kinokijuf
fonte
A paginação é feita com o driver de disco - sem ele, o kernel não saberia como gravar no disco.
Psusi
@psusi Quando o sistema falha, o arquivo de paginação é o único local em que o kernel sabe que pode gravar com segurança.
precisa saber é o seguinte
Sim, e ele realmente escreve através do driver de disco.
Psusi
11
Não. Ele é feito por meio de um driver especial "dump_atapi.sys" (substitui o atapi pelo seu controlador SCSI), NÃO pelo driver de disco padrão. Eu acho que até usa Int 13h.
precisa saber é o seguinte
6

Fiquei com a impressão de que, quando um computador falha, algo deu errado e não pode mais funcionar.

Sim, isso é completamente verdade. No entanto, de uma perspectiva lógica, seu programa não está sendo executado sem restrições no computador. O programa está sendo executado no sistema operacional!

Eu queria saber como é que o computador é capaz de salvar as coisas antes de travar? O computador é realmente capaz de saber quando está travando (e, portanto, informa todos os processos: "Salve o mais rápido possível, porque estou prestes a travar")?

Bem, no caso de pânico no BSOD ou no kernel, o sistema operacional determinou que algo realmente inseguro aconteceria (ponteiro de memória inválido, substituição de parte da memória alocada no kernel do sistema operacional, acesso a hardware inexistente etc.) .). Nesse caso, o sistema operacional solicita que todos os processos interrompam a execução, salva o conteúdo da RAM no disco (já que o sistema operacional também é responsável pelo gerenciamento da alocação de memória) e desliga ou reinicia o computador com segurança.

Os aplicativos individuais travam quando há uma exceção não tratada lançada pelo programa, que se propaga no sistema operacional. Nesse caso, o sistema operacional interrompe a execução do programa e fecha todos os identificadores de memória / arquivo abertos.

Nos dois casos acima, a execução do programa geralmente não é finalizada normalmente. Nesses casos, cabe aos aplicativos individuais recuperar seus próprios dados, pois de repente eles apenas "param" de executar.

Caso contrário, como é possível que programas como o Chrome e o Microsoft Word ofereçam serviços de "restauração" após a falha do computador?

IIRC, ambos os aplicativos salvam periodicamente os estados do aplicativo no disco para evitar a perda de dados se a condição mencionada ocorrer. Por exemplo, o Word salva automaticamente uma cópia de backup do seu documento de trabalho atual a cada poucos minutos, para que, no caso de uma repentina reinicialização forçada, você ainda possa recuperar seus dados (mais ou menos alguns minutos de trabalho) sem precisar fizeram qualquer coisa.

Mais uma vez, como desenvolvedor, é de sua responsabilidade garantir que seu aplicativo possa lidar com essas situações.

Avanço
fonte
"Nesse caso, o sistema operacional solicita que todos os processos interrompam a execução, salva o conteúdo da RAM em disco e encerra ou reinicia o computador com segurança". - o conteúdo da RAM que é salvo no disco, quando é "restaurado"?
Pacerier
11
Eles não fazem no curso normal dos eventos. No entanto, se o computador travar regularmente, um programador experiente poderá usar esse arquivo para descobrir a causa.
Kindall
@Pacerier como kindallfoi dito, eles não são restaurados (pois se você fez restaurar a RAM, você estaria no mesmo estado de execução que causou o computador para falhar em primeiro lugar!). Você pode alterar o que está gravado no disco no Windows em Propriedades do sistema -> Avançado -> Inicialização e recuperação. E, novamente, como kindallafirmado, essas informações são úteis principalmente para desenvolvedores que tentam determinar o que causou o erro.
Breakthrough
3

sim, o processo de restauração de dados não é apenas para falhas no computador, é para falta de energia, falhas no programa, sair sem salvar e muito mais ..

O que você disse é verdade: o computador não pode 'saber' quando está travando; no caso do Word, ele salva automaticamente periodicamente para que possa restaurar esses dados. No caso do Chrome, provavelmente armazena as informações de todas as guias em algum lugar e as exclui com êxito, ou quando uma sessão nova e diferente é iniciada .. ou provavelmente de outras maneiras também .. de qualquer maneira, dessa maneira, se não terminar com uma saída bem-sucedida, ele possui esses dados para restaurar.

Eu (obviamente) não trabalho para a Microsoft ou o Google, mas é provavelmente assim que funciona (ou quase).

FALL3N
fonte
2

Um programa pode gravar um sinalizador no disco que diz algo como "Na inicialização, se esse sinalizador estiver definido, algo deu errado". Na inicialização, esse sinalizador é verificado para ver se está definido. Se for, o programa sabe que algo deu errado.

O sinalizador sempre funciona, porque pode ser definido assim que o programa é iniciado e desligado quando o programa sai normalmente. Se o programa sair com erro inesperado, como um computador sendo desligado inesperadamente, o sinalizador ainda será definido, pois não saiu normalmente. Em seguida, o programa pode dizer que não saiu normalmente da última vez em que foi executado.

Paulo
fonte
2

Como o @bamboom diz, existem vários tipos diferentes de "falhas" no computador que precisam ser tratadas de maneira diferente. Efetivamente, uma queda de energia é muito diferente de, digamos, uma divisão inteira por erro zero.

Com muitas linguagens de programação também suportando exceções (ramificação controlada para um manipulador de erros quando algo der errado), existe a possibilidade de ter um manipulador de erros de nível superior para todo o aplicativo que possa salvar o estado do aplicativo (incluindo documentos abertos, alterações feitas , etc.) quando ocorre um erro de aplicativo não tratado. A idéia é tentar ler tudo de volta quando o aplicativo for reiniciado. Dependendo do tipo de erro e exatamente como isso é implementado, nem sempre funciona e, é claro, cabe a cada aplicativo separado fazer algo significativo diante de um erro e com os dados resultantes - mas pode ser um estratégia surpreendentemente eficaz para ajudar o usuário a se recuperar de uma falha com uma quantidade mínima de trabalho perdido.

um CVn
fonte
2

Eu gostaria de um ponto de baixo nível aqui, pois há uma tag do sistema de arquivos.

Você poderia ter se lembrado do sistema operacional Windows que usava o sistema de arquivos FAT / FAT16 / FAT32. Às vezes, havia problemas quando um usuário experimentava uma queda de energia e todo o sistema foi desativado. Depois de tentar reiniciar, diria que estava faltando um arquivo e não é possível inicializar. Isso aconteceu porque o FAT32 não acompanhou as operações que estava executando de maneira transacional.

Em contraste, o sistema de arquivos NTFS mais recente recebeu suporte de diário de sua infraestrutura, o que significa que, no baixo nível de SO e informações da camada de acesso ao hardware, seriam mantidas em uma condição segura e estável, registrando-se qualquer ação a ser confirmada.

oleksii
fonte
1

Em algumas aplicações em alguns sistemas operacionais, é possível conectar sinais como falhas de segmentação indicando violações de acesso à memória. Nesse caso, uma rotina simples pode salvar o máximo de dados possível. Se esses dados são ou não utilizáveis ​​é outra questão - a falha pode ter corrompido. Embora seja possível que um aplicativo continue em execução após interromper um sinal, isso não é recomendado, pois pode estar em um estado instável com memória corrompida que pode causar problemas adicionais.

Outros aplicativos usam o salvamento automático ou uma combinação de ambos - depende das necessidades do programa e do suporte da plataforma para captar esses sinais.

Thomas O
fonte
Dica: o Windows não os possui.
precisa saber é o seguinte
1

Uma falha no sistema é apenas outra rotina executada pelo sistema operacional. A razão pela qual um "travamento" acontece é que um programa ou biblioteca não foi carregado ou não foi carregado corretamente e tem a capacidade de causar danos permanentes aos arquivos do sistema. Portanto, como medida de segurança, o Windows força o desligamento / reinicialização e interrompe toda a gravação nos arquivos do sistema antes que esses arquivos possam ser editados pelo programa / biblioteca delinqüente.

Antes de desligar / reiniciar, ele executa as mesmas funções que um desligamento / reinício normal: por exemplo, salvar arquivos do sistema etc.

No caso de aplicativos únicos (Word / Chrome) que salvam seu "Progresso", essa é uma função interna do aplicativo, salvando seu progresso em intervalos específicos (que geralmente você também pode alterar nas configurações do programa). Se houver uma falha no aplicativo / sistema, após a reinicialização, ele poderá examinar esse arquivo e perguntar se deseja restaurar a sessão.

Mechaflash
fonte
1

Você pode estar falando sobre o desligamento do SO devido à perda de energia. Isso sem dúvida é um tipo de acidente.

A fonte de alimentação informa a placa principal (através de um fio de sinalização, suponho) sobre qualquer interrupção longa de sua entrada, a corrente CA adequada da parede, bem antes de interromper sua saída, que é a fonte adequada de corrente CC para a placa principal. Isso é possível porque armazena sua eletricidade em grandes capacitores. O sistema operacional recebe esse sinal na forma de uma interrupção de hardware.

Durante esse longo intervalo, há tempo suficiente para um sistema de arquivos com buffer de gravação transferir todas as gravações em buffer para o meio de armazenamento físico permanente, além de executar outras rotinas de desligamento.

Uma grande vantagem de um sistema de arquivos com buffer de gravação é que, ao classificar as gravações, ele pode reduzir os movimentos do braço nas unidades de disco rígido, tornando-as cada vez menos distantes.

Isso é semelhante ao que @oleksii diz em sua resposta, exceto que em um sistema de arquivos com buffer de gravação, as transações concluídas normalmente não são imediatamente transferidas, mas apenas armazenadas em buffer. Na falta de energia, as transações concluídas devem ser transferidas para o disco.

MarkDBlackwell
fonte
0

Os aplicativos podem capturar sinais em C e salvar determinados dados. Um sinal que você pode receber acidentalmente é a exceção aritmética (ANSI) de ponto flutuante do SIGFPE. Os erros incluem divisão por zero e excesso. Outro singal é o SIGINT, que é gerado pressionando ctrl + C no console ou no terminal que mata o aplicativo


fonte