Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Учебное пособие 800564

.pdf
Скачиваний:
3
Добавлен:
01.05.2022
Размер:
5.57 Mб
Скачать

return;

}

button1.IsEnabled = false; button1.Content = "Файл открыт"; textBox1.IsReadOnly = true; textBox2.IsReadOnly = true;

}

// Считываем последовательность символов private void button2_Click(object sender,

RoutedEventArgs e) { unsafe

{

char* vptr = (char*)MapViewOfFile( file, FILE_MAP_ALL_ACCESS, 0, 0,

200).ToPointer();

// Проверяем указатель if (vptr == null)

{

MessageBox.Show("MapViewOfFile is inva-

lid");

return;

}

textBox2.Text = "";

// Чтение последовательности

for (int i = 0; i < 200 && vptr[i] != 0; i++)

{

textBox2.Text += vptr[i];

}

UnmapViewOfFile((IntPtr)vptr);

}

}

131

}

}

Экранная форма результата работы программы, которая производит запись последовательности в файл, представлена на рис. 69, а программы, которая производит считывание последовательности из файла, - на рис. 70.

Рис. 69. Экранная форма записи последовательности в файл

Рис. 70. Экранная форма чтения последовательности из файла

132

Вопросы:

1.Функции ОС по управлению оперативной памятью в мультипрограммных системах.

2.Методы распределения памяти: классификация.

3.Страничная организация виртуальной памяти.

4.Сегментная организация виртуальной памяти.

5.Странично-сегментная организация виртуальной па-

мяти.

133

ЛАБОРАТОРНАЯ РАБОТА № 7. ДИСКОВАЯ ПАМЯТЬ И ФАЙЛОВАЯ СИСТЕМА ОПЕРАЦИОННОЙ

СИСТЕМЫ

Цель работы: приобретение навыков создания приложений, использующих стандартные методы получения информации о дисковой памяти, с помощью библиотек базовых классов .NET языка программирования C#, а также функциях API.

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

Краткие теоретические сведения

Организация работы пользователя с устройством хранения

В настоящее время между пользователем и устройством хранения информации находятся три посредника. В порядке удаления от АО их перечень следующий:

BIOS;

ОС;

программа, в которой непосредственно работает пользователь.

Все они, в сущности, занимаются укрупнением, обобщением наборов действий с устройством для решаемой задачи.

Рассмотрим каждый из этих уровней.

Уровень общения BIOS с АО - с контроллером дисковода. Каждая операция состоит из последовательности команд:

сброс контроллера;

134

разрешение работы контроллера;

инициализация контроллера;

определение параметров носителя;

включение двигателя устройства;

задержка приблизительно в полсекунды для того, чтобы дать двигателю разогнаться;

далее повторяются до полного успеха следующие дей-

ствия:

• перемещение магнитной головки на нужную дорожку;

• проверка результата перемещения;

• установка скорости передачи данных;

• считывание данных с определенного сектора на выбранной дорожке.

Кроме того, в задачу BIOS также входит своевременное обслуживание контроллера, в противном случае он будет либо не готов к приему данных, либо будет простаивать без дела.

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

Понятно, что ни о какой файловой системе речь еще не идет, поскольку само понятие файла в BIOS не определено, и вся работа идет на уровне секторов.

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

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

135

Таблица 6 Некоторые типы System.IO для получения информации о

дисках

Имя

Тип

Назначение

DriveInfo

конструктор

Обеспечивает доступ к

 

 

информации об

 

 

указанном диске

Name

свойство

Получает имя диска

DriveType

свойство

Получает тип диска

IsReady

свойство

Получает признак

 

 

возможности чтения с

 

 

диска

DriveFormat

свойство

Получает имя файловой

 

 

системы, такой как NTFS

 

 

или FAT32

AvailableFreeSpace

свойство

Указывает сумму

 

 

доступного свободного

 

 

пространства на диске

TotalFreeSpace

свойство

Получает общую сумму

 

 

свободного пространства,

 

 

доступного на диске

TotalSize

свойство

Получает полный размер

 

 

