2
나는 몇몇 프로그래밍을 해왔다. C. 에서 지금은 읽고있다 리눅스 커널 코드는 내가 발견Dentry와 리눅스 커널의 수퍼 블록 구조 사이의 순환 의존성
struct super_block {
...
...
unsigned long s_flags; /* mount flags */
unsigned long s_magic; /* filesystem's magic number */
struct dentry *s_root; /* directory mount point */
struct rw_semaphore s_umount; /* unmount semaphore */
...
...
}
struct dentry {
...
...
struct dentry_operations *d_op; /* dentry operations table */
struct super_block *d_sb; /* superblock of file */
unsigned int d_flags; /* dentry flags */
int d_mounted; /* is this a mount point? */
void *d_fsdata; /* filesystem-specific data */
...
...
};
우리가 super_block 구조체는 구조체 dentry 속성이 볼 수 있고 구조체 dentry는 super_block의 속성이 있습니다. 순환 종속성이 발생합니까? 고마워요
그렇다면 메모리 관리는 어떻게 작동합니까? 예를 들어 dentry 객체가 삭제 된 경우 super_block은 잘못된 위치를 가리 킵니다. 나는 그들의 생활주기를 관리하는 방법을 의미했습니다.
루프가 포함 된 데이터 구조에 문제가 없습니다. 어느 부분이 소유하고 있고 어떤 부분 만 참조하고 있는지 아는 것이 필요합니다. 그것이 명확하지 않으면 어려워 질 수 있습니다. – Deduplicator