디바이스 드라이버란
디바이스 드라이버란 마우스, 키보드, 모니터, 디스크, 네트워크 인터페이스 카드 등 컴퓨터의 주변 장치를 제어하기 위한 프로그램이다. 디바이스 드라이버가 없다면 주변 장치들을 사용할 수가 없다. read()라는 작업을 디스크 관점에서 어떻게 처리할 것인가?와 같은 하드웨어에 밀접한 기능들은 모두 디바이스 드라이버로 구현된다. 디바이스 드라이버는 리눅스 커널에서 모듈로 구현하므로, 먼저 리눅스 커널 모듈에 대해서 알아야 한다. 이건 글로 정리해두었다.

디바이스 드라이버의 역할
디바이스의 종류
디바이스는 문자 디바이스 드라이버, 블록 디바이스 드라이버로 나눌 수 있다. 문자 디바이스는 시간 순으로 들어오는 데이터를 처리한다. 예를 들어 마우스, 키보드의 입력과 같이 순서대로 처리하는 것이 의미가 있는 데이터들이다. 이와 달리 블록 디바이스는 블록 단위로 random access가 가능한 데이터들을 처리한다. (문자 디바이스 드라이버는 random access가 불가능) 하드디스크가 대표적인 예이다. 이해를 돕기 위해 예시를 생각해보자. 이어폰은 블록 디바이스일까, 문자 디바이스일까? 당연히 문자 디바이스일 것이다. 왜냐하면 이어폰에서 "1시간 전에 들었던 것을 다시 듣기"는 의미없는 작업이기 때문이다.
Major and Minor numbers
디바이스는 major number (주번호)와 minor number (부번호)를 갖는다. 주번호는 디바이스를 구분하기 위한 번호이다. 예를 들어서 하드디스크를 위한 디바이스 와, 마우스를 위한 디바이스는 서로 다르다. 하지만 하드디스크를 여러개 등록한 경우에는 주번호가 같을 것이다. 서로 다른 하드디스크는 서로 다른 부번호를 부여해서 관리할 수 있다. 부번호는 디바이스 드라이버가 관리한다. cat /proc/devices 명령어로 현재 등록된 디바이스의 종류를 볼 수 있다. 명령어를 실행해보면 알겠지만, 문자 디바이스의 주번호와 블록 디바이스의 주번호는 독립적이다. 즉, 같은 주번호는 문자와 블록 디바이스에 각각 할당될 수 있다.
'CS > OS' 카테고리의 다른 글
| 메모리의 기본 단위와 저장, 주소 데이터의 저장 (0) | 2022.10.14 |
|---|---|
| 분산 적재 방식 (0) | 2022.06.01 |
| 메모리 관리 (0) | 2022.05.31 |
| Deadlock Avoidance (0) | 2022.05.27 |
| Dining Philosophers Problem - 식사하는 철학자 문제 (0) | 2022.05.27 |