пространства памяти на

 

 

диске

RootDirectory

свойство

Получает корневой

 

 

каталог диска

Управление файлами в ОС

Функции управления файлами сосредоточены в файловой системе ОС. Операционная система представляет отдельный набор данных, хранящихся на внешнем накопителе, в виде файла – простой неструктурированной последовательности байтов, имеющих символьное имя. Для удобства работы с

136

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

Файловая система

Способом работы с файлами является использование системы управления файлами или иначе - файловой системы. Файловая система – это часть операционной системы, включающая:

совокупность всех файлов на носителе информации (магнитном или оптическом диске, магнитной ленте и др.);

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

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

Задачи, решаемые файловой системой, во многом определяются способом организации вычислительного процесса (наиболее простые – в однопрограммных и однопользовательских ОС, наиболее сложные – в сетевых ОС).

В многозадачных, многопользовательских ОС задачами файловой системы являются:

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

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

137

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

3)обеспечение поддержки совместного использования файлов несколькими пользователями (в том числе средства блокировки файла и его частей, исключение тупиков, согласование копий и т. п.);

4)обеспечение стандартизированного набора подпрограмм интерфейса ввода-вывода.

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

– создание, удаление, чтение и изменение файлов;

– контролируемый доступ к файлам других пользовате-

лей.

– структурирование файлов в соответствии с решаемой задачей;

– перемещение данных между файлами;

– резервирование и восстановление файлов в случае повреждения;

– доступ к файлам по символьным именам.

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

Файлы

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

138

информация составляет атрибуты (дескриптор) файла. Список атрибутов может быть различным в различных ОС. Пример приведен в табл. 7.

 

 

 

 

Таблица 7

 

 

 

Примеры атрибутов файла

Атрибут

 

 

Значение

Тип файла

 

Обычный, каталог, специальный и т. д.

Владелец файла

 

Текущий владелец

Владелец файла

 

Текущий владелец

Создатель файла

 

Идентификатор пользователя, создавшего

 

 

 

файл

Пароль

 

 

Пароль для получения доступа к файлу

Время

 

 

Создания, последнего доступа, последнего

 

 

 

изменения

Текущий

размер

Количество байт в записи

файла

 

 

 

 

Максимальный

 

Количество байтов, до которого можно

размер

 

 

увеличивать размер файла

Флаг «только чте-

0

- чтение / запись, 1 - только чтение

ние»

 

 

 

 

Флаг «скрытый»

 

0

- нормальный, 1 - не показывать в перечне

 

 

 

файлов каталога

Флаг «системный»

0

- нормальный, 1 - системный

Флаг «архивный»

 

0

- заархивирован, 1 - требуется архивация

Флаг «ASCII

/

0

- ASCII, 1 – двоичный

двоичный»

 

 

 

Флаг «произволь-

0

- только последовательный доступ, 1 -

ного доступа»

 

произвольный доступ

Флаг

«времен-

0 - нормальный, 1 - удаление после оконча-

ный»

 

 

ния работы процесса

 

 

 

 

139

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

Функции API

1) Функция GetDiskFreeSpace

Declare Function GetDiskFreeSpace Lib "kernel32.dll" Alias "GetDiskFreeSpaceA" (ByVal lpRootPathName As String, lpSectorsPerCluster As Long, lpBytesPerSector As Long, lpNumberOfFreeClusters As Long, lpTotalNumberOfClusters As Long) As Long

Платформа

Windows NT: Требуется Windows NT 3.1 или выше ;

используйте GetDiskFreeSpaceEx .

Windows 2000: Поддерживается ; используйте

GetDiskFreeSpaceEx .

GetDiskFreeSpace возвращает информацию относительно количества места на диске. Эта информация включает число секторов в каждом кластере, число байтов в каждом секторе, число свободных кластеров, и общего количества кластеров. Из-за ограничений 32-разрядного типа данных целого числа, эта функция работает должным образом только с дисками с объемом меньше, чем 2 МБАЙТ. Другая функция GetDiskFreeSpaceEx не имеет этих ограничений.

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

140