Priv's Blog

9. 입출력 시스템과 디스크 관리 본문

Dev. Study Note/OS Introduction

9. 입출력 시스템과 디스크 관리

Priv 2021. 11. 29. 10:03


 

 

1. 입출력 시스템 관리

1.1) 입출력 시스템과 입출력 모듈

프로그램의 실행 속도는 입출력 시스템의 성능에 영향을 많이 받으므로, 운영체제의 입출력 관리와 제어 역할이 중요하다.

입출력 시스템은 물리적 입출력 장치입출력 모듈을 포함한다.

입출력 장치는 모니터, 프린터, 마우스, 키보드 등 실제 입출력을 수행한다.

입출력 모듈은 메모리, 프로세서 레지스터 등 내부 저장 장치, 물리적 입출력 장치 사이의 이진 정보를 전송하는 방법을 제공한다.

프로세서를 대신하여 입출력과 관련된 복잡한 일을 처리하면, 입출력 채널 또는 입출력 프로세서가 된다.

단순히 프로세서의 입출력과 관련된 일을 처리하면, 입출력 제어기 또는 장치 제어기가 된다.

 

1.2) 입출력 제어기

입출력 장치를 직접 시스템 버스에 연결하지 않고, 입출력 모듈을 이용해 연결한다.

이는 입출력 장치에 따라 제어, 운용 방법이 다르기 때문이다.

입출력 모듈은 여러 입출력 장치를 프로세서가 쉽게 제어할 수 있도록 만드는 역할을 한다.

프로세서의 명령 -> 시스템 버스로 전달 -> 입출력 모듈이 명령 제어 -> 입출력 장치 동작

 

1.3) 프로세서 역할에 따른 입출력 방법

프로세서와 입출력 장치의 속도 차이로 데이터 전송 시, 프로세서의 부담이 크다.

데이터를 전송하는 프로세서의 역할에 따라 다음과 같이 출력 방법을 크게 3가지로 구분한다.

  • 프로세서 제어 입출력: 프로그램 제어 입출력, 인터럽트 기반 입출력
  • DMA 입출력
  • 입출력 채널을 이용한 입출력

 

1.4) 프로그램 제어 입출력

입출력 장치에서 메모리로 데이터를 전송하려면, 프로세서 명령이 필요하다.

입출력 장치는 메모리를 직접 접근할 수 없다.

모든 데이터를 프로세서의 입출력 명령에 따라 전송한다.

프로세서는 자신보다 느린 입출력 장치의 상태를 확인하고자, 주기적으로 입출력 장치의 상태를 점검한다.

장치 상태가 입출력 장치가 준비되어 있다면, 데이터를 전송한다.

이를 폴링이라고 부른다. 

폴링은 인터럽트보다 비효율적이다.

키보드 등 저속 입출력 장치에 적합하다.

 

1.5) 인터럽트 기반 입출력

프로세서가 입출력 장치의 상태를 확인하는 대신, 입출력 장치가 프로세서에 직접 신호를 주는 방법이다.

프로세서는 주기적으로 입출력 장치 상태를 확인하지 않고, 입출력 장치의 인터럽트 신호를 기다리며 다른 작업을 수행하면 된다.

풀링 방식보다 효율적이다.

입출력 장치가 작업을 완료하면, 작업과 관련된 상태와 결과를 메모리에 저장한 뒤, 인터럽트를 발생시켜 프로세서에 알린다.

프로세서는 입출력 명령을 전송하고, 입출력 작업 중에 다른 명령을 시작할 수 있다.

불규칙적이고 빠른 응답성을 요구할 때 적합하다.

 

1.6) DMA(Direct Memory Access) 입출력

프로세서의 도움 없이 메인 메모리를 직접 제어하여 데이터를 전송한다.

프로세서가 읽기, 쓰기 정보, 입출력 주소, 메모리 주소, 길이 등 메인 메모리 접근에 필요한 정보들을 DMA 제어기에 전달하여 입출력을 요청한다.

DMA 제어기는 입출력 장치에서 메모리로 블록 단위(Ex. 페이지)로 데이터를 전송한다.

전송을 완료하면, 입출력 모듈이 프로세서에 인터럽트를 발생하여 입출력 종료를 알린다.

디스크의 데이터 전송 등 대용량 데이터 전송에 적합하다.

 


 

2. 디스크 구조

2.1) 보조 기억 장치

메인 메모리는 용량 제한 문제, 휘발성 문제가 있기 때문에 영구적/대용량 데이터를 저장할 수 없다.

보조 기억 장치는 속도가 느리지만, 값이 싸고 영구적/대용량 데이터를 저장할 수 있다.

