반응형
✅ 파일
: 운영체제에서 저장장치의 데이터를 관리하기 위한 논리적 단위
- 일반적으로 프로그램, 데이터 등을 의미
- 이름, 크기, 위치, 생성 시간, 접근 권한 등 다양한 메타데이터를 가짐
- 운영체제는 이러한 속성을 바탕으로 파일을 효율적으로 관리
✅ 파일 디스크립터 (File Descriptor)
: 유닉스 계열 시스템에서 프로세스가 파일을 다룰 때 사용하는 정수값
- 유닉스/리눅스 시스템에서는 디바이스, 디렉터리, 소켓, 파이프 등을 모두 파일로 취급
- 프로세스가 파일을 열면, 가장 작은 미사용 정수값이 파일 디스크립터로 할당됨
- 이 정수값은 커널의 Open File Descriptor Table을 통해 실제 파일과 연결됨
- 테이블에는 다음과 같은 정보가 저장:
- 현재 읽기/쓰기 위치를 나타내는 파일 오프셋
- 파일 접근 권한과 플래그
- 파일을 참조하는 inode 정보
- 테이블에는 다음과 같은 정보가 저장:
- ex) `read()` 와 같은 system call에서 `fd`가 바로 파일 디스크립터
✅ I-Node
: 유닉스 파일 시스템에서 파일의 메타데이터와 실제 데이터를 가리키는 포인터 정보를 저장하는 구조체
아래 그림에서 회색 박스가 inode이다.

- 각 파일은 고유한 inode 번호를 가짐
- 파일 이름을 제외한 거의 모든 정보(크기, 권한, 생성/수정 시간 등)가 inode에 저장
- inode에는 데이터 블록을 직접 가리키는 포인터(direct pointer)뿐 아니라 간접 포인터(single/double/triple indirect)도 포함되어, 파일 크기에 따라 유연하게 확장 가능
✅ 고급 언어에서의 파일 처리 방식
프로그래밍 언어에서는 OS의 시스템 콜과 파일 디스크립터를 직접 다루지 않고, 이를 추상화한 파일 처리 API를 제공한다.
📍 Python의 open() 함수
- 내부적으로 open() 시스템 콜을 호출하여 파일 디스크립터를 획득
- 이후 read(), write() 등 고수준 함수로 파일 작업을 처리
- ex) `with open('file.txt', 'r') as f:`-> f는 내부적으로 파일 디스크립터를 가짐
📍 Java의 BufferedReader/Writer
- FileReader, FileWriter와 같은 스트림을 기반으로 버퍼링 처리
- 내부적으로 OS의 파일 시스템과 연결된 파일 디스크립터를 이용해 I/O 수행
- ex) `BufferedReader br = new BufferedReader(new FileReader("file.txt"));`
=> 대부분의 언어는 내부적으로 시스템 콜을 통해 파일 디스크립터를 획득하고, 이를 바탕으로 파일 입출력을 수행한다.
반응형
'⚙️ CS > 운영체제' 카테고리의 다른 글
| [운영체제] 동기/비동기 & 블로킹/논블로킹 (0) | 2025.05.07 |
|---|---|
| [운영체제] 페이지 교체 알고리즘 (0) | 2025.05.06 |
| [운영체제] 가상 메모리 & 페이징 & 세그멘테이션 (1) | 2025.05.06 |
| [운영체제] 메모리 할당 방식 (1) | 2025.04.30 |