Por que uma reinicialização é necessária apenas em algumas atualizações?

17

Por que o Ubuntu não exige reinicializações em mais atualizações? Eu sei que para atualizações do kernel e coisas como drivers de vídeo, não é possível carregar as alterações sem reiniciar. Mas estou curioso sobre atualizações mais básicas de pacotes bem fundamentais que geralmente não exigem reinicializações. Coisas como Telepathy, glibc, gtk, etc. Por que pacotes como esse não requerem uma reinicialização para serem atualizados? A nova versão está sendo executada logo após uma atualização?

Outro exemplo seria o Gwibber. Recebi e atualizei recentemente para o gwibber através do Update Manager enquanto o gwibber estava sendo executado. A atualização foi concluída com sucesso. O gwibber estaria executando a nova versão sem manualmente reiniciá-lo? E isso é o mesmo para outros pacotes? (Eu sei que alguns como mysql e apache reiniciam automaticamente em uma atualização). Para pacotes que não são reiniciados automaticamente, isso não pode ser um problema de segurança para a correção de segurança?

Isso ocorre porque eu tenho rodado o OS X por cerca de uma semana e quase todas as atualizações requerem uma reinicialização, mesmo que não seja relacionado ao driver do kernel / vídeo (até onde eu sei - elas não oferecem um muita informação). Um amigo meu disse que a Apple força as reinicializações na maioria das atualizações "apenas no caso" seria estranho se você não reiniciasse. O Windows é o pior, porque quase qualquer instalação / desinstalação ou atualização requer uma reinicialização (geralmente forçando os desligamentos a demorarem muito). Isso pode ser um pouco amplo para esse local, mas por que os diferentes sistemas operacionais lidam com isso de forma tão diferente? Ou, mais específico para o Ubuntu: por que o Ubuntu não segue uma política de reinicialização mais rígida?

    
por gregghz 24.04.2011 / 07:22

1 resposta

23

Sempre que você abrir ou executar um arquivo no Windows, o Windows bloqueará o arquivo (isso é uma simplificação, mas geralmente é verdade.) Você pode ter encontrado esses erros irritantes em que não pode excluir um arquivo porque outro processo bloqueio exclusivo sobre ele. É por isso que sempre que o Windows precisa se atualizar, você precisa de uma reinicialização para que ele tenha efeito. O Windows colocará em fila as atividades de substituição e exclusão de arquivos para a próxima inicialização (quando nada tiver um bloqueio em nada).

Por outro lado, o Linux tem um mecanismo no qual não é o arquivo que está bloqueado, mas sim os dados subjacentes no disco. Isso pode parecer uma diferenciação trivial, mas significa que o registro do arquivo no índice do sistema de arquivos pode ser excluído sem perturbar qualquer programa que já tenha o arquivo aberto. Assim, você pode excluir um arquivo enquanto ele ainda está em execução ou em uso e continuará a existir no disco, desde que algum processo tenha um identificador aberto para ele, mesmo que sua entrada na tabela de arquivos tenha desaparecido. Isso permite que o Linux substitua completamente um programa enquanto ele ainda está em execução e, em seguida, simplesmente reinicie o programa ou apenas espere o processo sair naturalmente. Uma vez que a instância antiga é eliminada, os arquivos antigos não existirão mais e os novos arquivos terão residido em suas entradas na tabela de arquivos.

Portanto, desde que um determinado arquivo não seja especial de alguma forma (como, por exemplo, o arquivo de imagem do kernel ou arquivos que pertençam a sistemas de baixo nível similares), o atualizador pode normalmente atualizar-no-local assim. Tenho certeza de que há casos e situações especiais em que isso não seria uma boa ideia, mas na maioria dos casos não há problema.

Quanto ao motivo de o OS X fazer isso, a teoria "apenas no caso" parece plausível.

    
por Andrew Lambert 24.04.2011 / 10:50

Tags