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; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!