Implement a hierarchical name space.

기본 파일 시스템에서는 모든 파일이 하나의 디렉터리에 저장된다. 디렉터리 항목이 파일 또는 다른 디렉터리를 가리키도록 수정한다. 즉, 디렉터리 계층 구조를 만든다.

디렉터리는 그 크기를 확장할 수 있다. 파일 이름은 14byte로 길이를 제한한다. 원한다면 제한 길이를 늘려도 된다. 하지만 파일의 경로 이름은 더 14byte보다는 더 길게 만들어야 한다.

Maintain a separate current directory for each process.

각각의 프로세스는 서로 독립적인 디렉터리를 갖는다.

시작할 때 루트 디렉터리를 초기 프로세스의 현재 디렉터리로 설정한다. 한 프로세스가 fork() 시스템 콜로 다른 프로세스를 시작하면 자식 프로세스는 부모 프로세스의 현재 디렉터리를 상속받는다. 그 후 두 프로세스의 현재 디렉터리는 독립적이므로 현재 디렉터리를 변경하는 것은 다른 프로세스에게 영향을 미치지 않는다.

무슨 뜻이냐 하면, 만약 shell 프로그램의 CWD가 /home/rene인 상황에서 ls 프로그램을 실행하게 되면, shell 프로세스의 자식 프로세스인 ls의 CWD 역시 /home/rene라는 것이다. ls 프로그램은 CWD인 /home/rene을 기준으로 작업을 실시한다. 여기서 shell 프로그램이 CWD를 바꾼다고 해서 ls의 CWD까지 바뀌는 건 아니니까....

이게 UNIX 파일 시스템에서 cd 명령어가 shell built-in 명령어인 이유이다.

디렉터리 구분은 슬래시('/') 문자로 한다. 또한 특수한 파일 이름들인 '.' 및 '..'도 Unix에서와 동일한 의미를 갖도록 만들어야 한다.

Step 1 : directory.c 구조체 및 함수 수정

Step : Directory 관련 시스템 콜 수정 및 구현