Прогон программы, иллюстрирующей отложенное выделение памяти

#include <windows.h>

#include <stdio.h>

void main(void)

{

HANDLE hMapFile;

LPVOID lpMapAddress;

HANDLE hFile;

char * String;

hFile = CreateFile("MyFile.txt",GENERIC_READ | GENERIC_WRITE,

FILE_SHARE_READ| FILE_SHARE_WRITE, NULL, OPEN_ALWAYS,

FILE_ATTRIBUTE_NORMAL,NULL);

if (hFile == INVALID_HANDLE_VALUE) printf("Could not open file\n");

hMapFile = CreateFileMapping(hFile, NULL,

PAGE_WRITECOPY, // копирование при записи

0,0,"MyFileObject");

if (hMapFile == NULL) printf("Could not create file-mapping object.\n");

lpMapAddress = MapViewOfFile(hMapFile,

FILE_MAP_COPY, // копирование при записи

0,0,0);

if (lpMapAddress == NULL) printf("Could not map view of file.\n");

String = (char *)lpMapAddress;

getchar();

sprintf(String, "Hello, world");

printf("%s\n", String);

if (!UnmapViewOfFile(lpMapAddress)) printf("Could not unmap view of file.\n");

}

В приведенной программе часть страниц отображаемого файла помечена атрибутом PAGE_WRITECOPY. Запись текстовой строки в данный регион памяти осуществляется после нажатия клавиши "Enter". Рекомендуется осуществить прогон программы, наблюдая за счетчиком "запись копий страниц" при нажатии клавиши "Enter". Любопытно, что содержимое исходного файла при этом не меняется.

Контроль процессом памяти другого процесса

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

Для доступа к памяти процесса нужно получить его описатель. Наиболее естественный способ получения описателя - получение описателя дочернего процесса путем извлечения его из параметра lProcessInformation функции CreateProcess.

Для создания регионов в памяти другого процесса можно использовать функцию VirtualAllocEx, которой нужно передать описатель этого процесса в качестве параметра. Для доступа к памяти другого процесса применяются функции ReadProcessMemory и WriteProcessMemory.

Написание, компиляция и выполнение программы, осуществляющей доступ к памяти дочернего процесса

Рекомендуется самостоятельно написать программу, которая создает регион памяти в адресном пространстве дочернего процесса и записывает в него текстовую строку. Задача дочернего процесса - вывести эту строку на экран.

Заключение

Базовой операцией менеджера памяти является трансляция виртуального адреса в физический с помощью таблицы страниц и ассоциативной (TLB) памяти. В ряде случаев, для реализации разделяемой памяти, интеграции с системой ввода-вывода и др., применяется прототипная таблица страниц, которая является промежуточным звеном между обычной таблицей страниц и физической памятью. Для описания страниц физической памяти поддерживается база данных PFN (page frame number). Локализацию страниц памяти, контроль процессом памяти другого процесса и технику копирования при записи можно отнести к интересным особенностям системы управления памятью ОС Windows.

Лекция 11. Интерфейс файловой системы

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

Введение

В большинстве компьютерных систем предусмотрены устройства внешней (вторичной) памяти большой емкости, на которых можно хранить огромные объемы данных. Чтобы повысить эффективность использования этих устройств, был разработан ряд специфичных для них структур данных и алгоритмов.

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

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

В данном курсе основное внимание будет сосредоточено на NTFS - базовой файловой системе ОС Windows. Вначале будет рассмотрен интерфейс, то есть вопросы структуры, именования, защиты файлов; операции над файлами; организация файлового архива при помощи каталогов. В следующей лекции будут проанализированы проблемы реализации файловой системы, способы выделения дискового пространства и связывания его с именем файла, обеспечение производительной работы файловой системы и ряд других вопросов, интересующих разработчиков системы.

Наши рекомендации