Operating System/OS

Ⅹ 입출력 시스템과 저장장치

seij 2023. 11. 28. 13:07

Part 04 저장장치 관리

Chapter 10 입출력 시스템과 저장장치

 

1. 입출력 시스템

① 입출력 장치와 채널

컴퓨터는 필수장치인 CPU와 메모리 외에도 주변 장치인 입출력장치와 저장장치로 구성된다. 각 장치는 메인보드에 있는 버스로 연결된다.

 

- 저속 주변장치: 메모리와 주변장치 사이에 오고가는 데이터양이 적어 데이터 전송률이 낮은 장치 (키보드, 마우스, 스캐너)

- 고속 주변장치: 메모리와 주변장치 사이에 대용량의 데이터가 오고 가므로 데이터 전송률이 높은 장치 (랜카드, 그래픽카드, 하드디스크, USB 장치)

 

여러 주변 장치는 메인보드 내의 버스로 연결된다. 그런데 버스에는 많은 종류의 장치가 연결되므로 버스를 1개만 사용하면 "병목현상"이 발생한다. 따라서 여러 개의 버스를 묶어 사용하는데 이때 데이터가 지나다니는 하나의 통로를 "채널"이라고 부른다.

 

- 채널 Chanel : 데이터가 지나다니는 하나의 통로

 

주변장치는 저마다 데이터 전송 속도가 다르기 때문에 채널을 무분별하게 사용하면 문제가 발생한다. 채널을 모든 주변장치가 공유하면 전체적으로 데이터 전송 속도가 느려진다.

 

 

② 입출력 버스의 구조

- 초기의 구조

컴퓨터를 사용하기 시작한 초기에는 주변 장치가 많지 않았고 CPU와 메모리의 속도도 빠르지 않았다. 모든 장치가 하나의 버스로 연결되었고, 폴링 방식을 사용했다.

 

- 폴링 Polling : CPU가 작업을 진행하다가 입출력 명령을 만나면 직접 입출력장치에서 데이터를 가져오는 방식

 

- 입출력 제어기를 사용한 구조

컴퓨터 기술이 발전하면서 CPU와 메모리의 성능이 급격히 향상되고 주변장치의 종류도 다양해졌다. 과거에는 주변장치가 키보드, 마우스, 모뎀, 그래픽카드, 라인 프린터, 하드디스크 정도였지만 지금은 레이저 프린터, 사운드카드, 랜카드, 디지타이저, 스캐너, 무선 랜카드, 블루투스, USB 저장장치 등이 더해졌다. 이러한 변화에 따라 CPU가 폴링 방식으로 주변장치를 관리하기 어려워져서 모든 입출력을 입출력 제어기 I/O controller에 맡기는 구조로 변경되었다.

 

- 입출력 버스의 분리

그래픽 카드 같은 고속 주변장치가 키보드, 마우스 같은 저속 주변장치와 입출력 버스를 공유하면 입출력 속도가 현저히 저하된다. 입출력 버스를 고속 입출력 버스와 저속 입출력 버스로 분리하여 운영한다. 두 버스 사이의 데이터 전송은 "채널 선택기"가 관리한다.

 

③ 직접 메모리 접근

- 직접 메모리 접근 DMA : CPU의 도움 없이도 메모리에 접근할 수 있도록 입출력 제어기에 부여된 권한

메인메모리는 CPU가 작업하는 전용 공간이다. 그런데 DMA 제어기가 IO에서 가져오거나 IO로 가져갈 데이터가 있을 때도 이 공간을 사용한다. 즉, CPU의 자업 공간과 DMA의 작업공간이 겹친다. 이를 방지하기 위해 오늘날에는 CPU 작업공간과 DMA 제어기가 데이터를 옮기는 공간을 분리하여 메인 메모리를 운영한다.

 

- 메모리 맵 입출력 MMIO : CPU와 입출력제어기가 메모리를 분할하여 사용하는 방식

 

 

④ 인터럽트

입출력 제어기와 DMA 제어기의 협업으로 작업이 완료되면 입출력 제어기는 CPU에 인터럽트를 보낸다.

 

- 인터럽트 Interrupt : 주변장치의 입출력 요구나 하드웨어의 이상 현상을 CPU에 알려주는 신호

- 외부 인터럽트 External Interrupt : 하드웨어로부터 발생한 인터럽트

