본문 바로가기
목차
CE

context 란?

by ds31x 2026. 2. 25.
728x90
반응형

Process Context, Thread Context, Execution Context, Runtime Context

컴퓨터 과학에서 _context_란 “코드가 실행되기 위해 필요한 상태 정보의 집합”을 의미함.

다만 context라는 용어는 사용되는 관점에 따라 가리키는 범위가 달라진다.

 

흔히, 대표적으로 다음 네 가지 정도를 기억하면 도움이 된다.

  • Execution Context
  • Thread Context
  • Process Context
  • Runtime Context

이들은 서로 유사하지만, 약간 다른 범위를 가진다.


1. Execution Context

Execution context는 하나의 function 또는 코드 블록이 실행되기 위해 필요한 상태 정보를 의미.

프로그램에서 function이 호출되면 최소한 다음 정보가 필요함:

  • 매개변수 값
  • 지역 변수 공간
  • 반환 주소
  • 현재 실행 위치
  • 저장된 레지스터 값(호출 규약에 따라)

이 정보들의 집합이 바로 execution context 임.

C 언어의 경우

C에서는 execution context가 스택 프레임(stack frame) 으로 구현됨.

  • 함수가 호출되면 스택에 새로운 프레임이 생성되고,
  • 그 안에 지역 변수, 매개변수, 반환 주소 등이 저장된다.
  • 함수 실행이 끝나면 해당 프레임이 제거된다.

C에서 execution context는 스택 프레임 그 자체이다.


Python의 경우

Python에서도 function 호출 시 스택 프레임이 생성된다.
그리고 Python 역시 call stack을 사용한다 (최소한 CPython에선).

다만 Python은 이 스택 프레임을 PyFrameObject라는 객체로 표현하여 추적과 introspection에 활용한다.

Python의 해당 frame 객체가 지원하는 기능은 다음과 같음:

  • traceback 출력
  • locals() 조회
  • 디버깅 및 introspection

본질적으로 C에서의 stack frame 과 큰차이는 없음(객체로 추상화된 점을 제외하면).

Python에서도 execution context는 스택 위에 존재하는 stack frame이다.
Python은 이를 객체로 노출하여 활용할 수 있게 만든 것임.

보다 자세한 건 다음을 참고:

https://dsaint31.tistory.com/508

 

[Basic] namespace, frame, and context

Namespace프로그래밍 등에서 나오는 namespace는 일종의 추상적인 개념변수와 함수, 클래스 들의 이름(name)이 정의되고 사용될 수 있는 범위(scope)를 지칭함. (때문에 scope 란 용어와 자주 같이 사용됨)v

dsaint31.tistory.com


2. Thread Context

Thread context는 하나의 스레드가 실행되기 위해 필요한 상태 정보를 의미.

OS 는 스레드들을 번갈아 실행한다.

  • 한 스레드를 멈추고 다른 스레드를 실행하려면,
  • 멈춘 스레드의 상태를 저장해 두었다가 나중에 다시 복원해야 한다.
  • 이때 저장되는 정보가 thread context이다.

일반적으로 thread context에는 다음이 포함됨:

  • CPU 레지스터 값
  • 프로그램 카운터(현재 실행 위치)
  • 스택 포인터
  • 스레드 전용 스택
  • 스레드 로컬 저장소(TLS) 관련 정보

참고로 스레드는 프로세스의 주소 공간을 공유하지만,
실행 상태(레지스터)와 호출 스택은 스레드마다 독립적임.
프로세스에 비해 독립적인 정보가 적기 때문에 스레드가 보다 가벼운 실행단위임.

따라서 각 스레드는 자신의 call stack을 갖고, 그 위에 자신의 execution context(스택 프레임들)가 쌓이는 구조임.

즉, 다음이 성립:

  • thread context는 “스레드 단위 실행 상태”
  • execution context는 “함수 단위 실행 상태”

3. Process Context

Process context는 운영체제가 하나의 프로세스를 실행하기 위해 유지해야 하는 상태 정보를 의미.

운영체제는 여러 프로세스도 번갈아 실행할 수 있다.

  • 어떤 프로세스를 중단했다가 다시 실행하려면
  • 그 시점의 상태를 저장해야 한다.
  • 이 저장된 상태가 process context이다.

대표적으로 포함되는 것은 다음과 같다.

  • 가상 메모리 주소 공간(메모리 맵)
  • 열린 파일 디스크립터
  • 권한 및 보안 정보
  • 프로세스 스케줄링 정보
  • (운영체제 구현에 따라) 프로세스 레지스터 상태 저장 정보

