2010-02-26 4 views
5

Если в один и тот же файл были записаны два дескриптора файла (то есть 506 и STDOUT), вызывается close(506) очистка объекта, связанного с ними, и рендера STDOUT непригодным к использованию? Или ядро ​​реализует подсчет ссылок для своих файлов?Является ли ссылка ядра ядра ссылкой на объекты ядра?

ответ

8

Ядро реализует подсчет ссылок, поэтому объект ядра не закрывается до тех пор, пока все дескрипторы файла, указывающие на него, не будут закрыты.

+2

Я доверяю вам, я проголосовал за вас. Не могли бы вы предоставить источник документации для потомков? Это похоже на тип вопроса, который можно снова посетить. –

+2

@San Jacinto: ссылка для 'dup (2)' и 'close (2)' вместе подразумевает подсчет ссылок; в частности * «Если fd - последняя копия конкретного файлового дескриптора, ресурсы, связанные с ним, освобождаются» *: http://linux.die.net/man/2/dup http://linux.die.net/ man/2/закрыть –

+0

Awesome :) Спасибо. –

3

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

Возможно, вам понравится, если вы хотите просмотреть this для обзора реализации подсчета ссылок ядра Linux.

+0

Очень полезная бумага. Благодаря! –

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