하나의 디스크 드라이버에는 하나 혹은 여러 장의 디스크가 내장되어 있는데, 디스크는 여러 개의 실린더로 이루어져 있다. 실린더는 다시 여러 개의 트랙으로, 하나의 트랙은 여러 개의 섹터로 이루어져 있다. 디스크의 기본 단위는 최소 단위인 섹터들을 일정하게 묶어 놓은 하나의 논리적인 단위인 블록으로 정의한다. 따라서 디스크 용량은 전체 블록 수 x 블록 당 섹터 수 x 섹터 당 바이트 수, 다시 풀어서 정리하면, 전체 실린더 수 x 실린더 당 트랙 수 x 트랙 당 섹터 수 x 섹터 당 바이트 수로 계산할 수 있다.
OS 내부적으로는 디스크 영역을 관리할 때 논리적 블록 번호만을 사용한다. 따라서 디스크 제어기를 통해 입출력 작업을 실시할 때 이 논리적 블록 번호로부터 물리적 디스크에 대응되는 실린더, 트랙, 섹터 번호들을 계산해야 한다.
디스크 입출력작업 처리 과정에서 디스크마다 디바이스 큐인 디스크 큐를 사용하는데, 프로세스가 디스크 입출력 작업을 요청하면 OS는 대상이 되는 디스크와 논리적 블록 번호를 결정해 해당 디스크 큐에 프로세스를 넣고 상태를 waiting으로 바꾼다. 이때 스케줄링을 통해 문맥교환을 할 수 있는데 이전 프로세스의 입출력 작업이 완료되면 디스크 인터럽트 처리를 통해 디스크 큐에서 제거되고 상태가 ready로 전환되어 레디 큐에 등록된다.
디스크 입출력 작업을 실행하는 데 걸리는 시간은 헤드의 이동시간인 접근 시간과 데이터 전송시간으로 나눌 수 있다. 접근 시간은 탐색 시간과 회전지연 시간으로 나뉘는데 헤드의 탐색 시간을 단축시킴으로써 전체 시간을 유의미하게 단축한다. 디스크 큐에 대기 중인 작업들 중 어떤 순서로 처리할지를 정하는 디스크 스케줄링 정책은 FCFS, SSTF, LOOK, C-LOOK, 우선순위 등이 있다. 실제 운영체제에서는 이들을 변형한 N단계 SCAN, 마감시간 스케줄러를 사용한다. 추가적으로 디스크 입출력의 성능개선을 위해 디스크 작업 후 커널 내부의 디스크 캐시 메모리에 내용을 보관하면 이후의 디스크 읽기 작업 횟수를 줄일 수 있다. 또한 지연기록 방식으로 최종 내용에 대해서만 쓰기 작업을 요청함으로써 쓰기 작업 횟수를 줄이고, 하나의 파일에 연속된 블록들이 할당될 수 있도록 클러스터를 사용하거나 디스크 조각모음을 실행하기도 한다.
플래시 메모리를 저장매체로 사용하는 SSD는 가볍고 속도도 빠르지만 제자리에 덮어쓰기가 안 된다. 그에 반해 HDD는 가능하지만 SSD는 애초에 비어있는 부분에 기록하거나 이미 기록되어 있는 부분의 경우 지우기 절차를 거쳐야 쓰기가 가능하다. 이를 보완하기 위해서 플래시 메모리 특성을 고려한 파일 시스템을 적용하거나 기존 파일 시스템을 사용하되 저장장치로 SSD를 사용하는 방법이 있다. 특히 후자는 그 내부에 플래시 변환 계층인 FTL을 두어 파일 시스템에서 요청한 논리적 위치 정보를 SSD 내부에서 실제로 저장한 위치 정보로 매핑하여 처리한다. SSD는 여러 개의 플래시 메모리 칩들로 구성되는데, 이것은 블록들의 집합으로 정의되며 또, 블록은 페이지들의 집합으로 정의된다. 읽기, 쓰기 작업은 페이지 단위로 처리되며 지우기는 한 블록 단위로 처리된다.
'OS' 카테고리의 다른 글
| 운영체제의 이해 10장: 데드락 문제 및 그 해법 (2023.05.28) (0) | 2026.03.13 |
|---|---|
| 운영체제의 이해 9장: 프로세스 간의 동기화 (2023.05.25) (0) | 2026.03.13 |
| 운영체제의 이해 7장: 파일 관리 (2023.05.10) (0) | 2026.03.13 |
| 운영체제의 이해 4장: CPU 스케줄링 (2023.04.12) (0) | 2026.03.13 |
| 운영체제의 이해 3장: 프로세스 관리 (2023.03.31) (0) | 2026.03.13 |