[OS] 컨텍스트 스위칭: 프로세스 컨텍스트 스위칭 VS 스레드 컨텍스트 스위칭

2023. 11. 9. 15:30· Computer Science/Operating System
목차
  1. 💋 인트로
  2. 💋 컨텍스트 스위칭
  3. ✔️ 개념
  4. ✔️ 발생 원인
  5. ✔️ 컨텍스트(context)란?
  6. 💋 컨텍스트 스위칭의 과정
  7. ✔️ 컨텍스트 스위칭 기본 작업
  8. ✔️ Thread Context Switching
  9. ✔️ Process Context Switching
  10. 💋 애플리케이션 관점에서, 컨텍스트 스위칭은 그냥 오버헤드
  11. 💋 결론
  12. 💋 참고자료
반응형
반응형

 

💋 인트로

안녕하세요. 우아한테크코스 5기 깃짱이라고 합니다. 

 

 

💋 컨텍스트 스위칭

✔️ 개념

  • CPU/코어에서 실행중이던 스레드가 다른 스레드로 교체되는 것
    • 이 때 두 스레드는 같은 프로세스에 속할수도, 다른 프로세스에 속할 수도 있다.
  • 여러 프로세스/스레드를 동시에 실행시키기 위해 필요하다.

 

✔️ 발생 원인

크게 3가지!

 

 

  • Time Quato Expiry: 주어진 quantum(time slice)의 시간이 다됨. 쉽게 말해 Time Over!
  • Interrupt: 커널 함수를 통해서 프로그램 실행 도중에 멈춰버림. (SIGKILL interrupt signal)
  • Preemption: 더 우선순위가 높은 일을 해야 할 때 선점해버려서

 

이미지 출처: https://www.baeldung.com/cs/os-cpu-context-switch

 

 

✔️ 컨텍스트(context)란?

  • 프로세스/스레드의 상태
    • CPU, 메모리의 상태 등등

 

  • 심화공부 키워드: CPU의 registers, counter

 

💋 컨텍스트 스위칭의 과정

 

컨텍스트 스위칭은 OS 커널이 실행한다. OS 커널은 리소스를 관리, 감독하는 역할을 한다.

설명을 위해, 컨텍스트 스위칭을 통해서 CPU에서 실행되던 스레드1 → 스레드2로 교체된 상황이라고 하자.

 

먼저, 아래 내용은 기본적으로 일어나게 된다.

 

✔️ 컨텍스트 스위칭 기본 작업

  • 커널 모드로 전환
    • 프로세스에서 통제권이 넘어가 커널에서 실행
    • 하드웨어와 밀접한 일, 혹은 컴퓨터의 리소스를 사용해야 하는 일 (컨텍스트 스위칭에 필요한 일)
  • CPU의 register 상태 교체
    • 각종 명령어를 실행하기 위해 필요한 데이터를 저장하는 register의 상태 교체
    • 스레드1의 레지스터 상태를 저장해야 어디까지 실행되었는지 등 상태 정보를 기억해서 다시 컨텍스트 스위칭 때 활용할 수 있음.

 

이미지 출처: https://www.baeldung.com/cs/os-cpu-context-switch

 

 

 

이때 스레드1, 스레드2가 속하는 프로세스가 동일한지, 다른지에 따라서 스위칭 과정이 달라진다.

  • 프로세스1의 스레드1 → 프로세스2의 스레드2 = Process Context Switching
  • 프로세스1의 스레드1 → 프로세스1의 스레드2 = Thread Context Switching

 

✔️ Thread Context Switching

기본 작업만 하면 된다. ⇒ 빠르다

 

커널 모드 전환 + CPU register 상태 교체

 

 

 

✔️ Process Context Switching

가상 메모리 주소 관련 처리를 추가로 수행해야 한다.

 

  1. MMU(Memory Management Unit)이 새로운 프로세스의 주소 체계를 바라보도록 수정
  2. 캐시 역할을 하는 TLB(Translation Lookaside Buffer)를 완전히 비워줘야 함.

 

커널 모드 전환 + CPU register 상태 교체 + 가상 메모리 주소 처리(MMU 수정 + TLB 캐시 비우기)

 

 

 

 

💋 캐시 오염 (Cache Pollution)

CPU 내부에 캐시를 위한 공간이 있는데, 컨텍스트 스위칭을 하면, 캐시의 데이터가 현재 실행중인 스레드의 데이터가 아닐 수 있다.

컨텍스트 스위칭 직후에는 캐시에 필요한 데이터가 없어서, 메모리에 접근해 데이터를 받아와야 하기 때문에 성능에 안좋은 영향을 줄 수 있다.

 

💋 애플리케이션 관점에서, 컨텍스트 스위칭은 그냥 오버헤드

 

오버헤드란 프로그램의 실행 흐름에서 나타나는 현상 중 하나로 예를 들어 , 프로그램의 실행 흐름 도중에 동떨어진 위치의 코드를 실행시켜야 할 때, 추가적으로 시간, 메모리, 자원이 사용되는 현상입니다.

 

