원본 논문
- 이 글은 Dennis M. Ritchie - The Evolution of the Unix Time-sharing System 논문을 읽고 정리한 글입니다.
- 별도의 명시가 없으면, 본 논문에서 그림을 가져왔습니다.
현재 UNIX File System 과의 공통점과 차이점
- 구조적으로 볼때, PDP-7 UNIX File System 은 지금의 파일시스템과 거의 동일하다:
- 파일시스템은 i-node 로 구성된 배열인 i-list 자료구조 형태이다:
- 파일의 권한, 사이즈, 디스크에의 저장 위치 (list of physical blocks) 의 정보를 담은 i-node
- i-node 들의 배열인 i-list
- 그리고 파일은 일반적인 텍스트 파일 이외에도 다음의 두 종류의 파일이 더 존재한다:
- 파일들의 i-number (i-node 의 ID) 와 파일들의 이름을 저장하고 있는 특별한 파일인 directory
- Device 를 대변하는 특별한 파일
- 이것은 특정 i-number 는 특정 device 를 의미하는 것으로 구현되어 있다
- 약간 fd/0 이 stdin 인 것과 유사한 느낌인듯
- Read, Write, Open, Create 와 같은 Syscall 도 PDP-7 에도 마찬가지로 구현되어 있었다.
- 파일시스템은 i-node 로 구성된 배열인 i-list 자료구조 형태이다:
- 지금의 파일시스템과 다른점은 아래와 같다:
- PDP-7 은 word-addressed machine 이기에 (이 말인 즉슨, 모든 instruction 이 고정된 크기를 가진다는 소리이다. 이 고정크기의 단위로 word 란 표현을 쓰는 것) IO 의 단위도 byte 가 아니라 word 이다.
- Erase 와 Kill 기능이 터미널에 없다고 한다. Erase 는 파일을 지우는 것 일거 같은데 Kill 은 모르겠네
- 또한 path name 이 없었다고 한다. (!!)
- 모든 파일은 ”
/
” 없이 현재 디렉토리를 기준으로 한 상대 위치를 통해 접근할 수 있다고 한다.
- 모든 파일은 ”
현재 디렉토리 바꾸기 (chdir
)
- 그럼 다른 디렉토리의 파일은 어떻게 접근하냐:
dd
라는 특별한 디렉토리를 통해 접근할 수 있다.dd
에는 각 사용자들이 사용하는 디렉토리들이 모여있다: 약간 지금의/home
과 비슷한 놈이라고 생각해도 될 것 같다.- 따라서 만약 kim 사용자의 디렉토리로 현재 디렉토리를 변경하고 싶다면, 다음과 같이 하면 된다.
chdir dd kim
- 당시의
chdir
는 지금의chdir
와는 좀 다르다: 이 명령어는 인자를 여러개 받을 수 있고, 명시한 순서대로 디렉토리에 접근하게 된다.- 즉, 위의 명령어는 지금의 chdir 로 따지면 아래와 같다.
chdir dd
chdir kim
Link (Symlink)
- Link 기능도 초기 UNIX 에 포함되어 있었다고 한다. 문법은 다음과 같다:
dir
은 현재 디렉토리 내의 디렉토리 이름file
은dir
디렉토리 내의 파일newname
은 현재 디렉토리에 생성할 link 파일의 이름
link(dir, file, newname)
- 현재의 UNIX 에는 directory 를 link 하는 것은 금지되어 있었지만, 초기에는 가능했다고 한다.
- 위의
dd
를 이용해 좀 복잡한 사용 예시를 들어보면, kim 이란 사용자의 디렉토리 내의 파일 x 를 현재 디렉토리에 link 거는 것은 다음처럼 할 수 있다:
ln dd kim kim
ln kim x x
rm kim
단점들
- 상상이 잘 안되겠지만, directory 와 device 는 disk 가 재생성될 때에만 생성될 수 있다고 한다.
- 따라서 subdirectory 는 실생활에서는 거의 사용되지 않았으며
- Device 를 추가하는 것 또한 매우 힘든 작업이었고
- Removable disk pack (USB 같은?) 것은 꿈도 못꾸는 것이었다고 한다.
- 초기의 UNIX 은 현재의 UNIX 시스템에 비하면 당연히 아주 단순화된 모습이었다.
- 그의 일례로, Multi-programming 을 지원하지 않았기에 디스크에서 데이터를 읽어올 때에는 다른 작업이 불가능 했다.
- 사용자에게로 control 이 전환되지 않는 것은 물론이고, 시스템 코드도 작동하지 않았다고 한다.
- 지금의 버퍼링 시스템의 전신이 구현돼 있긴 했지만, Disk IO 와 CPU 연산 작업이 동시에 이루어지지는 않았다고 한다..
- 그의 일례로, Multi-programming 을 지원하지 않았기에 디스크에서 데이터를 읽어올 때에는 다른 작업이 불가능 했다.