파일 디스크립터!!!!!!!!!!!! 어려워. 이해하기 쉽게 정리해보자아
파일 디스크립터/파일 디스크립터 테이블
파일 디스크립터(file descriptor, fd)는 유저 프로그램에서 사용 하는 정수값이다.
fd -> file mapping table (이하 fd table)은 struct thread 안에 저장되어있는 데이터이며, 커널만 접근 가능한 데이터이다.
fd table은 보안, 안정성이 중요한 데이터니까 커널이 관리하는 것 !
유저 프로그램은 fd table에 직접 접근할 수 없기 때문에 시스템 콜의 인자로 fd를 넘겨주어 간접적으로 파일에 접근할 수 있다.

좀 더 자세히 ..!
유저가 파일을 open하면 os는 그 오픈된 파일에 해당하는 엔트리를 생성해서 커널 영역에 저장한다. 만약 100개의 파일을 열었다면 그 100개의 파일 엔트리들이 커널에 저장될 것이다. 이 엔트리들은 정수값을 가지고 있고, 이 엔트리 넘버를 file descriptor라고 한다.
유저 영역에서 이 열린 파일을 식별할 때 fd를 쓸 수 있따.
참고로 엔트리(entry)란 os 입장에서 그 파일에 대한 정보를 담는 하나의 구조체(레코드)를 메모리에 만든다는 뜻이다.
파일을 오픈하면 오픈된 파일의 어디를 읽고 썼는지(offset), 어떤 권한으로 열었는지(read-only, read-write...), 어떤 inode(파일 시스템의 메타 데이터)를 가리키는지 등의 정보를 계속 추적해야 하므로 이 정보를 엔트리로 묶어서 저장해둔다.
코드 간단하게 보여주면 ,,
이게 오픈된 파일이고
/* file descriptor entry */
struct file {
struct inode *inode; // 파일 시스템 메타데이터
off_t pos; // 읽기/쓰기 위치
bool deny_write; // 쓰기 금지 여부
...
};
유저가 open(fd, ...)시스템콜로 특정 파일을 열면 struct thread 내부의 struct file 구조체 여러 개로 이루어진 fd_table[] 배열에 열린 파일이 들어간다. struct file 하나가 엔트리 하나라고 보면 된다.
struct thread{
...
/* file descriptor table : fd 번호를 인덱스로 사용하는 배열 */
struct file *fd_table[FD_MAX_SIZE];
}
ref:
https://stackoverflow.com/questions/5256599/what-are-file-descriptors-explained-in-simple-terms
'정글 > Pintos' 카테고리의 다른 글
| [pintos] 2주차 - User Memory, System Calls 구현 과정 (1) | 2025.05.28 |
|---|---|
| [pintos] 시스템 콜이란? (0) | 2025.05.28 |
| [pintos] 프로세스 - PID / fork로 자식 스레드가 생성되는 과정 (0) | 2025.05.26 |
| [pintos] 2주차 - Argument Passing 구현 과정 (0) | 2025.05.24 |
| [pintos] 2주차 - 키워드 정리 (0) | 2025.05.24 |