2010-02-26 22 views

Odpowiedz

8

Jądro implementuje liczenie odwołań, więc obiekt jądra nie jest zamykany, dopóki wszystkie wskazujące na niego uchwyty plików nie zostaną zamknięte.

+2

Ufam ci, głosowałem na ciebie. Czy możesz podać źródło dokumentacji dla potomności? To wydaje się być typem pytania, które można ponownie odwiedzić. –

+2

@San Jacinto: Odsyłacz do 'dup (2)' i 'close (2)' razem oznaczają liczenie odwołań; w szczególności * "Jeśli fd jest ostatnią kopią określonego deskryptora pliku, zasoby z nim związane są zwalniane" *: http://linux.die.net/man/2/dup http://linux.die.net/ man/2/close –

+0

Awesome :) Dzięki. –

3

Liczniki referencyjne są szeroko stosowane w jądrze, aby uniknąć warunków wyścigu ze względu na równoczesne przydzielanie i zwalnianie zasobu. Licznik referencyjny to po prostu licznik atomic_t powiązany z określonym zasobem, takim jak strona pamięci, moduł lub plik. Licznik jest zwiększany atomowo, gdy ścieżka kontrolna jądra rozpoczyna korzystanie z zasobu, a zmniejsza się, gdy ścieżka kontrolna jądra kończy korzystanie z zasobu. Gdy licznik odniesienia staje się zerowy, zasób nie jest używany i może zostać zwolniony, jeśli to konieczne.

Być może zechcesz to zobaczyć, jeśli chcesz przejrzeć this, aby uzyskać przegląd implementacji liczników odwołań do jądra systemu Linux.

+0

Bardzo przydatny papier. Dzięki! –