Файловая система и система ввода-вывода информации
Файловые системы
Файловые системы
Операции ввода-вывода (I/O)
Операции ввода-вывода (I/O)
Классификация операций I/O
Классификация операций I/O
Методы осуществления I/O
Программированный ввод-вывод (PIO)
Программированный ввод-вывод (PIO)
Программированный ввод-вывод (PIO)
Программированный ввод-вывод (PIO)
Методы осуществления I/O
Метод с использованием прерываний
Метод с использованием прерываний
Методы осуществления I/O
Direct Memory Access
Direct Memory Access
Direct Memory Access
Direct Memory Access
Принцип работы I/O
Оптимизации и улучшения производительности
Проблемы и ограничения
Практические задания
Практические задания
Практические задания
Практические задания
Практические задания
Практические задания
Практические задания
Практические задания
Практические задания
Практические задания
Практические задания
Благодарю за внимание
2.45M
Category: softwaresoftware

20. Файловая система и ввод, и вывод информации

1. Файловая система и система ввода-вывода информации

2. Файловые системы

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

3. Файловые системы

Компоненты файловой системы:
1. Каталоги (или папки): позволяют организовать файлы иерархически.
Каталог верхнего уровня называется корневым.
2. Метаданные: содержат дополнительную информацию о файлах, такую как
размер файла, права доступа, временные метки изменения и создания.
3. Алгоритмы размещения данных: определяют способ хранения данных на
физическом устройстве (например, непрерывное размещение,
фрагментированное).
4. Механизмы разрешения имен файлов: преобразуют имена файлов в
физические адреса блоков данных на устройстве.
5. Система прав доступа: контролирует возможности чтения, записи и
исполнения файлов пользователями и группами пользователей.

4. Операции ввода-вывода (I/O)

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

5. Операции ввода-вывода (I/O)

Под вводом понимается получение данных извне в компьютерную систему, а
под выводом — отправка данных из системы наружу.
Например, считывание текста с клавиатуры или загрузка веб-страницы в
браузер — это операции ввода, тогда как отображение изображений на экране
или запись файла на внешний диск относятся к выводу.
Основная цель операций ввода-вывода заключается в обеспечении связи между
центральной частью компьютера (процессор, память) и разнообразными
периферийными устройствами, которые отличаются скоростью обработки
данных и способом подключения. Вот основные причины важности I/O:
Обеспечение доступа к различным типам устройств, таким как жёсткий
диск, сетевое оборудование, USB-порт, графическое устройство и др.
Организация параллельной работы центрального процессора и периферии,
минимизируя простой CPU при ожидании ввода-вывода.
Поддержание целостности данных путём правильной синхронизации
операций чтения-записи.

6. Классификация операций I/O

По методу реализации операции ввода-вывода подразделяются на две группы:
1. Синхронные операции
• Синхронный ввод-вывод подразумевает последовательное выполнение команд.
Пока одна операция выполняется, следующая команда ожидает её завершения.
Этот механизм прост в реализации, однако снижает производительность,
особенно при работе с медленно реагирующими устройствами.
2. Асинхронные операции
• Асинхронный ввод-вывод позволяет продолжить работу приложения даже во
время ожидания завершения одной операции.
Это достигается благодаря поддержке механизма прерывания или асинхронному
выполнению запросов через очереди заданий. Таким образом, система
становится менее зависимой от задержек отдельных устройств.

7. Классификация операций I/O

Также существует классификация по типу подключаемого оборудования:
• Физический ввод-вывод: передача данных осуществляется физическими
средствами (через шину PCI-E, USB и пр.).
• Логический ввод-вывод: виртуализация физических операций посредством
абстракций операционной системы (например, работа с файлами через API).

8. Методы осуществления I/O

Рассмотрим подробнее три основных метода выполнения операций вводавывода:
1. Программированный ввод-вывод (Programmed Input Output, PIO):
Устройство периодически опрашивается программой для проверки статуса
готовности. Когда устройство готово принять или передать данные, оно
уведомляет программу. Такой подход нагружает центральный процессор
постоянными опросами, замедляя работу всей системы.

9. Программированный ввод-вывод (PIO)

Программированный ввод-вывод (PIO) — это традиционный метод выполнения
операций ввода-вывода (I/O), при котором контроль над передачей данных
полностью возложен на программное обеспечение, работающее на центральном
процессоре (CPU).
Данный подход предполагает активное участие программы в управлении
процессом передачи данных между центральным процессором и
периферийными устройствами.

