보조기억장치에는 다양한 종류가 있다. 그중 가장 대중적인 보조기억장치는 하드 디스크와 플래시 메모리이다. 플래시 메모리가 조금 생소하게 들릴 수 있는데, 우리가 흔히 사용하는 USB 메모리, SD 카드, SSD와 같은 저장 장치를 말한다.
이제부터 하드 디스크와 플래시 메모리를 살펴보면서 이 두 장치와 친해지는 시간을 가져보자.
가장 먼저 알아볼 보조기억장치는 하드디스크(HDD, Hard Disk Drive)이다. 하드 디스크는 자기적인 방식으로 데이터를 저장하는 보조기억장치이다. 이 때문에 하드 디스크를 자기 디스크(Magnetic disk)의 일종으로 지칭하기도 한다. 대용량 저장 장치가 필요한 작업이나 서버실에 자주 출입하는 작업을 한다면 하드 디스크를 자주 접하게 될 것이다.
하드 디스크의 생김새를 보자. 다음 그림이 바로 하드디스크이다. 우리가 아는 CD나 옛날 음향 장치는 LP가 떠오를 것이다. 실제로도 하드 디스크는 CD나 LP와 비슷하게 동작한다. 동그란 원판에 데이터를 저장하고, 그것을 회전시켜 뽀족한 리더기로 데이터를 읽는 점에서 비슷하다.
이제 이 하드디스크를 뜯어보자. 하드 디스크에서 실질적으로 데이터가 저장되는 곳은 아래 그림 속 동그란 원판이다. 이를 플래터(Platter)라고 한다. 하드 디스크는 자기적인 방식으로 데이터를 저장한다. 플래터는 자기 물질로 수많은 N극과 S극을 저장한다. N극과 S극은 0과 1의 역할을 수행한다.
그 플래터를 회전시키는 구성 요소를 스핀들(spindle)이라고 한다. 스핀들(spindle)이라고 한다. 스핀들이 플래터를 돌리는 속도는 분당 회전수에 나타내는 RPM(Revolution Per Minute)이라는 단위로 표현된다. 가령 RPM이 15,000인 하드 디스크는 1분에 15,000바퀴를 회전하는 하드 디스크이다.
플래터를 대상을 데이터를 읽고 쓰는 구성 요소는 헤드(head)이다. 헤드는 플래터 위에서 미세하게 떠 있는 채로 데이터를 읽고 쓰는, 마치 바늘같이 생긴 부품이다. 그리고 헤드는 원하는 위치로 헤더를 이동시키는 디스크 암(disk arm)에 부착되어 있다.
CD나 LP에 비해 하드 디스크는 훨씬 더 많은 양의 데이터를 저장해야 하므로 일반적으로 여러 겹의 플래터로 이루어져 있고 플래터 양면을 모두 사용할 수 있다. 양면 플래터를 사용하면 위아래로 플래터당 두 개의 헤드가 사용된다. 이때 일반적으로 모든 헤드는 디스크 암에 부착되어 다같이 이동한다.
그럼 이제 플래터에 데이터가 어떻게 저장되는지 알아보자. 플래터는 트랙(track)과 섹터(sector)라는 단 위로 데이터를 저장한다. 아래 그림처럼 플래터를 여러 동심원으로 나누었을 때 그중 하나의 원을 트랙이라고 부른다. 운동장 달리기 트랙을 생각해 보면 쉽게 와닿을 것이다. 그리고 트랙은 마치 피자처럼 여러 조각으로 나누어지는데, 이 한 조각을 섹터라고 부른다. 섹터는 하드 디스크의 가장 작은 전송 단위이다. 하나의 섹터는 일반적으로 512바이트 정도의 크기를 가지고 있지만, 정확한 크기는 하드 디스크에 따라 차이가 있다. 일부 하드 디스크의 섹터 크기는 4,096바이트에 이르기도 한다.
위에서 여러 겹의 플래터가 사용될 있다고 했다. 이때 여러 겹의 플래터 상에서 같은 트랙이 위치한 곳을 모아 연결한 논리적 단위를 실린더(cylinder)라고 부른다. 쉽게 말해 한 플래터를 동심원으로 나눈 공간은 트랙, 같은 트랙끼리 연결한 원통 모양의 공간은 실린더이다.
연속된 정보는 보통 한 실린더에 기록된다. 예를 들어 두 개의 플래터를 사용하는 하드 디스크에 네 개 색터에 걸쳐 데이터를 저장할 때는 첫 번째 플래터 윗면, 뒷면과 두 번째 플래터 윗면, 뒷면에 데이터를 저장한다. 연속된 정보를 하나의 실린더에 기록하는 이유는 디스크 암을 움직이지 않고도 바로 데이터에 접근할 수 있기 때문이다.
데이터가 하드 디스크의 섹터, 트랙, 실린더에 저장딘다는 것을 알았다면 저장된 데이터에 접근하는 과정을 생각해보자. 하드 디스크가 저장된 데이터에 접근하는 시간은 크게 탐색 시간, 회전 지연, 전송 시간으로 나뉜다.
위 시간들은 별것 아닌 것 같아도 성능에 큰 영향을 끼치는 시간이다. 일레로 구글의 AI를 주도하고 있는 제프 딘은 과거 ‘프로그래머가 꼭 알아야 할 컴퓨터 시간들’을 공개한 바 있는데, 일부를 발취하면 다음과 같다.
참고로 ns(나노초)는 $10^{-9}$ 초이다. 그리고 패킷(packet)이란 네트워크의 기본적인 전송 단위이다.
생각보다 정말 많은 시간이 걸리는 것을 알 수 있다. 물론 2011년에 자료가 공개된 이후 오늘날 하드 디스크 성능은 많이 향상되었지만, 하드 디스크에 다량의 데이터를 탐색하고 읽어 들이는 시간은 어마어마하다는 사실을 쉽게 짐작할 수 있다.
탐색 시간과 회전 지연을 단축시키키 위해서는 플래터를 빨리 돌려 RPM을 높이는 것도 중요하지만, 6-3절에서 배운 참조 지역성, 즉 접근하려는 데이터가 플래터 혹은 헤드를 조금만 옮겨도 접근할 수 있는 곳에 위치해 있는 것도 중요하다.