Kernel Modules for Input/Output Management
입출력 관리를 위해 OS 내부 구현 기능에 대해 알아봅시다.
1. 입출력 장치의 다양한 유형들
1-1. Human readable I/O Devices
user와 소통하기 위해 사용됨.
Printers
Video display terminals : Display, keyboard, mouse
1-2. Machine readable
전기 장치와 함께 소통하기 위해 사용됨.
Disk and tape drives
Sensors
Controllders
Actuators
1-3. Communication
remote 장치들과 소통하기 위해 사용됨.
Digital line drivers
Modems
BPS: Bit Per Second를 말하며,
일반적으로 사람과 소통할때는 저속, 장치끼리 소통할때는 고속이어야 한다.
문자형 장치는 byte단위로 컴퓨터와 데이터를 주고받는 장치를 말하며,
블록형 장치는 블록 단위로 컴퓨터와 데이터를 주고받는 장치를 말한다.
2. I/O Devices (입출력 장치 구성)
입출력 장치는 기계적 부분과 전자적 부분(컨트롤러)로 구성됩니다.
컨트롤러
- Control Register, Status Register, internal buffer로 구성됩니다.
- 장치 드라이버는 제어 레지스터의 특정 비트를 설정('1')하여 장치에 명령을 전송합니다.
- 장치 드라이버는 컨트롤러 상태 레지스터의 특정 비트를 읽어 장치의 상태(I/O 완료, 오류 등)를 확인합니다.
- 폴링 또는 인터럽트에 의해 제어됩니다.
* 상태 레지스터는 장치마다 장치 상태 기록을 저장합니다. 예를 들어, 입출력 종료, 입출력 시작, 입출력 오류 등

3. I/O Management(입출력 관리)
입출력 시스템은 다음으로 구성됩니다.
1. I/O Management(= kernel I/O subsystem)
2. Device-driver interface
3. Device-drivers for specific HW devices
Device-driver interface(장치 드라이버 인터페이스) : 운영체제가 연결될 수 있는 모든 입출력 장치에 대해 알 필요가 없도록 하는 표준 인터페이스

다음 그림과 같이 입출력 시스템은 software와 hardware부분으로 구성되어있습니다.
software부분에는 kernel이 상단에 존재하며, kernel 중에서 kernel 입출력 담당하는 kernel I/O subsystem이 아래에 존재합니다.
그 아래에는 Device-drivers for specific HW devices 이 존재하게 되는데, kenel I/O subsytem과 이들 사이에는 device-driver interface가 존재하게 됩니다.
커널은 os개발자가 구현하지만, Device-drivers for specific HW devices은 장치를 만든 사람이 구현하기 때문에, kernel의 일부로서 동작해야 해서 위랑 붙여줘야 합니다. 그래서 필요할 때 동적으로 붙이고 떼어내기가 가능한 module이 필요하며, File System의 특징과 비슷하게 세상의 모든 장치의 device driver를 컴퓨터 안에 모두 다 집어 넣을 필요가 없습니다. 그래서 현재 연결되어 쓰이는 장치에 대한 device driver만 메모리에 넣고, 나머지 장치들은 디스크에 가지고 있다가, 만약에 새로운 장치 연결되어있는데, 새로운 장치를 위한 device driver가 disk에 있다고 하면, 그때 disk에서 plug-in시킨 다음 커널과 연결을 하면, 장치 제어가 가능합니다.
hardware부분에는 특정 하드웨어 장치들에 대한 device controller(=adapter)가 존재하게 되며 이것들이 특정 하드웨어 장치들을 제어하는 역할을 합니다.

다음 그림은 입출력 장치를 제어하는 장치 관련 기능 집합입니다.
process들이 system call을 부르면, system call interface에서 관리하게 되고, I/O Management(kernel I/O Subsystem)에서 커널 입출력을 담당하게 됩니다. 이때, 주의할점은 system call interface와 I/O Management는 모두 kernel입니다. 그 아래에는 DDI(Device Driver Interface) : file system이 존재하게 되는데, lseek파일 구현과 같은 일을 합니다. 그 아래에는 device driver가 존재하게 되며, device가 아래에 존재하게 됩니다.
4. Kernel I/O Management 역할
kernel I/O Management는 장치에 대해 공통적인 제어기능을 담당합니다.
4-1. Device reservation(장치 예약): 장치에 대한 배타적 엑세스를 제공합니다.
- 할당 및 할당 해제를 위한 시스템 호출
- 교착 상태에 주의
4-2. Device scheduling(장치 스케쥴링)
- 일부 I/O 요청은 장치별 대기열을 통해 정렬됩니다.
- 일부 운영 체제는 공정성을 시도합니다.
- 디바이스 스케쥴링이 필요한 이유는 선입선출 시, 성능저하 가능성이 존재하기 때문입니다.
- cf) Process scheduling(=job scheduling=CPU scheduling), Disk Scheduling
4-3. Error Handling(오류 처리)
- 운영 체제는 디스크 읽기, 장치 사용 불가, 일시적인 쓰기 실패에서 복구 할 수 있습니다.
- 대부분의 운영 체제는 I/O 요청이 실패하면 오류번호 또는 코드를 반환합니다.
- 시스템 오류 로그는 문제 보고서를 보관합니다.
4-4. Buffering(버퍼링) : 장치 간 전송 중 메모리에 데이터를 저장합니다.
- 장치 속도 불일치에 대처하기 위해
- 장치 전송 크기 불일치에 대처하기 위해
- "copy semeantics"을 유지하기 위해
4-5. Caching(캐싱) : 데이터 사본을 보관하는 빠른 메모리
- 항상 사본만
- 성능의 핵심
4-6. Spooling(스풀링) : 하나의 장치(디스크 속 출력 파일)에 대한 출력을 보관합니다.
- 장치가 한 번에 하나의 요청만 처리할 수 있는 경우
- 즉, 인쇄
'운영체제및실습' 카테고리의 다른 글
| [운영체제및실습] 10주차 3회차 : I/O제어 : 인터럽트 I/O, DMA (0) | 2025.05.12 |
|---|---|
| [운영체제및실습] 10주차 2회차: I/O제어 : 폴링 (0) | 2025.05.10 |
| [운영체제및실습]10주차 1회차: 인터럽트 처리 (0) | 2025.05.10 |
| [운영체제및실습] 9주차 2회차: 파일 시스템 사례 (0) | 2025.05.06 |
| [운영체제및실습] 9주차 1회차: 데이터 블록 관리 (0) | 2025.04.29 |