10. Программированный ввод-вывод (PIO)

При программированном вводе-выводе процессор осуществляет пошаговую
проверку состояния устройства (готово ли оно передавать или получать данные)
и сам управляет каждым этапом процесса передачи. Обычно это реализуется
следующим образом:
1. Программа записывает необходимые данные в регистры устройства.
2. Периодически проверяется статус готовности устройства.
3. Когда устройство подтверждает готовность, начинается непосредственный
обмен данными.
4. Процесс повторяется циклически до окончания передачи всех необходимых
данных.

11. Программированный ввод-вывод (PIO)

Допустим, нужно считать данные с жесткого диска:
1. Центральный процессор посылает команде устройству начать подготовку
данных для чтения.
2. Затем программа регулярно проверяет флаг готовности устройства
("занято"/"свободно").
3. Когда устройство сигнализирует о своей готовности, программа начинает
читать байты данных, передаваемые по линии шины.
4. Эта процедура продолжается до тех пор, пока весь требуемый объем данных
не будет передан в оперативную память.

12. Программированный ввод-вывод (PIO)

Преимущества программированного ввода-вывода:
• Простота реализации и минимальное количество дополнительного
оборудования.
• Подходит для низкоскоростных устройств, где частые обращения к
оборудованию не сильно загружают процессор.
Недостатки подхода:
• Высокая нагрузка на центральный процессор, так как последний должен
активно контролировать каждый этап передачи данных.
• Низкая производительность, особенно при работе с большими объёмами
данных или несколькими устройствами одновременно.
• Отсутствие поддержки многозадачности: при выполнении операций вводавывода другие процессы вынуждены ждать освобождения ресурсов.

13. Методы осуществления I/O

2. Метод с использованием прерываний (Interrupt-driven IO):
Здесь вся нагрузка переносится на контроллер прерываний. После отправки
команды устройству программа продолжает свою работу, пока устройство само
не сообщит ей сигналом (прерыванием), что оно завершило операцию.
Прерывания значительно снижают нагрузку на CPU, позволяя эффективно
распараллеливать обработку данных.

14. Метод с использованием прерываний

Метод ввода-вывода с использованием прерываний (interrupt-driven input/output)
— это техника, применяемая для выполнения операций ввода-вывода (I/O), при
которой процессор освобождается от активного контроля над состоянием
устройства и ожидает сигнала («прерывания») от самого устройства,
подтверждающего завершение операции.
Такая схема существенно повышает эффективность работы процессора и
уменьшает затраты времени на ожидание готовых данных.

15. Метод с использованием прерываний

Принцип работы основан на следующем механизме:
1. Центральная программа инициирует операцию ввода-вывода (например,
запрос на чтение данных с диска).
2. Устройство начинает обрабатывать этот запрос автономно, освобождая
процессор для выполнения других задач.
3. По окончании операции устройство генерирует специальное событие —
прерывание (interrupt), которое сообщает процессору о доступности данных или
завершении заданной операции.
4. Получив прерывание, процессор временно останавливает выполнение
текущего задания, переключаясь на специальную процедуру обработки
прерываний (ISR — Interrupt Service Routine), которая занимается дальнейшими
действиями с результатами операции.
5. По завершении процедуры обработки прерывания программа возобновляется
с точки остановки.

16. Методы осуществления I/O

3. Direct Memory Access (DMA):
Прямой доступ к памяти позволяет периферийным устройствам самостоятельно
обращаться к физической памяти компьютера, минуя центральный процессор.
Контроллеры DMA передают блоки данных напрямую между устройствами и
памятью, снижая нагрузку на CPU и ускоряя общий поток данных.

17. Direct Memory Access

Direct Memory Access (DMA) — это технология, позволяющая периферийным
устройствам (например, жестким дискам, сетевым картам, видеокартам)
осуществлять прямой доступ к оперативной памяти (RAM) без участия
центрального процессора (CPU).
Благодаря этому достигается значительное повышение производительности
системы, поскольку основной процессор освобождается от рутинных операций
передачи данных.

18. Direct Memory Access

