Когда функция fopen() вызывается на C, она выдает системный вызов ядру.
Не совсем. fopen(3)
- это библиотека функция, которая в конечном итоге вызывает open(2)
, системный вызов.
Я хотел бы знать, какие модули ядра ответственны при обработке системного вызова и возвращении дескриптора файла в вызывающую программу.
Отсутствует. В Linux системные вызовы обрабатываются ядром ядра, а не модулем. См. fs/open.c
.
Являются ли эти модули ядра ответственными за операции read() и write()? Если нет, то какие модули отвечают.
Такая же сделка. См. fs/read_write.c
.
В момент, когда ядру предоставляется путь к открытию, он сначала определит точку монтирования, в которой находится файл, который вы запрашиваете. Файловая система будет смонтирована в этой точке монтирования, и эта файловая система реализована в модуле.
Файловые системы работают на верхних блочных устройствах. И эти блочные устройства (например, SCSI, IDE) также реализованы в модулях.
Я возился с выдачей команд SCSI, и информация была бы оценена.
Посмотрите здесь: http://sg.danny.cz/sg/sg3_utils.html
имеет смысл, что это будет частью основного ядра. Спасибо за информацию. – Daedalus
Модули @Daedalus будут задействованы во время обработки открытых/прочитанных системных вызовов. Основная точка входа для системных вызовов находится в основном ядре, но разные типы файловой системы часто реализуются как модули, и, очевидно, для «нормального» доступа к файлам вам нужно будет в какой-то момент получить доступ к файловой системе для обработки этих вызовов sytem. – Andrew