범주 기반 파일 시스템이 실제로 구현된다면...
이 글에서는 다음과 같은 가상의 파일시스템을 따릅니다.
"""표기:
파일 A - A
범주 C에 분류된 파일 A - A:C
범주 C, D에 분류된 파일 A - A:C;D
전역 범주에 분류된 파일 A - A:
전역 범주와 범주 C에 분류된 파일 A - A:;C (A:C; 형태로 표기할 수는 없다. 1))
범주 C - :C
범주 C, D - :C;D
규칙:
1. 한 파일은 한 개 이상의 범주에 속한다.
2. 범주에 파일을 생성함으로써 범주가 동적으로 생성된다.
3. 범주에 있는 모든 파일이 삭제됨으로써 범주가 동적으로 삭제된다.
4. 한 범주 안에서 파일명은 유일하다."""
* 그렇다면, 이 파일시스템을 유일하게 사용하는 운영체제에서, 셸은 어떤 형태를 띄게 될까요?
셸의 형태란 것은, 프롬프트와 명령어를 니르는 말입니다.
그러니까, chdir이나 mkdir, rmdir 같은 명령은 물론 없을 테고...
* 그리고, 이 파일시스템을 유일하게 사용하는 운영체제는, POSIX 표준을 지킬 수 있을까요?
POSIX 표준에는 디렉터리와 관련된 것들이 쓰여 있죠. readdir 등의 함수.
* 보통의(디렉터리 기반) 파일 시스템에서 복사해 왔을 때는, 어떤 구조를 띄어야 합니까?
그러니까, 디렉터리 기반 파일 시스템에 있는 한 디렉터리를 범주 기반 파일 시스템으로 복사하면,
그 디렉터리 구조가(물론 중첩되어 있을 수도 있지요) 어떤 범주 형태로 변형되어야 합니까?
* 보통의(디렉터리 기반) 파일 시스템으로 복사할 때는, 어떤 구조를 띄게 됩니까?
위와 반대입니다. 범주가 어떤 형태로 디렉터리로 재편되어야 하나요?
재미있는 설계 문제입니다. :)
1) 프로그램 처리에서, 모든 범주를 반복문으로 처리할 때
for(int i = 0; i < nCat; ++i) cout << cat[i] << ";";
와 같이 처리할 수 없게 됩니다.
.
저도 예전부터 생각했던 시스템인데요.
현재의 파일시스템은 한 개체가 하나의 범주에만 종속되어야 하기 때문에 효과적으로 분류할 수가 없고 별도의 인덱스를 만들어야 하는 문제가 있죠.
그래서 한 개체를 여러 범주에 넣는 것을 지원해주는 시스템이 필요한데
전 이렇게 구성하려고 생각하고 있었습니다;;;
- 각 파일에 내부적으로 고유ID를 부여하고 고유ID별로 location 정보 관리
- 각 범주(디렉토리 등)에 파일을 넣으면 내부적으로 고유ID에 대한 link처럼 관리
- 한 범주에서 파일을 삭제하면 unlink처럼 관리
- link count가 0이 되면 파일 삭제(고유ID도 삭제)
그 외에...
- shell이나 편집기 프로그램 등에서 파일을 삭제할 때 "모든 범주에서 삭제하겠습니까?"식의 메시지
- 명시적으로 범주를 만드는(디렉토리처럼) 것 외에
파일에 포함된 속성이라든지
블로그 포스트에서처럼 파일에 tag를 부여하면 이걸 바탕으로 자동으로 분류(인덱싱)
POSIX나 기본 함수와의 호환이 문제긴 한데...
굳이 없어져야 할 함수나 그런게 있진 않다고 생각됩니다.
다만 파일을 삭제하는 함수가 문제입니다만, 그냥 unlink로서 동작하게 할 것인지
모든 범주에서 삭제하는 것을 기본으로 할 것인지만 정하면 된다고 생각되네요.
(관리자가 설정할 수 있게 하거나 할 수도 있겠죠...)
마찬가지로 일반 파일 시스템에서 복사를 해 올 때에는 문제가 되지 않고
반대로 일반 파일 시스템으로 복사를 할 때가 문제지만,
복사하는 함수에 source로 지정한 범주만 디렉토리처럼 보면 될 것입니다.
범주에서 파일을
범주에서 파일을 삭제하는게 아니라 파일이 "범주"라는 속성을 갖고 있다는 생각이 드는군요.
이렇게 되면 어떤 범주에서 파일을 삭제하고 싶으면, 파일에서 그 범주 속성을 없애버리는 것이죠.
파일 삭제를 하면 모든 범주에서 실제로 사라질 것이구요.
그런데 이렇게 하면 내용이 다르지만 같은 이름을 가지면서 다른 범주에 들어가는 파일의 생성이 불가능하게 되는것 아닌가요?
--------------------------
snowall의 블로그입니다.
http://snowall.tistory.com
피할 수 있을때 즐겨라! http://melotopia.net/b
.
아. 전 제가 생각한 방식을 가지고 말을 하다 보니... 죄송
말씀하신 방식으로 범주라는 것을 생각할 경우에는, 디렉토리처럼 계층 구조를 관리하기가 쉽지 않습니다.
그게 제가 구성 방식을 저렇게 생각하게 된 이유지요.
그리고 파일을 생성할 때, 말씀하신대로 '동시에' 여러 범주에 동일한 파일을 '등록'되게끔 하기도 곤란합니다.
역시 제가 생각한 방식에서는 조금은 더 명확한 구현이 될 수 있을 겁니다.
나름 이거 생각한지는 좀 오래 됐는데... 생각만 하고 구현은 언감생심...