В обычной схеме передачи данных процессор берёт на себя всю тяжесть
перемещения данных между устройствами и памятью, занимаясь чтением и
записью каждого байта вручную.
Однако при использовании DMA специальный контроллер берёт на себя роль
посредника между устройством и памятью, осуществляя прямую передачу
больших объемов данных автоматически, без вмешательства процессора.
Работа DMA выглядит примерно так:
1. Программе требуется передать данные с устройства (например, прочитать
содержимое файла с жесткого диска).
2. Вместо непосредственной передачи данных, процессор настраивает DMAконтроллер, задавая начальные адрес и длину блока данных, подлежащих
передаче.
3. Далее процессор может вернуться к другим задачам, пока контроллер DMA
займётся самостоятельным перемещением данных.
4. По завершении операции контроллер уведомляет процессор (обычно через
прерывание), после чего тот сможет обработать полученные данные.

19. Direct Memory Access

DMA-контроллер состоит из следующих ключевых элементов:
• Адресный регистр: задаёт стартовый адрес памяти, куда будут помещены или
откуда будут взяты данные.
• Счётчик длины: определяет
количество данных, подлежащих
передаче.
• Контрольный регистр:
управляет режимами работы
контроллера (например,
направление передачи, источник
и приёмник данных).
• Интерфейс с шиной:
обеспечивает связь с остальными
компонентами системы, такими
как RAM и внешние устройства.

20. Direct Memory Access

Существует несколько режимов работы DMA-контроллеров:
• Single transfer mode:
Перемещаются отдельные единицы данных (байты или слова) по запросу
устройства.
• Block transfer mode:
Массивные объёмы данных перемещаются за одну операцию, что экономит
ресурсы.
• Cascade mode:
Несколько устройств могут совместно использовать один контроллер, повышая
гибкость системы.
Технология DMA широко распространена в современных компьютерах и
мобильных устройствах, позволяя существенно увеличить производительность
при операциях с крупными наборами данных. Некоторые ключевые сферы
применения:
• Хранение данных: Чтение и запись на SSD/HDD через контроллеры Serial
ATA (SATA).
• Графика: Передача данных между GPU и памятью при рендеринге графики.
• Коммуникации: Перенос пакетов данных в сетях Ethernet и Wi-Fi.

21. Принцип работы I/O

Процесс ввода-вывода включает несколько этапов:
1. Инициация запроса: приложение формирует команду для выполнения
определённой операции (например, чтение файла с диска).
2.
Преобразование запроса: ядро операционной системы конвертирует запрос в
понятный формату драйвера конкретного устройства.
3.
Передача данных: физическое взаимодействие с устройством для
считывания или записи данных.
4.
Завершение операции: возврат результата приложению либо уведомления об
ошибке.

22. Оптимизации и улучшения производительности

Для повышения эффективности операций ввода-вывода применяются разные
техники оптимизации:
• Буферизация: временное сохранение данных в быстрой памяти для
сглаживания разницы скоростей между быстрыми компонентами (RAM) и
медленными (диски).
• Многопоточная обработка: одновременное использование нескольких
потоков для ускорения операций.
• RAID-массивы: объединение дисков в массивы для увеличения надёжности
и скорости работы.
• SSD-диски: замена традиционных HDD высокоскоростными
твердотельными накопителями.

23. Проблемы и ограничения

Несмотря на развитие технологий, проблемы остаются:
• Устаревшие стандарты шин и интерфейсов (IDE, ATA) создают узкое
горлышко пропускной способности.
• Ограниченные возможности параллельного выполнения операций, особенно
при использовании синхронных методов.
• Задержки сети и низкая пропускная способность каналов при удалённом
доступе к ресурсам.

24. Практические задания

№1. Создание, запись и чтение информации в файле на Python.
В Python есть встроенная функция open(). С ее помощью можно открыть любой
файл на компьютере. Технически Python создает на его основе объект.
Синтаксис следующий:
file_name = имя открываемого файла
access_mode = режим открытия файла. Он может быть: для чтения, записи и т. д.
По умолчанию используется режим чтения (r), если другое не указано. Далее
полный список режимов открытия файла

25. Практические задания