보조 기억 장치의 종류로는 자기 테이프, 자기 디스크 등이 있다.

 

2.2) 자기 디스크 (Magnetic Disk)

원판 모양의 표면에 자기 물질이 입혀져 있고 표면에 정보를 기록한다.

디스크의 한 표면은 수백 개의 트랙으로 구성된다.

디스크 표면 바로 위에 입출력 헤드가 위치한다.

구동 모터는 빠른 속도로 디스크를 회전, 입출력 헤드 아래에 놓인 트랙에 정보를 판독해 기록한다.

고정 헤드 디스크, 이동 헤드 디스크 등이 있다.

 

2.3) 자기 디스크의 구조

  • 섹터(Sector): 디스크 입출력이 가능한 가장 작은 단위 (트랙 내의 정보는 섹터로 구분)
  • 디스크 주소: 트랙 번호, 표면 번호, 섹터 번호 등으로 구성
  • 실린더(Cylinder): 헤드 움직임 없이 접근 가능한 모든 트랙

섹터는 32~4096byte, 트랙 당 4~32 섹터, 표면 당 20~1500 트랙

 

2.4) 이동 헤드 디스크 동작 과정

붉은색 부분은 읽어야 하는 데이터가 기록된 섹터들이다.

프로세서의 명령에 따라 필요한 데이터를 읽기 위해서는 먼저 헤드를 이동시켜야 한다.

초기 상태(현 상태)에서는 헤드의 위치가 어긋나 있으므로, 섹터에 접근할 수 없다.

헤드를 이동시켜 읽고자 하는 섹터들이 위치한 트랙에 접근할 수 있게 되었다.

이제 디스크를 회전시켜 읽고자 하는 섹터들을 헤드에 도달하도록 만들어야 한다.

읽고자 하는 섹터들을 읽을 수 있는 상태가 되었다.

이제 헤드를 통해 필요한 데이터를 읽기 시작한다.

헤드가 필요한 데이터를 모두 읽은 상태는 위 사진과 같다.

 

2.5) 디스크 액세스 시간 구성 요소

디스크 액세스 시간을 구성하는 요소들은 다음과 같다. (이동 헤드 디스크 기준)

  • 탐색 시간(Seek Time) - 트랙 이동: 디스크 상의 원하는 섹터에 액세스 하기 위해, 헤드를 해당 트랙(또는 실린더)으로 이동하는 데 소요되는 시간
  • 회전 지연 시간(Rotational Latency Time) - 섹터 이동: 원하는 섹터가 입출력 헤드 아래로 오도록 회전하는데 소요되는 시간
  • 전송 시간(Transmission Time) - 데이터 전송: 디스크와 메인 메모리 사이에 원하는 섹터의 데이터를 주고받는 데 소요되는 시간

 


 

3. 디스크 스케줄링

3.1) 디스크 입출력 요청

프로세스는 디스크 입출력이 필요할 때마다 시스템 호출을 통해 운영체제에게 입출력을 요청한다.

각 요청은 다음의 내용들을 포함한다.

  • 입력 요청인지, 출력 요청인지에 대한 정보
  • 디스크 주소
  • 메인 메모리 주소
  • 전송할 정보의 양

디스크 장치가 다른 프로세스의 요청을 처리 중이라면, 새로 도착한 요청은 디스크 대기 큐에 삽입되어 기다린다.

디스크 스케줄링을 통해 요청을 도착한 순서대로 처리하지 않고, 재정렬함으로써 탐색 시간 최적화, 회전 지연 시간 최적화 및 처리량 향상을 기대할 수 있다.

 

3.2) 디스크 스케줄링 전략의 평가 기준

  • 처리량 (Throughput): 단위 시간당 처리한 서비스 요청의 수를 의미하며, 높을수록 유리하다.
  • 탐색 시간 (Seek Time): 디스크 헤드(암)의 이동 시간을 의미하며, 낮을수록 유리하다.
  • 평균 반응 시간 (Mean Response Time): 각 요청이 서비스될 때까지 대기하는 평균 시간으로, 낮을수록 유리하다.
  • 반응(응답) 시간의 변량 (Variance Of Response Time): 변량이 적으면 반응 시간에 대한 예측 가능성이 높다. 적절한 시간 안에 서비스하여 무기한 연기를 방지해야 한다.

처리량 최대화, 평균 반응 시간 최소화로 시스템 전체 성능을 향상할 수 있다.

개별 요청에 지연이 발생할 수 있기 때문에 반응 시간의 변량도 고려해야 한다.

 

3.3) 탐색 시간 최적화 알고리즘

디스크의 탐색 시간을 줄이기 위해 사용되는 알고리즘이다.

 

