struct file_ops 및 struct vnodeops

struct file_ops 및 struct vnodeops

내가 아는 한, 커널은 4개의 테이블을 유지 관리합니다.

  1. 각 프로세스에 대한 FD 테이블입니다.
  2. 시스템 완전 개방형 파일 테이블struct file
  3. 인덱스 노드(인메모리) 테이블struct vnode
  4. 인덱스 노드(디스크 상의) 테이블.

struct filestruct file_operations f_ops;FS 특정 작업을 포함하는 필드가 있습니다 ext2_read(). 예를 들어,ext2_write();

struct vnodestruct vnodeops v_op;FS 관련 작업도 포함하는 필드가 있습니다 .

내 질문은 왜 우리 둘 다 비슷한 기능을 가지고 있습니까? 아니면 내가 뭔가 잘못하고 있는 걸까요? Unix와 Linux에서는 상황이 다른가요? struct vnodeLinux에서 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_operationsvnode->v_op

그러나 Linux에는 열기, 읽기, 쓰기 등과 같은 기능이 포함된 필드가 struct file있고 (vnode와 유사) 찾기, 링크, 링크 해제, 심볼릭 링크, rmdir, mkdir, 이름 바꾸기 등과 같은 작업이 포함된 필드가 있습니다. .file_operationsstruct inodeinode_operations

관련 정보