Как Ubuntu может обновлять запущенные приложения, не закрывая их, а Windows - нет?

11

Под управлением Ubuntu 12.04 64-bit.

Я в основном обновляюсь через терминал используя sudo apt-get update && sudo apt-get upgrade.

Я не понимаю этого: наличие активного запуска Firefox или любого другого такого интегрированного приложения вместе с процессом обновления, запущенным одновременно в терминале, который обновляет Firefox до более новой версии. Я знаю, что перезапуск Firefox приведет к открытию Firefox как более новой версии.

Например, при обновлении в MS Windows 7 он запрашивает закрытие активного экземпляра того же приложения (если оно активно) перед обновлением.

Как Ubuntu заменяет активное рабочее приложение на более новую версию, не мешая его активному экземпляру?

Что именно происходит в конце процесса обновления в этом случае?

atenz
источник

Ответы:

19

При обновлении примера в MS Windows 7 запрашивается закрытие активного экземпляра того же приложения (если оно активно) для обновления.

Как Ubuntu заменяет активное работающее приложение на более новую версию, не мешая его активному экземпляру. [Замечено для многих пакетов]

Я постараюсь объяснить это как можно проще. Большинство файловых систем Linux немного отличаются от файловых систем Windows (NTFS). По своей сути оба содержат индексную таблицу имен файлов (записей), указывающих на фактические данные, хранящиеся на диске. В NTFS это называется MFT (главная таблица файлов) - вы могли видеть прокрутку этого имени, если вы запускаете chkdsk.

Однако «небольшая разница», о которой я упоминал, состоит в том, что индексные таблицы Linux, если хотите, состоят из двух уровней: индекса и inode . Иноды содержат фактические метаданные файла, включая его физическое местоположение на диске; «имя файла» в индексе - это просто (жесткая) ссылка на индекс.

Когда вы обновляете / обновляете работающее приложение, обновленные файлы записываются на диск, иноды, указывающие на новые / создаваемые данные, а также обновляются имена файлов, чтобы связываться с этими новыми инодами. Но для любых файлов, которые уже используются запущенным приложением (т. Е. Существуют файловые дескрипторы), их имена будут продолжать указывать на старые inode (которые содержат старые данные), пока файловые дескрипторы не будут закрыты. Обычно это происходит при выходе из приложения или для некоторых системных файлов при перезагрузке. На этом этапе старые данные фактически удаляются с вашего диска.

иш
источник