운영체제 기본/x86-64 Linux의 i8042 키보드 입력
외관
(운영체제 기본/Linux의 키보드 입력에서 넘어옴)
운영체제 기본 목차 · 관련 총론: 인터럽트
Linux v6.12, x86-64, i8042에 연결된 PS/2 키보드를 기준으로 키 입력이 사용자 프로세스에 도착하는 경로를 추적한다. IRQ 진입은 일반적인 IDT 경로를 다루며, USB 키보드와 FRED 진입 경로는 구분한다.
읽는 순서
- IRQ 진입과 디스패치: CPU가 인터럽트를 받아 등록된 장치 처리기를 실행하는 과정.
- i8042와 입력 이벤트: 수신 바이트가 스캔 코드와 Linux 키 이벤트로 바뀌는 과정.
- evdev와 프로세스 깨우기: 이벤트를 버퍼에 넣고 대기 중인 read를 깨우는 과정.
- 콘솔과 터미널 입력: 가상 콘솔에서 키 이벤트가 문자와 터미널 입력으로 바뀌는 경로.
evdev와 가상 콘솔은 input 계층 이후의 서로 다른 전달 경로다. evdev에서 읽은 이벤트가 차례로 콘솔을 거치는 구조는 아니다.
i8042 → IRQ 처리 → serio/PS2 → atkbd → input 계층
|
+→ evdev → 입력 이벤트를 읽는 프로세스
|
+→ 콘솔 키보드 처리 → tty → 문자를 읽는 프로세스
키보드가 보낸 스캔 코드, Linux 키 코드, 문자 데이터는 서로 다르다. 또한 입력 도착, 대기 중인 작업의 깨우기, 스케줄러의 선택, 사용자 버퍼로의 복사는 각각 다른 단계다.