비슷비슷한 용어들이 다른 의미로 쓰이는 것이 너무 헷갈려서 정리한 페이지입니다. 이 글에서는 메모리, 그리고 디스크의 최소한의 읽기/쓰기 단위인 프레임 / 페이지 / 섹터 / 블록의 개념에 대해 정리합니다.
모두 읽기 / 쓰기의 최소 단위를 나타냄
위 용어들은 하드디스크이건 메모리건 간에 모두 읽기와 쓰기의 최소 단위를 나타냅니다. 여기에다 하드디스크는 "클러스터" 라는 개념을 하나 더 가지고 있습니다. 이것까지 모두 어쨌든 메모리 또는 하드디스크의 읽기 또는 쓰기의 최소 단위를 나타냅니다.
하드디스크의 섹터, 블록, 클러스터
하드디스크의 섹터, 블록, 클러스터는 각각 다음의 의미를 가집니다.
섹터
하드디스크는 원판으로 이루어져 있습니다. 이 하나의 원판을 물리적으로 여러 개의 트랙으로 쪼개서 관리하고, 이 트랙을 다시 여러 개의 섹터로 쪼개서 관리합니다. 이렇게 쪼개진 섹터가 하드디스크의 물리적인 가장 작은 읽기 또는 쓰기 단위입니다.
아래 그림에서 진한 파란색이 트랙을 나타내고, 연한 파란색이 섹터를 나타냅니다. 이 때 섹터는 통상 512 바이트의 크기를 가집니다.
블록
여러 개의 섹터를 하나로 묶은 개념입니다. 하드디스크에는 보통 파일이 저장될 텐데, 파일이 블록 단위로 저장됩니다. 이 블록의 위치가 데이터가 저장된 물리적인 위치를 나타냅니다.
클러스터
하드디스크에는 파일이 저장된다고 했고, 이러한 파일을 저장하기 위해 블록이라는 물리적인 주소에 직접적으로 접근하기 보다는 그 위에 한단계를 더 감싸서 (가상화해서) 파일 시스템을 구성하고 이 파일 시스템이 블록과 섹터를 관리합니다. 이러한 파일 시스템의 종류는 exFAT, FAT32, NTFS 등이 있으며, 모두 "클러스터"라는 단위로 논리적인 저장 단위를 관리합니다.
하나의 클러스터는 하나 이상의 섹터 또는 블록으로 이루어져 있으며, 많이 사용하는 exFAT 또는 NTFS의 경우 하나의 클러스터에는 하나의 파일만이 저장됩니다. 만약에 하나의 클러스터가 4kB (=4096 byte) 라고 한다면, 우리가 10 byte 짜리 파일 100개를 저장하려고 할 때 실제로는 100개의 클러스터가 쓰이게 되고, 파일의 실제 용량은 1000 byte (= 약 1kB) 정도밖에 되지 않지만 실제로 클러스터에서 차지하는 용량은 4000 kB (= 약 4MB) 정도가 됩니다.
이러한 특성 때문에 읽기 / 쓰기의 최소 단위 라고 생각됩니다. 파일 크기가 아무리 작아도 실제로 차지하는 공간은 그보다 훨씬 크고, 이 때 남는 공간은 슬랙 공간이라고 부릅니다.
메모리의 페이지와 프레임
메모리의 경우는 약간 개념이 다릅니다. 메모리는 파일이 아니라 여러가지 객체나 실행 중인 프로세스 또는 프로그램의 코드 등이 저장됩니다. 이 때 메모리의 최소 관리 단위를 프레임이라고 부릅니다. 이는 메모리 할당의 기본 단위가 됩니다. 만약에 하나의 프레임이 4kB 라고 하면, 어떤 객체에 6kB 를 할당하는 것은 불가능합니다. 만약 6kB의 메모리가 필요하다면 프레임을 2개 할당하여 8kB의 용량을 할당해야 합니다.
메모리의 페이지
메모리는 기본적으로 하나의 큰 물리적인 메모리를 여러 개의 프로그램이 공유하는 형태입니다. 그런데 이 때 어떤 프로그램이 메모리의 1번 주소에 무언가를 저장하고 있는데 다른 프로그램이 똑같은 주소에 다른 객체를 덮어써 버렸다면, 처음 해당 주소를 점유하고 있던 프로그램을 데이터나 객체의 내용이 변경될 것입니다.
이를 방지하기 위해 페이지의 개념을 도입했습니다. 그러니까, 각 프로그램마다 자신만의 페이지 리스트를 가지고 있고, 이 페이지가 실제 물리적으로 어느 프레임에 해당하는지 매핑해주는 테이블을 가지고 있는 식입니다.
이 때 이 테이블을 페이지 테이블이라고 하고, 이러한 기법을 메모리 페이징 (가상 메모리) 라고 합니다. 아래 그림과 같습니다.
페이지(프레임)가 작은 경우와 큰 경우의 장단점
페이지가 작은 경우 메모리를 할당할 때의 세밀한 관리가 가능합니다. 따라서 물리적인 메모리의 실제 이용률이 높아지는 장점이 있습니다. 하지만 위의 그림에서 보듯이, 현대 운영체제들은 가상 메모리의 개념을 사용하므로, 프레임이 작아지면 페이지 테이블이 커지게 됩니다. 이 테이블도 마찬가지로 메모리에 올라가 있으므로 용량을 많이 차지하고 이를 관리하는 오버헤드가 증가합니다.
반면에 페이지가 큰 경우에는 위에서 언급한 페이지 테이블의 오버헤드가 줄어들고 그만큼 실제로 물리적 메모리에 접근하는 속도가 빨라집니다. 하지만 페이지 자체가 듬성듬성하게 구성되어 있으므로 실제로 할당되는 메모리에 비해 각 페이지 안에 남는 공간이 많이 생기게 되어 용량 면에서 효율성이 떨어집니다.
댓글