0.🚶들어가며
이번 글에서는 저장장치의 대표적인 예인 디스크에 대해 알아볼 예정입니다. 디스크의 구조는 어떠한지, 디스크 스케줄링은 무엇인지에 대한 내용을 다뤄보도록 하겠습니다.
1.⚪디스크의 구조
위 그림은 디스크의 구조를 보여줍니다. 몇 가지에 대해 알아보도록 하겠습니다.
1) 플래터
- 플래터는 표면의 자성체와 자기를 이용해 0과 1의 데이터를 저장합니다.
2) 섹터와 블록
- 섹터는 하드 디스크의 가장 작은 저장 단위입니다. 하나의 섹터에는 한 덩어리의 데이터가 저장되고 이들이 모여 플래터가 됩니다.
- 블록은 논리적인 개념에서의 가장 작은 단위입니다. 하드디스크와 컴퓨터 사이에 데이터를 전송하는 단위이고 메모리에서는 블록마다 주소가 배정됩니다.
정리하면 하드 디스크 입장에서는 섹터가 가장 작은 저장 단위이지만 운영체제 입장에서는 블록이 가장 작은 저장 단위가 되는 것입니다.
3) 트랙과 실린더
- 트랙은 플래터에서 회전축을 중심으로 데이터가 기록되는 동심원을 말합니다. 즉, 동심원 상의 섹터 집합을 뜻합니다.
- 디스크 구조 그림을 보시면 여러 플래터가 놓여있고 디스크 암에 헤드들이 고정되어 있어 여러 헤드들은 각 플래터의 같은 위치의 트랙을 읽거나 쓰게 됩니다. 이때 이 트랙들의 집합을 실린더라고 합니다.
4) 헤드
- 헤드는 디스크 암에 붙어있는 가벼운 물체로 디스크에서 데이터를 읽거나 쓸 때 사용합니다.
2.⏰디스크 액세스 시간
디스크의 구조에 대해 알아보았으니 이제 디스크를 이용해 데이터를 전송하는 데 걸리는 시간에 대해 알아보도록 하겠습니다.
디스크의 데이터 엑세스 시간은 크게 세 가지로 구성됩니다.
1) 탐색 시간
- 하드 디스크의 특정 섹터에 저장된 데이터를 읽거나 쓰기 위해서는 그 섹터를 포함하는 트랙으로 헤드가 이동해야 합니다. 이때 헤드가 현재 위치에서 목표 트랙까지 이동하는 시간을 탐색 시간이라고 합니다.
2) 회전 지연 시간
- 헤드가 특정 트랙까지 이동했다면 플래터가 회전하여 목표 섹터가 헤드에 도달할 때까지 기다려야 합니다. 이때 걸리는 시간을 회전 지연 시간이라고 합니다.
3) 데이터 전송 시간
- 헤드가 원하는 섹터에 있는 데이터를 읽어 전송하는 데 걸리는 시간입니다.
일반적으로 플래터는 7500rpm 이상으로 회전하여 빠르고, 데이터를 전송하는 것 역시 매우 빠릅니다. 하지만 헤드가 물리적으로 이동하는 시간은 상대적으로 매우 느린 작업이라 탐색 시간은 디스크 액세스 시간에서 가장 큰 비중을 차지합니다.
3.👨💻디스크 스케줄링
위에서 살펴본 바와 같이 디스크 엑세스 시간 중 탐색 시간은 매우 느립니다. 따라서 이 시간을 최소화하는 것이 디스크 액세스 시간을 줄이는 데 큰 역할을 하고, 이를 위해 나온 개념이 디스크 스케줄링입니다.
디스크 스케줄링은 일상에서 엘리베이터를 어떻게 스케줄링하면 좋을까를 고민하는 것과 비슷합니다. 이를 염두에 두고 몇 가지 예시를 살펴보며 디스크 스케줄링에 대해 알아보도록 하겠습니다.
✅1) FCFS 디스크 스케줄링
FCFS 디스크 스케줄링은 요청이 들어온 트랙 순서대로 헤드를 움직이는 방식입니다. 별다른 기법을 사용하지 않는 만큼 헤드가 움직여야 하는 거리가 상당히 많습니다. 요청 순대로 처리를 해주는 게 공평해 보이긴 하지만 매우 비효율적이네요.
✅2) SSTF 디스크 스케줄링
SSTF 디스크 스케줄링은 현재 헤드 위치를 반영하여 가장 가까운 트랙 순으로 헤드를 움직이는 방식입니다. 위 그림을 살펴보시면 현재 헤드 위치에서 가장 가까운 곳을 찾아가는 모습을 볼 수 있습니다. 앞서 살펴본 FCFS 스케줄링에 비해 헤드의 움직임이 훨씬 줄어든 게 보이시나요?
SSTF 방식은 효율적이긴 하지만 문제가 하나 있습니다. Starvation 현상이 발생할 수 있다는 것이죠. 헤드가 만약 중간에 위치하고 있으며 계속하여 중간 위치 쪽에서 요청이 들어오면 끝쪽 트랙의 요청은 계속 무시될 수 있습니다.
이처럼 SSTF 방식은 공평성 문제를 크게 위반하여 잘 쓰이지 않는 방식입니다.
✅3) SCAN & C-SCAN 디스크 스케줄링
좌측 그림은 SCAN, 우측 그림은 C-SCAN 알고리즘입니다.
SCAN 알고리즘에 대해 먼저 살펴보겠습니다. SCAN 알고리즘은 트랙의 끝부터 끝까지 이동하며 서비스를 제공하는 방식입니다. 마치 일상에서 사용하는 엘리베이터 작동 방식과 비슷하여 엘리베이터 기법이라고도 불립니다.
SCAN 알고리즘은 SSTF 알고리즘보다는 조금 성능이 떨어지지만 FCFS 알고리즘에 비해 성능이 좋습니다. 공평성 또한 어느 정도 보장해주기 때문에 고려해볼 만한 알고리즘입니다.
이제 C-SCAN 알고리즘에 대해 알아보겠습니다. SCAN 앞에 붙은 C는 Circular의 약자인데 SCAN 알고리즘을 약간 수정한 버전입니다. SCAN 알고리즘을 다시 살펴보면 SCAN 과정에서 끝 쪽 트랙은 한 번씩 방문하면서 안쪽 트랙들은 두 번씩 방문하여 불합리가 발생한다고도 볼 수 있습니다. 이러한 문제점을 해결하기 위해 한쪽 끝에 도달하면 반대로 돌아올 때는 서비스를 하지 않고 이동만 하는 알고리즘입니다.
하지만 서비스를 하지 않고 이동만 하는 과정에서 비효율적인 면이 생기긴 하죠.
✅4) LOOK & C-LOOK 디스크 스케줄링
LOOK 방식은 SCAN 방식에서 불필요한 부분을 제거한 스케줄링 방식입니다. SCAN 방식에서는 트랙 요청이 없어도 헤드가 맨 마지막 트랙까지 도착한 후에야 방향을 바꿉니다. 하지만 LOOK 방식은 SCAN 방식처럼 이동하다가 더 이상 갈 방향으로는 요청이 없을 경우 방향을 꺾습니다. 이동면에서 조금 더 효율성을 가지도록 한 방식이죠.
C-LOOK 방식도 LOOK 방식에서 Circular한 기능을 추가한 것입니다. C-SCAN 방식과 마찬가지로 한쪽 방향으로 이동할 때만 서비스를 제공하는 것입니다.
이 방식이 저희가 알고 있는 엘리베이터 방식과 가장 유사한 것 같죠?
4.💨나가며
이번 글에서는 디스크에 관한 내용을 다루어보았는데요. 크게 어려운 내용은 없었으나 디스크 스케줄링 방식을 보며 일상생활에서 접할 수 있는 엘리베이터 알고리즘과 매우 흡사하게 최적화를 해나가는 과정이 인상적이었던 것 같습니다.
'CS > 운영체제' 카테고리의 다른 글
[운영체제(OS)] 입출력 시스템 개요 (1) | 2022.03.08 |
---|---|
[운영체제(OS)] 가상 메모리 - (5) 스레싱과 프레임 할당 (0) | 2022.03.03 |
[운영체제(OS)] 가상 메모리 - (4) 페이지 교체 알고리즘 (0) | 2022.03.03 |
[운영체제(OS)] 가상 메모리 - (3) 요구 페이징(Demand Paging) (0) | 2022.03.02 |
[운영체제(OS)] 가상 메모리 - (2) 세그멘테이션 기법과 세그멘테이션-페이징 혼용 기법 (0) | 2022.03.01 |