HDD, SSD, DRAM에 대해서 학습하고 기록하고자 포스팅을 작성하게 되었다. 첫 번째 글은 HDD이다!
💻 컴퓨터 구조
시작하기에 앞서 컴퓨터 구조를 간단하게 훑고 시작하려고 한다.

위키피디아에 의하면 컴퓨터 구조를 간단하게 나타낸 그림은 위와 같다. 이번 글에서 알아볼 내용은 Second Memory에 속한다.

운영체제 책에서 찾은 Computer System의 그림은 위와 같다. 나는 좀 더 이 그림이 나에게 잘 와닿는 것 같다. 결국 컴퓨터는 CPU, Memory, I/O 장치로 이루어져 있다고 할 수 있다.
🗄️ 주기억장치, 보조기억장치

HDD, SSD, DRAM의 차이는 위의 그림에 잘 나와있다. HDD, SSD는 Secondary storage에 포함되고 DRAM은 primary storage에 포함된다. 그중에 SSD는 nonvolatile memory에 속한다. 속도는 HDD < SSD < DRAM 이다. 용량당 가격은 HDD < SSD < DRAM 이다. 그리고 DRAM은 전원이 꺼지면 모두 날아가고, SSD, HDD는 전원이 꺼져도 데이터가 유지된다는 큰 차이가 있다.
💽 HDD (Hard Disk Drive)
본격적으로 HDD를 알아보도록 하자. 이전에 HDD의 구조를 봤을 때 처음 든 생각은 생각보다 아날로그 적이다(?) 라는 생각이 든 기억이 난다. Arm이 움직이고 Disk가 돌아가고...
아래의 그림처럼 CD모양인 Platter를 돌리고, Arm으로 Head를 움직여서 데이터를 읽고 쓰게 된다. Platter안의 원을 Track이라고 하고, Track안의 한 부분을 Sector라고 한다.


사실 그림만 봐도 직감적으로 왜 제일 느린지(?) 알 것 같기도 하다. 라고는 하지만 실제 SATA Revision 3.0의 경우 이론상 6.0 Gbps로 상대적으로 느릴 뿐... 절대 느린 장치가 아니다. 정말 놀라운 건 이렇게 제일 물리적(?)으로 헤드를 움직이며 I/O를 수행하는 장치가 이렇게 빠를 수가 있나...? 라는 생각이 들었다.
💿 디스크(Platter)에 어떻게 읽고 쓰는데?
아래의 유튜브를 참고했다. 너무 잘 나와있어서 이거 하나로 충분할 것 같다.
📀 HDD의 구조
디스크는 알루미늄, 마그네슘 합금에 코팅이 되어있는 구조이고, 진짜 정보를 담고 있는 곳은 아래처럼 아주 아주 아주 얇은 층에 이루어져 있다. 어쩌고 저쩌고 합금의 얇은 층이다 정도만 이해해도 될 것 같다. 참고로 디스크는 7200 RPM으로 돌아간다고 한다. 분당 7200번 도니까 1초에 120번 회전한다고 볼 수 있다.

Arm은 아래와 같은 구조로 이루어져 있다. 끝에 Read/Write Head가 있다.

이제 이 Arm이 디스크 위에서 Track을 왔다 갔다 하면서 정보를 읽고 쓰게 된다. 한 면에는 50만 개가 넘는 트랙을 저장할 수 있다고 한다.

정보들은 아래와 같이 PCB(인쇄 회로 기판)로 신호를 보낸다.

PCB에는 Processor, DRAM Chip, Controller Chip이 있다. 여기서 DRAM Chip은 나가는 데이터의 Buffer로 사용된다고 한다. (HDD에도 DRAM이 있구나...! 를 알게 되었다.)

이것들은 밀봉되어 있는데, 그 이유는 10000nm 에 달하는 먼지 같은 것들이 들어오면 디스크에 큰 손상을 발생시킬 수 있기 때문이라고 한다. 실제 디스크와 헤더는 15nm 떨어져 있다고 한다.
🧲 디스크에서 데이터를 읽고 쓰는 방법
디스크를 살펴보면 Track과 Track을 또 나눈 Sector로 이루어져 있는데

