Always Be Wise

Project_4 : File System - Subdirectories and Soft Links 본문

카이스트 정글 - 프로젝트/Pintos

Project_4 : File System - Subdirectories and Soft Links

bewisesh91 2022. 1. 29. 21:52
728x90

기본 파일 시스템에서 모든 파일은 하나의 디렉터리에 저장된다. 디렉터리 항목이 파일 또는 다른 디렉터리를 가리키도록 수정해야 한다.

다른 파일과 마찬가지로 디렉터리를 원래 크기 이상으로 확장할 수 있어야 한다.

기본 파일 시스템은 파일 이름을 14자로 제한하고 있다. 개별 파일 이름 구성에 대해 이 제한을 유지하거나 확장할 수 있다.

전체 경로 이름이14자를 넘어가는 것은 반드시 허용해야 한다.

 

각 프로세스에 대해 별도의 현재 디렉터리를 유지해야 한다. 시작할 때, 루트를 초기 프로세스의 현재 디렉터리로 설정한다.

한 프로세스가 포크 시스템 콜로 다른 프로세스를 시작하면, 자식 프로세스는 부모 프로세스의 현재 디렉터리를 상속한다.

그 후에는, 두 프로세스의 디렉터리는 독립적이므로, 디렉터리를 바꾸는 것이 다른 프로세스에 영향을 주지 않는다.

 

디렉터리를 열 수 있도록 oepn 시스템 콜을 업데이트해야 한다. 

기존 시스템 콜 가운데, close만이 디렉터리에 대한 파일 디스크립터를 받아야 한다.

일반 파일뿐만 아니라 루트를 제외한 빈 디렉터리를 삭제할 수 있도록 remove 시스템 콜을 업데이트해야 한다.

디렉터리는 파일이나 하위 디렉터리가 없는 경우에만 삭제할 수 있다.

프로세스에 의해서 열려 있거나 현재 작업 디렉터리로 사용 중인 디렉터리의 삭제를 허용할지 결정해야 한다.

허용될 경우, 파일을 열거나 삭제된 디렉터리에서 새 파일을 만들려는 시도가 허용되지 않아야 한다.

 

아래의 새로운 시스템 콜을 구현해야 한다.

bool chdir (const char *dir);

프로세스의 현재 작업 디렉터리를 인자로 받은 dir로 변경한다. 성공하면 true를 반환하고, 실패하면 false를 반환한다.

bool mkdir (const char *dir);

dir이라는 이름의 디렉터리를 생성한다. 성공하면 true를 반환하고, 실패하면 false를 반환한다.

dir이 이미 존재하거나, dir 상의 디렉터리 이름이 존재하지 않는 경우 실패한다.

즉, mkdir("/a/b/c")는 /a/b/c가 존재하지 않으면서 /a/b가 존재할 경우에만 성공한다.

bool readdir (int fd, char *name);

파일 디스크립터 fd에서 디렉터리 항목을 읽는다. 이 항목은 디렉터리를 나타내야 한다. 

성공하면 name에 null로 끝나는 파일 명을 저장하고 true를 반환한다. 이때, READDIR_MAX_LEN + 1 바이트의 공간이 있어야 한다.

디렉터리에 어떠한 항목도 없다면 false를 반환한다. readdir에 의해. 과.. 이 반환되어서는 안 된다.   

READDIR_MAX_LEN은 lib/user/syscall.h에 정의되어 있으며,

파일 시스템이 기본 파일 시스템보다 긴 파일 이름을 지원하는 경우, 이 값을 기본값 14에서 늘려야 한다.

int inumber (int fd);

fd와 연결된 inode의 inode 번호를 반환한다. 이는 일반 파일 또는 디렉터리를 나타낼 수 있다.

inode 번호는 파일 또는 디렉터리를 지속적으로 식별하며, 파일이 존재하는 동안 유니크하다.

Pintos에서 inode의 섹터 번호는 inode 번호로 사용하기에 적합하다.

Soft Link

Soft link(Symbolic link)는 다른 파일 또는 디렉터리를 참조하는 유사 파일 객체이다. 

이 파일은 절대 혹은 상대 경로로 파일이 가리키고 있는 파일의 경로 정보를 갖고 있다.

int symlink (const char *target, const char *linkpath);

문자열 대상을 포함하는 linkpath라는 이름의 symbolic link를 만든다. 성공하면 0을 반환하고 아니라면 -1을 반환한다.

Comments