Как операции ввода-вывода файла C обрабатываются на низком уровне? - PullRequest
3 голосов
/ 23 августа 2011

Чтобы расширить заголовок. Мне интересно, как ОС обрабатывает такие функции, как fwrite, fread, fopen и fclose.

Что на самом деле представляет собой поток?

Извините, если я не достаточно ясно,

Кстати, я использую GNU / Linux Ubuntu 11.04.

Немного лучшее объяснение того, что я пытаюсь спросить.

Я хочу знать, как файлы записываются на HDDКак считывается в память и как впоследствии создается дескриптор для них. BIOS делает это через драйверы?

Ответы [ 2 ]

8 голосов
/ 23 августа 2011

Библиотека C принимает функцию, подобную fopen, и преобразует ее в соответствующий системный вызов ОС.В Linux это функция POSIX open.Вы можете увидеть определение для этого в терминале Linux с man 2 open.В Windows вызов будет CreateFile, который вы можете увидеть в документации MSDN.В Windows NT эта функция, в свою очередь, является еще одним переводом действительной функции ядра NT NtCreateFile.

Поток в библиотеке C представляет собой набор информации, хранящейся в структуре FILE.Обычно это «дескриптор» представления операционной системы о файле, область памяти, выделенная как «буфер», и текущие позиции чтения и записи.

Я только что заметил, что вы пометили это как «ассемблер»».Возможно, вы захотите узнать о деталях действительно низкого уровня. Это похоже на хорошую статью.

Теперь вы изменили вопрос, задав вопрос о еще более низких уровнях .Ну, как только операционная система получает команду на открытие файла, она передает эту команду в VFS (виртуальная файловая система).Эта часть операционной системы ищет имя файла, включая все необходимые каталоги, и выполняет необходимые проверки доступа.Если это в кэш-памяти RAM, то доступ к диску не требуется.Если нет, VFS отправляет запрос на чтение в конкретную файловую систему, которая, вероятно, EXT4.Затем драйвер файловой системы EXT4 определит, в каком дисковом блоке находится этот каталог. Затем он отправит команду чтения драйверу дискового устройства.

Предполагая, что драйвером диска является AHCI, он преобразует запрос.для чтения блока в серию записей в регистр, которые настроят запрос DMA (прямой доступ к памяти). Это похоже на хороший источник некоторых деталей.

В этот момент контроллер AHCI на материнской плате вступает во владение.Он будет взаимодействовать с контроллером жесткого диска для совместной работы при чтении данных и записи в ячейку памяти DMA.

Пока это происходит, операционная система приостанавливает процесс, чтобы продолжить его с другой работой.Аппаратное обеспечение заботится о вещах, и процессор не обязан обращать на это внимание.Запрос на диск займет много миллисекунд, в течение которых процессор может выполнить миллионы команд.

Когда запрос будет выполнен, контроллер AHCI отправит прерывание.Один из системных процессоров получит прерывание, заглянет в его IDT (таблицу дескрипторов прерываний) и перейдет к машинному коду в этом месте: обработчик прерываний.

Обработчик прерываний операционной системы прочитает некоторые данные, найдетЕсли он был прерван контроллером AHCI, он перейдет к коду драйвера AHCI.Драйвер AHCI прочитает регистры на контроллере, определит, что чтение завершено, поместит маркер в свою очередь операций, сообщит планировщику ОС, что он должен работать, , а затем вернет .На этом этапе больше ничего не происходит.

Операционная система заметит, что ей нужно запустить очередь драйвера AHCI.Когда он решает это сделать (возможно, у него запущена задача в реальном времени или он может читать сетевые пакеты в данный момент), он затем прочитает данные из блока памяти, помеченного как DMA, и скопирует эти данные в файловую систему EXT4.Водитель.Этот драйвер EXT4 затем вернет данные в VFS, которая поместит их в кэш.VFS вернет дескриптор файла операционной системы системному вызову open, который вернет его в библиотечный вызов fopen, который поместит его в структуру FILE и вернет указатель на программу.

0 голосов
/ 23 августа 2011

fopen и др. Обычно реализуются поверх системных вызовов, специфичных для ОС.В Unix это означает API для работы с файловыми дескрипторами: открывать, читать, писать, закрывать и некоторые другие.В Windows это CreateFile, ReadFile и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...