
Sector
데이터는 물리적으로 「섹터(sector)」라는 공간에 저장된다. 그리고 섹터는 흔히 "하드디스크의 물리적인 최소 단위"로써 정의된다. 다시 말해, 응용 프로그램이 생산한 데이터 집합인 파일은 모두 이 섹터 공간에서 읽기 · 쓰기· 삭제 등의 작업이 이뤄진다. 섹터는 512 Byte로 고정되어 있고, 이보다 더 작은 저장 단위는 없기 때문에 단 1 byte의 데이터라도 1개의 섹터를 사용하여 저장한다. 511 byte의 공간이 낭비되는 것이다.
그렇다면 과학자들은 무슨 이유로 이 비효율적인 것처럼 보이는 섹터라는 단위를 고안해 내어 하드디스크의 저장 구역을 나눈 것일까? 그것을 알기 위하여 초창기의 데이터 기록 방식을 살펴볼 필요가 있다.

The Origin of Sector
탄도 계산 등의 군용 목적으로 사용되었던 컴퓨터 개발 초기에는 하나의 저장 매체 내에 오직 하나의 데이터 집합(파일)만 존재하였다. 데이터는 저장 매체의 처음부터 시작하여 출력이 생긴 순서대로 최대 저장 용량까지 채워졌다. 그러나 기술이 발전됨에 따라 컴퓨터의 계산 능력과 저장 용량 또한 큰 진보를 이뤄냈고, 이는 하나의 저장 매체에 다수의 파일을 저장할 수 있게 하였다. 그러나 동시에 '다수의 파일을 하나의 저장 매체에 어떻게 저장하는가?'라는 문제를 해결하여야 하였고, 가장 간단한 방법으로 파일들을 일렬로 나열하는 해결책을 생각해 내었다.

[그림 1]은 저장 매체를 일차원적으로 추상화하여 보여준다. 저장 가능한 모든 공간은 일렬로 나열되어 데이터가 기록된다. 즉, 이 공간에 모든 파일들은 순서대로 나열된다. 각각의 응용 프로그램이 생성한 비트 스트림(bit stream)이 저장 매체의 앞에서부터 차례대로 쌓여가는 것이다.
저장 매체의 목차 - 「Directory File」
단순히 파일들을 저장 매체에 나열시키는 것은 반드시 해결되어야 할 또 다른 이슈를 가져왔다. 기존에는 저장 매체 내의 파일이 하나밖에 존재하지 않았기 때문에 저장 매체의 처음부터 데이터를 가져와서 메모리에 올리면 되었지만, 다수의 파일이 존재하는 상황에서는 작업이 필요한 파일이 어디서부터 어디까지 저장되어 있는지 명확히 판단할 수 있어야만 했기 때문이다.
예를 들어, 운영 체제가 어떤 응용 프로그램으로부터 "FILE C"에 대한 작업을 요청받았다고 해보자. 운영체제는 해당 데이터가 저장된 하드디스크에 접근하여 작업을 해야 하는데, 하드디스크의 어디에 위치하는지 반드시 알아야 작업을 시작할 수 있다. 하지만 위의 그림과 같은 경우는 각각의 파일에 대한 위치 정보가 없기 때문에 운영체제가 접근할 수 없다.
이를 해결하기 위해 과학자들은 '모든 파일의 위치가 기록된 특별한 파일(a special file that records where other ones are located)'을 이용하였다. 이렇게 고안된 파일이 바로 「디렉터리 파일(Directory File)」이다.

디렉터리 파일은 저장 매체의 앞 쪽에 위치하여 저장 매체 내의 모든 파일에 정보를 가지고 있다. 파일에 대한 중요 정보가 요약되어 디렉터리 파일에 저장되지만, 그중 가장 중요한 것은 '파일의 시작 위치' 정보이다. 운영체제가 파일 입출력에 대한 요청을 받으면 이 디렉터리 파일을 검색해서 해당 파일에 대한 정보를 얻는 것이다. 책의 '목차'와 같은 역할을 한다고 생각하면 쉽게 연상될 수 있을 텐데, 파일을 추가로 생성하거나 제거하면 이곳에 관련 정보가 업데이트되어 기록된다.
Sector들의 논리 집합 - 「Block」
파일 입출력을 수행하는 운영체제 입장에서 고려해야 할 부분은 무한하다. 파일의 시작 위치 정도로 끝난 것이 아니다. 만약 [그림 2]의 저장 매체 구조에서 "FILE A"에 데이터를 추가했다고 가정하면 어떻게 될까?

[그림 3]에서 확인할 수 있듯이, "FILE A(todo.txt)"의 데이터가 "FILE B(carrie.bmp)"가 차지하고 있던 공간을 침범하게 되면서 무결성을 훼손하는 심각한 문제로 발전된다. 따라서 이를 개선하기 위해 각각의 파일을 하나의 덩어리 단위 공간에 저장하는 방안을 고안하였고, 그것이 바로 지금부터 이야기할 「Block」이다.
Block이라는 개념을 쉽게 풀이하면, 저장 매체의 전체 공간을 일정한 크기로 나눈 다음 그 나눠진 공간에 하나의 파일을 '유일한 데이터' 로서 기록하기 위해 도입된 개념이라고 생각하면 된다.

[그림 4]에서 저장 매체는 앞서 언급한 Block 단위로 나누어졌다. 저장 매체의 처음부터 끝까지 Block 단위를 사용하여 다수의 섹터를 하나의 Block으로 집약하고, 모든 Block에 차례대로 번호를 붙인 구조로 발전된 것이다. 그리고 이러한 구분된 공간에 각각의 파일이 자리 잡게 된다. 이와 같은 개념을 도입함으로써 파일들은 무결성을 보장받을 수 있는 공간을 가지게 되고, 데이터의 추가/삭제 등의 작업에도 서로 간에 영향을 미치지 않을 수 있게 되었다.
이러한 구조 상의 변화는 당연히 디렉터리 파일에도 약간의 변화를 가져왔다. 단순히 시작 주소를 기록하던 이전 세대와는 달리, Block 번호를 이용하여 파일에 접근하는 것이다. 앞서 설명하였듯이, 모든 Block 공간은 처음부터 끝까지 논리적으로 나열되어 번호를 부여받으며, 부여받은 번호가 디렉터리 파일에서 파일 접근 속성으로 사용된다.
여기까지 섹터에 대한 개념을 간단하게 정리해 보았다. 하드디스크는 물리적으로 수많은 섹터로 나눠져 있으며, 단일 섹터가 모여 하나의 Block으로 논리적인 집합 단위를 형성한다는 것이 이번 포스트의 핵심 내용이다. 실제로 컴퓨터에서 운영체제가 명령하는 모든 읽기/쓰기 작업은 이 Block 단위를 기본으로 간주하기 때문에, 파일 시스템을 제대로 이해하기 위해서는 먼저 이 기본 단위에 대한 선행지식이 필수적이다.
- Ⅱ 편에서 계속 -

'Forensic Knowledge > File System' 카테고리의 다른 글
파일시스템 기본 - Sector & Cluster Ⅱ (0) | 2021.08.17 |
---|---|
파일 시스템 기초 - Data & File (0) | 2021.07.27 |