어떻게 파일 시스템: 평평한 디스크에 씌운 나무 모양 환상
지난 레슨에서 드라이버 덕분에 디스크 같은 장치와도 대화하게 되었다. 그런데 디스크 속을 열어 보면 파일도 폴더도 없고, 번호만 붙은 칸이 끝없이 늘어서 있을 뿐이에요. 이 평평한 칸의 바다에서 내 사진 한 장을 어떻게 찾아낼까?
디스크의 맨얼굴은 번호 붙은 칸이다
우리는 화면에서 파일을 아이콘으로 보고, 폴더를 열어 그 안의 또 다른 폴더를 본다. 하지만 디스크 자체에는 그런 것이 없다.
디스크는 사실 똑같이 생긴 칸이 0번, 1번, 2번처럼 번호 순서대로 평평하게 늘어선 거대한 보관함이다. 칸 하나하나를 블록이라고 부른다.
블록에는 데이터 조각이 들어가지만, 어떤 칸이 무슨 파일인지, 이름이 무엇인지는 디스크 자신이 전혀 모른다. 번호와 데이터, 그것이 전부예요.
칸을 누르면 데이터가 들어간다. 칸에는 번호만 있고 이름도 폴더도 없다. 이것이 디스크의 맨얼굴이에요.
칸은 번호로만 구분되고 내용물끼리는 아무 연결도 없다. 큰 파일은 칸 하나에 다 들어가지 않고, 빈칸도 여기저기 흩어져 있다.
그러면 파일 하나가 여러 칸에 쪼개져 들어가야 할 텐데, 흩어진 조각을 나중에 어떻게 다시 모을까?
이것이 운영체제가 풀어야 할 첫 숙제예요.
파일은 흩어진 블록을 묶는 이름표와 지도다
해결책은 의외로 단순하다. 운영체제가 '사진.jpg라는 이름의 파일은 3번, 7번, 12번 칸에 이 순서로 들어 있다'는 작은 메모를 하나 둔다. 이 메모가 바로 지도다.
이름을 주면 운영체제는 지도를 펼쳐 흩어진 칸을 차례로 찾아가 조각을 모아 온다.
그러니까 파일은 사실 두 가지의 합이에요. 하나는 칸에 흩어진 데이터 조각들이고, 다른 하나는 그것을 이름으로 묶어 주는 지도다. 우리가 더블클릭하는 것은 이 지도이고, 디스크는 지도가 가리키는 칸을 읽어 줄 뿐이에요.
이름표를 누르면 지도를 따라 흩어진 칸(3,7,12)이 차례로 모여 하나의 파일이 된다.
지도 한 장이 흩어진 칸을 하나의 파일로 묶어 주었다. 덕분에 우리는 칸 번호를 몰라도 이름만으로 파일을 부를 수 있다.
그런데 파일이 한두 개가 아니라 수천 개라면 이름표가 수천 장 쌓여 다시 막막해진다.
이 많은 이름표를 정리할 방법이 필요하다. 이제 폴더가 나설 차례예요.
폴더는 파일을 담는 또 하나의 파일이다
폴더라고 하면 파일과 전혀 다른 무엇처럼 들리지만, 사실 폴더도 그냥 또 하나의 파일이다. 다만 담긴 내용이 특별하다.
보통 파일은 사진이나 글자를 담지만, 폴더라는 파일은 '이 안에 든 파일들의 이름표 목록'을 담는다. 그래서 폴더를 연다는 것은 그 목록을 읽어 어떤 이름표가 들어 있는지 보는 일이에요.
폴더 안에 또 폴더를 넣을 수도 있다. 그러면 가지가 갈라지는 나무, 곧 트리 모양이 생긴다. 맨 위 뿌리에서 시작해 가지를 타고 내려가면 원하는 파일에 닿는다.
폴더를 누르면 그 안의 파일과 하위 폴더가 펼쳐진다. 뿌리에서 가지를 타고 원하는 파일까지 따라갈 수 있어요.
평평했던 칸의 바다 위에 이제 위아래로 갈라지는 깔끔한 나무가 섰다. 폴더가 또 다른 파일일 뿐이라서, 운영체제는 따로 새로운 장치를 만들지 않고 같은 파일 개념만으로 정리 구조를 세운 것이다.
그런데 궁금한 것이 하나 남는다. 이렇게 만든 파일을 지우면 디스크에서 그 데이터가 정말로 바로 사라질까?
다음 단계에서 그 비밀을 살짝 들춰 봐요.
지운다는 것은 지도만 지우는 일이다
직관으로는 파일을 지우면 디스크에서 데이터가 싹 사라질 것 같다. 그런데 운영체제는 보통 그렇게 하지 않는다. 데이터가 든 칸을 하나하나 깨끗이 비우는 데는 시간이 오래 걸리기 때문이다.
그래서 빨리 끝내려고 이름표와 지도만 지우고 칸 안의 데이터는 그대로 둔다. 대신 그 칸에 '이제 비었음, 다시 써도 됨'이라고 표시만 해 둔다.
지도가 사라지면 그 데이터로 가는 길이 끊기니 우리 눈에는 파일이 없어진 것처럼 보여요. 하지만 칸 안의 내용은 아직 그 자리에 남아 있다.
파일을 지우면 이름표와 지도는 흐려지지만(끊긴 길) 칸 속 데이터는 자리에 남는다. 새 파일이 그 칸을 덮어쓸 때 비로소 사라져요.
그래서 가끔 복구 도구가 지운 파일을 되살리기도 한다. 지도만 다시 찾아 주면 자리에 남아 있던 칸들을 도로 이어 붙일 수 있기 때문이다. 반대로 새 파일이 그 칸들을 덮어쓰고 나면 원래 데이터는 영영 사라진다. 요즘 쓰는 반도체 저장장치는 비운 칸을 곧 정리해 버리기도 해서 되살리기가 더 어렵다.
결국 삭제의 핵심은 데이터를 지우는 것이 아니라 데이터로 가는 지도를 지우는 일이었다. 파일도 폴더도 삭제도 모두 지도와 이름표라는 한 가지 아이디어 위에 서 있는 셈이에요.
평평한 디스크 위에 씌운 나무 모양 환상
한 걸음 물러나 전체를 보자. 디스크의 진짜 모습은 번호 붙은 평평한 칸들이었다. 그 위에 운영체제가 세 가지 마법을 부렸다.
첫째, 이름표와 지도로 흩어진 칸을 하나의 파일로 묶었다. 둘째, 파일을 담는 또 다른 파일로 폴더를 만들어 트리를 세웠다. 셋째, 지울 때는 데이터가 아니라 지도를 지웠다.
이 세 가지 덕분에 우리는 칸 번호 따위를 평생 몰라도 이름과 폴더만으로 편하게 파일을 다룰 수 있어요.
세 장을 차례로 누르면 평평한 블록에서 이름표로 묶인 파일로, 다시 폴더 트리로 환상이 쌓이는 과정이 한눈에 정리된다.
가상 메모리가 진짜보다 큰 기억을 보여 주었듯, 파일 시스템은 평평한 칸을 잘 정돈된 나무로 보여 주는 환상이에요. 진짜는 단순하고, 편리함은 운영체제가 얹어 준 것이다.
그런데 이 깔끔한 트리를 컴퓨터 한 대에서 여러 사람이 함께 쓴다면, 아무나 남의 파일을 열고 지워도 괜찮을까? 다음 레슨에서는 누가 무엇을 읽고, 쓰고, 실행할 수 있는지, 그 질서를 지키는 권한 이야기를 해요.