각 Sector는 아래와 같이 구성되어 있다. 각 Sector에는 데이터만 있는 게 아니고, 아래와 같이 야무지게 구성되어 있다...

이제 진짜 데이터를 어떻게 읽고 쓰는지 보자...! 각 도메인은 1비트로 이루어져 있다.

아래와 같이 Head가 0과 1에 맞춰서 위쪽 또는 아래쪽 방향으로 자화 시켜 읽고 쓰게 된다.

각 자기 도메인 영역은 여러 개의 원자로 이루어져 있는데 모두가 같은 방향을 가리키게 된다.


정확하게 어떻게 새기냐면... 이런 작은 부분에 자기장을 집중시켜 방향을 저장할 수 있다.

이렇게 새겨진 도메인은 수년간 유지되는 영구적인 자기장을 발생시키는데 이것을 읽으면 데이터가 되는 것이다!

하지만 방향을 읽으면서 0과 1을 가져오는 것이 아니다!!! 😱 각 도메인의 방향 변화를 감지한다.

아래와 같이 변화가 있다면 1, 변화가 없다면 0으로 데이터를 가져온다.

변화가 있을 때의 큰 자기장을 지나가게 되면 저항이 낮아지게 되는데 이를 감지하여 데이터를 저장하는 것이다. (정도만 알면 될 것 같다)

그리고 원래는 자기장의 방향이 아래와 같이 수평 방향이었지만

2010년부터 수직 방향으로 바뀌면서 단위 면적당 저장할 수 있는 정보가 효과적으로 늘었다고 한다.

🗓️ 디스크 스케줄링
하드웨어적인 것에서 넘어와서 조금 더 소프트웨어적으로 디스크를 살펴보려고 한다. 디스크 접근 시간(Access time)은 아래의 세 가지 구성요소를 가지고 있다.
- 탐색시간(Seek Time): 헤드를 트랙으로 움직이는 데 걸리는 시간
- 회전지연(Rotational latency): 헤드가 원하는 섹터에 도달하기까지 걸리는 시간
- 전송시간(Transfer Time): 데이터의 전송 시간

여기서 제일 시간이 많이 드는 작업은 탐색 시간(Seek Time)이라고 한다. 디스크 스케줄링에서는 결국 탐색 시간을 줄이는 것이 목표이다.
1️⃣ FCFS (First-Come First-Served)
직접 그려보았다. 첫 번째는 온 순서대로 처리하는 것이다. 만약에 아래와 같은 상황이라면 어떻게 될까? 다소 극단적으로 표현했지만 아래와 같이 이동할 것이다.

2️⃣ SSTF (Shortest Seek Time First)
이름과 같이 가장 짧은 거리를 이동하는 것이다. 들어온 순서에 상관없이 가장 가까운 곳으로 이동한다. FCFS인 경우 41을 이동해야 했는데 SSTF의 경우 13으로 줄었다!!!

하지만 이 방법의 큰 문제점이 있다. SSTF는 효율성 측면에서는 좋지만 형평성이 없다. 만약 큐에 계속해서 지금 헤드와 가까운 곳을 요청한다면 가장 멀리 있는 요청은 계속 기다려야 한다. 이것을 Starvation 문제라고도 한다.
3️⃣ SCAN
이것을 해결하기 위해 지금의 디스크 스케줄링의 근간이 되는 SCAN이라는 방법이 나왔다. 그냥 난 몰라 그냥 왔다 갔다 할게 하면서 지나가는 길에 있는 요청을 처리하고 가는 방법이다. 엘리베이터를 생각하면 된다. 올라가는 도중에 다 태워가고 내려가는 도중에 다 태워서 가는 방식으로 작동하는데 이것이 딱 SCAN 알고리즘이다! 아래의 상황은 [10, 2, 8, 1] 이 들어오고 나중에 [9, 3, 4] 가 들어오는 상황을 가정했다.