3.4) FCFS(First Come First Served: 선입 선처리) 스케줄링

요청이 도착한 순서대로 처리하는 방법이다.

구현하기가 가장 쉬우며, 실행 시간 오버헤드가 적다.

본질적으로 공평성을 유지하므로, 무기한 연기가 발생하지 않는다.

디스크 요청이 적을 때 효율적이다.

디스크 요청이 많고 흩어져 있는 경우, 탐색 시간(Seek Time)이 늘어나 처리량이 감소한다.

 

3.5) SSTF(Shortest Seek Time First: 최소 탐색 시간 우선) 스케줄링

현재 헤드 위치에 가까운 요청을 먼저 처리하는 방법이다.

탐색 시간(Seek Time)을 줄여 시스템 전체 디스크 처리 시간을 줄일 수 있다.

반응 시간의 변량이 크며, 기아 상태가 발생할 수 있다.

배치 시스템에서는 SSTF 적용이 가능하지만, 대화식 시스템에서는 시간을 예측할 수 없어 부적합하다.

 

3.6) SCAN 스케줄링

디스크 한쪽 끝 트랙에서 다른 쪽 끝 트랙까지 헤드가 왕복 이동하면서 요청을 처리한다.

헤드가 한쪽 끝에 도착하면, 역방향으로 이동하며 요청을 처리한다.

헤드 이동 방향의 뒤쪽에 도착하는 요청은 헤드가 끝까지 이동한 후, 되돌아올 때까지 기다려야 한다.

엘리베이터 알고리즘이라고도 부른다.

양쪽 끝 트랙 요청은 대기 시간이 증가하므로, 대기 시간이 균등하지 않다.

 

3.7) C SCAN(Circular SCAN) 스케줄링

SCAN 스케줄링 방식과 마찬가지로, 헤드가 한쪽 끝에서 다른 쪽 끝까지 왕복 이동하며 요청을 처리한다.

단, 한쪽 끝에 도착해 반대 방향으로 이동할 때는 요청을 처리하지 않는다. (한 방향 이동 중에만 요청 처리)

양 끝 트랙과 가운데 트랙에 대한 차별이 없어 반응 시간의 변량은 SCAN 스케줄링보다 적다.

동일한 트랙 요청이 연속적을 발생하면, 다른 트랙 요청이 무기한 연기에 빠질 수 있다.

 

3.8) F SCAN 스케줄링 && N Step SCAN 스케줄링

SCAN 스케줄링 방식을 변형하여, 요청들이 무기한 연기되는 경우를 방지한다.

  • F SCAN: SCAN 방식으로 특정 방향을 훑을 때, 대기 중인 요청들만 처리한다.
  • N Step SCAN: SCAN 방식으로 큐에서 처음 N개의 요청을 처리한다. 한 방향으로 훑는 과정을 완료하면, 다음 N개의 요청을 처리한다.

 

3.9) LOOK 스케줄링 && C LOOK 스케줄링

LOOK: 진행 방향으로 움직이기 전, 먼저 요청이 있는 지를 검사한다.

실제로 SCAN 또는 C SCAN 방식 그대로 구현하지 않고, LOOK 과정을 거치도록 구현한다.
(현재 방향에 더 이상의 요청이 없으면, 이동 방향을 변경)

SCAN과 C SCAN의 이러한 형태를 LOOK과 C LOOK이라고 한다.

 

3.10) 회전 지연 시간 최적화

디스크 액세스 시간 = 탐색 시간(헤드 이동) + 회전 지연 시간(섹터 이동) + 전송 시간(데이터 전송)

데이터를 순차적으로 접근하여 트랙 전체를 액세스 하는 일괄 처리 프로세스는 회전 최적화 효과를 얻을 수 없다.

실린더에 분산된 소량의 데이터를 요청하는 대화식 프로세스는 회전 최적화로 성능 개선이 가능하다.

 

3.11) SLTF(Shortest Latency Time First: 최소 지연 시간 우선 스케줄링) 스케줄링

회전 지연 시간(섹터 이동)이 가장 짧은 요청을 먼저 처리한다.

디스크 헤드가 특정 실린더에 도달했을 때, 해당 실린더의 트랙 요청들이 대기하고 있다면, 헤드는 움직이지 않고 도착 순서와 관계없이 처리한다.

고정 헤드에서는 탐색을 하지 않기 때문에 탐색 시간이 없다. (회전 지연 시간만 최적화)

 

3.12) SPTF(Shortest Positioning Time First: 최소 위치 결정 시간 우선) 스케줄링

탐색 시간(트랙 이동)과 회전 지연 시간(섹터 이동)의 합이 가장 짧은 요청, 즉, 위치 결정 시간이 가장 짧은 요청을 다음 서비스 대상으로 선택한다.

