거북이의 쉼터

(2022.04.02) Soft Link 가이드라인 본문

코딩 삽질/KAIST PINTOS (CS330)

(2022.04.02) Soft Link 가이드라인

onlim 2022. 4. 2. 18:49

이 기능도 분명 원래 핀토스에는 없었던 것 같은데 이번에 새로 생긴 것 같다. 일단 soft link, 또는 symbolic link라고 불리는 이 기능이 대체 무슨 기능인지 알아보자. 다음의 그림이 link와 관련된 사항을 가장 잘 표현한다고 생각해서 가져왔다.

 

디렉토리 내에서 가지고 있는 inode는 분리되어 있되, 해당 링크 파일을 따라가면 원본 파일의 경로를 가지고 있게 된다. 이를 이용해서 링크된 원본 파일을 결국 찾을 수 있다는 것이며, 유저는 해당 파일이 symbolic 링크인지 아닌지의 여부와 상관 없이 쓸 수 있어야 한다. 

 

리눅스에서는 soft link를 만들게 되면 일반 파일, 디렉토리와는 취급을 달리 하게 된다. 이를 참조하여 OS에서는 열려는 파일이 soft link 파일인지 알 수 있도록 하자. 만들 때 inode에 해당 파일이 symlink 파일임을 표기한다면, 해당 파일을 열거나, dir_traverse를 할 때 원본 파일을 참조할 필요가 있는지 구별할 수 있을 것이다. 이를 위해 현재 참조하려는 파일/디렉토리가 symlink라면 원본을 찾는 추가 루틴을 구현하도록 한다.

 

원본 파일의 경로를 저장하는 방법을 생각해보았다. 만약 symlink를 만들 때, 절대 경로로 지정한다면 문제가 없지만, 상대 경로로 지정한다면 현재 cwd까지 고려해서 해야 한다. 이에 저장할 데이터로서, 들어오는 경로와 함께 cwd의 섹터 정보를 저장하도록 하자.

 

해당 symlink를 구현한 뒤에는 filesys_open, dir_traverse를 주로 고쳐야 한다. 이제 다음 포스팅에서 구현을 시작해보자.

Comments