요약
- 9P2000에서는 Twalk가 제공한 모든 이름 요소가 성공적으로 해석되어야, 비어 있던 newfid가 결과를 대표한다. 부분 Rwalk는 이미 통과한 접두어를 보고할 수 있지만, 두 fid를 바꾸지는 않는다.
- Topen은 별개의 요청이다. 접근 모드를 제시해 서버가 권한을 검사하게 하고, 이후 읽기와 쓰기를 위해 fid를 준비한다. Ropen 자체는 읽기도, 쓰기 완료의 증명도 아니다.
- Rob Pike의 역할은 공동 창조의 역사 속에 두어야 한다. Ken Thompson이 프로토콜 작업을 시작했고, Pike가 이름 지정 체계를 통합했으며, Dave Presotto가 네트워크 부분을 구축했다. Plan 9 논문과 이후 방언들에도 각자의 공동 저자가 있다.
사고 보고서에는 흔히 이런 문장이 나온다. “경로 검사에 성공했으므로 파일이 이미 사용 가능하다.” 9P에서 이 문장은 최소한 open 요청, 접근 모드 판단, 그리고 이후의 I/O라는 세 겹의 사실을 넘어선다. walk 성공이 무가치하다는 뜻이 아니라, 그 가치가 그 문장보다 더 정확하다는 뜻이다.
9P2000의 Twalk는 기존 fid에서 출발해 newfid를 제시하고, 이름 요소들의 목록을 덧붙인다. 클라이언트가 의도적으로 둘을 같게 하지 않는 한, newfid는 아직 사용되지 않은 값이어야 한다. 서버는 이름을 하나씩 처리하고, 각 디렉터리 수준을 통과할 때마다 검색 권한을 만족해야 한다. 이름 목록 전체가 성공했을 때만 Rwalk는 요소 수와 같은 수의 qid를 돌려주고, newfid가 해석 결과를 가리키게 한다.
이 영수증이 증명하는 것은 이 서버, 이 연결, 이 출발점에서 정렬된 이름들이 당시에 완전히 해석되었다는 사실이다. 결과가 이미 열렸다는 증명은 아니다. 프로토콜 서문은 fid를 클라이언트가 선택한 32비트 식별자로, 파일이 open되었든 아니든 현재 파일을 대표하는 값으로 서술하며, 같은 연결의 참여자들이 fid 공간을 공유한다. 버전을 다시 협상하면 세션이 재초기화되고 미완료 I/O가 중단된다. 따라서 fid는 본질적으로 연결 문맥에 속하며, 세션을 넘어 보존할 수 있는 만능 핸들이 아니다.
실패 의미론은 이 설계의 절제를 더 잘 보여준다. 첫 요소가 통과하지 못하면 서버는 곧바로 오류를 돌려주고, 이후 요소가 실패하면 Rwalk는 이미 해석된 접두어의 qid를 가져올 수 있다. 그러나 9P2000은 명확히 규정한다. 모든 요소를 끝내지 못했다면, 원래 fid와 newfid 모두 영향을 받지 않는다. 모니터링 플랫폼이 “9단계 중 7단계 성공”을 보고 여전히 사용 가능한 새 핸들을 등록한다면, 프로토콜이 만들지 않은 상태를 만들어낸 것이다.
요소가 0개인 Twalk도 “아무것도 하지 않았다”는 뜻이 아니다. 시작 fid를 newfid로 복제하지만 어떤 이름도 넘지 않는다. 한 메시지가 최대 16개 요소를 담는다는 MAXWELEM 제한은 논리 경로가 최대 16단계라는 뜻도 아니다. 클라이언트는 다음 walk를 계속 보낼 수 있다. 패킷을 재구성할 때, 이런 세부 사항이 로그가 경로를 서술하는지, 복제를 서술하는지, 메시지 분할을 서술하는지를 결정한다.
open은 다른 질문에 답한다. Topen은 fid가 이미 대표하는 파일에 대해 읽기, 쓰기, 읽기·쓰기, 실행 같은 모드를 요청하며, 9P2000이 규정한 부가 플래그를 담을 수 있다. 서버는 여기서 접근 권한을 검사하고, fid를 이후 I/O에 쓸 수 있도록 준비한다. Ropen은 qid와 iounit을 돌려준다. 구체적인 데이터 전송에 대한 영수증은 그보다 뒤의 Tread나 Twrite만이 만들 수 있다.
시간도 이 경계에서 증거로 들어온다. open 매뉴얼은 권한이 열 때 검사된다고 말하며, 파일이 열린 뒤의 권한 변화는 이미 갖춘 접근 능력을 철회하지 않는다. 따라서 walk 시점의 디렉터리 검색 권한과 open 시점의 파일 접근 권한은 같은 것이 아니며, 영원한 사실도 아니다. 완전한 walk 뒤에 open이 거부되는 것이 곧 모순은 아니다. 요청 모드, 파일 권한 또는 서버 상태가 달라졌을 수 있다. 반대로 정책이 바뀐 뒤에도 이전에 이미 열린 fid는 계속 접근할 수 있다. 감사는 두 사건과 그 순서를 함께 보존해야 한다.
qid 역시 정확하게 서술되어야 한다. 9P는 같은 서버 계층 안에서 파일을 고유하게 식별하는 데 qid를 쓴다. 파일이 삭제된 뒤 다시 만들어지면 qid의 path 부분이 바뀌어야 한다. 인터페이스에 표시되는 경로 문자열보다 식별력이 높지만, 독립된 서버를 넘는 전역 신원도, 콘텐츠 해시도 아니며, 두 마운트 지점 뒤가 같은 객체임을 증명할 수도 없다.
이런 국소성은 시스템 결함이 아니다. Rob Pike, Dave Presotto, Ken Thompson, Howard Trickey와 Phil Winterbottom이 공동 저술한 《The Use of Name Spaces in Plan 9》는 프로세스별 이름공간을 서술하고, 자원이 간결한 메시지 프로토콜을 통해 조합된다고 설명한다. 《Plan 9 from Bell Labs》는 Pike, Presotto, Sean Dorward, Bob Flandrena, Thompson, Trickey와 Winterbottom이 함께 서명했으며, 이름공간의 조합이 클라이언트 쪽에 저장된다는 점을 강조한다. 시스템이 제공해야 하는 것은 통제 가능한 국소적 시점이지, 가상의 전역 디렉터리 트리가 아니다.
인물 귀속에도 경계를 남겨야 한다. 제2판 서문은 Thompson이 프로토콜 작업을 시작했고, Pike가 이름 지정 체계를 통합했으며, Presotto가 네트워크를 담당했다고 기록하면서 Winterbottom 등 수많은 기여자를 함께 적는다. 9P를 Pike의 개인 발명으로 줄이면, 그가 실제로 완수한 통합 작업이 오히려 지워진다. 제4판 서문은 새 9P가 주로 기존 이름 요소의 27바이트 제한에서 벗어나기 위한 것이면서 효율성, 유연성과 캡슐화도 높였다고 설명한다. Linux v9fs는 9p2000, 9p2000.u, 9p2000.L을 협상할 수 있으며, UNIX 확장과 Linux 방언은 각자 자기 문서를 가진다. 9P2000.L은 walk 구조를 유지하면서 Linux식 Tlopen/Rlopen을 쓴다. 두 단계 경계를 비교할 수 있지만, 모든 필드를 하나의 프로토콜로 섞어서는 안 된다.
배포 계층에는 캐시가 더해질 수도 있다. Linux v9fs의 서로 다른 캐시 모드는 클라이언트의 관찰이 서버의 실시간 상태와 얼마나 맞아떨어지는지를 바꾼다. 패킷, 캐시, 저장 결과가 모두 진실일 수 있지만 서로 다른 시점에 속한다. 해법은 어느 계층도 부정하는 것이 아니라, 협상된 방언, 연결, 서버와 내보내기, attach 문맥, 시작 fid/qid, 정렬된 이름, 반환된 모든 qid, 완전·부분 상태, newfid, open 모드와 플래그, Ropen의 qid/iounit, 이후 I/O, 캐시 정책, 세션 종료를 모두 기록하는 것이다.
이렇게 하면 “walk 성공”은 여전히 매우 강한 문장으로 남는다. 지정된 문맥에서 이름이 끝까지 통과했다는 사실을 정확히 말한다. 그 문장이 신뢰할 만한 것은, 다른 무언가가 동시에 열렸다고 가장할 필요가 없기 때문이다.
Sources
- https://9p.io/magic/man2html/5/walk
- https://9p.io/magic/man2html/5/open
- https://9p.io/magic/man2html/5/intro
- https://9p.io/sys/doc/names.html
- https://9p.io/sys/doc/9.html
- https://9p.io/sys/man/preface.html
- https://9p.io/sys/man/preface4.html
- https://docs.kernel.org/filesystems/9p.html
- https://ericvh.github.io/9p-rfc/rfc9p2000.u.html
- https://github.com/chaos/diod/blob/master/protocol.md
회원 브리핑
프로필 심층 컨텍스트
올바른 멤버십 등급으로 로그인하면 전체 브리핑과 출처 노트를 볼 수 있습니다.
Strategic Circle 전용
Strategic Circle
모든 독자에게 공개됩니다. 가입 후 로그인하면 프로필 브리핑를 열람할 수 있습니다.
Strategic Circle 가입하기Leadership Alliance 전용
Leadership Alliance
자격을 갖춘 IP 자산 소유자 및 운영진을 위한 콘텐츠입니다. 로그인하면 Leadership Alliance 브리핑을 열람할 수 있습니다.
Leadership Alliance 가입하기