처리량이 많고, 평균 반응 시간이 짧다.

가장 안쪽과 바깥쪽 실린더 요청이 무기한 연기될 가능성이 있다.

 

3.13) 에센바흐 방법

탐색 시간과 회전 지연 시간을 최적화하기 위해, 헤드는 C SCAN처럼 진행하나, 요청과 관계없이 트랙이 1바퀴 회전할 동안 요청을 처리하도록 재배열한다.

 

3.14) 디스크 스케줄링 알고리즘 선택 시 고려사항

알고리즘의 성능은 요청의 형태, 요청의 수에 좌우된다.

  • 큐에 요청이 1개뿐이라면, 모든 스케줄링 알고리즘 효과가 거의 같기 때문에 FCFS 알고리즘이 적당하다.

디스크 서비스 요청은 파일 할당 방법에 영향을 많이 받는다.

  • 연속 할당 파일은 디스크 상의 인접한 범위 내에서 많은 요청이 발생하므로, 헤드 이동이 적다.
  • 연결 할당 또는 인덱스 할당 파일은 블록들이 디스크에 흩어져 헤드의 이동 거리는 길어진다.

디렉터리 위치에 따라 헤드 이동 거리가 달라진다.

  • 디렉터리는 자주 참조하므로, 디스크의 양 끝 트랙에 두는 것보다 중간 부분에 두는 것이 헤드 이동을 줄일 수 있다.

디스크는 상대적으로 속도가 매우 느린 장치이므로, 디스크 속도와 신뢰성은 시스템 성능을 좌우한다.

 


 

4. RAID

Redundant Array of Inexpensive Disks 또는 Redundant Array of Independent Disks

여러 대의 물리적 디스크를 1개의 논리적 디스크로 인식하는 기술.

구성 방법에 따라 여러 계층으로 분류되며, 서로 다른 용도로 쓰인다.

초기 RAID 제안 이후 지속적으로 새로운 방법이 개발되었다.

데이터를 HDD 여러 개에 저장해서 속도, 가용성을 향상한다.

속도: 디스크 읽기/쓰기 속도 향상

  • 데이터를 일정 크기로 나누어 분산 저장하고 동시에 접근한다.

가용성: 데이터가 일부 손상된 경우에도 복구 가능하다.

  • 데이터 중복 저장(Mirroring)
  • 오류 탐지, 복구 방법 제공(Parity)

 

4.1) RAID 0 (스트라이핑)

미러링 X, 패리티 X

데이터를 중복 없이 여러 디스크에 분산 저장한다.

입출력 요청을 병렬적으로 처리하여 높은 전송률 유지가 가능하다.

오류 검출 기능(Parity)이 없고, 데이터를 중복 기록하지 않으므로, 데이터 손실에 대응할 수 없다.

중요하지 않은 데이터에서 빠른 데이터 입출력 성능을 요구하는 동영상 편집 등에 적합하다.

 

4.2) RAID 1 (미러링)

미러링 O, 패리티 X

모든 디스크에 미러 디스크를 두어 동일한 데이터를 중복으로 저장한다.

읽기 요청은 데이터가 있는 디스크 2개 중 어떤 디스크에서도 서비스를 받을 수 있기 때문에 성능 향상을 기대할 수 있다.

시스템 드라이브와 같이 중요한 파일 저장에 적합하다. (NAS에서 주로 사용되는 방법)

 

4.3) RAID 5 (블록 인터리브 된 분산 패리티 블록)

데이터를 여러 디스크에 분산 저장하되, 오류 탐지를 위한 패리티(Parity) 정보를 모든 디스크에 나눠 저장하는 방법.

데이터 입출력 성능이 높고, 안정성도 높은 편이다.

파일 서버 등 입출력이 빈번한 업무에 적합하다.

 

4.4) RAID 0+1

스트라이핑(RAID 0의 빠른 속도)과 미러링(RAID 1의 안정적인 복구 기능)을 혼합한 방법.

미러링으로 동일한 디스크 복사본을 가지고 있어서 디스크에 오류가 발생하면 쉽게 복구할 수 있다.

디스크가 여러 개 필요하므로, 안정성과 빠른 속도가 모두 필요한 중대형 서버에서 주로 사용한다.

 


 


수고하셨습니다!


 

'Dev. Study Note > OS Introduction' 카테고리의 다른 글

10. 파일 관리  (0) 2021.11.29
8. 가상 메모리  (0) 2021.11.29
7. 메모리 관리  (0) 2021.11.12
6. 프로세스 스케줄링  (0) 2021.11.04
5. 교착 상태와 기아 상태  (0) 2021.10.16
Comments