본문 바로가기
독서기록장

2. 운영체제 3장 프로세스 기초, 컨텍스트 스위칭

by pon9 2025. 1. 29.

프로세스 메모리 배치

운영체제에서 프로세스가 실행될 때 메모리는 여러 영역으로 나뉘어 있다.

코드와 전역 변수는 고정된 크기의 영역에 저장되고, 실행 중 생성되는 데이터는 동적으로 할당되는 힙과 스택에 저장된다.

스택은 함수 호출과 관련된 정보가 저장되는 곳으로, 호출될 때 데이터를 push하고 끝나면 pop하면서 제거된다.

이 때의 데이터를 "activation record"라고 하며, 함수 매개변수, 지역변수, 복귀 주소가 포함된다.

마찬가지로 메모리가 동적 할당됨에 따라 힙이 커지고, 메모리가 시스템에 반환되면 축소된다.

 

정말 유명한 사이트 stack overflow이름의 유래가 이곳이다. 스택 메모리가 과도하게 커지는 것을 스택 오버플로우라고 하는데, 스택 오버플로우의 대표 예시로 순환 참조를 들 수 있다.

반대로 힙이 커지면 힙 오버플로우라고 한다.

따라서 운영체제가 이를 서로 겹치지 않도록 컨트롤 해주어야 한다.

 

 

프로세스 상태와 스케줄링

PCB란, 쉽게말해서 프로세스의 데이터를 뜻한다. 정식 명칭은 Process control block이다.

운영체제가 프로세스를 관리하기 위해 저장하는 정보로, 커널에 저장된다.

프로세스 ID, 스케줄링 우선순위, 상태, 메모리 주소 등 프로세스의 전체 정보를 담는다.

 

프로세스가 실행되면 ready queue에 있다가, 스케줄러가 cpu를 할당하면 실행 상태가 된다.

하지만 실행 중에 I/O작업이 필요하면 CPU를 반납하고 waiting queue로 이동하게 된다.

여기서 I/O작업이 완료되면 다시 ready queue로 돌아가서 CPU를 할당받을 기회를 기다리게 된다.

보통 이런 queue들은 FIFO방식으로 동작하지만, OS의 스케줄링 정책에 따라 다르게 처리될 수 있다.

 

ready queue와 waiting queue를 오가며 프로세스가 실행되는 과정을 이해하는 데 있어 dispatch와 resume개념을 아는 것이 중요하다.

디스패치는 "새로운" 프로세스가 처음 실행되거나, 준비 상태에서 실행 상태로 전환될 때 CPU를 배정하는 과정이다.

 

반면에, resume은 한번 실행된 적이 있는 프로세스가 다시 cpu를 할당받아 이어서 실행하는 것을 의미한다.

예를 들어서 어떤 프로세스가 I/O요청 때문에 waiting queue로 이동했다가, I/O작업이 끝나고 다시 ready queue로 돌아와 CPU를 할당받는 경우가 있다.

이 때 resume이라는 표현을 사용하는데, 이는 이전에 중단된 프로세스가 다시 실행을 계속하는 과정을 의미한다.

그래서 OS가 기존의 context를 복원하여 실행을 계속하게 된다.

 

이 과정에서 스케줄러는 ready queue에서 프로세스를 선택하고, 컨텍스트 스위칭을 통해 현재 CPU상태를 저장하고 새로운 프로세스를 불러오는 역할을 한다.

 

이렇게 프로세스는 CPU를 직접 사용하는 시간과, I/O를 기다리는 시간이 반복되면서 진행된다. 운영체제는 이런 과정을 효율적으로 관리하며, 여러 프로그램이 원활하게 실행될 수 있도록 하는 역할을 한다.

 

 

Context Switch

컨텍스트 스위칭 과정은 프로세스가 실행되다가 인터럽트나 시스템 호출이 발생하면, 현재 실행 중인 프로세스의 상태를 저장하고 다른 프로세스로 전환하는 과정이다.

 

프로세스 A가 실행중이었다가 인터럽트가 발생하면 OS는 즉시 개입해서 현재 진행중이던 프로세스A의 상태를 저장해야 한다.

이 때 저장되는 정보가 바로 컨텍스트로, 레지스터 값과 프로그램 카운터 등이 포함된다.

이후 CPU는 프로세스A를 중단하고 준비된 다른 프로세스B의 컨텍스트를 PCB-B에서 복원해 실행할 준비를 한다.

컨텍스트는 PCB의 일부로, CPU실행 관련 정보를 담고 컨텍스트 스위칭 시 복윈해 프로세스를 이어서 실행하는 역할을 한다.

 

운영체제가 PCB-B에서 컨텍스트를 복윈하고 CPU에 로드하면 이제 프로세스 B가 running상태가 된다.

이 과정에서 CPU는 프로세스A의 데이터를 전혀 기억하지 않으며 오직 프로세스B의 PCB정보만 보고 실행한다.

이렇게 CPU가 프로세스B를 실행하는 동안 프로세스A는 이전 실행 상태를 그대로 유지한 채 기다리게 되는데, 나중에 다시 실행되려면 운영체제가 PCB-A에서 컨텍스트를 복원해 줘야 한다.

 

이처럼 컨텍스트 스위칭은 CPU가 여러 프로세스를 실행하는 것처럼 보이게 만들어 주는 핵심 기술이다. 이 과정이 없다면, 한 프로세스가 실행되는 동안 다른 프로세스는 전혀 실행될 수 없고, 운영체제의 멀티태스킹 기능도 불가능하다.

컨텍스트 스위칭은 매우 빠르게 이루어지고, cache와 register활용을 통해 속도를 최적화하기도 한다.

 

즉, 운영체제는 CPU를 효율적으로 사용하기 위해 컨텍스트를 저장하고 복원하면서,

프로세스들이 마치 동시에 실행되는 것처럼 보이도록 한다.

 

 

PCB와 Context

PCB와 context의 개념이 잘 안잡혀서 정리했다.