공부/운영체제

[운영체제/OS] 문맥 교환 (Context Switching)

highlaw00 2024. 4. 3. 00:54

문맥이란?

- 프로세스가 수행될 때 특정 시점의 프로세스 상태를 의미. 스냅샷의 개념을 생각하자.

- 문맥에는 여러 정보가 포함 될 수 있는데, 기본적으로 레지스터들의 상태가 대표적이다.

- 그렇다면 프로세스의 각종 세그먼트(데이터, 코드, 힙, 스택)들도 문맥에 포함될까?

- 일반적으로는 그렇지 않다. 세그먼트는 메모리 상에 존재하는 내용이기 때문에 멀티 프로세스 환경에서 수행 중인 프로세스가 변경되어도 세그먼트의 내용은 문맥에 포함되지 않는다.

- 하지만 만약 메모리가 굉장히 적은 환경의 PC라면 혹은 수행중인 프로세스가 너무 많다면? 그 경우 메모리의 내용 또한 문맥이 된다. 메모리가 부족한 경우 2차 스토리지에 그 내용을 Swap-out하여 저장하고 추후 해당 프로세스가 실행될 때 Swap-in 한다.

 

문맥 교환의 필요성

- 멀티 프로세스 환경에서는 CPU가 하나의 프로세스를 수행하다 인터럽트에 의해 다음 프로세스를 수행하고 ... 이 과정을 계속해서 발생한다.

- 프로세스는 수행되며 레지스터의 사용이 필수적이다.

- 그러다 보니 어떤 프로세스가 수행되다 다른 프로세스가 수행되면 서로의 레지스터 상태가 달라 오작동을 하게 된다.

- 이것을 방지하기 위해 문맥 교환이 필요하다.

 

문맥 교환의 과정

- 프로세스를 수행하다가 인터럽트가 발생하여 다른 프로세스로 넘어가야 한다. 

- 다른 프로세스로 넘어가기 전에 원래 수행하던 프로세스의 상태를 메모리에 저장한다.

- 저장이 완료되면 다른 프로세스의 이전 상태를 불러와 CPU의 상태를 업데이트하고 다시 진행한다.

 

문맥 교환의 과정(예시)

출처: 서울대학교 홍성수 교수 Kmooc - 운영체제의 기초 강좌 중

 

아래 시나리오는 하나의 예시로 실제 구현은 OS마다 다를 수 있다!

 

용어 정리

- OSPCBCur: OS의 전역 변수로 현재 수행중인 프로세스를 포인팅 하는 변수

- OS-PCB: 프로세스의 PCB

- HIMEM, LOMEM: 각각 메모리 주소의 상대적인 위치를 의미. 인텔 프로세서의 예시여서 높은 메모리에서 낮은 메모리로 스택이 쌓인다.

- CPU's SP: CPU의 스택 포인터

 

시나리오 (프로세스의 문맥 저장 및 ready 상태로 빠지는 경우)

1. 인터럽트가 발생하여 문맥 저장 ISR이 수행된다. 이 때 프로세스 스택에는 돌아올 명령어 주소와 현재 프로세스의 모드 상태(PSW)가 저장된다.

2. 문맥 저장 ISR이 끝나면 AX, CX, 등의 레지스터 값이 저장된다.

3. 프로세스의 스택 포인터 값은 푸쉬 연산으로 인해 계속해서 변경되기 때문에 PCB에 저장된다.

 

시나리오 (ready 프로세스가 로드 되는 경우)

1. 프로세스의 마지막 스택 포인터 값을 알기 위해 PCB에서 스택 포인터의 값을 꺼내온다.

2. CPU의 스택 포인터에 그 값을 넣고 하나씩 pop한다.

3. 모든 값을 pop하여 다음 수행할 명령어를 알아내고 수행을 재개한다.

 

시나리오 (프로세스가 처음 실행되는 경우)

- 만약 프로세스가 처음 실행되는 경우라면, 위처럼 스택 구조가 잡혀있지 않을 것이다.

- 따라서 프로세스가 처음 실행될 때 OS가 프로세스의 상태(스택, PCB 등)를 마치 이전에 문맥이 한 번 저장된 것 처럼 바꾸어준다. (사진)