Лабораторная работа

Передача информации между процессами. С++

Категория:

Лабораторная работа

Дисциплина:

Системное программирование

Город:

Беларусь, Минск

Учебное заведение:

БНТУ, ФИТР

Тег:

#Системное_программирование

Стоимость работы:

16 руб.

Оценка: 10
Объем страниц: 12
Год сдачи: 2022
Дата публикации: 14.06.2022

* Кроме файла с работой, также есть архив с дополнительными файлами.

Описание дополнительных файлов:

Папка LW-4 — содержит исходный код программы на языке C++

Фрагменты для ознакомления

Лабораторная работа № 4

ПЕРЕДАЧА ИНФОРМАЦИИ МЕЖДУ ПРОЦЕССАМИ

Вариант 06

 

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

Изучаемые вопросы:

1. Функции для работы с файлами, отображаемыми в память.

2. Файлы данных, проецируемые в память. 

3. Совместный доступ процессов к данным через механизм проецирования. 

4. Обработка текстового и графического файлов двумя процессами 

5. Работа с файлами больших размеров. 

6. Взаимодействие процессов через Page файл.

 

Постановка задачи:

1. Осуществить обмен текстовыми и графическими данными между двумя приложениямиP1 и P2 с выводом информации в заданную область окна программы. 

2. Реализовать обработку процессом файлов больших размеров. 

3. Осуществить обмен данными между двумя приложениями P1 и P2 через Page файл с выводом информации в заданную область окна программы.

 

4.1. Функции для работы с файлами, отображаемыми в память.

Для создания или открытия объект ядра "файл" использовал:

hFile = CreateFileW(FileName,                  // имя файла
             GENERIC_READ,                           // способ доступа
             NULL,                                   // совместный доступ
             NULL,                                   // атрибуты доступа
             OPEN_EXISTING,                          // проверка существования
             FILE_ATTRIBUTE_NORMAL,                  // атрибуты не установлены
             NULL);                                  // дескриптор временного файла

 

Для создания объекта ядра “проецируемый файл”:

             hMappingFile = CreateFileMappingW(hFile, // дескриптор файла
                    NULL,                             // атрибуты доступа
                    PAGE_READONLY,                    // атрибут защиты
                    0,                                // размер файла в виде
                    fSize, /*~ 0*/                    // 64-разрядного числа
                    Name);                            // имя объекта

 

Чтобы отобразить объект “проецируемый файл” или его часть на адресное пространство процесса, применяется функция:

ptrVoid = MapViewOfFile(hMappingFile,   // дескриптор проекции файла
                           FILE_MAP_READ,                    // доступ к данным
                           0,                         // смещение в файле для отображения
                           0,                         // как 64-битное представление
                           0);/*~ fSize*/             // размер представления 

 

Для открытия объекта ядра «проекция файла» использовал:

hFileMemory = OpenFileMappingW(FILE_MAP_READ,
             FALSE,                     // наследование дескриптора
             nameProccess);

 

Для открепления файла от адресного пространства процесса используется функция:

UnmapViewOfFile(ptrVoid);

 

Для уничтожения объектов «файл» и «проецируемый файл» использовал:

CloseHandle(hFile);

 

4.2. Файлы данных, проецируемые в память.

4.3. Совместный доступ процессов к данным через механизм проецирования.

Создаётся два процесса. Второй (additionalLW.exe) процесс вызывается первым и создает страничный файл для хранения массива данных, а первый процесс читает этот страничный файл и выведет данные в элемент управления:

4.4. Обработка текстового и графического файла двумя процессами.

4.5. Работа с файлами больших размеров.

4.6. Взаимодействие процессов через Page файл.

 

Результаты работы программного обеспечения:

Передача информации между процессами

 

Выводы:

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

2. Используют обычно технику проецирования файла в памяти:

  • экономии памяти;
  • ускорения доступа.

3. Этапы создания проекции файла в памяти:

  • Создание или открытие файла при помощи функции CreateFile();
  • Создание объекта ядра «проекция файла» CreateFileMapping();
  • Проецирование файла на адресное пространство процесса. Для этого предназначена функция MapViewOfFile().

….

79