[CS-KEYWORD] File discriptor

JunHyeok Kim·2024년 5월 21일
1

유닉스 시스템의 File discriptor 📁

File discriptor란?

유닉스 시스템에서 File discriptor는 프로세스가 파일, 디렉토리, 소켓 등 다양한 객체에 접근하기 위한 중요한 개념입니다. 프로세스가 파일을 열면 kernel 은 해당 프로세스에 대한 File discriptor Table 에서 사용하지 않는 가장 작은 값을 할당하고, 이 값을 사용하여 파일을 식별하고 관리합니다.

File discriptor는 구체적으로 어떻게 쓰일까요? 🤔

  • 프로세스 관리: 각 프로세스는 고유한 파일 디스크립터 테이블 을 가지고 있으며, 해당 테이블에는 프로세스가 열어둔 모든 파일과 관련된 정보가 저장됩니다.
  • 파일 식별: 파일 디스크립터는 단순히 정수값일 뿐이지만, 프로세스 내에서 열린 파일을 고유하게 식별하는 데 사용됩니다.
  • 파일 정보 저장: 파일 디스크립터 테이블의 각 항목에는 파일의 현재 위치, 상태, 권한 등 다양한 정보가 저장됩니다.
  • 시스템 호출 연동: 프로세스가 read(), write(), close()와 같은 시스템 호출을 사용하여 파일에 접근할 때 파일 디스크립터 값을 사용하여 해당 파일을 식별합니다.

File discriptor를 그림으로 이해해봐요 🎨 🤓

1. 파일 디스크립터 테이블:

  • 프로세스 당 하나씩 존재하며, 프로세스가 열어둔 모든 파일을 관리합니다.
  • 정수 배열로 구현되며, 각 인덱스는 파일 디스크립터 값에 해당합니다.
  • 각 항목은 파일이나 리소스에 대한 메타데이터를 저장합니다.

2. 파일 테이블:

  • 파일 시스템 전체에 하나만 존재하며 (global) , 파일 시스템 내에서 열린 모든 파일을 추적합니다.
  • 각 열린 파일에 대해 하나씩 파일 테이블 엔트리가 생성됩니다.
  • 엔트리는 파일의 메타데이터를 저장합니다.

3. I-node 테이블:

  • 유닉스 파일 시스템에서 사용하는 index 블록을 의미합니다.
  • 파일의 데이터 블록을 가리키는 역할을 합니다.
  • 파일의 크기, 소유자, 권한, 생성 시간, 수정 시간 등을 저장합니다.
  • 파일 디스크립터 테이블의 항목과 연결되어 있으며, 각 파일에 대한 I-node의 인덱스를 포함합니다.

표준 파일 디스크립터 ✨

프로그램이 실행될 때 기본적으로 할당되는 세 개의 표준 파일 디스크립터가 있습니다.

  • STDIN_FILENO (0): 표준 입력 (키보드 입력)을 나타냅니다.
  • STDOUT_FILENO (1): 표준 출력 (콘솔 출력)을 나타냅니다.
  • STDERR_FILENO (2): 표준 에러 출력 (오류 메시지 출력)을 나타냅니다.

File discriptor 의 작동 방식 ⚙️

  1. 프로세스가 파일을 열면 운영 체제는 해당 프로세스에 대한 File discriptor Table 에서 사용하지 않는 가장 작은 값을 할당합니다.
  2. 프로세스가 File discriptor 값을 사용하여 시스템 호출을 호출하면 운영 체제는 해당 값을 사용하여 Global File Table 에서 해당 파일을 식별합니다.
  3. 파일 테이블 엔트리에는 파일의 I-node 인덱스가 포함되어 있으며, 운영 체제는 I-node 테이블을 사용하여 파일의 실제 데이터 블록에 접근합니다.

😊 도움을 준 고마운 사람들 🥳
김광윤 : https://github.com/leorivk
정승호 : https://github.com/seungho-jg
황연경 : https://github.com/yunnn426
전병준 : https://github.com/jun9898

0개의 댓글