운영체제 - 마우스클릭흐름

김지승·2025년 9월 24일

CS

목록 보기
20/22

1. 하드웨어 단계

사용자가 마우스를 클릭하면 → 스위치/센서가 전기적 신호로 변환.
마우스 컨트롤러(USB, Bluetooth 등)가 이 신호를 패킷(버튼 상태, 좌표 변화)로 변환.

2. 커널(장치 드라이버 & 인터럽트)

  1. 인터럽트 발생

마우스가 입력 신호를 OS에 알림 → 하드웨어 인터럽트 발생.

  1. 인터럽트 핸들러 실행

OS 커널의 마우스 드라이버가 실행 → 입력 이벤트(버튼 눌림, 좌표 변화)를 커널 공간에서 처리.

  1. 이벤트 큐 전달

OS 커널은 이 정보를 이벤트 큐(입력 서브시스템, 예: Linux evdev, Windows Input Manager)에 저장.
좌표는 누적/상대 좌표로 관리됨.

3. 윈도우 시스템 / GUI 서버

  • OS마다 GUI 이벤트를 관리하는 윈도우 시스템(중간 레이어)이 있음:

Windows: Windows Input Manager + GDI/User32
Linux: X 서버(X11) 또는 Wayland
macOS: Quartz / WindowServer

  • 이 계층이 하는 역할:

어떤 창(window)이 클릭된 좌표에 위치하는지 확인 (히트 테스트).
포커스 정책에 따라 해당 애플리케이션에 이벤트 전달.
예: 포커스를 가진 창이 아니라면, 클릭 이벤트로 포커스 이동 후 전달.

4. 사용자 공간(애플리케이션)

  • 이벤트가 최종적으로 애플리케이션 프로세스의 이벤트 루프에 전달.
  • 일반적인 구조:

OS는 앱의 메시지 큐에 MOUSE_DOWN, MOUSE_UP, MOUSE_CLICK 같은 이벤트를 삽입.
애플리케이션의 이벤트 루프(Event Loop)가 이를 poll → dispatch.
GUI 프레임워크 (예: Win32 API, Qt, GTK, Cocoa)가 해당 이벤트를 콜백/핸들러 함수에 전달.

5. 디폴트 동작 & 후속 처리

애플리케이션은 이벤트 핸들러에서 동작 정의 (버튼 눌림 처리, UI 업데이트).
필요 시 다시 OS에 렌더링 요청 (InvalidateRect, Expose Event) → OS의 GUI 서버가 디스플레이에 반영.

profile
디등

0개의 댓글