Reactive Programmming

File Descriptor, File Table, Inode Table

재심 2025. 1. 12. 21:27

[File Descriptor]

프로세스에서 열린 파일 목록을 관리하는 테이블. (네트워크 소켓 역시 FD로 관리된다.)

각 프로세스는 자신만의 FD를 가진다.

프로세스가 파일에 접근할 때 FD를 사용하며 파일을 열면 사용하지 않은 가장 작은 값을 부여한다. (eg: 마지막으로 99를 썻다면 다음으로는 100이 부여된다)

표준 입력/출력/에러에 0, 1, 2 라는 값이 미리 부여되어 있다.

 

FD 테이블은 아래 데이터를 포함한다.

  • FD: 프로세스가 접근하는 파일에 대한 인덱스
  • 파일테이블에 대한 포인터: 시스템 전역으로 관리되는 파일테이블을 가리키는 포인터

 

예시)

File Descriptor Pointer to File Table
0 (STDIN) File Table Entry A
1 (STDOUT) File Table Entry B
2 (STDERR) File Table Entry C
3 File Table Entry D

 

서버 소켓의 accept와 같은 작업도 file descriptor로 관리된다.

[File Table]

시스템 전체에서 현재 열려있는 파일을 관리하는 객체

다음 정보를 포함한다

 

  • 파일 오프셋: 현재 읽기/쓰기 위치를 나타냄
  • 파일 상태 플래그: 읽기 전용, 쓰기 전용, 읽기-쓰기 등
  • 참조 카운트: 해당 파일 테이블 항목을 참조하는 파일 디스크립터의 수
  • inode 테이블에 대한 포인터: 실제 파일의 메타데이터를 가리킴

예시)

File Table Entry Offset Flags Ref Count Pointer to Inode Table
Entry A 1024 O_RDONLY 1 Inode Entry 5
Entry B 0 O_WRONLY 2 Inode Entry 7
Entry C 512 O_RDWR 1 Inode Entry 8

 

[Inode Table]

디스크 상에 존재하는 파일에 대한 메타데이터를 저장

다음 정보를 포함한다.

 

  • 파일 크기
  • 파일 권한 및 소유권
  • 디스크 블록 포인터: 파일 데이터가 저장된 디스크의 물리적 위치를 가리킴.
  • 타임스탬프: 파일의 생성, 수정, 접근 시간.
  • 링크 카운트: 파일에 대한 참조(하드 링크) 수.

예시)

Inode Entry File Size Permissions Disk Block Pointer
Entry 5 4096 rw-r--r-- Block 100
Entry 7 8192 rwxr-xr-x Block 200
Entry 8 2048 rw-rw-r-- Block 300

'Reactive Programmming' 카테고리의 다른 글

Java IO, NIO 비교  (0) 2025.01.18
select, epoll  (0) 2025.01.12
Java NIO - Direct Byte Buffer, Heap ByteBuffer  (0) 2025.01.11
Reactive Programming 을 적용하는 이유?  (0) 2025.01.09
Reactive System, Stream, Programming  (0) 2025.01.01