운영체제에서 입출력을 관리하는 기능은 커널 I/O Subsystem과 디바이스 드라이버로 나눌 수 있다. 전자는 입출력 관리의 상위 기능을, 후자는 전자의 지시를 받아 직접 하드웨어를 제어하며 입출력을 수행한다.
디바이스 드라이버
- 초기화 인터페이스 : 드라이버는 모듈 형식으로 구성되는데, 모듈을 생성할 때나 갱신할 때 Init 함수가 호출된다.
- 파일 시스템 인터페이스 : Open, Read, Write, Release ..
- 하드웨어 인터페이스 : Inturrpt, Recieve ..
장치와 커널 간 스위치 테이블을 통해 데이터를 교환하는데 Character Driver의 경우 chrdevs[] 테이블을, Block Driver의 경우 blkdevs[] 테이블을 이용한다.
초기화 시 register함수를 통해 테이블로 이동하는데, 이 때 인자로는 (major_number, name, file_operation)을 입력받는다. 이렇게 입력받은 인자들을 chrdevs[major].name = name, chrdevs[major].fops = file_operation의 형식으로 테이블에 전달된다.
RAID (Redundant Array of Inexpensive Disk)
RAID란, 여러 개의 저효율 디스크를 모아 용령이 크고 신뢰성이 높은 디스크 하나와 같은 효과를 내는 디스크 구성 방법을 말한다. 구조에 따라 RAID 0 ~ 6, RAID 01, RAID 10으로 구분할 수 있다.
RAID 0 (non-redundant)
디스크는 Strip이라고 하는 정보 단위를 통해 데이터를 저장하고 있다. RAID 0은 여러 디스크로 분산시켜 담아 놓은 구조를 말하는데, 용량 측면에서는 사용되는 디스크 갯수만큼 효율을 가져갈 수 있고 신뢰성 또한 미약한 정도이지만 향상시킬 수 있다.
데이터를 Strip 차례대로 담아놓는 것이 아닌 동등 분배식으로 축적하여 한 디스크에서 문제가 발생해도 나머지 디스크 데이터를 통해 손상된 데이터를 유추하고 복구하는 등의 관리가 가능하다.
RAID 1 (mirroed)
기본적인 구조는 RAID 0과 같은 형태를 띄고 있다. 그러나 이를 복제(Mirrored)하여 똑같은 세트를 두 개 준비해 저장하여 신뢰도를 높이도록 구성되어 있다. 백업을 해놓는다는 개념이기 때문에, 용량 측면에서의 이점이 없고 가격이 비싸다는 특징을 갖는다.
RAID 2 (bit-interleaved parity i)
RAID 0 구조에서 추가적인 Hamming code 디스크 영역을 확보하는 구조이다. 이를 통해 오류를 검출하고, 교정함으로써 신뢰성을 향상시킬 수 있다. Bit-Interleaved Parity 방식을 이용한다.
RAID 3 (bit-interleaved parity ii)
RAID 2 구조에서 Hamming code 디스크 영역을 축소한 버젼이다.
RAID 4 (block-level parity)
각 디스크에서 같은 인덱스에 위치하는 블럭들의 Parity를 계산하고, Hamming code 디스크에 저장해놓는 구조이다. 각 디스크마다 별도의 입출력을 할 수 있게 되므로, 처리 속도에서 강점을 갖는다.
RAID 5 (block-level distribute parity)
RAID 4 구조에서 Hamming code 디스크를 별도로 두지 않고 Parity 블록들을 분산시켜 디스크에 뿌려 놓는 구조이다.
RAID 6 (dual redundancy)
RAID 5구조에서 같은 블록으 패리티 연산을 한 번 더 진행하는 방식이다. 데이터의 안정성을 확보할 수 있다.