The design of the UNIX Operating System 90 страница



 

Функции ввода-вывода из файла

 

Системный вызов read выполняет чтение обычного файла

 

number = read(fd,buffer,count);

 

где fd - дескриптор файла, возвращаемый функцией open, buffer - адрес структуры данных в пользова-тельском процессе , где будут размещаться считанные данные в случае успешного завершения выполне-ния функции read, count - количество байтов, которые пользователю нужно прочитать, number - количе-ство фактически прочитанных байтов.

 

Синтаксис вызова системной функции write (писать):

 

number = write(fd,buffer,count);

 

где переменные fd, buffer, count и number имеют тот же смысл, что и для вызова системной функции read. Алгоритм записи в обычный файл похож на алгоритм чтения из обычного файла. Однако если в файле отсутствует блок, соответствующий смещению в байтах до места, куда должна производиться запись, ядро выделяет блок и присваивает ему номер в соответствии с точным указанием места в таблице содер-жимого индексного узла.

 

Обычное использование системных функций read и write обеспечивает последовательный доступ к фай-лу, однако процессы могут использовать вызов системной функции lseek для указания места в файле, где будет производиться ввод-вывод, и осуществления произвольного доступа к файлу. Синтаксис вызова системной функции:

 

position = lseek(fd,offset,reference);

 

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

 

Современные архитектуры файловых систем

 

Современные ОС предоставляют пользователю возможность работать сразу с несколькими файловыми системами (Linux работает с Ext2fs, FAT и др.). Файловая система в традиционном понимании становит-ся частью более общей многоуровневой структуры (см. рис. 12.14).

 

На верхнем уровне располагается так называемый диспетчер файловых систем (например, в Windows 95 этот компонент называется installable filesystem manager). Он связывает запросы прикладной программы с конкретной файловой системой.

 

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

 

Та же идея поддержки нескольких файловых систем в рамках одной ОС может быть реализована по-другому, например исходя из концепции виртуальной файловой системы. Виртуальная файловая система (vfs) представляет собой независимый от реализации уровень и опирается на реальные файловые систе-мы (s5fs, ufs, FAT, NFS, FFS. Ext2fs ѕ). При этом возникают структуры данных виртуальной файловой системы типа виртуальных индексных узлов vnode, которые обобщают индексные узлы конкретных сис-тем.


Основы операционных систем 128

 

Рис. 12.14. Архитектура современной файловой системы

 

Заключение

 

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

 

Наиболее распространенные способы выделения дискового пространства: непрерывное выделение, орга-низация связного списка и система с индексными узлами.

 

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


Дата добавления: 2021-01-21; просмотров: 158; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!