- 내부 인터럽트 Internal Interrupt : 소프트웨어로부터 발생한 인터럽트. 프로세스의 잘못이나 예상치 못한 문제로 발생한다. 따라서 ‘예외 상황 Exception 인터럽트’라고도 부른다.

- 시그널 Signal : 사용자의 의지로 사용자가 직접 발생시키는 인터럽트. 자바 스크립트의 이벤트와 동일 맥락이라고 볼 수 있다.

 

- 인터럽트 벡터와 인터럽트 핸들러

운영체제는 인터럽트가 발생하면 인터럽트 핸들러를 호출하여 작업한다.

인터럽트 벡터에는 해당 인터럽트 핸들러를 호출할 수 있도록 인터럽트 핸들러가 저장된 메모리 주소가 포인터 형태로 등록되어 있다.

- 인터럽트 벡터 Interrupt Vector : 인터럽트를 거는 장치에 할당된 두 개의 주기억 장치 위치를 일컫는다.

- 인터럽트 핸들러 Interrupt Handler : 인터럽트 핸들러 또는 인터럽트 서비스 루틴은 인터럽트 접수에 의해 발생되는 인터럽트에 대응하여 특정 기능을 처리하는 기계어 코드 루틴이다.

 

 

⑤ 단일 버퍼와 이중 버퍼

단일 버퍼보다는 이중 버퍼를 사용하는 것이 버퍼 운용에 유리하다.

- 단일 버퍼 Single Buffer : 데이터를 버퍼에 담는 작업과 버퍼에 있는 데이터를 퍼 가는 작업을 동시에 하기 어렵다.

- 이중 버퍼 Double Buffer : 한 버퍼는 데이터를 담는 용도로 쓰고 다른 버퍼는 데이터를 가져가는 용도로 쓸 수 있다.

 

 

 

 

 

 

 

 

2. 저장장치

① 저장장치의 종류

- 하드디스크 드라이브 Moving-head Hard Disk : 순차접근이 가능한 컴퓨터의 비휘발성 보조 기억 장치

- 플래터 Platter : 표면에 자성체가 발려 있어 자기를 이용해 0과 1의 데이터를 저장

- 섹터 Sector : 물리적인 개념인 섹터는 하드디스크의 가장 작은 저장 단위

- 블록 Block : 하드디스크와 컴퓨터 사이에 데이터를 전송하는 논리적 저장 단위 중 가장 작은 단위. 운영체제 관점 가장 작은 저장 단위 (윈도우 OS에서는 클러스터 Cluster 라고 표현)

- 트랙 Track : 회전축을 중심으로 데이터가 기록되는 동일한 동심원상에 있는 섹터 집합

- 실린더 Cylinder : 개념적으로 여러 개의 플래터에 있는 같은 트랙의 집합

- 헤드 Head : 데이터를 읽거나 쓸 때, 읽기/쓰기 헤드 사용한다. 헤드의 수는 플래터의 표면의 수와 같다. 헤드가 플래터에 붙어버리면 고속으로 회전하는 플래터 표면에 상처가 생기고 데이터를 저장할 수 없는 배드 섹터 bad sector가 된다.

- SSD : 반도체를 이용한 저장장치보다는 느린 하드디스크의 느린 속도를 보완하기 위해 개발된 보조저장장치. 전원이 사라져도 데이터를 보관할 수 있는 플래시 메모리로 구성된다. 속도가 바르고 모터와 같은 물리적으로 움직이는 부품이 없어서 소음이 없다. 빠른 데이터 입출력 속도가 가장 큰 장점이다. 크기가 작고 외부 충격에 강하며 소모되는 전력량과 발열 수준이 하드디스크보다 낮지만 같은 용량 하드디스크 대비 가격이 훨씬 비싸다.

 

초기 SSD는 하드디스크와 같은 SATA 규격의 인터페이스 사용했다. 현재는 NVMe Non-Volatile Memory express 방식의 독자적인 인터페이스를 사용한다. NVMe 방식의 SSD는 초당 7GB의 데이터 전송 속도로 기존 하드디스크의 전송 속도를 수십 배 뛰어넘기 때문에 차세대 표준으로 자리매김하고 있다.

+ 문제: SSD를 위해 개발된 인터페이스 규격은?  NVMe

 

