본문 바로가기

C언어/시스템 소프트웨어

[시스템 소프트웨어] 메타 데이터, inode, 파일 디스크립터

728x90
반응형

메타 데이터 (Meta Data)

 

메타 데이터는 다른 데이터를 설명하고 분류하는데 도움을 주는 데이터를 의미한다.

 

문서 파일의 경우에는 제목, 작성자, 생성 날짜, 수정 날짜, 파일 크기 등의 정보를 포함한다고 할 수 있고

음악 파일의 경우 아티스트 이름, 앨범 이름, 녹음 연도, 장르 등의 정보를 포함한다고 할 수 있다.

 

stat 구조체에서는 다음과 같은 메타데이터가 포함되어 있다.

 

#include <sys/stat.h>

struct stat {
    dev_t     st_dev;     // 파일이 위치한 장치의 ID
    ino_t     st_ino;     // 파일의 아이노드 번호
    mode_t    st_mode;    // 파일의 타입과 권한
    nlink_t   st_nlink;   // 하드 링크 수
    uid_t     st_uid;     // 파일 소유자의 사용자 ID
    gid_t     st_gid;     // 파일 소유자의 그룹 ID
    dev_t     st_rdev;    // 특수 파일의 장치 ID
    off_t     st_size;    // 파일의 크기 (바이트 단위)
    blksize_t st_blksize; // 파일 시스템의 블록 크기
    blkcnt_t  st_blocks;   // 파일의 블록 수
    time_t    st_atime;   // 마지막 접근 시간
    time_t    st_mtime;   // 마지막 수정 시간
    time_t    st_ctime;   // 마지막 상태 변경 시간
};

 

 

 

 

 

 

inode

 

inode는 파일 시스템에서 각 파일에 메타데이터를 저장하는 구조체이다.

 

inode는 파일의 핵심 메타데이터를 관리하는 중요한 구조체이지만 모든 메타데이터를 저장하지는 않는다.

 

일반적으로 inode에 포함되는 메타데이터는 파일의 크기, 소유자와 그룹, 권한, 생성 시간, 수정 시간, 접근 시간 등이 있다.

 

inode에 포함되지 않는 메타데이터로는 파일의 이름, 확장된 파일 속성, 암호화 키 등이 있다.

 

 

 

 

 

 

 

파일 디스크립터 (File Descriptor)

 

파일 디스크립터는 특정 프로세스가 파일을 열 때 생성되는 정수 값으로, 열린 파일에 대한 참조를 제공한다.

 

즉, 운영 체제가 파일과 프로세스 사이의 상호작용을 관리하는 데 사용하는 핸들이라고 할 수 있다.

 

파일 디스크립터는 구체적으로 오픈 파일 테이블의 오프셋을 가리키고 있다.

 

 

 

 

 

 

 

테이블 (Table)

 

테이블은 데이터를 체계적인 방식으로 저장하여 구조화된 데이터의 집합을 의미한다.

 

테이블은 데이터를 여러 개의 칸에 나눠서 넣는데 하나의 칸을 엔트리라고 한다.

 

이 엔트리에는 각각 번호가 붙어 있어서 몇 번째 칸에 어떤 데이터가 들어있는지 쉽게 파악할 수 있다.

 

 

 

 

 

 

 

 

파일 디스크립터 테이블 (File Descriptor Table)

 

파일이 열릴 때 생성되는 모든 디스크립터는 파일 디스크립터 테이블에 포함된다.

 

파일 디스크립터 테이블은 프로세스 하나당 하나씩 생성된다.

 

파일 디스크립터 테이블의 0, 1, 2번 엔트리에는 stdin, stdout, stderr가 들어가 있다.

 

따라서 프로세스가 하나의 프로그램을 처음으로 동작시키면 3번 엔트리에 디스크립터가 저장되는 것이고

또 하나를 더 동작시키면 4번 엔트리에 해당 프로그램의 디스크립터가 저장된다.

 


표준 입출력에 접근하기 위한 디스크립터 상수는 <unistd.h>에 아래 코드와 같이 정의되어 있다.

 

#define STDIN_FILENO  0  // 표준 입력 파일 디스크립터 (키보드 입력 등)
#define STDOUT_FILENO 1  // 표준 출력 파일 디스크립터 (터미널 출력 등)
#define STDERR_FILENO 2  // 표준 오류 출력 파일 디스크립터 (오류 메시지 출력)

 

 

 

 

 

 

 

 

 

오픈 파일 테이블 (Open File Table)

 

오픈 파일 테이블은 시스템 전역에서 모든 열려 있는 파일에 대한 정보를 관리한다.

 

오픈 파일 테이블 엔트리는 파일의 현재 위치(파일 오프셋), 레퍼런스 카운트,  브이노드 테이블을 참조하고 있는 포인터 등을 포함하고 있다.

 

파일이 성공적으로 오픈되면 시스템은 오픈 파일 테이블에서 비어있는 칸(비어있는 엔트리)을 찾아서

빈 엔트리(빈 칸)에 오픈한 시스템의 엔트리(정보가 들어있는 데이터 덩어리)를 넣어준다.

 

 

 

 

 

 

 

 

 

 

브이노드 테이블 (V-node Table)

 

V-node(virtual node) Table은 모든 파일의 메타데이터를 저장하고 관리한다.

 

 

 

 

 

파일 오픈 과정

 

우선 파일을 열게되면 파일에 대한 정보를 디스크에서 불러와서 메모리 상에 올린 후  V-node Table 통해서 관리한다.

 

이후 오픈 파일 테이블에서 빈 엔트리를 찾아 오픈 파일 엔트리를 넣어준다.

 

그다음 파일 디스크립터를 생성하여 File Descriptor Table에 저장한다.

 

이 디스크립터는 오픈 파일 엔트리의 주소를 참조하고 있고 오픈 파일 엔트리는 V-node Table를 참조하고 있으므로

디스크립터를 통해서 파일의 메타데이터에 접근할 수 있게 된다.

 

 

 

 

728x90
반응형