1. 입출력(I/O) 메커니즘이란?
2. 운영체제와 입출력(I/O)
3. 디스크 스케줄링
4. RAID 아키텍처
00 개요
컴퓨터로 게임을 할 때 아이템을 쓰기 위해서, 이동하기 위해서 마우스를 클릭하거나 키보드를 누른다. 이러한 마우스 클릭, 키보드 누름과 같은 행동은 입출력에 해당하는데, 운영체제는 이런 행동을 컴퓨터가 인식해 프로그램이 사용자가 의도한 결과(아이템 선택 또는 이동)를 화면상에 보여주는 과정에도 관여하고 있다. 이번 차시에서는 입출력 메커니즘과 이 과정에서 운영체제가 제공하는 기능들에 대해 알아보았다. 뿐만 아니라 디스크의 입출력 성능을 향상하기 위한 스케줄링 기법과 RAID(Redundant Array of Inexpensive Disks) 아키텍처에 대해 살펴보았다.
01 입출력 메커니즘
입출력 메커니즘이란 입출력 장치와 메인 메모리 사이에 데이터가 오가는 시스템을 의미한다. 사용자가 프로그램을 돌리기 위해 필요한 데이터는 모두 메인 메모리 상에 올라와있어야 하는데, 이때 입출력 제어기가 사용자의 입출력 데이터를 메인 메모리에 전달하는 역할을 담당한다. 입출력 메커니즘은 크게 프로세서의 관여 여부에 따라 다음과 같이 분류할 수 있다.
- Processor Controlled Memory Access - cpu가 제어함
- Polling
- Interrupt
- Direct Memory Access (DMA) - cpu가 제어 안 함
01-1 Polling (Programmed I/O)
폴링은 프로세서가 입출력 장치를 돌며, I/O 데이터가 있는지 확인하는 방식이다. 즉, 프로세서가 주기적으로 입출력 장치들의 상태를 확인하고 주고받을 데이터가 있는지 상태를 확인하는 방법이다.
- 장점 : 간단함. 만약 I/O가 빠르고 데이터 전송이 잦다면 효율적인 방법
- 단점 : 프로세서 부담이 크고 Polling overhead가 있음(입출력 장치가 느릴 경우)
01-2 Interrupt
인터럽트는 프로세서가 입출력 장치를 계속 관찰하는 폴링 방식과 달리, 입출력 준비가 되면 프로세서에 알려주는 방식이다. 입출력 장치가 작업을 하고 나면 프로세서에 내용을 전달하고, 프로세서는 그다음 데이터 전송을 담당한다.
- 장점 : 풀링 대비 오버헤드가 적고, 입출력이 자주 발생하는 경우가 아니라면 좋은 방식
- 단점 : 입출력이 자주 발생한다면, 인터럽트가 지속적으로 발생해 오버헤드가 발생함(handling overhead)
참고 ) 제어판 > 장치 관리자 > 보기 > 연결 별 리소스 > 인터럽트 요청 : 실제 사용하는 방식임을 확인할 수 있음
01-3 DMA : Direct Memory Access
폴링과 인터럽트 방식은 모두 프로세서가 모든 입출력 데이터 전송을 처리하다 보니 오버헤드가 크다. 따라서 프로세서는 명령만 내리고 I/O 장치와 메모리 사이의 데이터 전송을 프로세서의 개입 없이 수행하는 방법이 DMA다.
- 메모리와 입출력 모듈이 연결되어 있음
- 장점 : 프로세서의 부담을 줄일 수 있음 (대부분의 현대 시스템들이 사용하는 방식)
- 과정(프로세서는 입출력 데이터 전송의 시작과 종료에만 관여함)
(어떤 데이터를 읽어야 하는 상황)
- 프로세서가 I/O 장치가 아닌 DMA에 어떤 데이터를 어디로 얼마큼 보낼지 명령을 전달
- 이후 프로세서는 다른 남은 일을 이어함
- DMA 장치가 프로세서로부터 받은 명령어를 기반으로 디스크나 I/O 장치에 정보(어떤 데이터를 얼마나 어디로 이동시켜야 하는지)를 알려줌
- 디스크 제어기가 실제 데이터 교환을 수행함
- 디스크 제어기가 모든 작업을 끝낸 뒤 DMA 장치에 보고함
- DMA 장치가 프로세서에 interrupt를 날려 작업이 완료되었음을 알림
02 운영체제와 입출력
운영체제는 다양한 입출력 과정에 개입에 퍼포먼스를 높일 수 있는데, 운영체제의 커널의 입출력 서브 시스템이 다음과 같은 I/O 서비스를 제공한다.
- I/O Scehduling : 입출력이 많을 때 순서를 정해주는 방법
- Error Handling : 디스크에 데이터를 쓰다가 오류나 에러가 났을 때 처리하는 방식
- I/O device information managements : 시스템의 I/O 장치에 대한 정보 유지 및 관리
- Buffering
- Caching
- Spooling
02-1 Buffering
- 버퍼 : I/O 장치와 프로그램 사이에 전송되는 데이터를 임시 저장하는 곳
- 버퍼를 쓰는 이유 : 데이터를 보내는 장치과 저장하는 장치 간 저장 가능한 데이터의 용량 크기에 차이가 날 수 있어서 중간에서 중재해주는 창고 같은 버퍼가 필요함. 즉, 두 장치 간 속도 차이나 전송 속도, 처리 단위 차이의 문제들을 완충해주는 역할을 하는 게 버퍼.
- ex) 60 fps로 재생하는 프로그램이 있는데, 네트워크의 데이터 전송 속도는 30 fps 일 때 로딩 바가 돌아가면서 60 fps단위로 프레임이 찰 때까지 버퍼에 모아놓은 다음 재생이 가능할 때 재생을 시작하는 경우
02-2 Caching
- 캐시 : 자주 사용하는 데이터를 cpu의 레지스터에 미리 올려놓은 데이터
- 캐시를 쓰는 이유 : 캐시 히트를 했을 경우 I/O가 필요 없기 때문에 데이터 접근 시간을 아끼고 오버헤드도 줄일 수 있음
- 버퍼링은 데이터를 모아두었다가 사용한다면, 캐시는 필요할 것으로 예측한 데이터를 미리 올려두는 것임
02-3 Spooling
- 프린트를 할 때 자주 볼 수 있는 용어로, 동시에 여러 요청이 들어왔을 때 요청을 처리하는 방식 중 하나
- 한 장치에 여러 요청을 보낼 때 각 출력이 섞이지 않도록 디스크에 공간을 두어 각각의 요청을 모아두었다가, 요청이 완전히 들어오면 순차적으로 출력 장치로 보내주는 것을 의미함
03 디스크 스케줄링
디스크 스케줄링이란 디스크에 접근하는 요청들의 처리 순서를 결정하는 것으로, 디스크 접근 성능을 향상하기 위해서 적용하는 방법이다. 이때 성능은 크게 다음으로 측정할 수 있다.
- Throughput : 단위 시간당 처리량
- Mean Response Time : 평균 응답 시간
- Predictability : 응답 시간의 예측성
특히, 디스크 스케줄링을 한다는 것은 어떤 요청을 처리하는 것이 디스크에 부하를 덜어줄 수 있을지 고려해본다는 것이고 결국 디스크에 접근해 데이터를 읽어오는 과정을 최적화하는 것이다. 이때 디스크에 접근해 데이터를 읽어오는 시간에는 헤드를 움직이는 seek time, 원하는 실린더로 이동하는 rotational delay가 포함되고 이 시간들을 최적화 하는 방법을 활용할 수 있다.
- Optimizing Seek Time
- Optimizing Rotational Delay
- SPTF(Shortest Positioning Time First)
03-1 Optimizing Seek Time
Seek Time 최적화 하는 것은 디스크 헤드의 이동을 최소화해서 Seek Time을 줄이는 방법이다.
- FCFS (First Come First Service)
- 먼저 요청된 접근 요청부터 처리하는 방법으로 디스크 접근 요청이 적은 경우 적합
- 장점 : 간단해서 오버헤드가 낮으며 각 요청 처리 방식이 공평함
- 단점 : 성능에 대한 고려가 없음
- SSTF(Shortest Seek Time First)
- 현재 헤드 위치로부터 가까운 거리의 디스크 접근 요청부터 처리, 일괄처리 시스템에 적합
- 이동거리가 감소하기 때문에 시간당 처리 가능한 양이 많음
- 장점 : Throughput 향상, 평균 응답 시간 감소
- 단점 : Predictability 감소, starvation 발생 가능
- Scan
- 훑는다는 스캔의 의미처럼, 헤드가 전체 실린더를 훑는 방식
- 현재 헤드의 진행 방향으로 이동하다가, 끝에 다다르면 반대 방향의 끝으로 이동
- 장점 : starvation은 발생하지 않고, throughput 향상(가까운 거리부터 처리 가능)
- 단점 : 진행방향 반대편 끝의 작업에 대한 응답 시간이 길어짐
- C-Scan (Circulat Scan)
- 헤드의 진행방향에 있던 작업이 서비스를 더 많이 받는 Scan 방법의 단점을 개선
- 헤드의 방향을 바꾸지 않고, 진행 방향대로 이동하다가 끝에 다다르면 다시 처음으로 이동
- 헤드는 정해진 방향으로만 이동
- 장점 : Scan 방법 대비 균등한 기회 제공
- 단점 : 불필요한 이동 거리가 추가됨(다시 처음으로 이동하는 시간)
- Look (elevator algorithm)
- 올라가야 하는 곳까지만 올라가고, 내려가야 하는 곳 까지만 내려가는 엘리베이터 원리
- Scan 같지만, 마지막 실린더까지 이동하는 게 아니라 접근해야 하는 실린더까지만 이동
- 장점 : 불필요한 스캔의 이동을 방지할 수 있음
03-2 Optimizing Rotational Delay
Seek Time 이 디스크 헤드의 이동 시간을 최소화한다면, Rotational Delay를 최적화한다는 것은 디스크가 회전하는 시간을 줄이는 것이다. 특히 모든 실린더에 헤드가 있어 한 번에 모든 트랙을 읽을 수 있는 Fixed Head Disk 시스템에 사용하기 적합하다. (헤드를 움직일 필요가 없기 때문에 Seek Time 최적화가 필요하지 않음)
- Sector Queueing (SLTF, Shortest Latency Time First)
- 트랙의 섹터 별 큐를 만들어 디스크의 해당 섹터에 접근하려는 요청들을 큐에 넣어놓는 방법
- 디스크가 회전하면서 각 섹터에 도착하면, 해당 섹터에 해당하는 큐의 요청을 처리함
- 핵심 : 각 섹터마다 큐가 있고, 큐에는 몇 번째 트랙을 읽어야 하는지 정보를 보관, 로테이션 시 처리
(참고로 Fixed Head Disk가 아니더라도 같은 실린더나 트랙에 여러 요청 처리가 들어올 경우 위 큐잉 방법을 사용할 수 있는데, 헤드가 특정 실린더에 도착하면 고정시킨 뒤 그 실린더에 있는 요청을 처리하는 방식으로 구현함)
03-3 SPTF(Shortest Positioning Time First)
Positioning Time은 Seek Time + Rotational Delay로, 포지셔닝 타임을 줄여 디스크 성능을 향상하는 것이다. 구체적으로는 이 포지셔닝 타임이 최소인 요청부터 처리하는데 throughput이 향상되고, 평균 응답 시간은 감소한다는 장점이 있지만 가장 안쪽과 바깥쪽 실린더에 접근해야 하는 요청에 대해 starvation이 발생할 수 있다는 단점이 있다.
이러한 단점을 개선한 스케줄링 기법이 Eschenbach scheduling이다.
- Eschenbach Scheduling
- 한쪽에서만 움직여 starvation이 생기는 현상을 방지하기 위해 일단 한 바퀴를 돌게 함
- 한 바퀴 돌면서 최대한 많은 요청을 처리하는데, 1회전을 하는 동안 처리할 수 있는 요청들을 sorting 함
- 하지만 만약 한 실린더에 대한 요청이 특히 많다면, 한 회차에 처리할 수 없을 수 있음
04 RAID Architecture
RAID Architecture(Redundant Array of Inexpensive Disks)는 비교적 저렴한 물리 디스크 여러 개를 하나의 논리적인 디스크로 사용하는 기법이다. 이 기법의 성능은 접근 시간인 Performance와 정보를 얼마나 안전하게 보관할 수 있는지에 대한 지표인 Reliability로 판단한다.
- RAID 0
- 디스크 스트라이핑 기법
- OS는 디스크를 연속된 블록들의 집합으로 인식하는데, 여러 디스크를 활용함에 따라 각 디스크마다 블록들을 나누어 분할 저장하는 방식
- 장점 : 디스크 하나를 사용할 때는 순차적으로 접근해야 하지만 여러 디스크에 분할 저장해두면 동시 접근이 가능해 접근 시간을 줄여 퍼포먼스 향상을 기대할 수 있음
- 단점 : 한 디스크에서 장애가 발생했을 경우 데이터 손실이 발생함(low reliability), 또 매번 접근 시간을 감소할 수 있지는 않음(디스크에 어떻게 블록 데이터를 저장하는가에 따라 달라질 수 있음)
- RAID 1
- RAID 0 이 성능 향상에 초점을 맞췄다면, RAID 1은 Reliability 향상에 초점을 맞춘 방식
- 데이터의 안전한 보관을 위해 Mirroring Disk에 데이터를 중복 저장하는 방식
- 최소 2개의 디스크로 구성되어있고, 두 개의 디스크에서 모두 입출력이 가능함
- 장점 : 한 디스크에 문제가 생겨도 데이터의 손실이 없음(high reliability)
- 단점 : 가용 디스크 용량이 절반.
- 클라우드와 같이 중요한 데이터를 다룰 때 활용하는 방법
- RAID 3
- RAID 1 방식에서의 용량 문제를 개선
- 에러를 잡을 수 있는 Parity Disk를 활용해, 문제가 생겼을 때 Parity Disk를 통해 데이터 복구가 가능함
- 디스크에 블록 단위로 저장하지 않고 바이트 단위로 나눠 서로 다른 스트립에 나누어 저장하고 별도의 패리티 디스크를 두어 장애 발생 시 복구함
- 장점 : RAID 1에 비해 디스크 용량을 확보하면서 신뢰성의 문제도 어느 정도 확보할 수 있는 방법
- 단점 : write 동작에 매번 parity 계산이 필요해 오버헤드가 생기고, write가 몰리면 병목 현상이 발생함
- RAID 4
- RAID 3과 달리 디스크에 블록 단위로 데이터를 저장하는 방식
- 블록 단위로 저장하기 때문에 독립적으로 접근할 수 있음
- 하지만 분배가 균등하지 않고 병목으로 인한 성능 저하 발생 가능(한 디스크에 입출력이 몰릴 때)
- RAID 3과 동일한 방식으로 parity disk를 둠
- RAID 5
- RAID 4와 유사하나, parity disk를 별도로 두지 않고 parity disk도 나누어 관리하는 방식
- 각 블록과 함께 parity disk를 분할해서 함께 저장하면(단, 특정 블록에는 다른 블록에 대한 패리티 디스크가 있어야 함), 한 블록에 문제가 발생해도 다른 블록에 있는 패리티 디스크를 읽어 복구할 수 있음
- 분산 저장으로 디스크 병목현상도 해소할 수 있음
- 성능이 좋고 가장 널리 사용되는 RAID level 중 하나
** KOREATECH 무료 OS강의(클릭) 학습 후 나름대로 이해한 뒤 정리한 내용입니다. **
'CS > Operating System' 카테고리의 다른 글
[ OS 기초 ] 11. File System (2) (0) | 2021.07.23 |
---|---|
[ OS 기초 ] 11. File System (0) | 2021.07.22 |
[ OS 기초 ] 10. Virtual Memory Management (2) (0) | 2021.07.21 |
[ OS 기초 ] 10. Virtual Memory Management (0) | 2021.07.19 |
[ OS 기초 ] 09. Virtual Memory (2) (0) | 2021.07.13 |
댓글