맨위로가기

컨텍스트 (컴퓨팅)

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

컨텍스트(Context)는 멀티태스킹 환경에서 작업 전환 시, 중단된 작업의 실행 상태를 저장하는 일련의 정보를 의미한다. 운영 체제는 인터럽트 발생 시 프로세서의 컨텍스트를 저장하고, 컨텍스트 스위치 시 이 정보를 활용하여 중단된 작업을 재개한다. 컨텍스트는 프로세서 레지스터, 메모리, 제어 레지스터 등에 저장될 수 있으며, 컨텍스트의 크기가 작을수록 작업 전환 속도가 빨라진다. 또한, 하드웨어 수준뿐만 아니라, 소프트웨어 수준에서도 GDI, OpenGL, Quartz 2D, 안드로이드, .NET 등 다양한 환경에서 컨텍스트 개념이 사용된다. C#과 같은 언어에서는 '안전 컨텍스트' 개념이 존재하며, 특정 메모리 접근을 제어하는 데 사용된다.

더 읽어볼만한 페이지

  • 프로세스 - 문맥 교환
    문맥 교환은 운영 체제에서 CPU가 여러 프로세스나 스레드를 번갈아 실행하기 위해 현재 작업 상태를 저장하고 다른 작업 상태를 복원하는 과정으로, 멀티태스킹 환경에서 필수적인 기술이며 프로세스 제어 블록을 통해 관리된다.
  • 프로세스 - 데몬 (컴퓨팅)
    데몬은 운영 체제에서 사용자와 상호 작용 없이 백그라운드에서 실행되며 시스템의 다양한 작업을 처리하는 프로세스이다.
컨텍스트 (컴퓨팅)

2. 개념

멀티태스킹 환경에서 여러 작업이 동시에 병렬적으로 작동할 때, 하나의 작업만이 계산 자원(CPU)을 독점할 수는 없으며, 짧은 시간 동안 작업을 전환하면서 (프로세서 시간을 할당하면서) 조금씩 실행해야 한다. 운영 체제(OS)는 작업이 재개될 때 중단된 지점부터 작업을 계속할 수 있도록, 프로세서가 실행 중인 작업의 내용 (프로그램의 실행 상태)을 저장해두는데, 이 저장되는 일련의 정보를 컨텍스트라고 한다[3]。 작업 인터럽트가 발생하면, OS는 작업을 중단하고 프로세서의 컨텍스트를 저장하며, 인터럽트 서비스 루틴(interrupt service routine: ISR)이 작동한다. 따라서, 컨텍스트가 작을수록 작업 전환 (컨텍스트 스위치)의 레이턴시(지연)는 더 작아진다.

프로세서가 컨텍스트 스위치 메커니즘을 하드웨어로 구현하는 경우도 있지만, 대규모 범용 OS에서는 일반적으로 이 메커니즘을 사용하지 않고 OS 측에서 제어한다[4]

2. 1. 컨텍스트의 구성 요소

프로세서 레지스터 값, 작업에 사용되는 메모리 정보, 작업 관리에 필요한 OS 제어 레지스터 정보 등이 컨텍스트를 구성한다.[3] 저장 메모리(작업에서 사용되는 파일)는 컨텍스트 스위치의 경우 "작업 컨텍스트"에게 중요하지 않다.[4]

3. 하드웨어 수준

운영 체제가 작업을 중단하는 경우, 작업이 재개될 때 중단된 지점부터 작업을 계속하기 위해, 프로세서가 실행 중인 작업의 내용(프로그램의 실행 상태)을 저장해둘 필요가 있다. 이 저장되는 일련의 정보가 컨텍스트이다[3]。 작업의 인터럽트가 발생하면, 운영 체제는 작업을 중단하고 프로세서의 컨텍스트를 저장하며, 인터럽트 서비스 루틴(interrupt service routine: ISR)이 작동한다. 따라서, 컨텍스트가 작을수록 작업 전환(컨텍스트 스위치)의 레이턴시(지연)는 더 작아진다.

컨텍스트의 데이터는 프로세서 레지스터, 작업에 의해 사용되는 메모리, 또는 작업을 관리하기 위해 운영 체제가 사용하는 제어 레지스터 내에 배치될 수 있다.

저장 메모리(작업에서 사용되는 파일)는 컨텍스트 스위치의 경우 "작업 컨텍스트"에게 중요하지 않다.

프로세서 자신이 컨텍스트 스위치의 메커니즘을 하드웨어로 구현하는 경우도 있지만, 대규모 범용 운영 체제의 경우, 일반적으로 이 메커니즘을 사용하지 않고, 운영 체제 측에서 제어한다[4]

4. 소프트웨어 수준

