내가 아는 한, 커널은 4개의 테이블을 유지 관리합니다.
- 각 프로세스에 대한 FD 테이블입니다.
- 시스템 완전 개방형 파일 테이블
struct file
- 인덱스 노드(인메모리) 테이블
struct vnode
- 인덱스 노드(디스크 상의) 테이블.
struct file
struct file_operations f_ops;
FS 특정 작업을 포함하는 필드가 있습니다 ext2_read()
. 예를 들어,ext2_write();
struct vnode
struct vnodeops v_op;
FS 관련 작업도 포함하는 필드가 있습니다 .
내 질문은 왜 우리 둘 다 비슷한 기능을 가지고 있습니까? 아니면 내가 뭔가 잘못하고 있는 걸까요? Unix와 Linux에서는 상황이 다른가요? struct vnode
Linux에서 fs.h를 찾지 못했기 때문에
인용하다:https://www.usna.edu/Users/cs/wcbrown/courses/IC221/classes/L09/Class.html
그림("The New Frontier Inside Unix" 책에서 발췌)
답변1
좋아, 답을 찾았어.
이전 버전의 Unix(예: SVR4)에서는 읽기, 쓰기 등과 같이 .에 포함된 필드와 모든 작업이 struct file
포함되지 않았습니다 .file_operations
vnode->v_op
그러나 Linux에는 열기, 읽기, 쓰기 등과 같은 기능이 포함된 필드가 struct file
있고 (vnode와 유사) 찾기, 링크, 링크 해제, 심볼릭 링크, rmdir, mkdir, 이름 바꾸기 등과 같은 작업이 포함된 필드가 있습니다. .file_operations
struct inode
inode_operations