3468
.pdfreturn;
}
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