대중적으로 활용되는 보조기억장치 : HDD, 플래시 메모리 기반 저장장치(SSD, USB)
1.
전원이 꺼져도 데이터를 안전하게 보관
2.
필요로 하는 데이터를 조금이라도 빠른 성능으로 메모리에 전달
RAID
Redundant Array of Independent Disk
여러개의 보조기억장치를 하나의 보조기억장치 처럼 사용하는 기술
RAID0
단순히 데이터를 여러 보조기억장치에 나누어 저장하는 방식
이렇게 분산하여 저장하는 동작을 스트라이핑 이라고 함
•
장점 : 빠른 입출력 속도
•
단점 : 안전성의 부재
RAID1
완전한 복사본을 만들어서 저장하는 방식 (미러링)
•
장점 : 복구가 간단하고 안정성이 높음
•
단점 : 복사본 용량만큼 사용가능한 용량이 줄어듦
RAID4
패리티 정보를 저장하는 디스크를 따로 두는 방식
→ 패리티 : 오류 검출 정보
•
장점 : 적은 하드 디스크 용량으로 안전한 보관 가능
•
단점 : 패리티 저장 디스크에 병목이 발생할 수 있음
RAID5
RAID4의 문제점(병목 현상)을 해결하기 위해 패리티를 분산하여 저장하는 방식
RAID6
서로 다른 2개의 패리티를 두는 방식
→ 오류 검출 수단이 2개가 됨
•
장점 : RAID5에 비해 높은 안전성
•
단점 : RAID5에 비해 느린 쓰기 성능
Nested RAID
여러 RAID 레벨을 혼합한 방식
입출력 기법
보조기억장치와 입출력장치는 완전히 배타적인 개념이 아니며, 보조기억장치는 결국 메모리를 보조하는 임무를 수행하는 특별한 입출력장치로 볼 수 있다.
•
장치 컨트롤러 : CPU와 입출력장치 사이의 통신을 중개하는 중개자 역할의 하드웨어
•
장치 드라이버 : 장치 컨트롤러의 동작을 알고, 장치 컨트롤러가 컴퓨터 내부와 정보를 주고받을 수 있도록 하는 프로그램
만약 블루투스 연결이면?
1.
블루투스도 일종의 I/O 인터페이스(입출력장치
CPU)
⇒ 블루투스를 통해 연결된 장치도 CPU가 직접 제어하지 않고, 중간의 컨트롤러나 드라이버 계층이 제어
2.
블루투스 컨트롤러라는 하드웨어가 존재
⇒ 컴퓨터나 스마트폰 내부에 블루투스 모듈이 있고, 모듈 안에 블루투스 칩셋(컨트롤러)이 탑재되어 있음
•
블루투스 프로토콜 관리
•
주변 기기와의 연결 유지
•
데이터를 주고받을 때 포맷 변환 및 암호화 처리
⇒ 즉, 블루투스로 연결된 키보드/마우스 역시 블루투스 컨트롤러를 통해 처리된 후 CPU에 전달됨
3.
운영체제의 드라이버 및 스택
•
블루투스 장치는 OS 상에서도 블루투스 스택이라는 소프트웨어 계층으로 관리됨
프로그램 입출력
프로그램 입출력 방식은 입출력 명령어의 오퍼랜드, 즉 입출력장치의 주소를 식별하는 방식에 따라 고립형 입출력(isolated I/O)와 메모리 맵 입출력(memory mapped I/O)으로 나뉜다.
•
고립형 입출력 : 입출력 장치에 접근하는 주소와 메모리에 접근하는 주소를 별도의 주소 공간으로 간주하는 방식
→ 주소 공간 접근시 별도의 입출력 명령어 필요
•
메모리 맵 입출력 : 입출력장치에 접근하는 주소 공간과 메모리에 접근하는 주소 공간을 구분하지 않고, 메모리에 부여된 주소 공간 일부를 입출력장치를 식별하기 위한 주소 공간으로 사용하는 방식
→ 주소 공간 접근시 별도의 입출력 명령어 필요 X
다중 인터럽트
인터럽트가 여러 입출력장치로부터 동시다발적으로 발생하는 경우,
우선순위가 더 높은 인터럽트가 우선적으로 처리되는 경우가 일반적이다.
→ 인터럽트 비트가 비활성화되어 있거나, 인터럽트 비트를 비활성화해도 무시할 수 없는 인터럽트인 NMI(Non-Maskable Interrupt)가 발생한 경우, 우선순위가 높은 인터럽트부터 먼저 처리
다중 인터럽트를 처리하기 위해 프로그래머블 인터럽트 컨트롤러(PIC)라는 하드웨어가 사용된다. PIC는 여러 장치 컨트롤러에 연결되어 있어 장치 컨트롤러에서 보낸 하드웨어 인터럽트 요청들의 우선순위를 판별한 뒤, CPU에게 지금 처리해야 할 하드웨어 인터럽트가 무엇인지를 알려주는 장치이다.
PIC는 여러 핀이 있고, 각 핀에는 CPU에게 하드웨어 인터럽트 요청을 보낼 수 있도록 약속된 하드웨어가 연결되어 있다.
일반적으로 PIC는 많은 하드웨어 인터럽트를 관리하기 위해 다음와 같이 2개 이상의 계층으로 구성되어 있다.
DMA 입출력
프로그램 기반의 입출력과 인터럽트 기반의 입출력의 공통점
→ CPU가 입출력장치와 메모리간의 데이터 이동을 주도해야 하며, 이동하는 데이터들도 반드시 CPU를 거친다.
입출력장치의 데이터를 메모리에 저장하는 경우,
1.
CPU가 장치 컨트롤러로부터 데이터를 하나씩 읽어 레지스터에 적재
2.
적재한 데이터를 하나씩 메모리에 저장
메모리 속 데이터를 입출력장치에 내보내는 경우도 마찬가지이다.
이렇게 입출력장치와 메모리 사이의 모든 데이터가 CPU를 거치면 CPU의 부담이 커진다.
→ CPU를 거치지 않고도 입출력장치와 메모리가 상호작용할 수 있는 입출력 방식인 DMA(Direct Memory Access)
DMA 입출력을 위해서는 시스템 버스에 연결된 DMA 컨트롤러라는 하드웨어가 필요하다.
1.
CPU가 DMA 컨트롤러에게 입출력장치의 주소, 수행할 연산, 연산할 메모리 주소 등의 정보와 함께 입출력 작업을 명령
2.
DMA 컨트롤러가 CPU 대신 장치 컨트롤러와 상호작용하며 입출력 작업을 수행. 이때 DMA 컨트롤러는 필요한 경우 메모리에 직접 접근하여 정보를 읽거나 씀
3.
DMA 컨트롤러는 입출력 작업이 끝나면 CPU에게 인터럽트를 걸어 작업이 끝났음을 알림
사이클 스틸링
버스는 공용 자원이다. 두 장치가 동시에 하나의 버스를 이용할 수 없다는 의미이다. 때문에, CPU가 시스템 버스를 사용할 때는 DMA 컨트롤러가 시스템 버스를 사용할 수 없고, 그 반대도 마찬가지이다.
따라서 DMA 컨트롤러는 CPU가 시스템 버스를 사용하지 않을 때마다 조금씩 사용하거나, CPU가 시스템 버스 사용을 양보한다. CPU 입장에서는 버스 접근 사이클을 도둑맞는 기분이 들 것이기에, 이런 의미로 DMA의 시스템 버스 사용을 사이클 스틸링(cycle stealing)이라고 부른다.