콘텍스트 스위칭을 이해하려면 인터럽트를 알아야 한다
인터럽트: 입출력 관련 이벤트가 발생하거나 예외 상황이 발생할 때 이에 대응할 수 있게 CPU에 처리를 요청하는 것
- 인터럽트가 발생하는 경우
- 입출력이 발생할 때
- CPU 사용 시간이 만료되었을 때
- 자식 프로세스를 생성할 때
CPU는 하나의 프로세스만 처리할 수 있으므로 멀티 프로세스를 처리하려면 CPU 스케줄러에 의해 인터럽트가 발생하며 콘텍스트 스위칭이 이루어진다
콘텍스트: CPU가 처리하는 프로세스의 정보를 의미
콘텍스트 스위칭: 멀티 프로세스 환경에서 CPU가 처리 중인 프로세스의 정보를 바꾸는 것
처리 중인 프로세스 P1, 다음에 처리해야 하는 프로세스를 P2라고 가정
- CPU가 P1을 처리하던 중 운영체제에 의해 인터럽트가 발생
- P1은 유휴 상태(idle)로 변하고 스케줄러는 레지스터에 있는 처리 중인 작업 정보를 P1의 PCB에 저장
- P2의 PCB에 있는 정보를 가져와 레지스터에 로드하고 CPU는 P2를 처리하기 시작
- 그런데 P1의 정보를 P1의 PCB에 저장하고, P2의 PCB에 저장된 정보를 레지스터에 로드하는 동안 CPU는 아무 일도 못하게 된다
- 이처럼 어떤 처리를 하는 데 간접적인 처리 시간과 메모리가 소요될 경우에 오버헤드가 발생한다고 한다
- 멀티 스레드를 처리할 때도 콘텍스트 스위칭이 이뤄진다
- 그러나 멀티 프로세스의 콘텍스트 스위칭보다 시간과 메모리 자원을 적게 사용한다
- 멀티스레드는 스택을 제외한 힙, 데이터, 코드 영역을 공유하므로 레지스터에 저장하고 로드해야하는 데이터가 상대적으로 적기 때문
CPU에서 처리 중인 프로세스가 중간에 변경되어도 이전에 실행하던 코드를 이어서 실행할 수 있는 이유??
- PCB에 프로그램 카운터와 스택 포인터 값이 저장되어 있기 때문이다
- 프로그램 카운터: 프로세스가 이어서 처리해야 하는 명령어의 주소 값
- 스택 포인터: 스택 영역에서 데이터가 채워진 가장 높은 주소 값
- 이어서 실행할 명령어의 주소 값이 무엇인지, 데이터가 스택에 어디까지 채워져 있는지 알고 있으므로
- 콘텍스트 스위칭이 원활히 이뤄질 수 있다
'CS' 카테고리의 다른 글
9. 멀티 프로세스와 멀티 스레드 (0) | 2024.03.12 |
---|---|
8. 운영체제 - 프로세스 상태도 (0) | 2024.03.05 |
7. 운영체제 - 프로세스의 생성 (0) | 2024.03.05 |
6. 운영체제 - PCB(Process Control block) (0) | 2024.03.05 |
5. 운영체제 - 프로세스와 스레드 (0) | 2024.03.05 |