CS
  • CS-Study
  • database
    • B-Tree와 B+Tree
    • DB JOIN
    • DB Lock
    • DB 트래픽
    • DBCP (DB Connection Pool)
    • Flyway
    • Message Broker
    • MySQL InnoDB 스토리지 엔진
    • MySQL 엔진 아키텍처
    • RDB와 NoSQL
    • Redis
    • SQL Injection
    • 스키마 (Schema)
    • Table Scan과 Index Scan
    • Apache Kafka
    • Key
    • 뷰 (View)
    • 인덱스
    • 정규화
    • RDBMS, NoSQL의 클러스터링/리플리케이션 방식
    • 트랜잭션(Transaction)
    • 트랜잭션의 격리성(Transaction Isolation)
    • 프로시저와 트리거
    • DB 정규화 (Normalization)
  • etc
    • MSA
    • REST, REST API, RESTful
    • SOLID 원칙
    • TDD (Test-Driven Development)
    • 서버리스
    • 컨테이너와 도커
  • java
    • Collections
    • Garbage Collection
    • Generic
    • JDBC
    • Java Virtual Machine(JVM)
    • Java Thread
    • Java8 vs Java11 vs Java17
    • 객체지향 프로그래밍 OOP (Object Oriented Programing)
    • Optional
    • RxJava(Reactive Programming)
    • 문자열(String & StringBuffer & StringBuilder)
    • Synchronized
    • Virtual Thread
    • Wrapper Class
    • Equals()와 Hashcode()
    • final
    • Jackson 라이브러리
    • 리플렉션(Reflection)
    • static class와 static method
    • 스트림(Stream)과 람다(Lambda)
    • 스프링 프레임워크에서 사용되는 디자인 패턴
    • 예외처리(Exception)
    • Java Annotation
    • 추상클래스와 인터페이스
  • network
    • 3-way handshake
    • 4-way Handshake
    • DHCP(Dynamic Host Configuration Protocol)
    • DMZ(DeMilitarized Zone)
    • DNS(Domain Name System)
    • HTTP Method
    • HTTP 버전 비교
    • HTTP status code
    • HTTP
    • IP Address
    • Mutiplexing & Demultiplexing
    • OSI 7계층
    • SOP, CORS
    • TCP와 UDP
    • XSS와 CSRF
    • gRPC
    • Stateless와 Connectionless
    • 라우터 Router
    • 로드밸런서(Load Balancer)
    • 브라우저에 URL입력시 네트워크 상 일어나는 일
    • 서브넷 마스크, 게이트웨이
    • 웹 소켓과 소켓 통신
    • 쿠키(Cookie)와 세션(Session)
  • operating-system
    • IPC (Inter Process Communication)
    • 인터럽트
    • TLB
    • 스레싱 Thrashing
    • Thread Pool, Fork-Join
    • Thread Safe
    • 프로세스
    • 가상 메모리
    • 데드락 (DeadLock, 교착 상태)
    • 동기/비동기 & 블로킹/논블록킹
    • 동기화(Synchronization)
    • 메모리 할당과 단편화
    • 뮤텍스와 세마포어, 모니터
    • 세그먼테이션과 페이징
    • 운영체제
    • 캐시 메모리
    • Context switching(문맥 교환)
    • 컴파일
    • 파일 시스템
    • 페이지 교체 알고리즘(Page Replacement Algorithm)
    • 프로세서 스케줄링 알고리즘
    • 프로세스 주소 공간
  • spring
    • @Transactional
    • AOP(Aspect-Oriented Programming)
    • DTO, DAO, VO, Entity
    • DispatcherServlet
    • Hibernate, JPA, Spring Data JPA
    • Ioc와 DI
    • JPA 연관관계 맵핑
    • N+1 Problem
    • ORM
    • Persistence Context
    • SQL Mapper vs ORM vs QueryBuilder
    • Servlet Filter와 Spring Interceptor
    • Servlet
    • Spring MVC와 Spring Boot
    • Tomcat
    • WebFlux
Powered by GitBook
On this page
  • 개념
  • 발생 원인
  • 컨텍스트 스위칭 과정
  • 기본 작업
  • 작동 순서
  • 프로세스 vs 쓰레드 컨텍스트 스위칭
  • Ref
  1. operating-system

Context switching(문맥 교환)

Previous캐시 메모리Next컴파일

Last updated 1 year ago

개념

  • 현재 실행되고 있던 프로세스/쓰레드의 상태를 저장하고 CPU를 다른 프로세스/쓰레드에게 넘겨주는 것

    • 이때 CPU가 해당 프로세스를 실행하기 위한 정보들을 컨텍스트(Context)라고 함

  • CPU에 실행할 프로세스를 교체하는 기술

    • 과정에서 프로세스를 계속해서 기술

  • 여러 프로세스/스레드를 동시에 실행시키기 위해 필요함


  • Context : 프로세스와 관련된 정보들의 집합으로, 프로세스가 관리하는 정보는 두 곳에 저장됨

    • 실제 CPU는 Main memory의 데이터를 register에 올려서 작업을 하는데, register에 저장된 메모리를 register context라고 함

      • CPU에 저장되는 정보 ➜ CPU register context

      • 메모리에 저장되는 정보 ➜ Code, Data, Stack, PCB

    • 보통 운영체제에서 Context는 CPU가 해당 프로세스를 실행하기 위한 정보들로, 이 Context는 프로세스의 에 저장됨

      • 프로세스가 생성되면 메모리에 해당 프로세스의 PCB가 함께 생성되고, 종료 시 삭제됨

  • Context Saving : 현재 프로세스의 register context를 저장하는 작업

  • Context restoring : register context를 프로세스로 복구하는 작업

  • Context Switching

    • 실행 중인 프로세스의 Context를 저장하고, 앞으로 실행할 프로세스의 Context를 복구하는 일

    • 커널의 개입으로 이루어짐

