컨텍스트 스위치와 처리 성능
컨텍스트 스위치는 멀티태스킹 환경에서 필수적인 기술로, CPU 자원 활용을 극대화하고 사용자 경험을 향상시킨다. 하지만 빈번한 전환은 성능 저하로 이어질 수 있으므로, 효율적인 스케줄링과 적절한 문맥 전환 관리가 중요하다.
그림으로 배우는 리눅스 구조 정리한 내용
컨텍스트 스위치
컨텍스트 스위치(Context Switch)는 CPU가 실행 중인 프로세스를 다른 프로세스로 전환할 때 발생하는 작업이다. 따라서 현재 실행 중인 프로세스를 중단하고, 다른 프로세스를 실행하기 위해서는 2가지 동작이 필요하다.
•
현재 프로세스의 상태를 저장(State Save)한다.
•
다른 프로세스의 상태를 복원(State Restore)한다.
그렇다면 프로세스가 복원에 필요한/실행에 필요한 상태 정보는 무엇이 있는가? 이를 프로세스의 문맥(Context)라고 한다.
항목 | 설명 |
프로그램 카운터 | 다음 실행할 명령어의 주소 저장 |
CPU 레지스터 값 | CPU 레지스터의 상태(데이터, 플래그, 스택 포인터 등) |
프로세스 상태 | 실행 중, 준비 상태, 대기 상태 등 현재 프로세스의 상태 |
메모리 관리 정보 | 페이지 테이블, 세그먼트 테이블 등 메모리 주소 매핑 정보 |
스케줄링 정보 | 우선순위, CPU 점유 시간 등 프로세스 스케줄링에 필요한 정보 |
입출력 상태 정보 | 입출력 장치 사용 상태 및 대기 중인 요청 정보 |
프로세스 식별 정보 | 프로세스 ID(PID)와 부모 프로세스 ID |
스택 및 힙 정보 | 스택(함수 호출 정보)과 힙(동적 메모리) 위치 및 크기 |
과정
1.
현재 프로세스에 인터럽트(중지)가 발생한다.
2.
현재 프로세스의 Context를 PCB에 저장: State Save
•
프로세스(P0)의 Context를 PCB0에 저장한다.
•
P0 프로세스 상태: Running → Ready / Sleeping
3.
스케줄러 작동:
•
스케줄러가 다음 실행할 프로세스(P1)를 선택한다.
•
우선순위, 대기시간, CPU 점유 시간 등을 고려
4.
새로운 프로세스의 Context 복원: State Restore
•
선택된 프로세스(P1)의 PCB1에서 Context 정보를 로드한다.
•
P1 프로세스 상태: Ready → Running
5.
CPU 재개
•
새로운 프로세스가 실행
특징
•
멀티태스킹 환경에서 CPU를 공유하기 위해 발생
•
현재 프로세스의 레지스터와 메모리 상태를 저장하고 복구
•
각 프로세스의 상태는 PCB에 저장
•
일반적으로 마이크로 초 수준으로 굉장히 빠르게 전환
•
문맥 전환 과정에서 실행이 중단되므로 CPU가 실제 작업을 하지 않는 시간이 발생
•
타임 슬라이스가 짧거나 멀티프로세스 환경일수록 더 자주 발생
항목 | 장점 | 단점 |
멀티태스킹 지원 | 여러 프로세스를 순환하며 동시 작업처럼 보이게 함 | CPU가 실제 작업보다 문맥 저장/복구에 시간을 소모 |
CPU 자원 활용 | 프로세스 대기 시간 동안 다른 작업 처리로 자원 효율 향상 | 자주 발생 시 성능 저하 및 시스템 응답 시간 증가 |
우선순위 처리 | 중요한 작업을 즉시 실행 가능 | 캐시 무효화로 인해 데이터 재로드 비용 발생 |
응답성 개선 | 대화형 시스템에서 빠른 사용자 응답 제공 | 커널의 구현 복잡성이 증가 |
처리 성능
처리 성능 지표
처리 성능은 시스템 운영에서 중요한 요소이며 다음 두 가지 지표로 측정된다.
•
턴어라운드 타임(TAT): 요청 시작부터 종료까지의 시간
•
스루풋(Throughput): 단위 시간당 처리 완료된 작업 개수
성능 측정 실습
최대 8개 프로세스를 실행하며, 각 프로세스의 평균 처리 시간을 측정한다.
•
실습코드: cpuperf.sh
./cpuperf.sh 8
Bash
복사
# 프로세스개수 TAT Throughput
1 1.916 0.519
2 3.766 0.531
3 5.473 0.532
4 7.172 0.552
5 9.337 0.521
6 10.730 0.546
7 12.276 0.566
8 14.741 0.531
Bash
복사
평균 턴어라운드 타임[초]
스루풋[프로세스/초]
•
턴아라운드타임(TAT):
◦
프로세스 개수가 늘어나면 평균 처리 시간이 증가한다.
◦
논리 CPU 개수 이상으로 프로세스가 많아지면 지연이 가중된다.
•
스루풋(Throughput):
◦
프로세스 개수가 논리 CPU 개수와 같아질 때까지 증가한다.
◦
논리 CPU 개수를 초과하면 스루풋 개선 한계 도달한다.
병렬 처리와 CPU 활용
문제 정의
•
논리 CPU 개수보다 많은 프로세스가 실행되면 컨텍스트 스위치 증가로 인해 성능 저하 발생.
•
병렬 처리 환경에서 논리 CPU 자원을 최대한 활용해야 함.
현대 CPU 설계 변화
•
과거: 싱글 스레드 성능을 중심으로 CPU 성능 개선.
•
현재: 멀티코어와 병렬 처리 기반 성능 향상이 주류.
핵심 인사이트
•
CPU 코어 수를 고려한 효율적 병렬 처리 설계가 중요.
•
병렬 실행 환경에서 적정 프로세스 수를 유지해야 스루풋과 지연 간의 균형을 확보 가능.
실습 코드
cpuperf.sh
plot-perf.py
마무리
Q&A
Related Posts
Search