Linux TCP/IP 커널 스택과 VFS 상호 작용

Linux TCP/IP 커널 스택과 VFS 상호 작용

TCP/IP 스택의 Linux 커널 구현에 대해 읽고 있습니다.
VFS - 네트워크 하위 시스템 상호 작용읽는 동안 이 그림을 발견하기 전까지는 모든 것이 괜찮았습니다.Linux에서의 TCP/IP 아키텍처, 설계 및 구현

보시다시피 저자는 Linux에서 VFS와 소켓 계층 간의 상호 작용을 설명하려고 합니다. 이로 인해 나에게 많은 질문이 생겼습니다.

이미지에서는 특정 인덱스 노드 아래 파일 구조의 일부로 소켓이 표시됩니다. 문제는 이 관계가 더 이상 존재하지 않는다는 것입니다! (솔직히 말해서 이는 netlink 및 unix 도메인 소켓에만 관련 inode가 있을 수 있지만 inet 소켓은 그렇지 않기 때문에 별로 의미가 없습니다. 그렇죠?) 바라보다구조 파일정의; f_dentry가 사라졌습니다. grep에서 찾을 수 있습니다.

Documentation/filesystems/porting.rst 570: f_dentry가 사라졌습니다. f_path.dentry를 사용하거나 더 나은 방법으로 이를 피할 수 있는지 확인하세요.

이제 위의 동일한 구조에는 도달 가능한 디렉토리 항목이 있습니다(문서에 언급된 대로).f_경로필드이지만디렉토리 항목첫 번째는 디렉터리 항목을 설명하고 두 번째는 파일 시스템 디렉터리 캐시로 두 가지 목적을 가진 구조로 설명되므로 관계가 사라지지 않았더라도(그림에 표시된 대로) 나에게는 이해가 되지 않습니다. 소켓을 수명이 짧은 개체에 넣어야 합니다. 참조데이터 캐시(어쩌면 내가 dentry/dcache를 잘못 이해한 것일까요?)

계속해서 코드를 살펴보세요.소켓 구조정의. 우리는 여전히 오래된 것을 유지하고 있음을 볼 수 있습니다문서struct as field(위의 이유로 VFS -> TCP/IP 관계를 지우고 이러한 방향에서 TCP/IP -> VFS 관계를 유지하는 것이 더 합리적입니다.) 그러나 문제는 이것이 정말로 사라지느냐 하는 것입니다. 난 아무것도 멈추지 않는 걸 봤어FD 생성모든 유형의 콘센트에서 다음을 참조하세요.양말_맵_fd-양말 할당 파일-의사 파일 할당게다가. 그리고 이번 특별함은인덱스 노드객체 소켓->파일->아이노드)는 장치 파일 시스템에 속하지 않기 때문에 메모리에만 존재해야 합니다. 그러나 슈퍼블록은 누구입니까? , 보다인돌.sb.

이것은 정확히 TCP/IP-VFS 상호 작용은 아니지만 다음에서 inode를 얻을 수 있습니다.파일->f_inode또는 통해파일->f_path->d_inode, 두 inode 사이의 관계는 무엇입니까?

누구든지 제가 이해하도록 도와주시면 좋을 것 같습니다. 미리 감사드립니다.

관련 정보