← 질문 목록
#213깊이 0

컨텍스트 스위칭은 왜 비용이 발생하는가?

운영체제기초동시성성능

답변 연습

내 답변 적어보기접힘
이 브라우저에 자동 저장 · 0자
모범답안 확인하기내 답변 뒤에 열어보세요

스케줄러가 한 스레드를 멈추고 다른 스레드를 이어 실행하려면 CPU 상태와 실행 환경을 바꿔야 한다. 직접 드는 커널 작업과 새 작업의 데이터가 캐시에 자리 잡는 간접 비용이 함께 생긴다.

  1. 실행 스레드→커널

    자원을 기다리며 양보하거나 선점된다

  2. 커널→실행 상태

    레지스터·스택 포인터·스케줄링 상태를 저장한다

  3. 스케줄러→다음 스레드

    실행할 대상을 고른다

  4. 다음 스레드→CPU

    상태와 필요하면 주소 공간 문맥을 복원한다

전환 동안 CPU가 아무 일도 안 하는 것은 아니다. 스케줄러와 상태 저장 코드를 실행하지만 사용자 작업은 진행하지 못한다. 잠금과 실행 대기열을 다루는 시간도 직접 비용에 들어간다.

다음 스레드가 다른 주소 공간을 쓰면 페이지 테이블 문맥도 바뀐다. TLB 항목을 주소 공간 태그로 구분하는 CPU는 유효한 변환을 일부 유지할 수 있다. 프로세스 전환마다 TLB를 통째로 비운다고 단정하지 않는다.

CPU 캐시와 branch predictor도 전환 명령 하나로 모두 지워지지는 않는다. 새 작업의 코드와 데이터가 들어오며 이전 작업의 working set을 밀어내면 나중에 돌아왔을 때 miss가 늘어난다.

이 간접 비용은 두 작업의 working set과 코어 이동에 따라 달라진다.

스레드가 I/O나 잠금을 기다리며 CPU를 놓으면 voluntary switch다. 시간 조각을 다 쓰거나 더 높은 우선순위 작업에 밀리면 involuntary switch가 될 수 있다. 전환 횟수만으로 나쁨을 판단하지 않는다.

응답 지연이 문제라면 두 종류의 전환 수와 run queue 대기, CPU 사용률을 함께 본다. 실행 가능한 스레드가 코어보다 지나치게 많거나 짧은 일을 여러 스레드가 나눌 때 전환 비용이 두드러진다.

추천 꼬리질문

0/300

적은 내용은 AI 학습에 쓰일 수 있습니다. 이름이나 연락처는 넣지 말아 주세요.

관련 질문

컨텍스트 스위칭은 왜 비용이 발생하는가?