초보자가 이해할 때 가장 중요한 구분은 다음과 같다:

  • 프로세스는 메모리 주소 공간을 가진 실행 단위
  • 스레드는 그 주소 공간 안에서 돌아가는 실행 흐름 단위

따라서 하나의 프로세스에는 여러 개의 thread context가 존재할 수 있다.


4. Thread Context와 Process Context의 관계

둘의 차이는 사실 범위에 있음

Process Context

  • 프로세스 전체 단위
  • 가상 메모리 맵 포함
  • 열린 파일 정보 포함
  • 주소 공간 자체를 포함

Thread Context

  • 하나의 실행 흐름 단위
  • CPU 레지스터 상태
  • 스택 상태
  • 실행 위치

즉, 다음과 같이 비유로 그 차이를 이해하자:

  • 프로세스는 “집(주소 공간)”
  • 스레드는 “집 안에서 움직이는 사람(실행 흐름)”
  • 각 사람은 자기 기억(레지스터)과 자기 메모장(스택)을 따로 가진다.

스레드와 프로세스의 차이는 다음을 참고:

2023.12.27 - [개발환경] - [CE] Process versus Thread

 

[CE] Process versus Thread

Process versus Thread (OS관점)1. Process (프로세스)Process는 자신을 위한 독립된 메모리 공간 등의 리소스를 차지한 상태에서 실행 중인 프로그램의 instance라고 볼 수 있음. 독립된 execution unit (실행 단위

ds31x.tistory.com


5. Runtime Context

Runtime context는 프로그램이 실행되는 동안 유지되는 전체 실행 환경을 의미.

이 개념은 가장 넓은 범위를 가지는 context.
(Runtime context 는 개념적 요소임)

다음을 포함될 수 있음:

  • process context (OS가 관리)
  • thread context들 (OS가 관리)
  • 각 스레드의 execution context 집합(스택 프레임들, 언어 실행환경 등이 관리)
  • 메모리 관리 상태(예: GC/allocator 상태, runtime이 관리)
  • 전역 설정 및 환경 변수 (OS 또는 애플리케이션 또는 런타임/프레임워크 등이 관리)
  • 라이브러리 및 프레임워크 상태 (프레임워크가 관리)

포함은 되나 관리 주체가 다른 점을 주의할 것.

예를 들어, Qt GUI 프로그램에서는 QApplication이 다음과 같은 환경을 관리한다.

  • 메인 이벤트 루프
  • 전역 GUI 설정(폰트, 스타일, 팔레트)
  • 입력 장치 상태와 포커스
  • 활성 윈도우 및 전역 GUI 자원

이는 GUI 애플리케이션의 runtime context 중에서도 프레임워크 수준의 실행 환경에 해당.

참고로, QApplication

  • CPU 레지스터나 가상 메모리 맵 같은 process context를 직접 관리하지는 않음.
  • 관리하지는 않지만 process context 포함하고 있음 (프로그램이 실행되려면 필요함)
  • 대신 GUI 프로그램이 동작하기 위한 프레임워크 레벨의 실행 환경을 구성하고 유지한다.

컴퓨터에서 애플리케이션 코드가 실행되기 위한 계층은 다음과 같음

하드웨어
   ↓
운영체제 (OS)
   ↓
언어 런타임 (C runtime, Python runtime 등)
   ↓
라이브러리 / 프레임워크 (Qt, Django 등)
   ↓
애플리케이션 코드
  • QApplication은 Runtime 위에서 동작하는 라이브러리 계층에서 동작함.
  • 즉 프레임워크 가 관리하는 Runtime의 환경을 관리하는 것임.

요약

  • Execution Context
    • 함수 실행에 필요한 상태 정보이며,
    • C와 Python 모두에서 stack frame으로 구현된다.
    • Python은 이를 frame 객체로 표현해 introspection을 가능하게 한다.
  • Thread Context
    • 스레드 실행에 필요한 상태 정보이다.
    • 레지스터 상태와 스레드 전용 스택을 포함하며,
    • 한 프로세스 안에 여러 thread context가 존재할 수 있다.
  • Process Context
    • OS가 관리하는 프로세스 단위 실행 상태이다.
    • 주소 공간(가상 메모리 맵), 열린 파일 등 프로세스 전체에 해당하는 정보가 포함된다.
  • Runtime Context
    • 프로그램이 실행되는 동안 유지되는 전체 실행 환경이다.
    • process context, thread context, execution context 집합, 그리고 라이브러리/프레임워크 상태까지 포함할 수 있다.
    • Qt 등에서는 QApplication이 GUI 프로그램의 runtime context(프레임워크 수준)를 관리한다.
728x90