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 Chrome
e Microsoft Word
possam oferecer serviços de "restauração" após a falha do computador?
windows
filesystems
crash
restore
Pacerier
fonte
fonte
Respostas:
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.
fonte
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.
fonte
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:
RecoverData()
RecoverData()
no aplicativoRecoverData()
tenta recuperar dados sobre o documento aberto no momento, enquanto isso continua fazendo ping no Windows para dizer que ainda está ocupado se recuperando.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
fonte
RecoverData()
?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:
fonte
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.
fonte
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.
fonte
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!
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.
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.
fonte
kindall
foi 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, comokindall
afirmado, essas informações são úteis principalmente para desenvolvedores que tentam determinar o que causou o erro.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).
fonte
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.
fonte
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.
fonte
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.
fonte
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.
fonte
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.
fonte
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.
fonte
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