OS나 장치 드라이버가 관리하는 하드웨어 수준의 정보뿐 아니라, API응용 소프트웨어 수준에서도 컨텍스트 개념이 사용된다.


  • 마이크로소프트 윈도우의 GDI 및 Direct3D/Direct2D에는 "장치 컨텍스트"가 있다.[5][6][7]
  • OpenGL에는 "OpenGL 컨텍스트"가 있으며, 윈도우의 WGL에서는 "렌더링 컨텍스트"라고도 불린다.[8][9]
  • macOS/iOS의 Quartz 2D(Core Graphics)에는 "그래픽스 컨텍스트"를 표현하는 클래스로 `CGContext`가 있다.[10]
  • 안드로이드에는 응용 프로그램 환경 정보에 접근하기 위한 추상 클래스로 `android.content.Context`가 있다.[11]
  • .NET에는 논리적인 실행 스레드에 관한 정보를 저장하는 컨테이너로 "실행 컨텍스트" `ExecutionContext`가 있다.[12]

4. 1. 응용 사례

OS나 장치 드라이버가 관리하는 프로세서 상태와 같은 하드웨어 수준의 정보뿐만 아니라, 각종 API응용 소프트웨어 수준의 추상화된 상태 정보에 대해서도 컨텍스트라는 개념이 사용되는 경우가 있다.

  • 마이크로소프트 윈도우의 GDI 및 Direct3D/Direct2D에는 "장치 컨텍스트" 개념이 있으며, 그래픽스 객체 집합 보존, 그래픽스 파이프라인 스테이트 설정, 그리기 명령 발행 등을 담당한다.[5][6][7]
  • OpenGL에는 "OpenGL 컨텍스트" 개념이 있으며, OpenGL 인스턴스에 관련된 스테이트를 유지한다.[8] 윈도우 WGL에서는 "렌더링 컨텍스트"라고도 불리며, 모든 OpenGL 명령을 통과시키는 포트 역할을 한다.[9] OpenGL 호출을 실행하는 스레드는 현재 컨텍스트를 가질 필요가 있으며, 스레드 로컬 스토리지 변수에 의해 유지된다.
  • macOS/iOS의 Quartz 2D(Core Graphics)에는 그리기 파라미터와 그리는 데 필요한 장치 고유의 정보를 유지·관리하는 "그래픽스 컨텍스트"를 표현하는 클래스로 `CGContext`가 있다.[10]
  • 안드로이드에는 응용 프로그램 환경에 관한 정보에 접근하기 위한 추상 클래스로 `android.content.Context`가 있다.[11]
  • .NET에는 논리적인 실행 스레드에 관한 정보를 저장하는 컨테이너로 "실행 컨텍스트" `ExecutionContext`가 있다.[12] .NET Framework에서 실행 컨텍스트는 보안 컨텍스트, 호출 컨텍스트, 동기화 컨텍스트를 포함한다.

5. 안전 컨텍스트 (C#)

C#과 같은 일부 프로그래밍 언어에서는 '안전 컨텍스트' 또는 '보안 컨텍스트'라는 개념이 사용된다. 안전하지 않은 컨텍스트에서는 구조체 내에 배열을 직접 선언할 수 있지만, 가비지 컬렉터에 의해 해당 변수가 재할당되는 것을 막기 위해 `fixed` 키워드를 사용해야 한다.[1]

5. 1. 예제 코드

C#과 같은 일부 컴퓨터 언어에는 '안전'/'보안 컨텍스트'라는 개념이 있다. 예를 들어, 배열이 구조체 내에 필요한 경우, 버전 2.0부터 구조체에 추가할 수 있지만 안전하지 않은/보안되지 않은 컨텍스트에서만 가능하다.[1]

```csharp

struct ParameterRepresentation

{

char target;

char taskStart;

char taskType;

fixed byte traceValues[m_MAX_BYTES];

};

```

https://en.wikibooks.org/wiki/C_Sharp_Programming/Keywords/fixed fixed 키워드는 가비지 수집기가 이 변수를 재할당하는 것을 방지한다. 배열에 대한 접근은 C++와 유사하며, 포인터 연산을 사용하여 배열의 개별 요소에 인덱스를 통해 접근할 수 있다.

참조

[1] 웹사이트 Structures in C# 2.0 http://en.wikibooks.[...]
[2] 웹사이트 contextの意味・使い方・読み方|英辞郎 on the WEB https://eow.alc.co.j[...]
[3] 웹사이트 コンテキスト(コンテクスト)とは - 意味をわかりやすく - IT用語辞典 e-Words https://e-words.jp/w[...]
[4] 웹사이트 ASCII.jp:意味の違いがわかる? タスクとプロセスとスレッド (2/4) https://ascii.jp/ele[...]
[5] 웹사이트 Device Contexts - Win32 apps | Microsoft Learn https://learn.micros[...]
[6] 웹사이트 Introduction to a Device in Direct3D 11 - Win32 apps | Microsoft Learn https://learn.micros[...]
[7] 웹사이트 How to render by using a Direct2D device context - Win32 apps | Microsoft Learn https://learn.micros[...]
[8] 웹사이트 OpenGL Context - OpenGL Wiki https://www.khronos.[...]
[9] 웹사이트 Rendering Contexts - Win32 apps | Microsoft Learn https://learn.micros[...]
[10] 웹사이트 CGContext | Apple Developer Documentation https://developer.ap[...]
[11] 웹사이트 Context | Android Developers https://developer.an[...]
[12] 웹사이트 ExecutionContext Class (System.Threading) | Microsoft Learn https://learn.micros[...]



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com