ShovelingLife
A Game Programmer
ShovelingLife
전체 방문자
오늘
어제
  • 분류 전체보기 (1074) N
    • 그래픽스 (57)
      • 공통 (19)
      • 수학 물리 (22)
      • OpenGL & Vulkan (1)
      • DirectX (14)
    • 게임엔진 (183)
      • Unreal (69)
      • Unity (103)
      • Cocos2D-X (3)
      • 개인 플젝 (8)
    • 코딩테스트 (221)
      • 공통 (7)
      • 프로그래머스 (22)
      • 백준 (162)
      • LeetCode (19)
      • HackerRank (2)
      • 코딩테스트 알고리즘 (8)
    • CS (235)
      • 공통 (21)
      • 네트워크 (44)
      • OS & 하드웨어 (55)
      • 자료구조 & 알고리즘 (98)
      • 디자인패턴 (6)
      • UML (4)
      • 데이터베이스 (7)
    • 프로그래밍 언어 (349) N
      • C++ (168) N
      • C# (90)
      • Java (9)
      • Python (33)
      • SQL (30)
      • JavaScript (8)
      • React (7)
    • 그 외 (10) N
      • Math (5)
      • 일상 (5)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • Source Code 좌측 상단에 복사 버튼 추가 완료
  • 언리얼 엔진 C++ 빌드시간 단축 꿀팁
  • 게임 업계 코딩테스트 관련
  • 1인칭 시점으로 써내려가는 글들

인기 글

태그

  • 함수
  • 클래스
  • 유니티
  • string
  • 알고리즘
  • 오블완
  • 문자열
  • 프로그래머스
  • 그래픽스
  • Unity
  • 포인터
  • c#
  • SQL
  • 티스토리챌린지
  • C++
  • 파이썬
  • C
  • 언리얼
  • 배열
  • 백준

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
ShovelingLife

A Game Programmer

문맥 교환 Context Switching
CS/OS & 하드웨어

문맥 교환 Context Switching

2022. 12. 27. 12:00

하나의 프로세스가 CPU를 사용 중인 상태에서 다른 프로세스가 CPU를 사용하도록 하기 위해, 이전의 프로세스의 상태(문맥)를 보관하고 새로운 프로세스의 상태를 적재하는 작업

프로세스의 문맥(context)은 PCB에 저장된다. 인터럽트(interrupt)가 발생하면 시스템은 현재 수행 중인 프로세스의 문맥을 저장하고, 이후 해당 프로세스가 재개될 때 복원한다.

  1. CPU 코어를 다른 프로세스로 교환
  2. 현재 프로세스의 상태를 저장
  3. 다른 프로세스의 상태를 복원하는 작업(task)를 말한다.

교환 시점

  • 멀티태스킹
  • 인터럽트 핸들링
  • 사용자 모드와 커널 모드 간의 전환

  • 준비 → 실행, 실행 → 준비, 실행 → 대기 전환 시 문맥 교환 발생

교환 필요한 상황

교환 과정

문맥 교환과 오버헤드 

문맥을 교환하는 동안에는 유용한 작업을 수행할 수 없기 때문에, 문맥 교환 시간은 일종의 오버헤드라고 할 수 있다.

복잡 명령어 집합 컴퓨터(Complex Instruction Set Computer, CISC)와 축소 명령어 집합 컴퓨터(Reduced Instruction Set Computer, RISC, 리스크)는 각각 장단점이 있는데, 문맥교환 측면에 보면 RISC의 경우 레지스터의 용량이 CISC보다 상대적으로 크기 때문에 좀 더 큰 오버헤드가 발생한다.

해결 방안

문맥교환이 아닌 경우

프로세스가 실행 상태일 때 시스템 콜이나 인터럽트가 발생하면 CPU의 제어권이 운영체제에게로 넘어와 원래 실행중이던 프로세스의 업무를 잠시 멈추고 운영 체제 커널의 코드가 실행된다 이 경우에 CPU의 실행 위치 등 프로세스의 문맥 중 일부를 PCB에 저장하게 되지만 이러한 과정을 문맥 교환이라고 하지 않는다.

문맥교환 안일어남

 

문맥교환 일어남

이는 하나의 프로세스가 사용자 모드에서 실행되다가 커널모드로 실행 모드만 바뀌는 것일 뿐 CPU를 점유하는 프로세스가 다른 사용자 프로세스로 변경되는 과정이 아니기 때문이다. 

 

타이머 인터럽트가 발생하거나 프로세스가 I/O 요청 시스템을 하여 봉쇄 상태에 들어가는 경우에는 문맥 교환이 일어나지만, 그 밖의 인터럽트나 시스템 콜 발생시에는 문맥 교환이 일어나지 않고 모드만 변경된다.

즉 사용자 모드에서 커널 모드로 바뀌어 시스템 콜이나 인터럽트 처리를 하고 다시 동일한 프로세스의 사용자 모드로 되돌아와 이전에 수행하던 작업을 계속 수행할 뿐이다. 

 

출처 : 문맥교환(context switching)과 오버헤드(overhead) (tistory.com)

[운영체제] 문맥교환(Context Switching) — 박연호의 개발 블로그 (tistory.com)

[운영체제] Context Switch(문맥 교환)이란? (tistory.com)

문맥교환 (Context Switching) > 도리의 디지털라이프 (skby.net)

저작자표시 (새창열림)

'CS > OS & 하드웨어' 카테고리의 다른 글

시스템 구조와 프로그램 실행 1  (0) 2023.03.19
PCB(Process Control Block)란?  (0) 2022.12.28
캐시가 동작하는 아주 구체적인 원리  (0) 2022.12.26
캐시 히트율/메모리 적중률 (Hit Rate)  (0) 2022.12.26
페이징(Paging)이란? 페이지 테이블이란?  (0) 2022.12.16
    'CS/OS & 하드웨어' 카테고리의 다른 글
    • 시스템 구조와 프로그램 실행 1
    • PCB(Process Control Block)란?
    • 캐시가 동작하는 아주 구체적인 원리
    • 캐시 히트율/메모리 적중률 (Hit Rate)
    ShovelingLife
    ShovelingLife
    Main skill stack => Unity C# / Unreal C++ Studying Front / BackEnd, Java Python

    티스토리툴바