예를 들어, 실행에 10초가 걸리는 기능이 간접적인 원인으로 20초가 소요된다면, 오버헤드는 10초가 되는 것이다.

 

💋 결론

Process Context Switching 과정 = 커널 모드 전환 + CPU register 상태 교체 + 가상 메모리 주소 처리(MMU 수정 + TLB 캐시 비우기)

Thread Context Switching 과정 = 커널 모드 전환 + CPU register 상태 교체 

 

⇒ 스레드 컨텍스트 스위칭이 더 빠르다!

 

컨텍스트 스위칭 = Pure Overhead

 

💋 참고자료

  • https://www.baeldung.com/cs/os-cpu-context-switch
  • https://www.youtube.com/watch?v=Xh9Nt7y07FE&list=PLcXyemr8ZeoQOtSUjwaer0VMJSMfa-9G-&index=2

 

 

도움이 되었다면, 공감/댓글을 달아주면 깃짱에게 큰 힘이 됩니다!🌟
비밀댓글과 메일을 통해 오는 개인적인 질문은 받지 않고 있습니다. 꼭 공개댓글로 남겨주세요!

 

반응형

'Computer Science > Operating System' 카테고리의 다른 글

[OS] 동기화 메커니즘(Synchronization Mechanisms)(1): 스핀락(Spinlock), 뮤텍스(Mutex), 세마포어(Semaphore)  (0) 2023.11.20
[OS] 동기화(synchronization)의 필요성: 경쟁 조건(race condition), 임계 영역(critical section)  (0) 2023.11.12
[OS] CPU Bound VS IO Bound: 스레드는 몇 개가 좋을까?  (0) 2023.11.10
[OS] 프로세스/스레드의 개념: 멀티태스킹, 멀티스레딩, 멀티프로세싱, 멀티프로그래밍을 구분하자!  (2) 2023.11.09
[OS] Connection Pool Size를 줄이면 오히려 성능이 개선될 수 있다.  (1) 2023.09.29
  1. 💋 인트로
  2. 💋 컨텍스트 스위칭
  3. ✔️ 개념
  4. ✔️ 발생 원인
  5. ✔️ 컨텍스트(context)란?
  6. 💋 컨텍스트 스위칭의 과정
  7. ✔️ 컨텍스트 스위칭 기본 작업
  8. ✔️ Thread Context Switching
  9. ✔️ Process Context Switching
  10. 💋 애플리케이션 관점에서, 컨텍스트 스위칭은 그냥 오버헤드
  11. 💋 결론
  12. 💋 참고자료
'Computer Science/Operating System' 카테고리의 다른 글
  • [OS] 동기화(synchronization)의 필요성: 경쟁 조건(race condition), 임계 영역(critical section)
  • [OS] CPU Bound VS IO Bound: 스레드는 몇 개가 좋을까?
  • [OS] 프로세스/스레드의 개념: 멀티태스킹, 멀티스레딩, 멀티프로세싱, 멀티프로그래밍을 구분하자!
  • [OS] Connection Pool Size를 줄이면 오히려 성능이 개선될 수 있다.
깃짱
깃짱
연새데학교 컴퓨터과학과 & 우아한테크코스 5기 백엔드 스타라이토 깃짱
반응형
깃짱
깃짱코딩
깃짱
전체
오늘
어제
  • 분류 전체보기
    • About. 깃짱
    • Weekly Momentum
      • 2024
    • PROJECT
      • AIGOYA LABS
      • Stamp Crush
      • Sunny Braille
    • 우아한테크코스5기
    • 회고+후기
    • Computer Science
      • Operating System
      • Computer Architecture
      • Network
      • Data Structure
      • Database
      • Algorithm
      • Automata
      • Data Privacy
      • Graphics
      • ETC
    • WEB
      • HTTP
      • Application
    • C, C++
    • JAVA
    • Spring
      • JPA
      • MVC
    • AI
    • MySQL
    • PostgreSQL
    • DevOps
      • AWS
      • 대규모 시스템 설계
    • frontend
      • HTML+CSS
    • NextJS
    • TEST
    • Industrial Engineering
    • Soft Skill
    • TIL
      • 2023
      • 2024
    • Linux
    • Git
    • IntelliJ
    • ETC
      • 日本語

블로그 메뉴

  • 홈
  • 깃허브

인기 글

최근 글

태그

  • Stream
  • 람다
  • Java
  • 우아한테크코스
  • 함수형프로그래밍
  • 상속
  • 레벨로그
  • 스트림
  • 컴포지션
  • TDD
  • 예외
  • 상속과조합
  • 람다와스트림
  • 우테코
  • OOP
  • 우아한테크코스5기
  • Composition
  • lamda
  • 조합
  • 우테코5기
hELLO · Designed By 정상우.v4.2.0
깃짱
[OS] 컨텍스트 스위칭: 프로세스 컨텍스트 스위칭 VS 스레드 컨텍스트 스위칭
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.