Режимы записи:
r – только для чтения.
w – только для записи. Создаст новый файл, если не найдет с указанным именем.
rb – только для чтения (бинарный).
wb – только для записи (бинарный). Создаст новый файл, если не найдет с
указанным именем.
r+ – для чтения и записи.
rb+ – для чтения и записи (бинарный).
w+ – для чтения и записи. Создаст новый файл для записи, если не найдет с
указанным именем.
wb+ – для чтения и записи (бинарный). Создаст новый файл для записи, если не
найдет с указанным именем.
a – откроет для добавления нового содержимого. Создаст новый файл для записи,
если не найдет с указанным именем.
a+ – откроет для добавления нового содержимого. Создаст новый файл для
чтения записи, если не найдет с указанным именем.
ab – откроет для добавления нового содержимого (бинарный). Создаст новый
файл для записи, если не найдет с указанным именем.
ab+ – откроет для добавления нового содержимого (бинарный). Создаст новый
файл для чтения записи, если не найдет с указанным именем.

26. Практические задания

Следующий код используется для открытия файла:
В этом примере f — переменная-указатель на файл example.txt.
Следующий код используется для вывода содержимого файла и информации о
нем.

27. Практические задания

После открытия файла в Python его нужно закрыть. Таким образом
освобождаются ресурсы и убирается мусор. Python автоматически закрывает
файл, когда объект присваивается другому файлу.
Для закрытия файла используется метод close():
После закрытия этот файл нельзя будет использовать до тех пор, пока заново его
не открыть.

28. Практические задания

Также можно написать try/finally, которое гарантирует, что если после открытия
файла операции с ним приводят к исключениям, он закроется автоматически.
Без него программа завершается некорректно.
Этот метод гарантирует, что если операции над файлом вызовут исключения, то
он закроется до того как программа остановится.

29. Практические задания

Функция read() используется для чтения содержимого файла после открытия его
в режиме чтения (r).
file = объект файла
size = количество символов, которые нужно прочитать. Если не указать, то файл
прочитается целиком.
Интерпретатор прочитал 7 символов файла и если снова использовать функцию
read(), то чтение начнется с 8-го символа.

30. Практические задания

Функция readline() используется для построчного чтения содержимого файла.
Она используется для крупных файлов. С ее помощью можно получать доступ к
любой строке в любой момент.
Пример:
Есть файл с тремя строками:
Разные методы чтения строк:

31. Практические задания

Функция write() используется для записи в файлы Python, открытые в режиме
записи.
Если пытаться открыть файл, которого не существует, в этом режиме, тогда будет
создан новый.
Предположим, файла xyz.txt не существует. Он будет создан при попытке
открыть его в режиме чтения.

32. Практические задания

Для быстрого и безопасного очищения содержимого текстового файла в Python
можно применить следующий код:
Здесь команда открывает файл file.txt в режиме записи ('w'), что ведет к
обрезанию файла до нулевого размера, удалению всего содержимого, но при этом
сам файл не удаляется.
Использование контекстного менеджера with гарантирует корректное закрытие
файла после выполнения операций, что снижает вероятность ошибок при работе
с файлом.

33. Практические задания

Общие методы работы с файлами:
file.close() – закрывает открытый файл
file.fileno() – возвращает целочисленный дескриптор файла
file.flush() – очищает внутренний буфер
file.isatty() – возвращает True, если файл привязан к терминалу
file.next() – возвращает следующую строку файла
file.read(n) – чтение первых n символов файла
file.readline() – читает одну строчку строки или файла
file.readlines() – читает и возвращает список всех строк в файле
file.seek(offset[,whene]) – устанавливает текущую позицию в файле
file.seekable() – проверяет, поддерживает ли файл случайный доступ.
Возвращает True, если да
file.tell()
– возвращает текущую позицию в файле
file.truncate(n) – уменьшает размер файл. Если n указана, то файл обрезается
до n байт, если нет — до текущей позиции
file.write(str) – добавляет строку str в файл
file.writelines(sequence) – добавляет последовательность строк в файл

34. Практические задания

Задание №1: Создайте программу на Python для вывода ФИО/никнейма
пользователя из файла txt.
1.
2.
3.
4.
5.
6.
7.
8.
9.
Программа должна предложить пользователю ввести свои ФИО/никнейм в
одну строку.
Пользователь вводит информацию в программу.
Программа создаёт файл и записывает в него введённые пользователем
данные.
Программа выводит информацию из файла.
Программа уточняет, устраивает ли пользователя введённый ник/ФИО.
Если пользователь согласен, то процесс завершается.
Если пользователь не согласен, то программа предлагает ввести новые ник
или ФИО.
После ввода новых данных программа очищает файл, записывает новые
данные и выводит новые ник или ФИО.
Программа снова уточняет, устраивает ли пользователя введённые данные.

35. Благодарю за внимание

English     Русский Rules