2009-02-15 4 views
1

Я изучаю свои средние операционные системы и задавался вопросом, смогу ли я помочь.Открытый системный вызов

Может ли кто-нибудь объяснить чеки и что делает ядро ​​во время системного вызова open()?

Спасибо!

+0

Я думаю, вам нужно быть более конкретным ... ядро ​​делает * много * в этом системном вызове. – SoapBox

+0

Какой вкус Unix? – ng5000

+0

+1 за то, что вы открыли это задание на домашнюю работу –

ответ

4

Очень грубо, вы можете думать о следующих шагах:

  1. Перевести имя файла в индексный дескриптор, который является фактическим объектом файловой системы, описывающим содержимое файла, путем перемещения структур данных файловой системы.
  2. Во время этого обхода ядро ​​проверяет наличие у вас достаточного доступа по пути к файлу и проверяет доступ к самому файлу. Точные проверки зависят от того, какие режимы были переданы для открытия.
  3. Создайте так называемый дескриптор открытого файла внутри ядра. Существует один из этих объектов для каждого файла, который ядро ​​открыло от имени любого процесса.
  4. Выделите неиспользуемый индекс в таблице дескриптора файла процесса и укажите его в дескрипторе открытого файла.
  5. Возврат этого индекса из системного вызова в качестве дескриптора файла.

Это описание должно быть по существу правильным для открытия простых файлов и/или каталогов, но для разных типов специальных файлов, в частности для устройств, все по-другому.

0

Я хотел бы вернуться к тому, что вам сказал профессор - там много вещей, которые происходят во время open(), в зависимости от того, что вы открываете (например, устройство, файл, каталог) и, если вы не пишете что ищет профессор, вы потеряете очки.

Это, как говорится, в основном включает проверки, чтобы проверить, действительно ли этот открытый (т. Е. Существует ли этот файл, имеет ли пользователь права на чтение/запись и т. Д.), Тогда запись в таблице дескриптора ядра выделено для отслеживания приточного и его текущей позиции в файле (и, конечно, некоторые другие вещи)

Смежные вопросы