Search

CPU가 운영체제에 제어권을 넘긴다?

결론 : CPU가 현재 실행 중인 프로그램을 멈추고, 운영체제 코드(커널 코드)를 실행하기 시작한다!

원래 CPU는 “사용자 프로그램 코드”를 실행 중

CPU는 이중 모드로 동작하며, 보통 CPU는 사용자 프로그램의 명령어를 차례차례 실행하는 상태 (EX : 계산기 프로그램을 실행 중이라면, add, mul 같은 계산 루프 실행)

제어권이 넘어가는 순간들

CPU가 “이제 OS가 처리해야겠다”라고 판단하는 순간

 시스템 콜

프로그램이 read(), write() 같은 커널 기능을 요청할 때
CPU는 특수 명령어(int 0x80 같은 인터럽트 호출)를 실행하고, 사용자 코드 대신 커널 코드(운영체제 함수)로 점프

 인터럽트

타이머 인터럽트(시계 땡 소리), 키보드 입력, 디스크 I/O 완료 신호같은 경우
CPU가 원래 하던 작업을 멈추고, OS의 “인터럽트 핸들러 함수”로 점프
Q) HW인터럽트와 SW인터럽트

 예외

잘못된 메모리 접근(segfault), 0으로 나누기의 경우
CPU가 곧장 운영체제의 예외 처리 코드로 제어를 넘김

“제어권을 넘긴다”는 것의 의미

원래 실행 중이던 프로그램 명령어 주소 대신, OS의 핸들러 코드(커널 모드 코드) 주소로 CPU의 PC(Program Counter)가 바뀌는 것
이 순간부터 CPU는 사용자 프로그램이 아니라 운영체제 코드를 실행

예시(타이머 인터럽트)

1.
스레드 A가 무한 루프 도는 중
2.
타이머가 tick하고 인터럽트 신호를 보냄
3.
CPU는 루프를 중단 & 커널의 timer_interrupt() 코드로 이동
4.
OS가 “이제 스케줄링해야지”하고 스케줄 수행 → 다른 스레드 B로 교체
5.
CPU가 다시 사용자 모드로 내려와 B 코드 실행
결론
제어권 = 지금 시점부터 CPU가 누구의 코드(사용자 프로그램 코드 / 운영체제 코드)를 실행할지 결정하는 권리 (운영체제는 이 제어권을 잡는 순간에 스케줄링, 자원 관리, 보안 등을 다 처리 가능)