본문 바로가기
Computer Science/OS

[OS] Process | Context Switching (컨텍스트 스위칭)

by HelloJudy 2023. 1. 24.

0. 개요

개발은 프로그램을 만드는 것이다.
그리고 그렇게 만들어진 프로그램이 컴퓨터에서 실행되면, 실행 중인 프로그램을 프로세스라고 부른다.

 

프로그램 (program)

: 컴퓨터가 실행할 수 있는 명령어들의 집합

 

✔️ 프로세스 (process)

“Process is a program in execution”  /  컴퓨터에서 실행 중인 프로그램

: 각각의 프로세스는 독립된 메모리 공간을 할당받는다. 그리고 명령어들과 데이터를 가진다.

 

 

CPU (central processing unit)

: 명령어를 실행하는 연산 장치

 

메인 메모리 (main memory)

: 프로세스가 CPU에서 실행되기 위해 대기하는 곳

 

I/O (input/output)

: 파일을 읽고 쓰거나 네트워크의 어딘가와 데이터를 주고받는 것

: 입출력 장치와 데이터를 주거나 받는 것

 

1) 단일 프로세스 시스템 

: 한 번에 하나의 프로그램만 실행 -> (단점) CPU 사용률이 좋지 않다. 

 

2) 멀티프로그래밍 (multiprogramming)

-> (해결방법) 여러 개의 프로그램을 메모리에 올려놓고 동시에 실행시키자. I/O 작업이 발생하면 다른 프로세스가 CPU에서 실행됨

: CPU 사용률을 극대화 시키는데 목적

-> (단점) CPU 사용 시간이 길어지면 다른 프로세스는 계속 대기

 

3) 멀티태스킹 (multitasking)

-> (해결방법) 프로세스는 한번 CPU를 사용할 때 아주 짧은 시간(=quantum)만 CPU에서 실행되도록 하자!

: 프로세스의 응답 시간을 최소화 시키는데 목적

-> (아쉬움) 하나의 프로세스가 동시에 여러 작업을 수행하지는 못함

-> (아쉬움) 프로세스의 컨텍스트 스위칭은 무거운 작업

-> (아쉬움) 프로세스끼리 데이터 공유가 까다로움

-> (아쉬움) 듀얼 코어가 등장했는데 잘 쓰고 싶음

 

 

✔️ 스레드 (thread)

  • 프로세스는 한 개 이상의 스레드를 가질 수 있다.
  • CPU에서 실행되는 단위 (unit of execution)
  • 같은 프로세스의 스레드들끼리 컨텍스트 스위칭은 가볍다.
  • 자신들이 속한 프로세스의 메모리 영역을 공유
    • 프로세스의 text, data, heap 영역을 공유
    • 각 스레드는 별도의 stack 영역을 가진다.

 

 

4) 멀티스레딩

: 하나의 프로세스가 동시에 여러 작업을 실행하는데 목적

 

5) 확장된 멀티태스킹

: 여러 프로세스와 여러 스레드가 아주 짧게 쪼개진 cpu time을 나눠 갖는 것

 

: CPU 사용 시간을 아주 짧게 쪼개서 time slice 단위로 여러 스레드들이 번갈아 CPU에서 실행될 수 있도록 하는 방식

(이때 스레드들은 같은 프로세스 소속일 수도 있고 다른 프로세스 소속일 수도 있다.)

 

6) 멀티프로세싱 (multiprocessing)

: 두 개 이상의 프로세서나 코어를 활용하는 시스템

 

 

✔️ Point 1 : 프로세스와 스레드

프로세스: 컴퓨터에서 실행 중인 프로그램(program)
스레드: 프로세스가 CPU 코어에서 실제로 실행(execution) 혹은 스케줄링(scheduling)되기 위한 기본 단위

 

💡실제로 CPU 코어에서 실행되는 것은 언제나 스레드다.

 

그렇기 때문에 하나의 프로세스가 CPU 코어에서 실행되기 위해서는 최소한 한 개의 스레드를 반드시 가져야 한다.

 


1. 프로세스 (Process)

 

[ 프로세스의 상태 (Process State) ]

 

1. Running

  • CPU를 잡고 instruction을 수행 중인 상태

2. Ready

  • (메모리 등 다른 조건을 모두 만족하고) CPU를 기다리는 상태

3. Blocked (wait, sleep)

  • CPU를 주어도 당장 instruction을 수행할 수 없는 상태
  • Process 자신이 요청한 event (예: I/O)가 즉시 만족되지 않아 이를 기다리는 상태
  • ex. 디스크에서 file을 읽어와야 하는 경우

4. Suspended (stopped)

  • 외부적인 이유로 프로세스의 수행이 정지된 상태
  • 프로세스는 통째로 디스크에 swap out 된다.
  • ex. 사용자가 프로그램을 일시 정지시킨 경우 (break key), 메모리에 너무 많은 프로세스가 올라와 있을 때

 

[ Process Control Block (PCB) ]

운영체제가 각 프로세스를 관리하기 위해 프로세스당 유지하는 정보
  • 프로세스가 생성되면 해당 PCB가 생성되고 프로세스 완료시 제거된다.

 

⚙️ 구성 요소

 

1) OS가 관리상 사용하는 정보

2) CPU 수행 관련 하드웨어 값

3) 메모리 관련 (code, data, stack의 위치 정보 등)

4) 파일 관련

 


2. 컨텍스트 스위칭 (Context Switching)

CPU/코어에서 실행 중이던 프로세스/스레드가 다른 프로세스/스레드로 교체되는 것

 

0. 개요에서 설명한 멀티태스킹이 가능하려면 여러 프로세스나 스레드가 번갈아 가면서 CPU에서 실행될 수 있어야 한다.

컨텍스트 스위칭은 어떤 것이고 우리 프로그램 성능에 어떤 영향을 끼칠까.

 

  1. CPU를 내어주는 프로세스의 상태를 그 프로세스 제어 블록(PCB)에 저장
  2. CPU를 새롭게 얻는 프로세스의 상태를 PCB에서 읽어옴

 

[ 컨텍스트 ]

  • CPU의 수행 상태를 나타내는 하드웨어 문맥, 프로세스의 주소 공간, 프로세스 관련 커널 자료 구조
  • 프로세스/스레드의 상태, CPU, 메모리 등등

 

[ 왜 컨텍스트 스위칭이 필요할까 ]

 

여러 프로세스/스레드를 동시에 실행시키기 위해서

 

 

[ 프로세스 컨텍스트 스위칭 (Process Context Switching) / 스레드 컨텍스트 스위칭 (Thread Context Switching) ]

 

1) 공통점

  • 커널 모드에서 실행
  • CPU의 레지스터 상태를 교체

2) 차이점

  • 프로세스 컨텍스트 스위칭
    • 서로 다른 프로세스에 속한 스레드 간의 컨텍스트 스위칭 발생 
    • 가상(virtual) 메모리 주소 관련 처리를 추가로 수행 / MMU, TLB 다시 세팅해야 함
  • 스레드 컨텍스트 스위칭
    • 같은 프로세스에 속한 스레드 간의 컨텍스트 스위칭 발생

 

✔️ Point2 : 스레드 컨텍스트 스위칭이 더 빠른 이유

메모리 주소 관련 처리를 하지 않기 때문이다.

 

- 현재 실행 중인 프로세스 혹은 스레드의 context 백업 (가령, CPU 레지스터 값들, 어디까지 실행됐는지 등)
 
- CPU 캐시를 비움(flush) (CPU 마다 L1, L2 cache에 대한 동작이 다를 수 있음, 심지어 안 비울 수도 있음)
 
- TLB(table lookaside buffer)를 비움
 
- MMU(memory management unit) 설정을 변경
( MMU: 가상 메모리 주소에서 물리적인 메모리 주소로 변환하는 역할)

 

프로세스 컨텍스트 스위칭은 위 4가지 모두 수행하지만, 스레드 컨텍스트 스위칭은 첫번 째만 수행하면 된다.

 

💁‍♀️ 서로 다른 프로세스 : 서로 다른 메모리 주소 공간(memory address space)

💁‍♂️ 같은 프로세스 내 스레드 : 소속된 프로세스의 메모리 주소 공간 공유 

 

그래서 프로세스가 바뀔 때  새로 실행되는 프로세스가 기존에 실행되는 프로세스의 메모리 주소 공간에 침범하면 안 되기 때문에 추가적인 작업이 필요하다.

 

그래서 프로세스 컨텍스트 스위칭 작업이 더 오래 걸린다.


[ 스케줄러 (Scheduler) ]

 

1. Long-term scheduler (장기 스케줄러, job scheduler)

  • 시작 프로세스 중 어떤 것들을 ready queue로 보낼지 결정
  • 프로세스에 memory을 주는 문제
  • degree of Multiprogramming을 제어
  • time sharing system에는 보통 장기 스케줄러가 없음 (무조건 ready)

2. Short-term scheduler (단기 스케줄러, CPU scheduler)

  • 어떤 프로세스를 다음번에 running 시킬지 결정
  • 프로세스에 CPU를 주는 문제
  • 충분히 빨라야 함 (millisecond 단위)

3. Medium-term scheduler (중기 스케줄러, Swapper)

  • 여유 공간 마련을 위해 프로세스를 통째로 메모리에서 디스크로 쫓아냄
  • 프로세스에게서 memory를 뺏는 문제
  • degree of Multiprogramming을 제어

 


📢 같이 공부하면 좋을 면접 질문

  • 프로세스와 스레드의 차이
  • 싱글 프로세싱이 있고 멀티 프로세싱이 있을 때 항상 멀티 프로세싱이 언제나 효율적일까
  • 멀티스레드 프로그래밍에 대해 설명해보세요.
  • Context Switching에 대하여 설명해보세요.
  • 멀티 스레드와 멀티 프로세스의 차이

📌 Reference  

반응형

댓글