[OS] 컨텍스트 스위칭(Context Switching)에도 속도차이가 있는걸 아셨나요? (Feat. 스레드의 등장까지)

wannabeing·2025년 9월 5일

CS

목록 보기
6/12
post-thumbnail

컨텍스트 스위칭에는 프로세스 컨텍스트 스위칭스레드 컨텍스트 스위칭이 있다.
한번 알아보자!

(1) 프로그램이 진화하면 프로세스가 됨

프로그램 (Program)

  • 실행되기 전 상태의 명령어들의 집합
  • 운영체제가 실행할 수 있는 명령어들의 집합
    Ex) 실행프로그램.exe

프로세스 (Process)

  • 실행중인 프로그램
    Ex) Ctrl+Alt+Delete 누르면 나오는 실행중인 프로그램들
  • 메모리(RAM)에 적재되어 CPU가 실행중인 프로그램
  • 각각의 프로세스는 독립적인 메모리공간을 할당받음

프로세스는 위 그림과 같이 코데힙스라고 불리는 메모리 구조와
운영체제(OS)가 프로세스를 관리하는데 사용하는 PCB(Process-Control-Block)라고 하는 자료구조를 갖고 있다.

코데힙스(Code/Data/Heap/Stack)에서 코드(Code)는 Text 영역과 같다.


(2) 여러 프로그램을 동시에 실행하고 싶어

호랑이 담배피던 시절에는 하나의 프로세스가 끝나야 다음 프로세스가 실행이 될 수 있었다고 한다.
이게 무슨말이냐면 게임하다가 카톡하려면 게임을 끄고 카톡을 켜야한다...😇

그림과 같이 CPU가 메모리에 적재된 여러 프로세스들을 실행할 때, 굉장히 짧은 시간을 번갈아가면서 프로세스들을 실행시키도록 만들었다. → 멀티태스킹(Multi-Tasking)

이와 같은 시스템(멀티 태스킹)의 등장으로 우리는 동시에 여러 프로그램이 실행되는 것처럼 느낄 수 있게 되었다!


(3) 이때, 스레드(Thread) 등장!

여러 프로세스를 동시에 실행하는건 좋았지만, 그만큼 CPU의 부하와 독자적인 메모리공간을 갖고 있기 때문에 메모리 자원도 많이 차지하였다. 메모리 공간을 공유하기에도 까다로웠고..!
그래서 나온게 바로 스레드(Thread)!

3-1) 스레드(Thread)

  • 프로세스 내에서 실행되는 흐름의 단위이다.
  • ✨ 같은 프로세스내에 스레드들은 메모리 영역 (Stack 제외)을 공유하고 있다.
    → 추후 동시성문제와도 연결됨
  • 각 스레드(Thread)는 독자적인 Stack 영역을 갖고 있다.
  • 하나의 프로세스에는 반드시 하나 이상의 스레드를 갖고 있다.

옛날에는 CPU 실행 단위가 프로세스였지만,
이제는 스레드가 CPU에서 실행되는 단위(unit of execution)가 된다.

3-2) 스레드와 프로세스의 차이점

  1. 프로세스는 각각의 독립적인 메모리영역이 있고, 스레드는 공유되는 메모리영역(Stack 제외)이 있다.
  2. 스레드는 메모리영역을 공유하기 때문에 안정성이 비교적 떨어질 수 있다.
    → 하나의 스레드에 오류가 나면 다른 스레드까지 영향이 간다.

✨ (4) 그래서 컨텍스트 스위칭, 그게 뭔데?

위에서 말했듯 멀티태스킹 환경에서 프로세스들이 짧은 시간을 번갈아가며 실행되는 메커니즘을 컨텍스트 스위칭(Context-Switching)이라고 한다.

4-1) 컨텍스트 (Context)가 뭔가요?

  • 프로세스나 스레드의 현재 상태를 의미한다.
  • 프로세스나 스레드가 다시 시작할 때 필요한 정보를 담고 있다.
  • CPU의 레지스터 상태(프로그램 카운터, 스팩 포인터), 메모리의 상태가 포함된다.

4-2) 컨텍스트 스위칭이 필요한 이유는?

(2)에서 설명했듯이 멀티태스킹 시스템에서 CPU가 짧은 시간 단위로 작업을 전환하여 여러 작업을 처리하는데, 컨텍스트 스위칭을 통해 시스템 자원을 효율적으로 처리할 수 있기 때문에 필요하다!

4-3) 컨텍스트 스위칭이 발생하는 시점은?

  • 각 프로세스나 스레드에게 할당된 CPU 시간이 끝났을 경우
  • 프로세스나 스레드가 I/O 작업을 수행해야 할 경우
    • I/O 작업: CPU가 직접 연산하지 않고, 외부 자원을 기다리는 작업
  • 더 높은 우선순위의 작업이 발생할 경우

4-4) 컨텍스트 스위칭을 수행하는 주체는?

운영체제(OS)의 커널(Kernel)이다.
커널은 시스템 자원을 관리하고 프로세스 및 스레드의 상태를 조정하여 효율적인 작업 처리를 담당한다.

4-5) 프로세스와 스레드 컨텍스트 스위칭 공통점

  1. 커널 모드에서 실행: 항상 운영체제의 커널모드에서 실행이 된다.
  2. 다음작업으로 넘어갈 때: 현재 작업중인 상태를 저장하고, 다음 상태의 작업을 불러온다.

✅ (5) 스레드 컨텍스트 스위칭이 더 빠르다!

같은 프로새스내에 스레드 컨텍스트 스위칭은 메모리 영역이 공유되기 때문에 추가적인 작업이 발생하지 않는다. 반면에 프로세스 컨텍스트 스위칭은 가상 메모리 영역을 설정받고 할당받아야 되는 작업이 필수적이다.
따라서 스레드 컨텍스트 스위칭이 더 빠르다!

5-1) 스레드 간 Context Switching이 프로세스보다 빠르다고 했는데, 왜 항상 스레드를 쓰지 않고 프로세스를 병렬로 실행하는 경우도 있는건가요?

  1. 스레드는 메모리를 공유하므로 안정성이 비교적 떨어진다.
    하나의 스레드 오류가 다른 스레드에게까지 영향이 가기 때문이다.
  2. 요즘은 멀티코어 환경이라 프로세스 단위 병렬 실행도 충분히 빠르기 때문에 쓰지 않는 이유도 있다고 한다.
  3. 디버깅이 더 복잡하다.
    예를 들어 공유자원의 경쟁상태가 발생할 경우, 문제원인을 찾기 쉽지 않아진다.

출처

우테코 - 프로세스와 스레드
쉬운코드 - 스레드/프로세스/멀티태스킹 등
프로세스와 스레드 차이
매일메일 - 컨텍스트 스위칭

profile
wannabe---ing

0개의 댓글