이 방법은 효율성은 부족할 수 있지만 Starvation 문제를 막을 수 있다.
아래와 같은 상황을 생각해 보자. SCAN으로 헤더가 쭉쭉쭉 진행하고 있었는데 아래와 같이 9를 지나갔는데 [9, 3, 4]가 추가되었다고 해보자.

그러면 아래와 같이 3과 4는 문제없이 가는 길에 처리되지만 9의 경우 다시 돌아올 때까지 꽤 긴 시간을 기다려야 할 수 있다. 실제 생활에서 버스를 눈앞에서 놓친 걸 생각하면 쉬울 것 같다. 배차간격이 20분이면 눈앞에서 놓치면 꼼짝없이 20분을 기다려야 한다!!

디스크의 세상은 좀 더 관대하기 때문에(?) 여기서 조금 더 효율성을 높이기 위한 노력이 시작된다.
4️⃣ C-SCAN
아래와 같이 한 방향으로만 계속 가는 방법이다. 1에서 10까지 갔다면 다음에는 작업 없이 1에서 10까지 가는 방법이다. 이렇게 된다면 막차를 놓쳐도(?) 왔다 갔다 하는 시간을 기다리지 않고 한턴만 기다리면 된다.

5️⃣ LOOK
이제 여기서 좀 더 효율적으로 하려고 처음부터 끝까지 가는 게 아니고 들어온 요청의 최대 최소까지만 왔다 갔다 하는 것이다.

6️⃣ C-LOOK
LOOK에서 방향만 단방향이 되었다고 생각하면 된다. 왔다 갔다 했을 때 끝단에 있는 요청이 왕복 시간을 기다려야 한다는 문제점을 해결하고자 나온 방법이다.

'→ Computer Science' 카테고리의 다른 글
[CS] DRAM의 구조 (0) | 2025.04.09 |
---|---|
[CS] SSD의 구조 (0) | 2025.04.01 |
[CS] 소수의 표현 (0) | 2025.03.13 |
[CS] 음수의 표현 (2의 보수) (0) | 2025.03.12 |
[CS] 데이터의 전송 (0) | 2025.02.10 |
HDD, SSD, DRAM에 대해서 학습하고 기록하고자 포스팅을 작성하게 되었다. 첫 번째 글은 HDD이다!
💻 컴퓨터 구조
시작하기에 앞서 컴퓨터 구조를 간단하게 훑고 시작하려고 한다.

위키피디아에 의하면 컴퓨터 구조를 간단하게 나타낸 그림은 위와 같다. 이번 글에서 알아볼 내용은 Second Memory에 속한다.

운영체제 책에서 찾은 Computer System의 그림은 위와 같다. 나는 좀 더 이 그림이 나에게 잘 와닿는 것 같다. 결국 컴퓨터는 CPU, Memory, I/O 장치로 이루어져 있다고 할 수 있다.
🗄️ 주기억장치, 보조기억장치

HDD, SSD, DRAM의 차이는 위의 그림에 잘 나와있다. HDD, SSD는 Secondary storage에 포함되고 DRAM은 primary storage에 포함된다. 그중에 SSD는 nonvolatile memory에 속한다. 속도는 HDD < SSD < DRAM 이다. 용량당 가격은 HDD < SSD < DRAM 이다. 그리고 DRAM은 전원이 꺼지면 모두 날아가고, SSD, HDD는 전원이 꺼져도 데이터가 유지된다는 큰 차이가 있다.
💽 HDD (Hard Disk Drive)
본격적으로 HDD를 알아보도록 하자. 이전에 HDD의 구조를 봤을 때 처음 든 생각은 생각보다 아날로그 적이다(?) 라는 생각이 든 기억이 난다. Arm이 움직이고 Disk가 돌아가고...
아래의 그림처럼 CD모양인 Platter를 돌리고, Arm으로 Head를 움직여서 데이터를 읽고 쓰게 된다. Platter안의 원을 Track이라고 하고, Track안의 한 부분을 Sector라고 한다.


