4

Сегодня я попытался переместить файл документа Microsoft Word из одного места в другое, когда он был открыт в Microsoft Word. Но затем он сказал, что не может двигаться, так как он открыт в Microsoft Word. То же самое происходит, когда мы пытаемся переместить файлы MP3, когда они воспроизводятся в медиаплеере. Я думаю, что есть много других подобных случаев.

Но почему он не может перемещать файлы, когда они открываются в каких-либо программах? Какова основная идея этого?

2 ответа2

18

Концепция, о которой вы спрашиваете, называется управлением параллелизмом и синхронизацией и относится к набору методов, предотвращающих одновременные (и, вероятно, конфликтующие) изменения в части данных, доступной нескольким процессам.

примером учебника концепции является семейная пара с совместной дебетовой картой и 1000 $ на их счету. Если они находятся в банкоматах на противоположных сторонах города, и оба снимают 1000 долларов в один и тот же момент, и не было контроля параллелизма, банк получит в общей сложности 2000 долларов, что, очевидно, было бы неправильно. Вероятно даже, что оба банкомата уменьшат сумму до 0, а не вычтут 1000 каждый, поэтому банк может даже не заметить, что их обворовали.

Точнее говоря, параллелизм относится к ситуациям, когда одновременно происходит несколько вещей (и проблемы, которые могут возникнуть), а синхронизация - это набор методов, позволяющих избежать проблем параллелизма, часто путем контроля того, кто может изменять данные в любой момент времени, используя блокировки ,

Чтобы иметь проблему с параллелизмом, вам понадобится пара компонентов:

  1. система должна реализовывать несколько процессов или потоков (часто для поддержки нескольких пользователей, но это не является строгим требованием).
  2. процессы / потоки / пользователи должны иметь доступ к общему биту данных, который они могут изменить.

В этом случае файл - это данные, а два процесса - это копия и редактор / проигрыватель, которые обращаются к файлу.

Файловые системы имеют дело с параллелизмом файлов как неотъемлемой чертой любой современной ОС. API файловой системы MS (.dll) справляются с этим сценарием, создавая блокировки синхронизации для файлов, когда процесс открывает их. Блокировки предотвращают другие операции над файлом, пока один или другой процесс изменяет данные. для файлов с обычным содержимым, когда первый процесс открывает файл для чтения / записи, он устанавливает блокировку записи, которая предотвращает изменение файла всеми другими процессами. Кроме того, когда этот файл активно записывается, устанавливается блокировка чтения, чтобы, если другой процесс попытается прочитать данные, он не получит их часть до изменения, а часть - после. эти блокировки чтения снимаются практически сразу после записи файла, но блокировки записи сохраняются до тех пор, пока файл не будет закрыт. Блокировки чтения также устанавливаются, когда процесс читает данные, чтобы предотвратить изменения файла во время чтения. Общая идея заключается в том, что вы не можете писать, когда существует блокировка чтения, и в любой момент времени может существовать не более одной блокировки записи, поэтому файл может быть записан только в том случае, если нет блокировок или только одна блокировка записи, принадлежащая процессу пишу.

Обычно доступ к файлам содержимого осуществляется с использованием того, что MS называет « семантикой однократной записи с множественным чтением », что обычно позволяет копировать файлы, о которых идет речь, поскольку процесс копирования не требует блокировки записи. Я точно не знаю, почему ваш MP3-плеер блокирует mp3, но я догадываюсь, что это связано с редакторами метаданных, встроенными в плеер. В любом случае, важно отметить, что сам процесс имеет некоторый контроль над тем, какие блокировки установлены, и нет хорошего способа узнать, о чем думал программист.

Некоторые документы MS Office еще больше усложняют проблему, потому что они создают временные файлы для редактирования (в первую очередь, word и power-point), что может позволить нескольким редакторам одновременно изменять свои собственные копии и использовать специальные методы, чтобы предотвратить сохранение пользователем User2 изменения документа и перезаписи User1, сохраненные после того, как User2 открыл файл. Однако Excel и Access могут заблокировать доступ на запись для пользователя User2 и открыть окно с вопросом, хотите ли вы получить уведомление о выходе пользователя из файла1 или разрешить открытие файла в режиме только для чтения для пользователя User2. Версии MS Office решают эти проблемы по-разному. Например, в office '07 мне пришлось закрыть документ, прежде чем прикреплять его к электронному письму. в 2010/2013 я не должен. Это также влияет на доступ к документу локально или через сетевой ресурс.

Это чрезвычайно сложный набор тем, которые оказывают огромное влияние на многопроцессорные / многопользовательские системы неисчислимыми способами, поэтому тактика, используемая для каждой ситуации, бесчисленная. Я даже не поцарапал поверхность в этом посте. это становится действительно забавным, когда имеешь дело с многопоточными алгоритмами ввода-вывода и управлением параллелизмом базы данных. Ссылки, приведенные в этом документе, должны послужить хорошей отправной точкой для изучения концепций на любом уровне глубины, соответствующем вашим потребностям и актуальности.

Удачи

0

Ответ Фрэнка очень полный, но длинный. Вот простая причина. Вы не можете переместить файл, потому что программа (Office или MP3 Player) использует его. Перемещение файла копирует его, а затем удаляет оригинал. Удаление файла, который используется, не допускается.

Системы Unix, кажется, позволяют вам удалять файлы, которые используются. Хитрость в том, что файл фактически не удаляется, пока все программы не прекратят его использовать. Файл невидим, но все еще находится на диске. Но Windows просто говорит «Нет!"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .