7.2 RAID의 정의와 종류
하드디스크나 ssd같은 저장장치를 효율적으로 사용하는 방식이다.
1TB하드를 네개로 RAID를 구성하면 4TB하드디스크 한개의 성능과 안정성을 능가할 수 있다.
그럼 RAID를 구성하는게 무엇인가
7.2.1 RAID(이하 레이드)
RAID
Redundant Array of Independent Disks
독립적인 저장장치를 마치 하나처럼 엮어서 사용하는 것이다.
데이터의 안정성 혹은 높은 성능을 위해 여러 물리적 보조기억장치를
마치 하나의 논리적 보조기억장치 처럼 사용하는 기술이다.
7.2.2 레이드 레벨
레이드를 구성하는 기술 레벨은 다음과 같다.
RAID 0, RAID 1 , RAID2 3 4 5 6...여기서 파생된 10 50 등등
비교적 많이 사용되는 0 1 4 5에 대해서 알아보자
7.2.2.1 RAID 0
데이터를 단순히 나누어 저장하는 저장방식이다.
1TB 4개가 잇다고할때 4TB를 나눠저장한다고 할때
각 하드디스크가 데이ㅓ를 번갈아가며 저장한다.
저장되는 데이터가 하드디스크 개수만큼 나뉘어 저장된다.
중요한 용어를 알아야한다.
스트라입 : 마치 줄무니처럼 분산되어 저장된 데이터
스트라이핑 : 분산하여 저장하는것
장점 : 입출력 속도의 향상
각 나눠진것을 한번에 출력할 수 있기때문에 좀더 빠르다.
1234를 하나에서 찾는것보다 1 2 3 4를 각각 가져와서 한번에 읽는것이 빠르다.
단점 : 저장된 정보가 안전하지 않다.
하나 디스크가 고장나면 저장했던 데이터를 온전히 불러올 수 없다.
7.2.2.2 RAID 1
미러링 : 복사본을 만드는 방식
데이터를 쓸때 원본과 복사본 두군데에 작성한다.(느린 쓰기 속도)
RAID 0처럼 나눠서 저장하는데
완전한 백업인 복사본을 만든다.
1 2 에 저장한것을 3 4에 복사해서 저장
장점 : 백업과 복구가 쉽다.
단점 : 하드디스크 개수가 한정되었을때 사용가능한용량이 적어진다.
복사본이 만들어지는 만큼 사용불가하다. -> 많은 양의 하드디스크가 필요 -> 비용증가
7.2.2.3 RAID4
1처럼 완전한 복사본을 만드는대신 오류를 검출하고 복구하기 위한 정보를 저장한다.
오류를 검출하고 복구하기 위한 정보를 배리티 비트라고 한다.
패리티를 저장한 장치를 이용해 다른 장치들의 오류를 검출하고 오류가 있다면 복구한다.
원래 패리티 비트는 오류 검출만 가능하지만 RAID 4에선 복구까지 가능하다.
단점 : 패리티 디스크의 병목현상
각 RAID하는 하드디스크에 데이터를 쓸때마다 패리티코드를 또 저장해줘야하기 때문에 몰려있으면 병목현상이 생길 수 밖에없다.
3개에 작성중이면 이 3개의 정보를 패리티코드 하드디스크에 작성해줘야하는데서 발생한다.
7.2.2.4 RAID 5
패리티 비트 병목현상을 해결하기 위해 만들었다.
패리티 정보를 분산하여 저장하느 방식이다.
아무래도 병목을 줄일수 있다.
7.2.2.5 RAID 6
두 종류의 패리티 비트를 저장한다.
5보다는 안전 쓰기는 5보다 느리다.
각 RAID레벨마다 장단점이 있다.
어떤 상황에서 무엇을 최우선을 원하는지에 따라 최적의 RAID레벨은 달라질 수 있다.
각 RAID레벨의 대략적인 구성과 특징을 아는 것이 중요하다.
물론 RAID만 성능을 올리는 방법은 아니다. 가장 대표적인 방식 중 하나일 뿐이다.
8. 입출력장치
8.1 장치컨트롤러와 장치 드라이버
입출력장치들은 어떻게 컴퓨터 내부와 데이터를 주고받는 것인가?
여기서 입출력장치는 보조기억 장치도 포함한다.
입출력 장치는 앞서 학습한 CPU, 메모리보다 다루기가 더 까다롭다.
첫째, 입출력장치의 종류가 너무나도 많다.
장치가 다양하면 장치맘다 속도 데이터 전송방식 등도 다양하다.
회사마다도 다르다.
그래서 다양한 입출력장치와 정보를 주고받는 방식을 규격화하기 어렵다.
둘째, 일반적으로 CPU와 메모리 데이터 전송률은 높지만 입출력 장치의 데이터 전송률은 낮다.
전송률이란 데이터를 얼마나빨리 교환할 수 있는지를 나타내는 지표이다.
8.1.1 장치컨트롤러
이러한 이유로 등장한것이 장치 컨트로러이다.
입출력장치는 장치 컨트롤러를 통해 컴퓨터와 연결된다.
CPU와 입출력 장치간의 통신중개 - 일종의 번역가 역할을 한다.
오류검출 - 장치컨트롤러에 연결된 장치가 문제있는지 확인
데이터 버퍼링
버퍼링 : 전송률이 높은 장치과 낮은 장치 사이에 주고받는 데이터를 버퍼라는 임시 저장 공간에 저장하여 전송률을 비슷하게 맞추는 방법
8.1.2 장치컨트롤러의 구조
레지스터에 대해 이해하면 어느정도 동작과정을 이해할 수 있다.
장치컨트롤러는 버스에 연결된다.
주고받는 정보는 3가지가 있다.
데이터 레지스터
상태 레지스터
제어 레지스터
각 레지스터에 담기게된다.
상태 제어 하나로 통일되기도 한다.
1.데이터 레지스터
CPU와 입출력장치 사이에 주고받을 데이터가 담기는 레지스터이다.
버퍼역할을 하고 RAM을 사용하기도한다.
2.상태 레지스터
상태정보를 저장한다.
입출력장치가 입출력할 준비가 되어있는지
입출력 작업이 완료되엇는지
입출력 장치에 오류는 없는지 등의 상태정보를 담는다.
3.제어레지스터
입출력장치가 수행할 내용데 대한 제어정보를 담긴다.
8.1.3 장치드라이버
장치컨트롤러의 동작을 감지하고 제어하는 프로그램이다.
장치 컨트롤러가 입출력장치를 연결하기 위한 하드웨어적 통로라면
장치 드라이버는 입출력장치를 연결하기 위한 소프트웨어적인 통로이다.
장치 드라이버가 설치되어 있지 않다면 입출력장치를 사용할 수 없다.
이게 있어야 장치컨트롤러를 인지하고 연결하는 것이다.
장치드라이버가 이 것을 어떻게 동작시키는지 CPU가 알게 해준다.
만약 인식이 안된다면?
장치드라이버의 여부부터 확인해야한다.
컴퓨터가 연결된 장치 드라이버를 인식하고 실행할 수 있다면
컴퓨터 내부와 정보를 주고받을 수 있다.
반대로 컴퓨터가 장치드라이버를 인식하거나 실행할 수 없다면
그 장치는 컴퓨터 내부와 정보를 주고받을 수 없다.
여기서 '컴퓨터'라는 것은 운영체제가 인식하는 것이다.
다음강의에서부터 제대로 나온다.
8.2 다양한입출력방법
크게 세가지 방법이있다.
프로그램 입출력, 인터럽트 기반 입출력, DMA 입출력
8.2.1 프로그램 입출력
프로그램속 명령어로서 입출력장치를 제어하는 방법이다.
입출력 명령어로써 장치 컨트롤러와 상호작용한다.
메모리에 저장된 정보를 하드디스크에 백업하는 과정을 생각해보자.
= 하드디스크에 새로운 정보 쓰기
1.CPU는 하드디스크 컨트롤러의 제어 레지스터에 쓰기 명령을 내보낸다.
2.하드디스크 컨트롤러는 하드디스크 상태확인 -> 상태 레지스터에 준비완료표시
3-1.CPU는 상태 레지스터를 주기적으로 읽어보며 하드디스크의 준비여부를 확인한다.
3-2.하드디스크가 준비되었다면 백업할 메모리의 정보를 데이터 레지스터에 쓰기
이과정을 반복해서 저장하게 된다.
이런식으로 CPU가 장치컨트롤러의 레지스터 값을 읽고 씀으로써 이루어진다.
그런데 의문점으로 다양한 입출력장치가 다양해서 규격화하기가 어려웠다.
하나하나 알수없는데 어떻게 장치 컨트롤러의 레지스터, 주소를 다 알 수 있을까?
CPU가 아는 방법은?
여기에는 크게 두가지 방식이 있다.
메모리 맵 입출력 & 고립형 입출력
8.2.1.1 메모리 맵 입출력
메모리에 접근하기 위한 주소공간과
입출력장치에 접근하기 위한 주소 공간을 하나의 주소공간으로 간주하는 방법
1024개의 주소를 표현할 수 잇다고 가정해보면 전부다 메모리 주소공간을 저장하는 것이 아니라
입출력장치를 위한 주소공간을 나누어 관리하는 것이다.
예시를 들어서 보면
516번지 프린터컨트로러 데이터 레지스터
517번지 프린터컨트롤러 상태레지스터
518하드디스크컨트롤러 데이터 레지스터
519번지 하드디스크 컨트롤러 상태 레지스터
-> 메모리 접근하듯이 몇번지에 데이터 써라 데이터 읽어들어라로 이해하는 것이다.
굳이 별도의 메모리 저장방식이 필요없게 된다.
8.2.1.2 고립형 입출력
메모리를 위한 주소공간과
입출력 장치를 위한 주소공간을 분리하는 방식이다.
만약 1024개의 주소를 표현할 수 있다면
1024개를 메모리로 사용하기도하고 입출력으로 사용하기도한다.
이를 어떻게 나누냐면
읽기쓰기 버스가 따로 있는데 입출력인지 메모리에 인지를 인식하고 따로 나누어져 가게 되는 것이다.
다만 입출력 전용 명령어를 사용해야한다.
8.2.2 인터럽트 기반 입출력
인터럽트 복습이 필요하다.
하드웨어 인터럽트의 개념
플래그 레지스터 속 인터럽트 비트
인터럽트 요청신호
인터럽트 서비스 루틴
끼어들어도되나요>신호를 보내서 일한다.
하드웨어 인터럽트는 '장치 컨트롤러'에 의해 발생한다.
CPU가 입출력 명령을 내리고 다하고 장치 컨트롤러가 인터럽트 요청을 보내서 처리하게 된다.
원래는 상태 레지스터를 주기적으로 읽어봐야하는데 인터럽트를 사용하면 좀 더 효율적으로 일할 수 있게 된다.
동시다발적인 인터럽트
인터럽트가 많을때를 가정해보자.
이런 입출력장치들이 모두 보낸다면 당연하게도 동시다발적 요청을 받게 된다.
간단하게 생각하면 발생순서대로 처리하면된다.
플래그 레지스터 속 인터럽트 비트를 비활성화한채 인터럽트를 처리하는경우가 있다.
그런데 정전과 같은 빨리 처리해야하는 논마커블 인터럽트의 경우는 불가능하다.
그런데 현실적으로 모든 인터럽트를 순차적으로 처리할 수 없다.
인터럽트 중에서도 더빨리 처리해야하는 우선순위가 높은 인터럽트가 있다.
인터럽트 A를 처리하는 도중에서 인터럽트B를 처리하러 갈 수도 있는 것이다.
가장 대중적인 처리방식은
'PIC'라는 하드웨어를 사용하는 것이다.(Programmable Interrupt Controller)
여러장치 컨트롤어에 연결되어
장치 컨트롤러의 하드웨어 인터럽트 우선순위를 판단한 뒤
CPU에게 지금 처리해야하는 인터럽트가 무엇인지 판단하는 하드웨어이다.
(다만 NMI우선순의까지 판단하지는 않는다.)
장치컨트롤러와 CPU사이에서 우선순위를 알려주고
하나만 사용하지 않고 여러개 사용하는 경우가 많다.
운영체제에서 인터럽트 우선순위를 직접적으로 확인 할 수도 있다.
8.2.3 DMA입출력
프로그램 입출력 인터럽트 기반 입출력의 공통점은
입출력 장치 메모리간의 데이터 이동은 CPU가 주도하고 이동하는 데이터도 반드시 CPU를 거친다는 것이다.
하드 -> CPU -> 메모리 -> CPU에서 사용 이런방식이다.
그런데 CPU는 가뜩이나 바쁘다.
하드디스크 백업과 같이 대용량 데이터를 이동한다면 CPU의 부담이 커진다.
이것을 해결하기 위한 방식이
DMA입출력이다.(Direct Memory Access)
CPU를 거치지 않고 입출력 장치가 메모리에 직접적으로 접근하는 기능이다.
DMA컨트롤러라는 하드웨어가 이 역할을 한다.
1.CPU는 DMA컨트롤러에 입출력 작업을 명령
2.DMA컨트롤러는 CPU대신 장치컨트롤러와 상호작용하면서 입출력작업을 수행한다. 이때 DMA는 메모리에 직접 접근하게 된다.
3.입출력작업이 끝나면 DMA컨트롤러는 인터럽트를 통해 CPU에작업이 끝났음을 알린다.
결론적으로 CPU는 입출력 작업의 시작과 끝만관여하여 효율적으로 작업을 수행할 수 있게 된다.
그런데 DMA가 시스템 버스를 이용하게 된다.
그런데 시스템버스는 공용자원이기 에 동시 사용이 불가능하다.
그래서 CPU가 일시적으로 시스템 버스를 이용하지 않을때 이용하거나
CPU가 일시적으로 시스템 버스를 이용하지 않도록 허락을 구하고 시스템 버스를 이용한다.
그런데 CPU가 시스템버스를 사용하는 것을 방해하기 때문에 사이클 스틸링이라고 하기도 한다.
8.2.4 입출력 버스
장치컨트롤러가 하나도 아니기때문에 직접적으로 시스템 버스에 연결되어 있다면 문제가 발생할 수 있다.
DMA를 하는 과정에서 불필요하게 두번 이용하게 된다.
공용자원이라 오래 점유하면 결코 좋지 않다.
이걸 방지하기 위해
장치컨트롤러가 시스템버스에 직접 연결되는 것이 아니라
입출력버스에 연결되어 시스템 버스의 이용빈도를 낮추게 된다.
최근에는 DMA가 더욱 발전해서 입출력 전용 프로세서 가 있기도하다.
입출력 장치만 해주는 명령자체도 실행해주는 채널 RAM CPU등을 탑재한 경우도 있다.
2023.09.08
레이드의 이름은 알고 있었지만 내용을 제대로 알게 된 것은 처음이다.
매번 그래픽 드라이버를 설치하고 문제생기면 삭제하고 햇엇는데 장치드라이버에 대해서 알게 되었다.
'개념정리 > 컴퓨터 구조 및 운영체제' 카테고리의 다른 글
| 2023.09.21 운영체제 (0) | 2023.09.28 |
|---|---|
| 2023.09.12 운영체제 (0) | 2023.09.12 |
| 2023.09.06 컴퓨터구조 (0) | 2023.09.06 |
| 2023.09.05 컴퓨터구조 (0) | 2023.09.06 |
| 2023.09.01 컴퓨터구조 (0) | 2023.09.02 |