사실 그림만 봐도 직감적으로 왜 제일 느린지(?) 알 것 같기도 하다. 라고는 하지만 실제 SATA Revision 3.0의 경우 이론상 6.0 Gbps로 상대적으로 느릴 뿐... 절대 느린 장치가 아니다. 정말 놀라운 건 이렇게 제일 물리적(?)으로 헤드를 움직이며 I/O를 수행하는 장치가 이렇게 빠를 수가 있나...? 라는 생각이 들었다.
💿 디스크(Platter)에 어떻게 읽고 쓰는데?
아래의 유튜브를 참고했다. 너무 잘 나와있어서 이거 하나로 충분할 것 같다.
📀 HDD의 구조
디스크는 알루미늄, 마그네슘 합금에 코팅이 되어있는 구조이고, 진짜 정보를 담고 있는 곳은 아래처럼 아주 아주 아주 얇은 층에 이루어져 있다. 어쩌고 저쩌고 합금의 얇은 층이다 정도만 이해해도 될 것 같다. 참고로 디스크는 7200 RPM으로 돌아간다고 한다. 분당 7200번 도니까 1초에 120번 회전한다고 볼 수 있다.

Arm은 아래와 같은 구조로 이루어져 있다. 끝에 Read/Write Head가 있다.

이제 이 Arm이 디스크 위에서 Track을 왔다 갔다 하면서 정보를 읽고 쓰게 된다. 한 면에는 50만 개가 넘는 트랙을 저장할 수 있다고 한다.

정보들은 아래와 같이 PCB(인쇄 회로 기판)로 신호를 보낸다.

PCB에는 Processor, DRAM Chip, Controller Chip이 있다. 여기서 DRAM Chip은 나가는 데이터의 Buffer로 사용된다고 한다. (HDD에도 DRAM이 있구나...! 를 알게 되었다.)

이것들은 밀봉되어 있는데, 그 이유는 10000nm 에 달하는 먼지 같은 것들이 들어오면 디스크에 큰 손상을 발생시킬 수 있기 때문이라고 한다. 실제 디스크와 헤더는 15nm 떨어져 있다고 한다.
🧲 디스크에서 데이터를 읽고 쓰는 방법
디스크를 살펴보면 Track과 Track을 또 나눈 Sector로 이루어져 있는데

각 Sector는 아래와 같이 구성되어 있다. 각 Sector에는 데이터만 있는 게 아니고, 아래와 같이 야무지게 구성되어 있다...

이제 진짜 데이터를 어떻게 읽고 쓰는지 보자...! 각 도메인은 1비트로 이루어져 있다.

아래와 같이 Head가 0과 1에 맞춰서 위쪽 또는 아래쪽 방향으로 자화 시켜 읽고 쓰게 된다.

각 자기 도메인 영역은 여러 개의 원자로 이루어져 있는데 모두가 같은 방향을 가리키게 된다.


정확하게 어떻게 새기냐면... 이런 작은 부분에 자기장을 집중시켜 방향을 저장할 수 있다.

이렇게 새겨진 도메인은 수년간 유지되는 영구적인 자기장을 발생시키는데 이것을 읽으면 데이터가 되는 것이다!

하지만 방향을 읽으면서 0과 1을 가져오는 것이 아니다!!! 😱 각 도메인의 방향 변화를 감지한다.

아래와 같이 변화가 있다면 1, 변화가 없다면 0으로 데이터를 가져온다.

변화가 있을 때의 큰 자기장을 지나가게 되면 저항이 낮아지게 되는데 이를 감지하여 데이터를 저장하는 것이다. (정도만 알면 될 것 같다)

그리고 원래는 자기장의 방향이 아래와 같이 수평 방향이었지만

2010년부터 수직 방향으로 바뀌면서 단위 면적당 저장할 수 있는 정보가 효과적으로 늘었다고 한다.

🗓️ 디스크 스케줄링
하드웨어적인 것에서 넘어와서 조금 더 소프트웨어적으로 디스크를 살펴보려고 한다. 디스크 접근 시간(Access time)은 아래의 세 가지 구성요소를 가지고 있다.
- 탐색시간(Seek Time): 헤드를 트랙으로 움직이는 데 걸리는 시간
- 회전지연(Rotational latency): 헤드가 원하는 섹터에 도달하기까지 걸리는 시간
- 전송시간(Transfer Time): 데이터의 전송 시간