- CD : 하드디스크처럼 원반을 사용하는 장치로, 휴대할 수 있는 소형 원반에 데이터를 저장한다. 트랙과 섹터로 구성되어 있고 수평으로 움직이는 헤드가 트랙 사이를 움직이며 데이터를 읽는다.초기 버전은 한 장에 640MB를 저장했다. CD가 발전하여 DVD와 블루레이디스크가 만들어졌다.

 - DVD : 4.7GB 저장, 하나의 디스크에 2개의 층을 만들어 데이터를 저장하는 듀얼레이어 방식: 9.4GB 저장 가능

  - 블루레이디스크 : 25GB 저장, 듀얼레이어 방식: 50GB

 

 

② 하드디스크와 CD의 비교

하드디스크에서는 디스크가 작동하는 동안 플래터가 일정한 속도로 돌아가지만, CD에서는 헤드 위치에 따라 디스크의 회전 속도가 변한다.

 

- 각속도 일정 방식 Constant Angular Velocity : 일정한 시간 동안 이동한 각도가 같다.

- 선속도 일정 방식 Constant Linear Velocity : 어느 트랙에서나 단위 시간당 디스크의 이동 거리가 같다.

 

 

 

 

 

③ 디스크 장치의 데이터 전송 시간

디스크의 데이터 전송 시간 = 탐색 시간 + 회전 시간 + 전송 시간

- 탐색 시간 Seek Time : 헤드가 현재 위치에서 특정 트랙까지 이동하는 데 걸리는 시간

- 회전 지연 시간 Rotational Latency Time : 헤드가 원하는 섹터를 만날 때까지 플래터가 회전하는 데 걸리는 시간

- 전송 시간 Transmission Time : 헤드가 원하는 섹터에 있는 데이터를 읽어 전송할 때 걸리는 시간

디스크의 데이터 전송 시간 중 가장 많은 비중을 차지하는 것은 탐색 시간이다. 하드디스크의 성능을 높이려면 탐색 시간을 최소화해야 한다. 탐색 시간을 최소화하기 위해 조각 모음과 디스크 스케줄링 기법을 이용한다.

 

 

 

 

 

 

3. 디스크 스케줄링

 

 

 

 

 

 

 

4. RAID

RAID (Redundant Array of Independent Disks) : 자동으로 백업하고 장애가 발생하면 이를 복구하는 시스템

 

 

 

 

5. 하드웨어의 규격과 발전

① 포트란?

- 포트: 컴퓨터와 주변장치를 연결하는 단자

다양한 버스에 접속하기 위한 여러 포트가 개발되었다.

 

 

② 메인 보드의 포트

- CPU 포트: CPU를 꽂는 곳으로, 여러 개의 발이 달린 CPU는 방향을 맞추어 꽂아야 한다. CPU 포트 주위에는 CPU를 냉각하는 팬을 설치하기 위한 공간이 따로 마련되어 있다.

 

- 램 포트: 램을 수직으로 꽂는 곳이다. 램을 증설하려면 꽂혀 있는 것과 같은 규격의 램을 꽂아야 한다. 용량이 같더라도 다른 규격의 램을 꽂으면 낮은 속도의 램을 기준으로 성능이 떨어진다.

 

- 그래픽 포트: 그래픽 포트는 많은 양의 데이터를 전송해야 하므로 CPU와 직접 연결된다. 보통의 경우 메인보드에 그래픽카드가 내장되어 있어 그래픽카드를 따로 사지 않아도 된다. 그러나 내장된 그래픽 카드는 성능이 낮기 때문에 3D 게임같이 고성능의 그래픽카드가 필요할 경우에는 그래픽 카드를 따로 사서 그래픽 포트에 연결해야 한다.

 

- SATA: SATA Serial ATA는 하드디스크 같은 저장장치를 연결하는 직렬 ATA 포트다. ATA 표준 포트를 개선한 버전으로 하드디스크, SSD, CD-ROM 등의 저장장치를 연결하는 데 사용한다.

 

- PCI: 그 외의 주변장치는 메인보드에 주변장치를 연결하는 PCI: Peripheral Component Interconnect 버스 인터페이스에 연결된다. 초기에는 ISA 버스가 사용되었으나 지금은 PCI로 대체되었다. 보통의 경우 랜카드, 사운드카드 등이 PCI 버스에 연결되지만 최신 메인보드에는 그래픽카드, 사운드카드, 랜카드가 내장되어 있어 PCI 버스에 연결할 것이 많지 않다.