Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lektsii_OS_chast_2.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.55 Mб
Скачать

Обмен данными через разделяемые файлы.

В тех случаях, когда скорость обработки данных не является определяющей, обмен между процессами может быть выполнен через один и тот же файл, который называется разделяемым файлом. Термин «разделяемый» означает, что файл может совместно использоваться в разных процессах. Чтобы сделать любой файл разделяемым, необходимо при создании файла задать для него соответствующие свойства. В Windows создание файла выполняется с помощью функции CreateFile. Одним из параметров является флаг доступа к файлу. Имеется две разновидности флагов:

  1. FILE_SHARE_READ;

  2. FILE_SHARE_WRITE.

Первый позволяет обеспечить совместный доступ к файлу для чтения данных, а второй – для записи. Возможна логическая комбинация обоих флагов.

При использовании разделяемых файлов необходимо создать файл или открыть уже созданный файл с помощью функции OpenFile, указывая при создании или открытии соответствующие имя и флаги. При этом, эти операции должны выполняться в процессе-сервере и клиенте.

Если в одном процессе указывается флаг для записи, а в другом – для чтения, то в результате может быть выполнен обмен данными между сервером и клиентом. При этом, в процедуре обмена обязательно должны использоваться средства синхронизации, поскольку чтение данных в клиенте может быть выполнено только после их записи в файл, которая инициируется процессом-сервером.

Обмен данными через файлы, проецируемые в память. Создание файлов, проецируемых в память.

В общем случае, процессор ЭВМ не может работать непосредственно с содержимым файла до того, как он не будет прочитан в память. Если требуется просто прочитать файлы, а также модифицировать их, то помимо операции чтения данных из файла, должна быть выполнена операция записи модифицированных данных в файл. Поэтому стандартная процедура работы с дисковым файлом включает в себя следующие шаги:

  1. Создание или открытие файла на диске;

  2. Чтение требуемого участка файла в созданную заранее область памяти процесса;

  3. Модификация прочитанных данных в программе процесса;

  4. Запись модифицированных данных на прежнее место в дисковом файле.

Обычно, работа с файлом требует обращения не к одному участку внешней памяти, а к нескольким. Тогда перечисленные действия в программе должны выполняться многократно. Это ведет к снижению скорости выполнения программ. Более эффективно было бы чтение всего файла в ОП, поскольку в этом случае требуется только одна операция чтения в ОП в начале цикла обработки, и одна операция записи во внешнюю память в конце цикла. Однако такой подход возможен только для файлов относительно небольшого размера. Кроме того, в этом случае снижается надежность всей процедуры обработки, поскольку модифицированные данные записываются на диск только в конце сеанса обработки, и любой сбой в течение этого сеанса может привести к потере модифицированных данных.

В Windows существует способ работы с файлами, практически исключающий многократные физические операции чтения или записи в файл, которые должны выполняться средствами прикладной программы. Этот способ называется проецированием файла в память (FILE MAPPING). Он заключается в том, что конкретный файл включается в состав физической памяти процесса за счет создания системного объекта с названием «проекция файла».

Прим. Под ФП понимается совокупность участка ОП и участка файла внешней памяти.

Затем, в ВАП процесса выделяется участок (регион) достаточного размера, и часть физической памяти, включающая в себя объект типа «проекция файла», отображается на этот регион.

Отображение заключается в преобразовании адресов внешней памяти в виртуальные адреса региона. Дальнейшие операции с файлом заменяются операциями с его отображением, то есть проекцией файла в ВАП процесса. Для получения проекции файла и отображении её на регион ВАП используются соответствующие системные функции. В целом, схема проецирования файла в память заключается в следующем:

Основные этапы получения проекции файла в память включают:

  1. Создание или открытие файла функциями CreateFile или OpenFile;

  2. Создание в физической памяти системного объекта типа «проекция файла» с помощью системной функции CreateFileMapping;

  3. Выделение в ВАП процесса региона и отображение на него созданной проекции с помощью функции MapViewOfFile;

  4. Обращение по адресам региона, на который отображена проекция файла, с целью выполнения операций чтения и записи данных.

После проецирования файла в память, к нему возможны обращения как к обычной структуре данных типа массива, расположенной в ОП. В прикладной программе для этого не требуется выполнение файловых операций чтения или записи.

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

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

В программе, в любой момент, файл, независимо от его размера, рассматривается как находящийся в ОП массив данных. Любая модификация записей спроецированного файла автоматически переносится во внешнюю дисковую память. Эта операция также выполняется средствами ОС, и прикладная программа в ней не участвует.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]