여기서 제일 시간이 많이 드는 작업은 탐색 시간(Seek Time)이라고 한다. 디스크 스케줄링에서는 결국 탐색 시간을 줄이는 것이 목표이다.
1️⃣ FCFS (First-Come First-Served)
직접 그려보았다. 첫 번째는 온 순서대로 처리하는 것이다. 만약에 아래와 같은 상황이라면 어떻게 될까? 다소 극단적으로 표현했지만 아래와 같이 이동할 것이다.

2️⃣ SSTF (Shortest Seek Time First)
이름과 같이 가장 짧은 거리를 이동하는 것이다. 들어온 순서에 상관없이 가장 가까운 곳으로 이동한다. FCFS인 경우 41을 이동해야 했는데 SSTF의 경우 13으로 줄었다!!!

하지만 이 방법의 큰 문제점이 있다. SSTF는 효율성 측면에서는 좋지만 형평성이 없다. 만약 큐에 계속해서 지금 헤드와 가까운 곳을 요청한다면 가장 멀리 있는 요청은 계속 기다려야 한다. 이것을 Starvation 문제라고도 한다.
3️⃣ SCAN
이것을 해결하기 위해 지금의 디스크 스케줄링의 근간이 되는 SCAN이라는 방법이 나왔다. 그냥 난 몰라 그냥 왔다 갔다 할게 하면서 지나가는 길에 있는 요청을 처리하고 가는 방법이다. 엘리베이터를 생각하면 된다. 올라가는 도중에 다 태워가고 내려가는 도중에 다 태워서 가는 방식으로 작동하는데 이것이 딱 SCAN 알고리즘이다! 아래의 상황은 [10, 2, 8, 1] 이 들어오고 나중에 [9, 3, 4] 가 들어오는 상황을 가정했다.

이 방법은 효율성은 부족할 수 있지만 Starvation 문제를 막을 수 있다.
아래와 같은 상황을 생각해 보자. SCAN으로 헤더가 쭉쭉쭉 진행하고 있었는데 아래와 같이 9를 지나갔는데 [9, 3, 4]가 추가되었다고 해보자.

그러면 아래와 같이 3과 4는 문제없이 가는 길에 처리되지만 9의 경우 다시 돌아올 때까지 꽤 긴 시간을 기다려야 할 수 있다. 실제 생활에서 버스를 눈앞에서 놓친 걸 생각하면 쉬울 것 같다. 배차간격이 20분이면 눈앞에서 놓치면 꼼짝없이 20분을 기다려야 한다!!

디스크의 세상은 좀 더 관대하기 때문에(?) 여기서 조금 더 효율성을 높이기 위한 노력이 시작된다.
4️⃣ C-SCAN
아래와 같이 한 방향으로만 계속 가는 방법이다. 1에서 10까지 갔다면 다음에는 작업 없이 1에서 10까지 가는 방법이다. 이렇게 된다면 막차를 놓쳐도(?) 왔다 갔다 하는 시간을 기다리지 않고 한턴만 기다리면 된다.

5️⃣ LOOK
이제 여기서 좀 더 효율적으로 하려고 처음부터 끝까지 가는 게 아니고 들어온 요청의 최대 최소까지만 왔다 갔다 하는 것이다.

6️⃣ C-LOOK
LOOK에서 방향만 단방향이 되었다고 생각하면 된다. 왔다 갔다 했을 때 끝단에 있는 요청이 왕복 시간을 기다려야 한다는 문제점을 해결하고자 나온 방법이다.

'→ Computer Science' 카테고리의 다른 글
[CS] DRAM의 구조 (0) | 2025.04.09 |
---|---|
[CS] SSD의 구조 (0) | 2025.04.01 |
[CS] 소수의 표현 (0) | 2025.03.13 |
[CS] 음수의 표현 (2의 보수) (0) | 2025.03.12 |
[CS] 데이터의 전송 (0) | 2025.02.10 |