발생 원인

    1. Time Quato Expiry: 주어진 quantum(time slice)의 시간이 끝난 경우(CPU의 사용 시간이 만료되었을 때)

    2. Preemption: 더 우선순위가 높은 일을 해야하는 경우

등등

컨텍스트 스위칭 과정

기본 작업

  • 커널 모드로 전환

    • 프로세스에서 통제권이 넘어가 커널에서 실행됨

    • 하드웨어와 밀접한 일이나 컴퓨터의 리소스를 사용해야 하는 일

  • CPU의 register 상태 교체

    • 각종 명령어를 실행하기 위해 필요한 데이터를 저장하는 register의 상태 교체

    • 상태 정보를 기억해서 다른 컨텍스트 스위칭 때 사용할 수 있음

작동 순서

프로세스 A가 running 상태이고, 프로세스 B가 ready 상태일 때

  1. 스케줄러가 프로세스 A의 실행을 중단하고 프로세스 B를 실행할 것을 요청함(인터럽트/시스템 호출)

  2. 프로세스 A의 Stack의 데이터 위치를 가리키고 있는 SP(Stack Pointer)의 값과 다음 실행해야 하는 코드의 주소값을 가지고 있는 PC(Program Counter)의 값을 PCB에 업데이트한 후에 메인 메모리에 저장함

    • SC와 PC는 모두 중앙처리장치 안의 레지스터임

  3. 프로세스 A의 상태는 ready 혹은 block으로 변경되고, CPU에서 프로세스 B를 실행함

    • 이 과정으로 프로세스 B의 상태는 ready에서 running으로 변경됨(Dispatch)

  4. 그리고 다시 프로세스 B에서 프로세스 A로 컨텍스트 스위칭을 하는 경우, 프로세스 B의 SP값과 PC값을 PCB에 저장함

  5. 이후, 실행해야 할 프로세스 A의 PCB 정보들을 메인 메모리에 가져와서 CPU 레지스터에 넣고 실행함

컨텍스트 스위칭의 오버헤드

  • 컨텍스트 스위칭은 ms의 짧은 시간 단위로 밀어나지만, 과도하게 많이 일어나게 되면 오버헤드가 발생함

프로세스 vs 쓰레드 컨텍스트 스위칭

둘의 공통점은 커널 모드에서 실행된다는 점

Thread Context Switching

  • 같은 프로세스 안의 쓰레드끼리 컨텍스트 스위칭이 발생하는 것

    • 프로세스1의 스레드1 → 프로세스1의 스레드2

  • 쓰레드는 스택 영역을 제외한 모든 메모리 영역을 공유하기 때문에 메모리 주소 관련한 정보는 바꿀 필요가 없고, CPU의 상태정보만 바꿔주면 됨

    • 따라서 쓰레드 컨텍스트 스위칭은 공유하는 정보가 많아 기본 작업만 하면 되기 때문에 프로세스 컨텍스트 스위칭보다 더 빠름

  • 작업: 커널 모드 전환 + CPU register 상태 교체

Process Context Switching

  • 현재 실행중인 프로세스의 쓰레드와는 다른 프로세스의 쓰레드와 컨텍스트 스위칭이 발생하는 것

    • 프로세스1의 스레드1 → 프로세스2의 스레드2

  • 캐시 오염(cache pollution) 발생

    • CPU 내부에 캐시를 위한 공간이 존재하는데, 컨텍스트 스위칭이 발생하면 캐시의 데이터가 현재 실행중인 스레드의 데이터와 다를 수 있음

    • 프로세스가 변경되어 새로운 프로세스가 CPU를 사용하지만, 캐시에는 이전 프로세스에서 사용하던 전혀 다른 데이터에 대한 캐시가 남게 되는데 이를 캐시 오염이라고 함

  • 가상 메모리 주소 관련 처리를 추가로 수행해야 함

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

Ref

: 커널 함수를 통해 프로그램 실행 도중에 중단되어 인터럽리 처리를 기다리는 경우

: 단일 CPU에서 동시에 작업이 실행되는 것처럼 보이도록 하는 경우(동시성은 컨텍스트 스위칭을 통해 달성됨)

가 새로운 프로세스의 주소 체계를 바라보도록 수정함

캐시 역할을 하는 를 완전히 비워줘야 함

Interrupt handling
TLB(Translation Lookaside Buffer)
컨텍스트 스위칭: 프로세스 컨텍스트 스위칭 VS 스레드 컨텍스트 스위칭
OS - Context Switch(컨텍스트 스위치)가 무엇인가?
컨텍스트 스위칭(Context Switching)
프로세스 스케줄링
MMU(Memory Management Unit)
PCB
Multitasking
사용자 및 커널 모드 전환(User and kernel mode switching)