Digital Recipe

프로세스의 파일접근 본문

리눅스/리눅스 이해

프로세스의 파일접근

노리터 2012. 4. 3. 17:59


1. 프로세스의 파일접근


리눅스에서 각 프로세스는 입출력을 하기 위해서 File Descriptor(이하 FD)를 사용한다. FD는 0번부터 프로세스가 필요로 하는 파일에 대한 위치정보를 가지게 된다. 예를 들어, A프로세스가 'WEB.TXT'라는 파일을 읽기 위해서는 해당 파일을 찾아갈 수 있는 정보를 FD 중 하나에 저장하게 된다.


즉, FD란 필요한 파일을 찾아가기 위한 INDEX로 보면된다.


FD는 File 구조체에 접근하여 파일이 존재하는 디렉토리 정보를 획득하고 접근하게 된다. 해당 디렉토리에 접근하면 디렉토리가 포함하는 파일들의 inode 정보를 가지고 있으며 이러한 inode 정보를 통해 실제 필요로 하는 파일에 접근하게 된다.

실제 파일의 메타데이터를 나타내는 inode의 위치정보를 획득하고 접근하게 된다. 이를 그림으로 나타내면 아래의 [그림1]와 같다.


[그림1]


리눅스 커널 코드 측면에서 설명을 다시하면, 프로세스 정보를 가지고 있는 Task_struct는 File_struct 필드(변수)를 통해 file_struct 구조체에 접근한다. 다시 File Descriptor 정보를 위해 fd필드를 통해 해당 file 구조체로 이동한다. 여기서 f_dentry 필드를 통해 파일이 위치한 디렉토리의 정보를 획득하기 위해 이동하며 dentry 구조체에서 d_inode를 통해 최종적으로 파일에 접근하게 된다.


  

2. 구조체 


inode란?

   - 파일에 대한 Metadata를 표현하는 구조체이다.

dentry란?

   - 해당 디렉토리가 포함하고 있는 디렉토리와 파일정보를 보유하는 구조체이다.

   - 여기서 디렉토리도 하나의 파일로 관리된다.



3. 하드 링크(Hard Link)와 소프트 링크(Soft Link)


리눅스에서는 하드 링크와 소프트 링크를 사용할 수 있다. 일반적으로 소프트 링크를 사용하며 이는 윈도우의 단축아이콘과 유사하다.


dentry 구조체는 각 파일의 inode를 찾아갈 수 있는 정보를 가지고 있다. 소프트 링크란 이 정보(그림2에서 원본파일)를 재참조하는 연결로서 '파일의 inode가 존재하는 곳'을 참조한다. 이 이야기는 파일의 위치가 바뀌면 참조가 깨진다는 것을 의미한다.


하지만 하드 링크는 '파일의 inode'를 직접 참조한다. 즉 파일이 어디로 이동하든 파일을 접근하기 위한 inode에 접근가능하다는 것을 의미한다. 또 다른 의미로 소프트 링크와 달리 새로운 inode를 생성할 필요가 없지만 약간의 위험성이 있다고 볼 수 있다.


[그림2]




Reference

[01] http://hybridego.net/1014

[02] http://js_koh.blog.me/130124216027

[03] http://akaseon.tistory.com/55

[04] http://sksstar.tistory.com/10

[05] http://blog.naver.com/skout123?Redirect=Log&logNo=50131553545

[06] http://ssoing.tistory.com/3




2012. 04. 03

Written by HoSeok Seo




Comments