Live Engineering


애드센스 와이드


NTFS 시작! by lefoot

파일시스템이란 것은 사용자 애플리케이션(User라 하겠습니다)이 데이터의 저장및 탐색을 요청할때, 그것을 대신 수행해주는 소프트웨어를 말합니다. 왜 User보고 직접 하라 하지 않고, "대신" 수행해 주는 것일까요. 그 이유는, 당연히 쉽지 않기 때문입니다.

보통 User가 데이터를 저장하는 방식은, open() 으로 파일 핸들을 얻어서, write() 로 데이터를 쓰고, close()로 끝났음을 OS에 알려줍니다. 아주 쉬워보이지만, 사실 File System은 죽을랑 말랑 어려운 작업을 아래에서 수행하고 있습니다. 왜냐면, Storage device는 linear address로 추상화되어 있고, 다른 여러 파일들과 데이터 영역이 겹치지 않으면서, 데이터 접근 속도가 빠르게 알맞게 배치해야 하는 복잡한 전략을 생각해야 하기 때문입니다.

게다가, file system은 device 의 특성까지도 고려해서 다양한 전략을 사용해야 합니다. 가령 Disk를 사용한다고 했을때(나중에 차차 이야기하겠지만은), Disk가 데이터를 읽는 동작은 매우 원시적인 기계적 방법을 동원하므로, 한번 움직일때 될수있는대로 유용한 데이터를 많이 가져오는 것이 중요합니다. 따라서 file system은 file의 data를 될 수 있으면 가까운 곳에 묶으려는 시도를 하게 되는데, file 이란 것이 그 크기가 동적으로 변화할 수 있는 것이기 때문에 file system의 입장에서는 아주 골치가 아파질 수 있는 것입니다.

만약 file system이 없다면, User가 이 모든 행위를 직접 수행해야 하는데, 내가 올바른 application을 작성했다 하더라도, 다른 application이 버그가 있어서 내  데이터를 덮어써버렸다면 얼마나 억울하겠습니까. 어쨌든 요지는, file system은 user를 대신해서 매우 복잡한 일을 수행한다 정도가 되겠습니다.

그런데, 이렇게 중요한 file system의 구조라던지 동작에 대해서 토론하고 논의하는 자리가 그렇게 많지는 않은 것 같습니다. 따라서 아무것도 모르는 상태에서 뭔가 공부해볼라치면 자료들은 너무 어렵게 쓰여있는것 같고, 그렇다고 도서관 책 몇권 찾아보면 너무 당연한 이야기만 써놓는것 같고... 뭔가 이 중간 gap을 메워줄 자료가 필요하다는 생각이 듭니다.

이 카테고리에서는 file system 중에서도 특히 NTFS에 대해 다루어 보고 싶습니다. 아주 많은 사용자 층을 가지고 있음에도 불구하고, 여기에 대해 관심을 갖는 분들은 개발자분들을 제외하면 많지 않은 것 같습니다. 심지어 논문도 그렇게 많아보이지는 않네요. 정보가 완전히 공개되지 않아서인 측면도 있지만...

그동안 이것저것 자료도 찾고, 실제 raw access로 NTFS 가지고 이것저것 알아본 내용들을 가능하면 편하고 쉽게 전달하고 싶습니다.

덧글

댓글 입력 영역