새소식

CS

프로세스와 스레드 : 컨텍스트 스위칭에 대해

  • -

프로세스와 스레드란?

 

인프런 김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성

 

프로세스는 운영체제 안에서 실행 중인 프로그램을 뜻하며 다르게 말하면 프로세스는 실행 중인 프로그램의 인스턴스이다. 이때 각 프로세스는 독립적인 작업공간을 가지며 서로 격리되어 관리되기 때문에 서로 영향을 미치지 않는다. 즉 프로세스 A에 심각한 문제가 발생해도 프로세스 B에는 영향을 주지 않는다.

 

프로세스는 코드 영역, 힙(메모리) 영역, 스택 영역, 그리고 기타(데이터) 영역으로 나뉜다. 코드 영역은 실행할 프로그램의 코드가 저장되는 부분, 힙 영역은 동적으로 할당되는 메모리 영역, 스택은 메서드 호출 시 생성되는 지역 변수 및 반환 주소가 저장되는 영역 그리고 데이터 영역은 전역 및 정적 변수(static)가 저장되는 부분이다.

 

스레드는 프로세스 내에서 실행되는 작업의 단위로, 그림에서 보이듯이 프로세스는 항상 하나 이상의 스레드를 포함한다. 같은 프로세스 내의 스레드들은 프로세스의 메모리 공간(코드, 힙, 기타)을 공유하며 스택의 경우 각 스레드에 각각 존재한다.

컨텍스트 스위칭

 

이렇게 프로세스 내의 여러 스레드들을 동시에 실행되는 것처럼 보이게 하려면 스레드 A를 일부 실행하다 다시 실행 정보를 저장하고 다시 스레드 B의 실행 정보를 불러와 다시 실행하는데, 이러한 과정들을 컨텍스트 스위칭이라 한다. 이로 인해 멀티태스킹 시스템에서 여러 작업을 효율적으로 관리할 수 있으며 여러 작업을 동시에 진행되는 것처럼 보여줄 수 있다.

 

이러한 컨텍스트 스위칭은 운영체제의 커널에 의해 수행되고, 컨텍스트 스위칭은 각 프로세스나 스레드에게 할당된 Time Slice(CPU 시간)이 다 소진되었을 때, I/O 작업이 필요할 때 그리고 작업들의 우선순위가 바뀌었을 때 더 높은 우선순위를 가진 작업으로 전환되어야 할 때 발생한다.

컨텍스트 스위칭 과정

 

1. 현재 스레드의 상태 저장 : 실행 중인 스레드의 레지스터 상태 저장

2. 다음 스레드의 상태 로드 : 동일한 프로세스 내의 다음 실행될 스레드의 상태 로드

3. 스레드 전환 : CPU가 새로운 스레드를 시작하는데, 이때 동일한 프로세스 내 스레드 간 전환일 때는 메모리 관련 추가 처리가 필요 없다.

 

하지만 다른 프로세스에 속한 스레드 간의 컨텍스트 스위칭일 경우 프로세스 간 메모리 주소 체계가 다르기 때문에 메모리 관련 추가 처리가 필요하다. 이때 MMU(Memory Manage Unit)이 새로운 프로세스의 주소 체계를 가리키도록 수정해줘야 하고 TLB(Translation Lookaside Buffer, 가상 메모리 주소를 실제 메모리 주소로 매핑해주는 캐시)도 비워줘야 한다. TLB를 비워주지 않으면 이전에 작업했던 프로세스의 주소에 접근할 가능성이 있기 때문에 꼭 비워줘야 한다.

 

딱 봐도 동일한 프로세스 내의 스레드 간 전환이 더 간단하다. 그래서 실제로도 동일한 프로세스 내의 스레드 간 전환이 다른 프로세스 간 스레드 전환(프로세스 전환) 보다 더 빠르다.

'CS' 카테고리의 다른 글

이건 첫 번째 레슨, 복합 인덱스 쓰기  (2) 2025.07.29
ACID란?  (0) 2025.02.27
REST란?  (0) 2025.02.26
캐싱 전략에 대해  (0) 2025.02.25
로드 밸런싱에 대해...  (0) 2025.02.21
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.