[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 |