[CS] 멀티 프로세스/스레드와 context switching

bagt13·2022년 11월 22일
2

CS

목록 보기
3/14
post-thumbnail

✅ 프로세스 (Proccess)

  • HDD의 실행파일이 메모리에 올라가 작동되고 있는 프로그램

  • 프로세스에 할당된 메모리는 Code, Data, Stack, Heap의 형식으로 할당된다.

프로세스는 위와 같은 메모리 구조를 가진다.

  • code : 사용자가 작성한 프로그램 함수
  • data : 프로그램이 사용하는 데이터 공간 (전역 변수 등)
  • heap : 프로그래머가 필요할 때 사용되는, 동적으로 할당되는 공간
  • stack : 함수의 수행을 마치고 복귀할 주소 및 데이터 (지역 변수, 리턴 값 등)


✅ 멀티 프로세스 (Multi-Process)

여러개의 CPU를 사용해 여러 프로세스를 동시에 수행하는 것

OS가 매우 빠르게 PCB(Process Control Block)에 담긴 정보를 참고하면서 컨텍스트 스위칭을(Context Switching) 하고 있기 때문에 여러 작업이 실행되고 있는 것처럼 느끼게 되는 것이다.


PCB (Process Control Block)

프로세스를 컨트롤하기 위한 정보이다. PID(process id), 프로세스 상태, 다음에 실행할 명령어의 주소, 이전에 작업하던 내용, CPU 스케줄링 정보, 프로세스의 주소 공간 등이 담겨 있으며, 이들을 컨텍스트(Context)라고 부른다.


🌕 멀티 프로세스의 장점

  • 프로세스 간 독립적이기 때문에 문제가 생겨도 다른 프로세스에 영향을 주지 않는다.
  • 메모리 침범 문제를 OS 차원에서 해결할 수 있다.

🌑 멀티 프로세스의 단점

  • 프로세스 간 독립적 메모리 영역을 가지기 때문에 작업량이 많아지면 오버헤드가 발생한다.
  • 프로세스 간 복잡한 통신(IPC)이 필요하다.


✅ 컨텍스트 스위칭 (Context Switching)

기존 프로세스의 Context를 저장하고, 다음 프로세스를 실행할 수 있도록 Context를 교체하는 작업이며, 이는 앞에서 본 PCB의 정보를 토대로 이루어진다.

좀 더 구체적으로, 다음 우선 순위인 프로세스가 실행 되어야 할 때 레지스터(register) 값, 즉 컨텍스트(context)를 저장하고 CPU가 다음 프로세스를 수행하도록 프로세스의 상태 혹은 컨텍스트를 교체하는 작업이다.


✚ Context Switching이 일어나는 상황

context switching은 다른 프로세스가 실행될 때,기존 프로세스에 대한 interrupt가 일어날때 발생한다.

interrupt가 발생하는 상황

  • 입출력 요청

  • CPU 사용시간 만료

  • 자식 프로세스 생성

  • interrupt 처리를 기다릴 때


❗️ Context Switching의 문제점

context switching이 일어날 때, 프로세스를 올리고 내리는 작업 (MEM <-> HDD)은 많은 비용이 들고, context switching 중에는 CPU가 아무런 일을 하지 못하기 때문에 비효율적이다.

멀티 스레드를 사용하면 이러한 비효율적인 컨텍스트 스위칭을 보완할 수 있다.



✅ 멀티 쓰레드 (Multi-Thread)

스레드(Thread)란?

Thread란 프로세스 내에 존재하는 하나의 작업 흐름이다.

스레드는 프로세스와 달리 하나의 프로세스의 자원(stack 제외)을 공유하기 때문에, context switching 비용을 줄일 수 있다.

즉, 스레드에서는 code, data, stack, heap 중에서 stack만 교체하면 되는 것이다.

  • 스레드간에는 프로세스의 주소/자원을 공유할 수 있다.

  • 스레드는 Thread ID, PC, register 집합, stack으로 구성된다.

  • 스레드 간에는 각자 독립적으로 작업을 수행해야 하기 때문에, 각각 stack과 PC 레지스터를 할당 받는다.


🌕 멀티 쓰레드의 장점

  • 프로세스의 자원을 스레드마다 공유 -> 비용 절감
  • 스레드의 컨텍스트 스위치캐시 메모리를 비울 필요가 없다 -> 빠르다

🌑 멀티 쓰레드의 단점

  • 스레드는 프로세스와 달리 데이터와 Heap 영역을 공유한다 -> 동기화 필요
  • 멀티 프로세스와 달리, 하나의 스레드가 비정상적인 오류를 일으키면 다른 스레드도 영향을 받을 수 있다.

사진 출처
https://charlezz.medium.com/process%EC%99%80-thread-%EC%9D%B4%EC%95%BC%EA%B8%B0-5b96d0d43e37
https://www.javatpoint.com/process-vs-thread

profile
주니어 백엔드 개발자입니다😄

0개의 댓글