МИНОБРНАУКИ РОССИИ САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ «ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА) ОТЧЕТ по лабораторной работе № 1 по дисциплине «Операционные системы» Тема: «Управление файловой системой» Студент гр. 2308 Мелихов М. А. Преподаватель Тимофеев А. В. Санкт-Петербург 2024 Цель работы. Исследовать управление файловой системой на Windows (win32api) и Linux. Задание 1.1 Создайте консольное приложение с меню (каждая выполняемая функция и/или операция должна бать доступна по отдельному пункту меню), которое выполняет: Вывод списка дисков. Для одного из выбранных дисков вывод информации о диске и размере свободного пространства. Создание и удаление каталогов. Создание файлов. Копирование и перемещение файлов. Анализ и изменение атрибутов файлов. Проверка работоспособности приложения. Навигация по приложению осуществляется посредством выбора определённого пункта меню по номеру и дальнейшим вводом дополнительной информации, например, пути до файла/диска или атрибутов файла. Начальное меню приложения представлено на рисунке 1. Ввод атрибутов файла происходит в формате десятичного числа, которое обозначает конкретный набор атрибутов. Таким образом для каждого атрибута есть соответствующее десятичное число, а чтобы установить несколько атрибутов, можно суммировать соответствующие числа, что написано в приглашении к вводу. Рисунок 1 – Главное меню приложения. Работа функций получения информации о доступных дисках, информации о типе диска, файловой системе диска и размере свободного пространства показана на рисунке 2. Рисунок 2 – Получение информации о дисках. Функции создания и удаления каталогов представлены на рисунках 3 и 4. Создания файла, перемещения и копирования – на рисунках 5, 6 и 7. Рисунок 3 – Создание каталога. Рисунок 4 – Удаление каталога. Рисунок 5 – Создание файла. Рисунок 6 – Перемещение файла. Рисунок 7 – Копирование файла. Получение и изменение атрибутов файла можно увидеть на рисунках 8 и 9. Рисунок 8 – Получение атрибутов файла. Рисунок 9 – Изменение атрибутов файла. Получение и изменение времени файла показано на рисунках 10, 11. Рисунок 10 – Получение времени файла. Рисунок 11 – Изменение времени файла. Задание 1.2 Копирование файла с помощью перекрывающихся (асинхронных) операций чтения-записи. Приложение должно копировать существующий файл в новый файл, «одновременно» выполняя 𝑛 перекрывающихся операций ввода-вывода (механизм АРС) блоками данных, кратными размеру кластера. Проверка работоспособности программы. Создадим небольшой текстовый файл file.txt, скопируем его и проверим правильность копирования. Как видно на рисунке 12, файл копируется корректно. Рисунок 12 – Корректное копирование файла. Оптимальный размер блоков копирования. Найдём оптимальный размер блоков копирования в однопоточном режиме, при котором достигается наименьшее время копирования файла. Создадим файл большего размера (около 1,5 Гб) – рисунок 13. Рисунок 13 – Большой файл (около 1 Гб) Теперь запустим программу несколько раз в режиме одного потока на чтение и запись, но с разными количествами кластеров на буфер и внесём результаты в таблицу 1. Результаты запуска программы представлены на рисунках 14 и 15. Таблица 1 – Зависимость времени копирования от размеров блока Количество кластеров 8 в блоке данных 16 32 48 64 96 Время (с) 25,8 13,9 10,1 8,3 6,7 45,8 Рисунок 14. Рисунок 15. По значениям из таблицы 1 построим график зависимости времени копирования файла от количества кластеров на блок данных – рисунок 16. ВРЕМЯ, С 50 45 40 35 30 25 20 15 10 5 0 45,8 25,8 13,9 10,1 8 16 32 48 8,3 6,7 64 96 КОЛИЧЕСТВО КЛАСТЕРОВ Рисунок 16 – график зависимости времени от размеров блока данных. Как видно на графике, при увеличении буфера уменьшается время копирования файла. Будем считать, что 96 кластеров – оптимальный размер блока. Оптимальное количество потоков. Теперь найдём наименьшее оптимальное число потоков, при котором будет достигаться наименьшее время копирования файла. Запустим программу несколько раз с оптимальным размеров блока и разным количеством потоков чтения-записи и занесём результаты измерения в таблицу 2. Запуск программы представлен на рисунках 17 и 18. Таблица 2 – Зависимость времени копирования от размеров блока Количество процессов 1 2 4 8 16 32 Время (с) 6,7 5,4 5,5 5,0 5,1 5,1 Рисунок 17. Рисунок 18. По значениям из таблицы 2 построим график зависимости времени копирования файла от количества потоков чтения-записи – рисунок 19. 8 6,7 7 ВРЕМЯ, С 6 5,4 5,5 2 4 5 5,1 5,1 8 16 32 5 4 3 2 1 0 1 КОЛИЧЕСТВО ПОТОКОВ Рисунок 19 – график зависимости времени от числа потоков. Как видно по графику, наименьшая скорость копирования достигается при 8 потоках чтения-записи, а дальнейшее увеличение количества потоков не даёт результатов. Выводы. В процессе выполнения лабораторной работы я познакомился с библиотекой Win32 API для взаимодействия с файловой системой Windows. Этот набор инструментов предоставляет обширные возможности по управлению файлами, их атрибутами и системными свойствами. Я узнал, что файловые системы и атрибуты файлов могут различаться по флагам, представленным в виде числа, где каждый бит отражает определенный атрибут. Кроме того, я поработал с файловой системой под управлением Linux. Отмечено, что при асинхронном считывании и записи данных в файлы возможно оптимизировать количество операций и размер блока данных. Выявлено, что увеличение количества операций не всегда приводит к повышению производительности, особенно при использовании больших размеров буфера. Однако при небольших размерах буфера увеличение числа асинхронных операций (в определенных пределах) может существенно улучшить производительность. Также выявлено, что использование избыточного количества операций может снижать скорость выполнения.